@runeya/runeya 2.0.93 → 2.0.95
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 +213 -161
- package/agent/index.js.map +1 -1
- package/agent-manager-QQPKKLKY.js +8 -0
- package/chat-LPMGV2VS.js +18 -0
- package/chat-LPMGV2VS.js.map +1 -0
- package/chunk-3MJLS5UY.js +1944 -0
- package/chunk-3MJLS5UY.js.map +1 -0
- package/chunk-72LQC3YC.js +152 -0
- package/chunk-72LQC3YC.js.map +1 -0
- package/{chunk-6Y24763Y.js → chunk-HX3ZIWHM.js} +83 -1926
- package/chunk-HX3ZIWHM.js.map +1 -0
- package/chunk-MD3VW4HQ.js +160 -0
- package/chunk-MD3VW4HQ.js.map +1 -0
- package/chunk-R23UUB5R.js +7285 -0
- package/chunk-R23UUB5R.js.map +1 -0
- package/chunk-WAC56HS4.js +1842 -0
- package/chunk-WAC56HS4.js.map +1 -0
- package/codex-thread-db-LE5FYDDA.js +27 -0
- package/codex-thread-db-LE5FYDDA.js.map +1 -0
- package/companion-VPYVGTRU.js +42 -0
- package/companion-VPYVGTRU.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/settings-manager-6FKHBLIV.js +8 -0
- package/settings-manager-6FKHBLIV.js.map +1 -0
- package/src-NEPDGULO.js +10087 -0
- package/src-NEPDGULO.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-DCnwgzWk.js +13 -0
- package/web/assets/AgentTerminalPage-D6iEzvyz.js +1 -0
- package/web/assets/AiChatPage-DDr9XEv8.js +1 -0
- package/web/assets/AppLayout-B2mreJVA.js +1 -0
- package/web/assets/{AppLayout-DiMqQfDk.css → AppLayout-nrP0jOZ1.css} +1 -1
- package/web/assets/AuditPage-CSPHdf0m.js +1 -0
- package/web/assets/CloudAccountPage-BAkTRH4E.js +1 -0
- package/web/assets/CloudAccountPage-C35O8Pcb.js +1 -0
- package/web/assets/CloudMessagingPage-5KYELXQI.js +2 -0
- package/web/assets/DashboardPage-Dl9Sg1av.js +1 -0
- package/web/assets/DirectoryPickerDialog-DLL3-GoW.js +1 -0
- package/web/assets/{EditorIcon-Bi1br5gY.js → EditorIcon-CzgSjXLk.js} +2 -2
- package/web/assets/EnvironmentForm-DmdDIJHv.js +108 -0
- package/web/assets/EnvironmentFormPage-CV7Uq6Ah.js +1 -0
- package/web/assets/EnvironmentListPage-Cfo9RA_g.js +1 -0
- package/web/assets/KanbanBoardPage-DL1WwMBP.js +4 -0
- package/web/assets/KanbanListPage-CSAnUfp3.js +1 -0
- package/web/assets/LaunchProjectPage-vNUoulGP.js +1 -0
- package/web/assets/LaunchServicesPage-CkWZxZ-v.js +1 -0
- package/web/assets/LogViewer-CW-bBjZF.js +3 -0
- package/web/assets/OrgKeyPrompt-CHoMbQhn.js +1 -0
- package/web/assets/ProcessControls-WS6BjS5H.js +1 -0
- package/web/assets/ProcessDetailPage-DEvZSNER.js +1 -0
- package/web/assets/{ProcessMetrics-DgnpYxXh.js → ProcessMetrics-DmhwoKrE.js} +2 -2
- package/web/assets/ProjectDetailPage-DanRrWb4.js +1 -0
- package/web/assets/ProjectListPage--l9HsQ9u.js +1 -0
- package/web/assets/RandomJobTestPage-BMatxc2G.js +2 -0
- package/web/assets/ScenarioEditorPage-D_rJyudb.js +14 -0
- package/web/assets/SendToChatDialog-D-pDvIjD.js +1 -0
- package/web/assets/ServiceControlsBar-BSU25sZZ.js +1 -0
- package/web/assets/ServiceDetailPage-B1oRlnId.js +2 -0
- package/web/assets/ServiceFormPage-D-DmI0fF.js +1 -0
- package/web/assets/SettingsPage-Bi72zdhb.js +2063 -0
- package/web/assets/{SettingsPage-BKcxRTQg.css → SettingsPage-D6-jpORY.css} +1 -1
- package/web/assets/UnlockPage-BtunlGnX.js +1 -0
- package/web/assets/VariablesTable-D3HpHlKY.js +1 -0
- package/web/assets/VaultMigrationPage-DrrFR1I-.js +1 -0
- package/web/assets/VersionBadge-DqcS34oJ.js +1 -0
- package/web/assets/WikiPage-BH8A-IB_.js +1 -0
- package/web/assets/WikiView-BasNZv2A.js +1 -0
- package/web/assets/add-scalar-classes-_PYrgVvq.js +387 -0
- package/web/assets/auth-errors-CwswzwYV.js +1 -0
- package/web/assets/{autocomplete-CFCpVybl.js → autocomplete-B-t_B26t.js} +3 -3
- package/web/assets/{basic-shape-diamond.svg-1nuR3NBd.js → basic-shape-diamond.svg-BFWFQIZl.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-Be-pZrVb.js → basic-shape-hexagon.svg-CXsvZPky.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-9-zHtg8B.js → basic-shape-primary-circle-ellipse-round.svg-BVg6oDS7.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-CRTdnGnv.js → basic-shape-primary-square-rectangle.svg-jiLWQSQV.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-D9JPqU4l.js → basic-shape-shield.svg-CEybfnew.js} +1 -1
- package/web/assets/{browser-BdPlaU7e.js → browser-BfO6Jws3.js} +1 -1
- package/web/assets/{browser-B6dstq4l.js → browser-C7Qh0u0N.js} +1 -1
- package/web/assets/card-CWgnvlKH.js +32 -0
- package/web/assets/{checkbox-C_jx73WS.js → checkbox-CKzrAJQv.js} +3 -3
- package/web/assets/{chip-CQdqiw0W.js → chip-Bu5HllmO.js} +2 -2
- package/web/assets/{client-B_gN8XJ7.js → client-CM-a2QU7.js} +2 -2
- package/web/assets/cloud-chat.store-Cjbzzy1s.js +1 -0
- package/web/assets/cloud-session-Bs6siQ-Y.js +1 -0
- package/web/assets/column-pXrOxKc1.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-CGh6MdTp.js → computer-device-desktop-monitor.svg-DO-9EDqA.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-CSnagCeX.js → computer-device-desktop.svg-U_EIk7jo.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-BI_ZVURQ.js → computer-device-laptop.svg-nvbz6sjk.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-DM3ubsFX.js → computer-device-mobile-phone-android-samsung-back.svg-Cs34LunN.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CzDW3wBE.js → computer-device-mobile-phone-android-samsung.svg-CDJgG-4L.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-B41GuLoA.js → computer-device-mobile-phone-iphone-x-back.svg-Du0pDh9L.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-Cd1cIH5V.js → computer-device-mobile-phone-iphone-x.svg-CUgXFf2r.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-rLuvpYQb.js → computer-device-mobile-tablet-touch.svg-CKdx-iUf.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-DjBMAEhJ.js → computer-device-mobile-tablet.svg-BTvPzs5h.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-BeYjyXJh.js → computer-device-network-ethernet-cat6.svg-Cway8Bfw.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-DIR2TMun.js → computer-device-network-lan-www.svg-iuTZVSKE.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-DhI5VT5g.js → computer-device-network-wifi-connection.svg-DEemVGZq.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-BO0V5pTE.js → computer-device-network-wifi-router.svg-BH2ASeRD.js} +1 -1
- package/web/assets/{cssMode-CdzA9M1t.js → cssMode-BHBdzmoS.js} +1 -1
- package/web/assets/{divider-Cijz8TDb.js → divider-kwmULX2U.js} +2 -2
- package/web/assets/{docx-preview-B8bBf__c.js → docx-preview-CxXKUxi7.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-BuQW5h4a.js → ecology-science-erlenmeyer-flask.svg-9yLzulSu.js} +1 -1
- package/web/assets/{fieldset-DnZ-YI4V.js → fieldset-DE0sJS29.js} +2 -2
- package/web/assets/{freemarker2-Bp9032QT.js → freemarker2-CpcoAmNk.js} +1 -1
- package/web/assets/{handlebars-CdVx92lU.js → handlebars-D6DR-MoZ.js} +1 -1
- package/web/assets/{html-CkCZL9gx.js → html-Dx3QwrZR.js} +1 -1
- package/web/assets/{htmlMode-CW62-ie1.js → htmlMode-KSJ_gFzK.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-DeCuJWFT.js → image-flash-lightning.svg-O9m-H64P.js} +1 -1
- package/web/assets/{image-picture-flower.svg-2ZzZbPy5.js → image-picture-flower.svg--rWVVuqu.js} +1 -1
- package/web/assets/index-B4UWj2Kz.css +1 -0
- package/web/assets/{index-DXGQcaBP.js → index-pLefgbhx.js} +284 -284
- package/web/assets/{interface-alert-exclamation-diamond.svg-D9th7CAp.js → interface-alert-exclamation-diamond.svg-CVeV0ecY.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-Dq9CWWQ3.js → interface-alert-exclamation-triangle-warning.svg-MIboYRzH.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-FaG159xA.js → interface-alert-information-circle.svg-BlkHMxfH.js} +1 -1
- package/web/assets/{interface-award-crown.svg-B_-NjgUX.js → interface-award-crown.svg-C_Z3sLuP.js} +1 -1
- package/web/assets/{interface-bookmark.svg--yRnhMMQ.js → interface-bookmark-tag.svg-ClOZOhfV.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-CKjw2WEc.js → interface-bookmark.svg-CVpTNe3u.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-BCrvSyS9.js → interface-calendar-date-one.svg-BvG92AQi.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-BGIlAwyt.js → interface-content-book-open-pages.svg-aXXXkj7d.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-DeLfK2OR.js → interface-content-book-page.svg-BE0nQJw_.js} +1 -1
- package/web/assets/{interface-content-file.svg-DUdYkC8Y.js → interface-content-file.svg-DYonyE7J.js} +1 -1
- package/web/assets/{interface-content-folder.svg-Ccx-IYD-.js → interface-content-folder.svg-DKc7vKrm.js} +1 -1
- package/web/assets/interface-content-folder.svg-FcNZvOjy.js +1 -0
- package/web/assets/{interface-copy-clipboard.svg-DIR-oOPG.js → interface-copy-clipboard.svg-sAixmHqz.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-B9CSuzCn.js → interface-edit-attachment.svg-DsSzCN6U.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-6WTqf985.js → interface-edit-binocular.svg-Bheco9Gv.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-BiB-GwoX.js → interface-edit-magic-wand.svg-C73TY2iI.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-Dh0uneh4.js → interface-edit-tool-paint-roller.svg-D2OSqY3g.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-C9HQOHce.js → interface-edit-tool-pencil.svg-CdY316cw.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-Cj_1Qy9M.js → interface-favorite-award.svg-DfA-EhHI.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-BniwQaep.js → interface-favorite-flag.svg-BnmSaveE.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-CYJO0Ggb.js → interface-favorite-heart.svg-28i7lMzG.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CeFb37gO.js → interface-favorite-star.svg-u8xOEB4S.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-CGeIzi4_.js → interface-favorite-stars-sparkles.svg-D5UHf8ar.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-Bd0q_y82.js → interface-hierarchy-flowchart.svg-BmjWTh4K.js} +1 -1
- package/web/assets/{interface-home-house.svg-BqSaaLzz.js → interface-home-house.svg-DJ5Ae65N.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-DTtVOw8L.js → interface-hyperlink.svg-HdHKY_g6.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-CVNVwF9w.js → interface-lighting-brightness.svg-BDELfqMb.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-CKiXr8tU.js → interface-lock-closed.svg-BcDwDHkS.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-DU7sOeAE.js → interface-lock-open-unlock.svg-DNESCRC1.js} +1 -1
- package/web/assets/{interface-login-key.svg-tuWEt_tn.js → interface-login-key.svg-BOEot3yk.js} +1 -1
- package/web/assets/{interface-search.svg-CMDkllvr.js → interface-search.svg-CFsy7ant.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BRM5rRrt.js → interface-setting-cog.svg-B7Zk0iyr.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BgC_SP2r.js → interface-share-megaphone-bullhorn.svg-DvG0IjMM.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-C-XkIKh-.js → interface-share-rocket.svg-gvaeTB8G.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-BKE0N18S.js → interface-share-satellite.svg-B5pXJ0kU.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-B8QuVt2r.js → interface-share-space-ship.svg-B0k0J-VQ.js} +1 -1
- package/web/assets/{interface-share.svg-bp3wJyGc.js → interface-share.svg-ZDsCvjRe.js} +1 -1
- package/web/assets/{interface-signal-square.svg-D8XH70Ue.js → interface-signal-square.svg-DBkJ1ire.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-2DN-SbMe.js → interface-time-clock-circle.svg-BheUirew.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-l0_r1j5d.js → interface-time-hour-glass.svg-iORrebF8.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-RRlj9uIH.js → interface-users-multiple.svg-DMqedSUQ.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-BmdUGPZe.js → interface-weather-moon.svg-DyPBHRw4.js} +1 -1
- package/web/assets/{javascript-edU55dwl.js → javascript-B1Y6a5s6.js} +1 -1
- package/web/assets/{jsonMode-CdE3cdJ3.js → jsonMode-Vj2pUgcF.js} +2 -2
- package/web/assets/{liquid-DCimUdoJ.js → liquid-lb0ImGEW.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BKbLLFFb.js → lspLanguageFeatures-sh8ggL5N.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-VF1duUdO.js → mail-chat-bubble-square.svg-D_Lx6uBc.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-CdSpwALk.js → mail-send-email-paper-airplane.svg-B6FGKBZu.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-DZVjejiO.js → mail-send-envelope.svg-Dtm4h_xw.js} +1 -1
- package/web/assets/{mdx-Hv_NSA7I.js → mdx-BbFPcqiD.js} +1 -1
- package/web/assets/{minus-CQh_GdvM.js → minus-Bxw18Xk6.js} +2 -2
- package/web/assets/modal-D-InjkVP.js +1 -0
- package/web/assets/modal-DLY8nKW-.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-CWHgfD-x.js → money-cashier-receipt.svg-VpEb8Ewv.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-XPcb5aF0.js → money-currency-dollar-pay.svg-vo8FP9z4.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-DhPujH9x.js → money-graph-arrow-increase.svg-CNcLQGOf.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-BPOlqEDC.js → money-graph-bar-chart-increase.svg-BHAccBVA.js} +1 -1
- package/web/assets/multiselect-Crs0miOE.js +251 -0
- package/web/assets/{nature-ecology-leaf.svg-DZNsVAVa.js → nature-ecology-leaf.svg-0y4pBUlD.js} +1 -1
- package/web/assets/{password-DlR3LzLg.js → password-TyT4zuky.js} +4 -4
- package/web/assets/{phone-telephone.svg-B7vr6N8Z.js → phone-telephone.svg-BdWhV2vz.js} +1 -1
- package/web/assets/{plus-BDDTopKC.js → plus-4Z2iFfO2.js} +6 -6
- package/web/assets/process.store-DsGpeQnV.js +1 -0
- package/web/assets/{programming-bug.svg-DzlGVlKX.js → programming-bug.svg-DXDJVNeQ.js} +1 -1
- package/web/assets/{programming-cloud.svg-QHMLI7Md.js → programming-cloud.svg-qWtq6fXG.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-CjsFgYWn.js → programming-computer-database-server.svg-DnlJHfH5.js} +1 -1
- package/web/assets/{programming-computer-database.svg-vah-tira.js → programming-computer-database.svg-Bl73TDXc.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-Cpk_lyys.js → programming-module-four-layout.svg-CGkj0OdH.js} +1 -1
- package/web/assets/{programming-module-three.svg-DPfLaBLh.js → programming-module-three.svg-Bsk_vaHc.js} +1 -1
- package/web/assets/{programming-module.svg-X3KTc78b.js → programming-module.svg-D0Yng9wS.js} +1 -1
- package/web/assets/{programming-script-code.svg-Btq5sYVs.js → programming-script-code.svg-DTHMCNnF.js} +1 -1
- package/web/assets/{python-7W62NPSS.js → python-HImlMuYG.js} +1 -1
- package/web/assets/{razor-B-cp1S_J.js → razor-CTFKddzv.js} +1 -1
- package/web/assets/router-DTzqrUba.js +1 -0
- package/web/assets/settings-scope-CdxhnRbI.js +1 -0
- package/web/assets/{settings.store-DvVMtpRN.js → settings.store-CZ9jrl3S.js} +1 -1
- package/web/assets/{shopping-cart.svg-CrAdOGHj.js → shopping-cart.svg-Cx50mrFm.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-D6lzCq46.js → shopping-gift-present.svg-DGOO6qNg.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-CvE0Deq6.js → shopping-shipping-box-parcel-package.svg-C96i4g3q.js} +1 -1
- package/web/assets/src-CGoYw9sv.css +1 -0
- package/web/assets/src-DRjytMUo.js +1 -0
- package/web/assets/{src-KOvSDAsA.js → src-DzMKqnGu.js} +13 -13
- package/web/assets/{tabpanel-DnsLaWEk.js → tabpanel-BW8I76pY.js} +3 -3
- package/web/assets/{tag-new-circle.svg-K7X6DVeY.js → tag-new-circle.svg-CV5DN0Db.js} +1 -1
- package/web/assets/{toggleswitch-BIl5_ynN.js → toggleswitch-D4Evlg2b.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-CGHyssIY.js → travel-map-earth-globe.svg-CWvuO_Hb.js} +1 -1
- package/web/assets/trpc-BbC62Ymt.js +1 -0
- package/web/assets/{tsMode-Ch-xMRFe.js → tsMode-BqKPHyIc.js} +6 -6
- package/web/assets/{typescript-DaR3W1ZS.js → typescript-Bme6ns4u.js} +1 -1
- package/web/assets/useAiChatDrawer-BG8t5Thc.js +1 -0
- package/web/assets/{useCloudOrg-CZ_ZOAVy.css → useCloudOrg-CkiFdVCe.css} +1 -1
- package/web/assets/useCloudOrg-D2LTbk-G.js +572 -0
- package/web/assets/useProjectCatalog-nlAZuu5X.js +1 -0
- package/web/assets/{xml-DGHPJrA4.js → xml-zsImRVNc.js} +1 -1
- package/web/assets/{yaml-Bt6S3avV.js → yaml-VubzWJpP.js} +1 -1
- package/web/index.html +2 -2
- package/agent-manager-WEFGEFRT.js +0 -7
- package/chunk-6Y24763Y.js.map +0 -1
- package/src-QDQ5AT4C.js +0 -18369
- package/src-QDQ5AT4C.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-BlRhaFfk.js +0 -13
- package/web/assets/AgentTerminalPage-Bgz6cN1-.js +0 -1
- package/web/assets/AiChatPage-B2ZLntQV.js +0 -1
- package/web/assets/AppLayout-CwaLgkBP.js +0 -1
- package/web/assets/AuditPage-qw3Fsus7.js +0 -1
- package/web/assets/CloudAccountPage-BLOaK1nf.js +0 -1
- package/web/assets/CloudAccountPage-DTs4O-ua.js +0 -1
- package/web/assets/CloudMessagingPage-Cz1EQr91.js +0 -2
- package/web/assets/DashboardPage-B5HHqw9m.js +0 -1
- package/web/assets/DirectoryPickerDialog-DjpBVTYW.js +0 -1
- package/web/assets/EnvironmentForm-C9NbiSRH.js +0 -108
- package/web/assets/EnvironmentFormPage-DWbL-D3Z.js +0 -1
- package/web/assets/EnvironmentListPage-rdeHc34g.js +0 -1
- package/web/assets/KanbanBoardPage-CbHeyK8M.js +0 -4
- package/web/assets/KanbanListPage-xIqiBmTe.js +0 -1
- package/web/assets/LaunchProjectPage-D04ok35N.js +0 -1
- package/web/assets/LaunchServicesPage-Bkhxe7Ko.js +0 -1
- package/web/assets/LogViewer-BHlGDB4l.js +0 -3
- package/web/assets/OrgKeyPrompt-CnIY4K5s.js +0 -1
- package/web/assets/ProcessControls-BOkCKqGc.js +0 -1
- package/web/assets/ProcessDetailPage-BQCvKU0O.js +0 -1
- package/web/assets/ProjectDetailPage-Cjf4eBYS.js +0 -1
- package/web/assets/ProjectListPage-DQH1VC3U.js +0 -1
- package/web/assets/RandomJobTestPage-BMc4Qb-3.js +0 -2
- package/web/assets/ScenarioEditorPage-ClH3vxG9.js +0 -14
- package/web/assets/SendToChatDialog-5TxDHf96.js +0 -1
- package/web/assets/ServiceControlsBar-D0nrwVz7.js +0 -1
- package/web/assets/ServiceDetailPage-DLTZ2bjR.js +0 -2
- package/web/assets/ServiceFormPage-BoUHidR5.js +0 -1
- package/web/assets/SettingsPage-B6jM9W4h.js +0 -2063
- package/web/assets/UnlockPage-boIYvNg3.js +0 -1
- package/web/assets/VariablesTable-Eyqi7OJN.js +0 -1
- package/web/assets/VaultMigrationPage-CqKla89B.js +0 -1
- package/web/assets/VersionBadge-CnU3z5Rl.js +0 -1
- package/web/assets/WikiPage-Cbdxhr9G.js +0 -1
- package/web/assets/WikiView-BeWVPGaR.js +0 -1
- package/web/assets/add-scalar-classes-CG8bn7uZ.js +0 -387
- package/web/assets/auth-errors-CZibvB1j.js +0 -1
- package/web/assets/card-D8XCM024.js +0 -32
- package/web/assets/cloud-chat.store-BB8XNnvp.js +0 -1
- package/web/assets/cloud-session-f2IzlmYY.js +0 -1
- package/web/assets/column-BaNiShA4.js +0 -907
- package/web/assets/index-Cz0azMVO.css +0 -1
- package/web/assets/interface-content-folder.svg-C0OEvuKX.js +0 -1
- package/web/assets/modal-BO4YZ0Od.js +0 -1
- package/web/assets/modal-DUYd78Dq.js +0 -5
- package/web/assets/multiselect-DJ80nRN0.js +0 -251
- package/web/assets/process.store-Dq6j8zkt.js +0 -1
- package/web/assets/router-BzVLWWlf.js +0 -1
- package/web/assets/settings-scope-B2XSViBz.js +0 -1
- package/web/assets/src-DB1mNeZv.js +0 -1
- package/web/assets/src-DIxcn8ra.css +0 -1
- package/web/assets/trpc-BT4fWDYZ.js +0 -1
- package/web/assets/useAiChatDrawer-Bn5BBHr2.js +0 -1
- package/web/assets/useCloudOrg-CCXszfIX.js +0 -572
- package/web/assets/useProjectCatalog-CHgbaNsn.js +0 -1
- /package/{agent-manager-WEFGEFRT.js.map → agent-manager-QQPKKLKY.js.map} +0 -0
package/agent/index.js
CHANGED
|
@@ -60,7 +60,7 @@ var authMiddleware = t.middleware(({ ctx, next }) => {
|
|
|
60
60
|
var protectedProcedure = t.procedure.use(authMiddleware);
|
|
61
61
|
|
|
62
62
|
// src/trpc/routers/process.ts
|
|
63
|
-
import { z as
|
|
63
|
+
import { z as z24 } from "zod";
|
|
64
64
|
import { TRPCError as TRPCError2 } from "@trpc/server";
|
|
65
65
|
|
|
66
66
|
// src/services/process-manager.ts
|
|
@@ -257,13 +257,34 @@ var NotificationPreferencesSchema = z5.object({
|
|
|
257
257
|
/** Service IDs excluded from health-change notifications */
|
|
258
258
|
service_health_changed_excluded: z5.array(z5.string().max(100)).max(500).default([])
|
|
259
259
|
});
|
|
260
|
+
var CompanionSettingsSchema = z5.object({
|
|
261
|
+
/** Activer le compagnon d'office sur les conversations créées ensuite. */
|
|
262
|
+
enabledByDefault: z5.boolean().default(false),
|
|
263
|
+
/**
|
|
264
|
+
* Consignes envoyées au compagnon, à la place des nôtres.
|
|
265
|
+
*
|
|
266
|
+
* Vide — l'absence — signifie « celles de Runeya ». On ne recopie pas le
|
|
267
|
+
* texte par défaut dans le réglage : figé le jour où il est enregistré, il ne
|
|
268
|
+
* profiterait plus jamais des corrections apportées au nôtre.
|
|
269
|
+
*
|
|
270
|
+
* Rejeté au-delà de la borne plutôt que tronqué (§1) : un prompt coupé en
|
|
271
|
+
* plein milieu produirait des relectures incohérentes sans rien signaler.
|
|
272
|
+
*/
|
|
273
|
+
prompt: z5.string().max(2e4).optional()
|
|
274
|
+
});
|
|
260
275
|
var SettingsSchema = z5.object({
|
|
261
276
|
mode: z5.enum(["local-simple", "cloud"]),
|
|
262
277
|
cloudUrl: z5.string().url().max(2048).nullable().optional(),
|
|
263
278
|
logParsers: z5.array(JSLogParserSchema).max(100).default([]),
|
|
264
279
|
scenarios: z5.array(ScenarioSchema).max(100).default([]),
|
|
265
280
|
/** Absolute path to the folder where the global wiki/docs markdown files live. Optional. */
|
|
266
|
-
globalDocsPath: z5.string().max(4096).optional()
|
|
281
|
+
globalDocsPath: z5.string().max(4096).optional(),
|
|
282
|
+
/**
|
|
283
|
+
* Optionnel plutôt que défauté : un réglage absent est un réglage jamais
|
|
284
|
+
* touché, et le rendre obligatoire dans le type forcerait chaque appelant qui
|
|
285
|
+
* construit un objet de réglages à inventer une valeur.
|
|
286
|
+
*/
|
|
287
|
+
companion: CompanionSettingsSchema.optional()
|
|
267
288
|
});
|
|
268
289
|
var TraefikConfigSchema = z5.object({
|
|
269
290
|
enabled: z5.boolean().default(false),
|
|
@@ -1148,6 +1169,37 @@ var UpdateCloudApiKeyInput = z20.object({
|
|
|
1148
1169
|
boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
|
|
1149
1170
|
});
|
|
1150
1171
|
|
|
1172
|
+
// ../../packages/shared/src/schemas/changelog.schema.ts
|
|
1173
|
+
import { z as z21 } from "zod";
|
|
1174
|
+
var ChangelogSurfaceSchema = z21.enum(["app", "cloud"]);
|
|
1175
|
+
var ChangelogChangeKindSchema = z21.enum(["feature", "improvement", "fix", "breaking"]);
|
|
1176
|
+
var ChangelogTextSchema = z21.object({
|
|
1177
|
+
fr: z21.string().min(1).max(500),
|
|
1178
|
+
en: z21.string().min(1).max(500)
|
|
1179
|
+
});
|
|
1180
|
+
var ChangelogChangeSchema = z21.object({
|
|
1181
|
+
kind: ChangelogChangeKindSchema,
|
|
1182
|
+
text: ChangelogTextSchema
|
|
1183
|
+
});
|
|
1184
|
+
var ChangelogDraftSchema = ChangelogChangeSchema.extend({
|
|
1185
|
+
date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1186
|
+
title: ChangelogTextSchema.optional()
|
|
1187
|
+
});
|
|
1188
|
+
var ChangelogReleaseSchema = z21.object({
|
|
1189
|
+
surface: ChangelogSurfaceSchema,
|
|
1190
|
+
/** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
|
|
1191
|
+
version: z21.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
|
|
1192
|
+
/** Date de publication, `YYYY-MM-DD`. */
|
|
1193
|
+
date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1194
|
+
/** Facultatif : une version peut s'annoncer par son seul numéro. */
|
|
1195
|
+
title: ChangelogTextSchema.optional(),
|
|
1196
|
+
/** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
|
|
1197
|
+
changes: z21.array(ChangelogChangeSchema).min(1).max(50)
|
|
1198
|
+
});
|
|
1199
|
+
var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
|
|
1200
|
+
changeCount: z21.number().int().nonnegative()
|
|
1201
|
+
});
|
|
1202
|
+
|
|
1151
1203
|
// ../../packages/shared/src/utils/crypto.ts
|
|
1152
1204
|
import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
|
|
1153
1205
|
|
|
@@ -3086,7 +3138,7 @@ import { execa as execa3 } from "execa";
|
|
|
3086
3138
|
import { homedir as homedir4 } from "os";
|
|
3087
3139
|
|
|
3088
3140
|
// src/trpc/routers/config.ts
|
|
3089
|
-
import { z as
|
|
3141
|
+
import { z as z22 } from "zod";
|
|
3090
3142
|
|
|
3091
3143
|
// src/services/traefik-manager.ts
|
|
3092
3144
|
import { spawn, execFile as execFile2 } from "child_process";
|
|
@@ -3464,13 +3516,13 @@ function resolvePassthroughEnv() {
|
|
|
3464
3516
|
return result;
|
|
3465
3517
|
}
|
|
3466
3518
|
var configRouter = router({
|
|
3467
|
-
setPassthroughEnv: protectedProcedure.input(
|
|
3468
|
-
names:
|
|
3469
|
-
|
|
3519
|
+
setPassthroughEnv: protectedProcedure.input(z22.object({
|
|
3520
|
+
names: z22.array(
|
|
3521
|
+
z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
|
|
3470
3522
|
).max(100),
|
|
3471
|
-
values:
|
|
3472
|
-
|
|
3473
|
-
|
|
3523
|
+
values: z22.record(
|
|
3524
|
+
z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
|
|
3525
|
+
z22.string().max(32768)
|
|
3474
3526
|
).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
|
|
3475
3527
|
})).mutation(({ input }) => {
|
|
3476
3528
|
passthroughEnvNames = input.names;
|
|
@@ -3507,7 +3559,7 @@ var configRouter = router({
|
|
|
3507
3559
|
getTraefikFileTree: protectedProcedure.query(async () => {
|
|
3508
3560
|
return traefikManager.getFileTree();
|
|
3509
3561
|
}),
|
|
3510
|
-
getTraefikLogs: protectedProcedure.input(
|
|
3562
|
+
getTraefikLogs: protectedProcedure.input(z22.object({ lines: z22.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
|
|
3511
3563
|
const logs = await traefikManager.getLogs(input.lines);
|
|
3512
3564
|
return { logs };
|
|
3513
3565
|
})
|
|
@@ -3699,17 +3751,17 @@ var healthChecker = new HealthChecker();
|
|
|
3699
3751
|
import killPort from "kill-port";
|
|
3700
3752
|
|
|
3701
3753
|
// src/config/env.ts
|
|
3702
|
-
import { z as
|
|
3703
|
-
var EnvSchema =
|
|
3704
|
-
RUNEYA_AGENT_PORT:
|
|
3705
|
-
RUNEYA_AGENT_HOST:
|
|
3706
|
-
PASSPHRASE_OVERRIDE:
|
|
3707
|
-
AGENT_ID:
|
|
3754
|
+
import { z as z23 } from "zod";
|
|
3755
|
+
var EnvSchema = z23.object({
|
|
3756
|
+
RUNEYA_AGENT_PORT: z23.coerce.number().int().min(1).max(65535).default(4001),
|
|
3757
|
+
RUNEYA_AGENT_HOST: z23.string().default("127.0.0.1"),
|
|
3758
|
+
PASSPHRASE_OVERRIDE: z23.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
|
|
3759
|
+
AGENT_ID: z23.string().optional(),
|
|
3708
3760
|
// Set by spawner or manually for remote agents
|
|
3709
|
-
LOG_BUFFER_SIZE:
|
|
3710
|
-
METRICS_INTERVAL:
|
|
3711
|
-
GRACE_PERIOD:
|
|
3712
|
-
HEALTH_WS_INTERVAL:
|
|
3761
|
+
LOG_BUFFER_SIZE: z23.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
|
|
3762
|
+
METRICS_INTERVAL: z23.coerce.number().int().positive().default(METRICS_INTERVAL),
|
|
3763
|
+
GRACE_PERIOD: z23.coerce.number().int().positive().default(GRACE_PERIOD),
|
|
3764
|
+
HEALTH_WS_INTERVAL: z23.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
|
|
3713
3765
|
});
|
|
3714
3766
|
var env = EnvSchema.parse(process.env);
|
|
3715
3767
|
|
|
@@ -4494,7 +4546,7 @@ var processRouter = router({
|
|
|
4494
4546
|
return processManager.listStatuses();
|
|
4495
4547
|
}),
|
|
4496
4548
|
/** Get a single process */
|
|
4497
|
-
get: protectedProcedure.input(
|
|
4549
|
+
get: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
|
|
4498
4550
|
const status = processManager.getStatus(input.id);
|
|
4499
4551
|
if (!status) {
|
|
4500
4552
|
throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
|
|
@@ -4507,78 +4559,78 @@ var processRouter = router({
|
|
|
4507
4559
|
return { id };
|
|
4508
4560
|
}),
|
|
4509
4561
|
/** Undeploy: stop + remove */
|
|
4510
|
-
undeploy: protectedProcedure.input(
|
|
4562
|
+
undeploy: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4511
4563
|
await processManager.undeploy(input.id);
|
|
4512
4564
|
return { success: true };
|
|
4513
4565
|
}),
|
|
4514
4566
|
/** Update the service config for a deployed process */
|
|
4515
|
-
updateConfig: protectedProcedure.input(
|
|
4567
|
+
updateConfig: protectedProcedure.input(z24.object({ serviceId: z24.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
|
|
4516
4568
|
processManager.updateConfig(input.serviceId, input.config);
|
|
4517
4569
|
return { success: true };
|
|
4518
4570
|
}),
|
|
4519
4571
|
/** Start a deployed process */
|
|
4520
|
-
start: protectedProcedure.input(
|
|
4572
|
+
start: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4521
4573
|
console.log(`[agent] start service=${input.id}`);
|
|
4522
4574
|
await processManager.start(input.id);
|
|
4523
4575
|
return processManager.getStatus(input.id);
|
|
4524
4576
|
}),
|
|
4525
4577
|
/** Stop a running process */
|
|
4526
|
-
stop: protectedProcedure.input(
|
|
4578
|
+
stop: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4527
4579
|
console.log(`[agent] stop service=${input.id}`);
|
|
4528
4580
|
await processManager.stop(input.id);
|
|
4529
4581
|
return processManager.getStatus(input.id);
|
|
4530
4582
|
}),
|
|
4531
4583
|
/** Restart a process */
|
|
4532
|
-
restart: protectedProcedure.input(
|
|
4584
|
+
restart: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4533
4585
|
console.log(`[agent] restart service=${input.id}`);
|
|
4534
4586
|
await processManager.restart(input.id);
|
|
4535
4587
|
return processManager.getStatus(input.id);
|
|
4536
4588
|
}),
|
|
4537
4589
|
/** Get buffered logs for a process */
|
|
4538
|
-
logs: protectedProcedure.input(
|
|
4590
|
+
logs: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
|
|
4539
4591
|
const logs = processManager.getLogs(input.id);
|
|
4540
4592
|
return logs;
|
|
4541
4593
|
}),
|
|
4542
4594
|
/** Clear buffered logs for a process */
|
|
4543
|
-
clearLogBuffer: protectedProcedure.input(
|
|
4595
|
+
clearLogBuffer: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(({ input }) => {
|
|
4544
4596
|
processManager.clearLogBuffer(input.id);
|
|
4545
4597
|
return { success: true };
|
|
4546
4598
|
}),
|
|
4547
4599
|
/** Execute a shortcut command and stream output into the process log */
|
|
4548
|
-
executeShortcut: protectedProcedure.input(
|
|
4600
|
+
executeShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
|
|
4549
4601
|
const result = await processManager.executeShortcut(input.id, input.shortcut);
|
|
4550
4602
|
return result;
|
|
4551
4603
|
}),
|
|
4552
4604
|
/** Cancel a running shortcut command */
|
|
4553
|
-
cancelShortcut: protectedProcedure.input(
|
|
4605
|
+
cancelShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcutId: z24.string().max(128) })).mutation(({ input }) => {
|
|
4554
4606
|
processManager.cancelShortcut(input.id, input.shortcutId);
|
|
4555
4607
|
return { success: true };
|
|
4556
4608
|
}),
|
|
4557
4609
|
/** Cancel a running ad-hoc command */
|
|
4558
|
-
cancelAdHocCommand: protectedProcedure.input(
|
|
4610
|
+
cancelAdHocCommand: protectedProcedure.input(z24.object({ id: z24.string().max(128), commandId: z24.string().max(128).optional() })).mutation(({ input }) => {
|
|
4559
4611
|
processManager.cancelAdHocCommand(input.id, input.commandId);
|
|
4560
4612
|
return { success: true };
|
|
4561
4613
|
}),
|
|
4562
4614
|
/** Execute an ad-hoc command and stream output into the process log */
|
|
4563
|
-
executeAdHocCommand: protectedProcedure.input(
|
|
4564
|
-
id:
|
|
4565
|
-
command:
|
|
4566
|
-
cwd:
|
|
4567
|
-
commandId:
|
|
4615
|
+
executeAdHocCommand: protectedProcedure.input(z24.object({
|
|
4616
|
+
id: z24.string().max(128),
|
|
4617
|
+
command: z24.string().min(1).max(4096),
|
|
4618
|
+
cwd: z24.string().max(4096).optional(),
|
|
4619
|
+
commandId: z24.string().max(128).optional()
|
|
4568
4620
|
})).mutation(async ({ input }) => {
|
|
4569
4621
|
const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
|
|
4570
4622
|
return result;
|
|
4571
4623
|
}),
|
|
4572
4624
|
/** List active log source types for a process */
|
|
4573
|
-
logSources: protectedProcedure.input(
|
|
4625
|
+
logSources: protectedProcedure.input(z24.object({ processId: z24.string().max(128) })).query(({ input }) => {
|
|
4574
4626
|
return processManager.getLogSourceTypes(input.processId);
|
|
4575
4627
|
}),
|
|
4576
4628
|
/** Get current metrics for a process */
|
|
4577
|
-
metrics: protectedProcedure.input(
|
|
4629
|
+
metrics: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(async ({ input }) => {
|
|
4578
4630
|
return processManager.getMetrics(input.id);
|
|
4579
4631
|
}),
|
|
4580
4632
|
/** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
|
|
4581
|
-
onLog: protectedProcedure.input(
|
|
4633
|
+
onLog: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4582
4634
|
const queue = [];
|
|
4583
4635
|
let resolve2 = null;
|
|
4584
4636
|
const handler = (batch) => {
|
|
@@ -4607,7 +4659,7 @@ var processRouter = router({
|
|
|
4607
4659
|
}
|
|
4608
4660
|
}),
|
|
4609
4661
|
/** Subscribe to real-time status changes */
|
|
4610
|
-
onStatus: protectedProcedure.input(
|
|
4662
|
+
onStatus: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4611
4663
|
console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
|
|
4612
4664
|
const queue = [];
|
|
4613
4665
|
let resolve2 = null;
|
|
@@ -4639,7 +4691,7 @@ var processRouter = router({
|
|
|
4639
4691
|
}
|
|
4640
4692
|
}),
|
|
4641
4693
|
/** Subscribe to real-time health status changes */
|
|
4642
|
-
onHealth: protectedProcedure.input(
|
|
4694
|
+
onHealth: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4643
4695
|
const queue = [];
|
|
4644
4696
|
let resolve2 = null;
|
|
4645
4697
|
const handler = (healthData) => {
|
|
@@ -4669,7 +4721,7 @@ var processRouter = router({
|
|
|
4669
4721
|
}
|
|
4670
4722
|
}),
|
|
4671
4723
|
/** Subscribe to real-time metrics */
|
|
4672
|
-
onMetrics: protectedProcedure.input(
|
|
4724
|
+
onMetrics: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4673
4725
|
const queue = [];
|
|
4674
4726
|
let resolve2 = null;
|
|
4675
4727
|
const handler = (metrics) => {
|
|
@@ -4750,7 +4802,7 @@ var healthRouter = router({
|
|
|
4750
4802
|
});
|
|
4751
4803
|
|
|
4752
4804
|
// src/trpc/routers/terminal.ts
|
|
4753
|
-
import { z as
|
|
4805
|
+
import { z as z25 } from "zod";
|
|
4754
4806
|
import { TRPCError as TRPCError3 } from "@trpc/server";
|
|
4755
4807
|
|
|
4756
4808
|
// src/services/terminal-manager.ts
|
|
@@ -4843,11 +4895,11 @@ var terminalManager = new TerminalManager();
|
|
|
4843
4895
|
// src/trpc/routers/terminal.ts
|
|
4844
4896
|
var terminalRouter = router({
|
|
4845
4897
|
/** Spawn a new PTY shell session, returns a sessionId */
|
|
4846
|
-
create: protectedProcedure.input(
|
|
4847
|
-
cwd:
|
|
4848
|
-
cols:
|
|
4849
|
-
rows:
|
|
4850
|
-
title:
|
|
4898
|
+
create: protectedProcedure.input(z25.object({
|
|
4899
|
+
cwd: z25.string().max(512).optional(),
|
|
4900
|
+
cols: z25.number().int().min(1).max(512).optional(),
|
|
4901
|
+
rows: z25.number().int().min(1).max(256).optional(),
|
|
4902
|
+
title: z25.string().max(128).optional()
|
|
4851
4903
|
})).mutation(({ input }) => {
|
|
4852
4904
|
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
|
|
4853
4905
|
return { sessionId };
|
|
@@ -4855,34 +4907,34 @@ var terminalRouter = router({
|
|
|
4855
4907
|
/** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
|
|
4856
4908
|
list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
|
|
4857
4909
|
/** Renommer un onglet */
|
|
4858
|
-
rename: protectedProcedure.input(
|
|
4910
|
+
rename: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), title: z25.string().max(128) })).mutation(({ input }) => {
|
|
4859
4911
|
terminalManager.rename(input.sessionId, input.title);
|
|
4860
4912
|
return { ok: true };
|
|
4861
4913
|
}),
|
|
4862
4914
|
/** Write data (keystrokes) to a PTY session */
|
|
4863
|
-
write: protectedProcedure.input(
|
|
4915
|
+
write: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), data: z25.string().max(65536) })).mutation(({ input }) => {
|
|
4864
4916
|
terminalManager.write(input.sessionId, input.data);
|
|
4865
4917
|
return { ok: true };
|
|
4866
4918
|
}),
|
|
4867
4919
|
/** Resize a PTY session */
|
|
4868
|
-
resize: protectedProcedure.input(
|
|
4869
|
-
sessionId:
|
|
4870
|
-
cols:
|
|
4871
|
-
rows:
|
|
4920
|
+
resize: protectedProcedure.input(z25.object({
|
|
4921
|
+
sessionId: z25.string().max(128),
|
|
4922
|
+
cols: z25.number().int().min(1).max(512),
|
|
4923
|
+
rows: z25.number().int().min(1).max(256)
|
|
4872
4924
|
})).mutation(({ input }) => {
|
|
4873
4925
|
terminalManager.resize(input.sessionId, input.cols, input.rows);
|
|
4874
4926
|
return { ok: true };
|
|
4875
4927
|
}),
|
|
4876
4928
|
/** Destroy a PTY session */
|
|
4877
|
-
destroy: protectedProcedure.input(
|
|
4929
|
+
destroy: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128) })).mutation(({ input }) => {
|
|
4878
4930
|
terminalManager.destroy(input.sessionId);
|
|
4879
4931
|
return { ok: true };
|
|
4880
4932
|
}),
|
|
4881
4933
|
/** Stream PTY output for a session (async generator subscription) */
|
|
4882
|
-
onData: protectedProcedure.input(
|
|
4883
|
-
sessionId:
|
|
4934
|
+
onData: protectedProcedure.input(z25.object({
|
|
4935
|
+
sessionId: z25.string().max(128),
|
|
4884
4936
|
/** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
|
|
4885
|
-
replay:
|
|
4937
|
+
replay: z25.boolean().optional()
|
|
4886
4938
|
})).subscription(async function* ({ input }) {
|
|
4887
4939
|
const emitter = terminalManager.getEmitter(input.sessionId);
|
|
4888
4940
|
if (!emitter) {
|
|
@@ -4927,7 +4979,7 @@ var terminalRouter = router({
|
|
|
4927
4979
|
});
|
|
4928
4980
|
|
|
4929
4981
|
// src/trpc/routers/git.ts
|
|
4930
|
-
import { z as
|
|
4982
|
+
import { z as z26 } from "zod";
|
|
4931
4983
|
import { TRPCError as TRPCError4 } from "@trpc/server";
|
|
4932
4984
|
import { execFile as execFile5, spawn as spawn3 } from "child_process";
|
|
4933
4985
|
import { promisify as promisify3 } from "util";
|
|
@@ -4995,12 +5047,12 @@ async function sameGitRemote(a, b, resolveHost = resolveSshHost) {
|
|
|
4995
5047
|
var execFileAsync3 = promisify3(execFile5);
|
|
4996
5048
|
var GIT_TIMEOUT = 15e3;
|
|
4997
5049
|
var DIFF_MAX_BYTES = 512 * 1024;
|
|
4998
|
-
var CWD_SCHEMA =
|
|
4999
|
-
var SAFE_PATH_SCHEMA =
|
|
5050
|
+
var CWD_SCHEMA = z26.string().min(1).max(4096);
|
|
5051
|
+
var SAFE_PATH_SCHEMA = z26.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
|
|
5000
5052
|
message: "Path must be relative and not traverse up"
|
|
5001
5053
|
});
|
|
5002
|
-
var REMOTE_SCHEMA =
|
|
5003
|
-
var BRANCH_SCHEMA =
|
|
5054
|
+
var REMOTE_SCHEMA = z26.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
|
|
5055
|
+
var BRANCH_SCHEMA = z26.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
|
|
5004
5056
|
function gitSafeEnv() {
|
|
5005
5057
|
const env2 = {
|
|
5006
5058
|
GIT_TERMINAL_PROMPT: "0",
|
|
@@ -5118,10 +5170,10 @@ async function getGitStatus(cwd) {
|
|
|
5118
5170
|
}
|
|
5119
5171
|
var gitRouter = router({
|
|
5120
5172
|
/** Check if a working directory exists and optionally verify its git remote */
|
|
5121
|
-
checkCwd: protectedProcedure.input(
|
|
5173
|
+
checkCwd: protectedProcedure.input(z26.object({
|
|
5122
5174
|
cwd: CWD_SCHEMA,
|
|
5123
|
-
remote:
|
|
5124
|
-
checkReachability:
|
|
5175
|
+
remote: z26.string().max(2048).optional(),
|
|
5176
|
+
checkReachability: z26.boolean().optional()
|
|
5125
5177
|
})).query(async ({ input }) => {
|
|
5126
5178
|
const resolvedCwd = expandEnvVar(input.cwd);
|
|
5127
5179
|
const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
|
|
@@ -5143,8 +5195,8 @@ var gitRouter = router({
|
|
|
5143
5195
|
return { exists, actualRemote, remoteMatches, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
|
|
5144
5196
|
}),
|
|
5145
5197
|
/** Clone a git repository into a target directory */
|
|
5146
|
-
clone: protectedProcedure.input(
|
|
5147
|
-
remote:
|
|
5198
|
+
clone: protectedProcedure.input(z26.object({
|
|
5199
|
+
remote: z26.string().min(1).max(2048),
|
|
5148
5200
|
cwd: CWD_SCHEMA
|
|
5149
5201
|
})).mutation(async ({ input }) => {
|
|
5150
5202
|
const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
|
|
@@ -5165,13 +5217,13 @@ var gitRouter = router({
|
|
|
5165
5217
|
return { success: true };
|
|
5166
5218
|
}),
|
|
5167
5219
|
/** Get full git status */
|
|
5168
|
-
status: protectedProcedure.input(
|
|
5220
|
+
status: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5169
5221
|
const cwd = assertCwdExists(input.cwd);
|
|
5170
5222
|
await assertGitRepo(cwd);
|
|
5171
5223
|
return getGitStatus(cwd);
|
|
5172
5224
|
}),
|
|
5173
5225
|
/** Watch .git/ for changes and stream updated status */
|
|
5174
|
-
onStatusChange: protectedProcedure.input(
|
|
5226
|
+
onStatusChange: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
|
|
5175
5227
|
const cwd = assertCwdExists(input.cwd);
|
|
5176
5228
|
await assertGitRepo(cwd);
|
|
5177
5229
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
@@ -5222,7 +5274,7 @@ var gitRouter = router({
|
|
|
5222
5274
|
}
|
|
5223
5275
|
}),
|
|
5224
5276
|
/** Get commit log */
|
|
5225
|
-
log: protectedProcedure.input(
|
|
5277
|
+
log: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, limit: z26.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
|
|
5226
5278
|
const cwd = assertCwdExists(input.cwd);
|
|
5227
5279
|
await assertGitRepo(cwd);
|
|
5228
5280
|
const format = "%H%h%an%ae%ai%s";
|
|
@@ -5233,7 +5285,7 @@ var gitRouter = router({
|
|
|
5233
5285
|
});
|
|
5234
5286
|
}),
|
|
5235
5287
|
/** List local and remote branches */
|
|
5236
|
-
branches: protectedProcedure.input(
|
|
5288
|
+
branches: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5237
5289
|
const cwd = assertCwdExists(input.cwd);
|
|
5238
5290
|
await assertGitRepo(cwd);
|
|
5239
5291
|
const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5245,7 +5297,7 @@ var gitRouter = router({
|
|
|
5245
5297
|
return { current, branches };
|
|
5246
5298
|
}),
|
|
5247
5299
|
/** Checkout a branch */
|
|
5248
|
-
checkout: protectedProcedure.input(
|
|
5300
|
+
checkout: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z26.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5249
5301
|
const cwd = assertCwdExists(input.cwd);
|
|
5250
5302
|
await assertGitRepo(cwd);
|
|
5251
5303
|
const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
|
|
@@ -5253,42 +5305,42 @@ var gitRouter = router({
|
|
|
5253
5305
|
return { ok: true };
|
|
5254
5306
|
}),
|
|
5255
5307
|
/** Stage files */
|
|
5256
|
-
stage: protectedProcedure.input(
|
|
5308
|
+
stage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5257
5309
|
const cwd = assertCwdExists(input.cwd);
|
|
5258
5310
|
await assertGitRepo(cwd);
|
|
5259
5311
|
await git(["add", "--", ...input.paths], cwd);
|
|
5260
5312
|
return { ok: true };
|
|
5261
5313
|
}),
|
|
5262
5314
|
/** Stage all files */
|
|
5263
|
-
stageAll: protectedProcedure.input(
|
|
5315
|
+
stageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5264
5316
|
const cwd = assertCwdExists(input.cwd);
|
|
5265
5317
|
await assertGitRepo(cwd);
|
|
5266
5318
|
await git(["add", "-A"], cwd);
|
|
5267
5319
|
return { ok: true };
|
|
5268
5320
|
}),
|
|
5269
5321
|
/** Unstage files */
|
|
5270
|
-
unstage: protectedProcedure.input(
|
|
5322
|
+
unstage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5271
5323
|
const cwd = assertCwdExists(input.cwd);
|
|
5272
5324
|
await assertGitRepo(cwd);
|
|
5273
5325
|
await git(["restore", "--staged", "--", ...input.paths], cwd);
|
|
5274
5326
|
return { ok: true };
|
|
5275
5327
|
}),
|
|
5276
5328
|
/** Unstage all files */
|
|
5277
|
-
unstageAll: protectedProcedure.input(
|
|
5329
|
+
unstageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5278
5330
|
const cwd = assertCwdExists(input.cwd);
|
|
5279
5331
|
await assertGitRepo(cwd);
|
|
5280
5332
|
await git(["reset", "--"], cwd);
|
|
5281
5333
|
return { ok: true };
|
|
5282
5334
|
}),
|
|
5283
5335
|
/** Commit staged changes */
|
|
5284
|
-
commit: protectedProcedure.input(
|
|
5336
|
+
commit: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, message: z26.string().min(1).max(4096) })).mutation(async ({ input }) => {
|
|
5285
5337
|
const cwd = assertCwdExists(input.cwd);
|
|
5286
5338
|
await assertGitRepo(cwd);
|
|
5287
5339
|
const output = await git(["commit", "-m", input.message], cwd);
|
|
5288
5340
|
return { ok: true, output: output.trim() };
|
|
5289
5341
|
}),
|
|
5290
5342
|
/** Push to remote */
|
|
5291
|
-
push: protectedProcedure.input(
|
|
5343
|
+
push: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z26.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5292
5344
|
const cwd = assertCwdExists(input.cwd);
|
|
5293
5345
|
await assertGitRepo(cwd);
|
|
5294
5346
|
const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5297,25 +5349,25 @@ var gitRouter = router({
|
|
|
5297
5349
|
return { ok: true, output: output.trim() };
|
|
5298
5350
|
}),
|
|
5299
5351
|
/** Pull from remote */
|
|
5300
|
-
pull: protectedProcedure.input(
|
|
5352
|
+
pull: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5301
5353
|
const cwd = assertCwdExists(input.cwd);
|
|
5302
5354
|
await assertGitRepo(cwd);
|
|
5303
5355
|
const output = await git(["pull", input.remote], cwd);
|
|
5304
5356
|
return { ok: true, output: output.trim() };
|
|
5305
5357
|
}),
|
|
5306
5358
|
/** Fetch from remote */
|
|
5307
|
-
fetch: protectedProcedure.input(
|
|
5359
|
+
fetch: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5308
5360
|
const cwd = assertCwdExists(input.cwd);
|
|
5309
5361
|
await assertGitRepo(cwd);
|
|
5310
5362
|
const output = await git(["fetch", input.remote], cwd);
|
|
5311
5363
|
return { ok: true, output: output.trim() };
|
|
5312
5364
|
}),
|
|
5313
5365
|
/** Get diff for a file or the whole index */
|
|
5314
|
-
diff: protectedProcedure.input(
|
|
5366
|
+
diff: protectedProcedure.input(z26.object({
|
|
5315
5367
|
cwd: CWD_SCHEMA,
|
|
5316
|
-
path:
|
|
5317
|
-
staged:
|
|
5318
|
-
untracked:
|
|
5368
|
+
path: z26.string().max(4096).optional(),
|
|
5369
|
+
staged: z26.boolean().default(false),
|
|
5370
|
+
untracked: z26.boolean().default(false)
|
|
5319
5371
|
})).query(async ({ input }) => {
|
|
5320
5372
|
const cwd = assertCwdExists(input.cwd);
|
|
5321
5373
|
await assertGitRepo(cwd);
|
|
@@ -5363,21 +5415,21 @@ var gitRouter = router({
|
|
|
5363
5415
|
};
|
|
5364
5416
|
}),
|
|
5365
5417
|
/** Discard changes to working tree files */
|
|
5366
|
-
discard: protectedProcedure.input(
|
|
5418
|
+
discard: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5367
5419
|
const cwd = assertCwdExists(input.cwd);
|
|
5368
5420
|
await assertGitRepo(cwd);
|
|
5369
5421
|
await git(["restore", "--", ...input.paths], cwd);
|
|
5370
5422
|
return { ok: true };
|
|
5371
5423
|
}),
|
|
5372
5424
|
/** Get staged diff (used by server for AI commit message generation) */
|
|
5373
|
-
stagedDiff: protectedProcedure.input(
|
|
5425
|
+
stagedDiff: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5374
5426
|
const cwd = assertCwdExists(input.cwd);
|
|
5375
5427
|
await assertGitRepo(cwd);
|
|
5376
5428
|
const diff = await git(["diff", "--staged"], cwd, true);
|
|
5377
5429
|
return { diff: diff.slice(0, 3e4) };
|
|
5378
5430
|
}),
|
|
5379
5431
|
/** Merge a branch into the current branch */
|
|
5380
|
-
merge: protectedProcedure.input(
|
|
5432
|
+
merge: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z26.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5381
5433
|
const cwd = assertCwdExists(input.cwd);
|
|
5382
5434
|
await assertGitRepo(cwd);
|
|
5383
5435
|
const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
|
|
@@ -5385,14 +5437,14 @@ var gitRouter = router({
|
|
|
5385
5437
|
return { ok: true, output: output.trim() };
|
|
5386
5438
|
}),
|
|
5387
5439
|
/** Rebase current branch onto another branch */
|
|
5388
|
-
rebase: protectedProcedure.input(
|
|
5440
|
+
rebase: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
|
|
5389
5441
|
const cwd = assertCwdExists(input.cwd);
|
|
5390
5442
|
await assertGitRepo(cwd);
|
|
5391
5443
|
const output = await git(["rebase", input.branch], cwd);
|
|
5392
5444
|
return { ok: true, output: output.trim() };
|
|
5393
5445
|
}),
|
|
5394
5446
|
/** List remotes */
|
|
5395
|
-
remotes: protectedProcedure.input(
|
|
5447
|
+
remotes: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5396
5448
|
const cwd = assertCwdExists(input.cwd);
|
|
5397
5449
|
await assertGitRepo(cwd);
|
|
5398
5450
|
const output = await git(["remote", "-v"], cwd, true);
|
|
@@ -5410,7 +5462,7 @@ var gitRouter = router({
|
|
|
5410
5462
|
return remotes;
|
|
5411
5463
|
}),
|
|
5412
5464
|
/** List stash entries */
|
|
5413
|
-
stashList: protectedProcedure.input(
|
|
5465
|
+
stashList: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5414
5466
|
const cwd = assertCwdExists(input.cwd);
|
|
5415
5467
|
await assertGitRepo(cwd);
|
|
5416
5468
|
const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
|
|
@@ -5423,10 +5475,10 @@ var gitRouter = router({
|
|
|
5423
5475
|
return entries;
|
|
5424
5476
|
}),
|
|
5425
5477
|
/** Stash current changes */
|
|
5426
|
-
stashPush: protectedProcedure.input(
|
|
5478
|
+
stashPush: protectedProcedure.input(z26.object({
|
|
5427
5479
|
cwd: CWD_SCHEMA,
|
|
5428
|
-
message:
|
|
5429
|
-
includeUntracked:
|
|
5480
|
+
message: z26.string().max(4096).optional(),
|
|
5481
|
+
includeUntracked: z26.boolean().default(true)
|
|
5430
5482
|
})).mutation(async ({ input }) => {
|
|
5431
5483
|
const cwd = assertCwdExists(input.cwd);
|
|
5432
5484
|
await assertGitRepo(cwd);
|
|
@@ -5437,21 +5489,21 @@ var gitRouter = router({
|
|
|
5437
5489
|
return { ok: true, output: output.trim() };
|
|
5438
5490
|
}),
|
|
5439
5491
|
/** Apply a stash entry and remove it from the list */
|
|
5440
|
-
stashPop: protectedProcedure.input(
|
|
5492
|
+
stashPop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5441
5493
|
const cwd = assertCwdExists(input.cwd);
|
|
5442
5494
|
await assertGitRepo(cwd);
|
|
5443
5495
|
const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
|
|
5444
5496
|
return { ok: true, output: output.trim() };
|
|
5445
5497
|
}),
|
|
5446
5498
|
/** Apply a stash entry without removing it from the list */
|
|
5447
|
-
stashApply: protectedProcedure.input(
|
|
5499
|
+
stashApply: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5448
5500
|
const cwd = assertCwdExists(input.cwd);
|
|
5449
5501
|
await assertGitRepo(cwd);
|
|
5450
5502
|
const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
|
|
5451
5503
|
return { ok: true, output: output.trim() };
|
|
5452
5504
|
}),
|
|
5453
5505
|
/** Drop a stash entry */
|
|
5454
|
-
stashDrop: protectedProcedure.input(
|
|
5506
|
+
stashDrop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5455
5507
|
const cwd = assertCwdExists(input.cwd);
|
|
5456
5508
|
await assertGitRepo(cwd);
|
|
5457
5509
|
const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
|
|
@@ -5484,7 +5536,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
|
|
|
5484
5536
|
}
|
|
5485
5537
|
|
|
5486
5538
|
// src/trpc/routers/ai.ts
|
|
5487
|
-
import { z as
|
|
5539
|
+
import { z as z27 } from "zod";
|
|
5488
5540
|
import { TRPCError as TRPCError5 } from "@trpc/server";
|
|
5489
5541
|
|
|
5490
5542
|
// src/services/ai-spawn-manager.ts
|
|
@@ -6201,23 +6253,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
|
|
|
6201
6253
|
var MAX_CONTEXT_TOTAL_BYTES = 5e6;
|
|
6202
6254
|
var aiRouter = router({
|
|
6203
6255
|
/** Spawn an AI CLI process. Returns a spawnId for streaming. */
|
|
6204
|
-
spawn: protectedProcedure.input(
|
|
6205
|
-
cli:
|
|
6206
|
-
args:
|
|
6207
|
-
env:
|
|
6208
|
-
cwd:
|
|
6209
|
-
stdinData:
|
|
6210
|
-
enableMcp:
|
|
6211
|
-
mcpApiBaseUrl:
|
|
6212
|
-
mcpApiToken:
|
|
6256
|
+
spawn: protectedProcedure.input(z27.object({
|
|
6257
|
+
cli: z27.string().max(64),
|
|
6258
|
+
args: z27.array(z27.string().max(5e5)),
|
|
6259
|
+
env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
|
|
6260
|
+
cwd: z27.string().max(4096).optional(),
|
|
6261
|
+
stdinData: z27.string().max(1e7).optional(),
|
|
6262
|
+
enableMcp: z27.boolean().optional(),
|
|
6263
|
+
mcpApiBaseUrl: z27.string().max(512).optional(),
|
|
6264
|
+
mcpApiToken: z27.string().max(8192).optional()
|
|
6213
6265
|
})).mutation(({ input }) => {
|
|
6214
6266
|
const spawnId = aiSpawnManager.spawn(input);
|
|
6215
6267
|
return { spawnId };
|
|
6216
6268
|
}),
|
|
6217
6269
|
/** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
|
|
6218
|
-
stream: protectedProcedure.input(
|
|
6219
|
-
spawnId:
|
|
6220
|
-
fromOffset:
|
|
6270
|
+
stream: protectedProcedure.input(z27.object({
|
|
6271
|
+
spawnId: z27.string().max(128),
|
|
6272
|
+
fromOffset: z27.number().int().min(0).default(0)
|
|
6221
6273
|
})).subscription(async function* ({ input }) {
|
|
6222
6274
|
try {
|
|
6223
6275
|
for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
|
|
@@ -6231,39 +6283,39 @@ var aiRouter = router({
|
|
|
6231
6283
|
}
|
|
6232
6284
|
}),
|
|
6233
6285
|
/** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
|
|
6234
|
-
spawnPty: protectedProcedure.input(
|
|
6235
|
-
cli:
|
|
6236
|
-
args:
|
|
6237
|
-
env:
|
|
6238
|
-
cwd:
|
|
6239
|
-
cols:
|
|
6240
|
-
rows:
|
|
6241
|
-
sessionId:
|
|
6242
|
-
enableMcp:
|
|
6243
|
-
mcpApiBaseUrl:
|
|
6244
|
-
mcpApiToken:
|
|
6286
|
+
spawnPty: protectedProcedure.input(z27.object({
|
|
6287
|
+
cli: z27.string().max(64),
|
|
6288
|
+
args: z27.array(z27.string().max(5e5)),
|
|
6289
|
+
env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
|
|
6290
|
+
cwd: z27.string().max(4096).optional(),
|
|
6291
|
+
cols: z27.number().int().min(1).max(1e3).optional(),
|
|
6292
|
+
rows: z27.number().int().min(1).max(1e3).optional(),
|
|
6293
|
+
sessionId: z27.string().max(128).optional(),
|
|
6294
|
+
enableMcp: z27.boolean().optional(),
|
|
6295
|
+
mcpApiBaseUrl: z27.string().max(512).optional(),
|
|
6296
|
+
mcpApiToken: z27.string().max(8192).optional()
|
|
6245
6297
|
})).mutation(({ input }) => {
|
|
6246
6298
|
const spawnId = aiSpawnManager.spawnPty(input);
|
|
6247
6299
|
return { spawnId };
|
|
6248
6300
|
}),
|
|
6249
6301
|
/** Find a running PTY spawn by its logical sessionId (for re-attach). */
|
|
6250
|
-
findPtyBySession: protectedProcedure.input(
|
|
6302
|
+
findPtyBySession: protectedProcedure.input(z27.object({ sessionId: z27.string().max(128) })).query(({ input }) => {
|
|
6251
6303
|
return aiSpawnManager.findPtyBySessionId(input.sessionId);
|
|
6252
6304
|
}),
|
|
6253
6305
|
/** Write input to a PTY spawn (user keystrokes). */
|
|
6254
|
-
writePty: protectedProcedure.input(
|
|
6255
|
-
spawnId:
|
|
6256
|
-
data:
|
|
6306
|
+
writePty: protectedProcedure.input(z27.object({
|
|
6307
|
+
spawnId: z27.string().max(128),
|
|
6308
|
+
data: z27.string().max(1e6)
|
|
6257
6309
|
})).mutation(({ input }) => {
|
|
6258
6310
|
const ok = aiSpawnManager.writePty(input.spawnId, input.data);
|
|
6259
6311
|
return { ok };
|
|
6260
6312
|
}),
|
|
6261
6313
|
/** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
|
|
6262
|
-
writeContextFiles: protectedProcedure.input(
|
|
6263
|
-
sessionId:
|
|
6264
|
-
files:
|
|
6265
|
-
name:
|
|
6266
|
-
content:
|
|
6314
|
+
writeContextFiles: protectedProcedure.input(z27.object({
|
|
6315
|
+
sessionId: z27.string().min(1).max(128),
|
|
6316
|
+
files: z27.array(z27.object({
|
|
6317
|
+
name: z27.string().min(1).max(256),
|
|
6318
|
+
content: z27.string().max(MAX_CONTEXT_FILE_BYTES)
|
|
6267
6319
|
})).min(1).max(MAX_CONTEXT_FILES)
|
|
6268
6320
|
}).refine(
|
|
6269
6321
|
(val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
|
|
@@ -6278,25 +6330,25 @@ var aiRouter = router({
|
|
|
6278
6330
|
* which clipboard method (if any) succeeded — caller decides whether to send
|
|
6279
6331
|
* Ctrl+V (\x16) or inject `@<path>` into the PTY.
|
|
6280
6332
|
*/
|
|
6281
|
-
pasteImage: protectedProcedure.input(
|
|
6282
|
-
sessionId:
|
|
6283
|
-
mimeType:
|
|
6284
|
-
base64:
|
|
6333
|
+
pasteImage: protectedProcedure.input(z27.object({
|
|
6334
|
+
sessionId: z27.string().max(128).optional(),
|
|
6335
|
+
mimeType: z27.string().max(64),
|
|
6336
|
+
base64: z27.string().max(15e6)
|
|
6285
6337
|
})).mutation(async ({ input }) => {
|
|
6286
6338
|
const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
|
|
6287
6339
|
return res;
|
|
6288
6340
|
}),
|
|
6289
6341
|
/** Resize a PTY spawn. */
|
|
6290
|
-
resizePty: protectedProcedure.input(
|
|
6291
|
-
spawnId:
|
|
6292
|
-
cols:
|
|
6293
|
-
rows:
|
|
6342
|
+
resizePty: protectedProcedure.input(z27.object({
|
|
6343
|
+
spawnId: z27.string().max(128),
|
|
6344
|
+
cols: z27.number().int().min(1).max(1e3),
|
|
6345
|
+
rows: z27.number().int().min(1).max(1e3)
|
|
6294
6346
|
})).mutation(({ input }) => {
|
|
6295
6347
|
const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
|
|
6296
6348
|
return { ok };
|
|
6297
6349
|
}),
|
|
6298
6350
|
/** Kill a running AI spawn. */
|
|
6299
|
-
kill: protectedProcedure.input(
|
|
6351
|
+
kill: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
|
|
6300
6352
|
const killed = aiSpawnManager.kill(input.spawnId);
|
|
6301
6353
|
return { ok: killed };
|
|
6302
6354
|
}),
|
|
@@ -6305,23 +6357,23 @@ var aiRouter = router({
|
|
|
6305
6357
|
return aiSpawnManager.list();
|
|
6306
6358
|
}),
|
|
6307
6359
|
/** Acknowledge receipt of all data — agent can clean up after TTL. */
|
|
6308
|
-
ack: protectedProcedure.input(
|
|
6360
|
+
ack: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
|
|
6309
6361
|
const acked = aiSpawnManager.ack(input.spawnId);
|
|
6310
6362
|
return { ok: acked };
|
|
6311
6363
|
}),
|
|
6312
6364
|
/** Forward a JSON-RPC request to the local codex app-server. */
|
|
6313
|
-
codexRequest: protectedProcedure.input(
|
|
6314
|
-
method:
|
|
6315
|
-
params:
|
|
6316
|
-
env:
|
|
6365
|
+
codexRequest: protectedProcedure.input(z27.object({
|
|
6366
|
+
method: z27.string().max(256),
|
|
6367
|
+
params: z27.record(z27.string(), z27.unknown()).default({}),
|
|
6368
|
+
env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional()
|
|
6317
6369
|
})).mutation(async ({ input }) => {
|
|
6318
6370
|
await codexAppServerManager.ensureConnected(input.env);
|
|
6319
6371
|
const result = await codexAppServerManager.sendRequest(input.method, input.params);
|
|
6320
6372
|
return { result };
|
|
6321
6373
|
}),
|
|
6322
6374
|
/** Stream notifications from the codex app-server. Optionally filter by threadId. */
|
|
6323
|
-
codexNotifications: protectedProcedure.input(
|
|
6324
|
-
threadId:
|
|
6375
|
+
codexNotifications: protectedProcedure.input(z27.object({
|
|
6376
|
+
threadId: z27.string().max(256).optional()
|
|
6325
6377
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
6326
6378
|
await codexAppServerManager.ensureConnected();
|
|
6327
6379
|
const queue = [];
|
|
@@ -6358,13 +6410,13 @@ var aiRouter = router({
|
|
|
6358
6410
|
});
|
|
6359
6411
|
|
|
6360
6412
|
// src/trpc/routers/wiki.ts
|
|
6361
|
-
import { z as
|
|
6413
|
+
import { z as z28 } from "zod";
|
|
6362
6414
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
6363
6415
|
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
6364
6416
|
import { dirname as dirname2 } from "path";
|
|
6365
6417
|
import { resolve as resolvePath3, join as join5, relative, sep } from "path";
|
|
6366
|
-
var CWD_SCHEMA2 =
|
|
6367
|
-
var REL_PATH_SCHEMA =
|
|
6418
|
+
var CWD_SCHEMA2 = z28.string().min(1).max(4096);
|
|
6419
|
+
var REL_PATH_SCHEMA = z28.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
|
|
6368
6420
|
message: "Path must be a relative path without traversal"
|
|
6369
6421
|
});
|
|
6370
6422
|
var MAX_FILES = 500;
|
|
@@ -6384,9 +6436,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
|
6384
6436
|
"target",
|
|
6385
6437
|
"out"
|
|
6386
6438
|
]);
|
|
6387
|
-
var RepoEntrySchema =
|
|
6388
|
-
|
|
6389
|
-
|
|
6439
|
+
var RepoEntrySchema = z28.lazy(() => z28.union([
|
|
6440
|
+
z28.object({ type: z28.literal("file"), name: z28.string(), path: z28.string() }),
|
|
6441
|
+
z28.object({ type: z28.literal("dir"), name: z28.string(), path: z28.string(), children: z28.array(RepoEntrySchema) })
|
|
6390
6442
|
]));
|
|
6391
6443
|
async function walkMarkdown(root, dir, depth, counter) {
|
|
6392
6444
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
@@ -6456,13 +6508,13 @@ async function resolveRoot(cwd) {
|
|
|
6456
6508
|
}
|
|
6457
6509
|
}
|
|
6458
6510
|
var wikiRouter = router({
|
|
6459
|
-
listRepoMarkdown: protectedProcedure.input(
|
|
6511
|
+
listRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
6460
6512
|
const root = await resolveRoot(input.cwd);
|
|
6461
6513
|
const counter = { n: 0 };
|
|
6462
6514
|
const entries = await walkMarkdown(root, root, 0, counter);
|
|
6463
6515
|
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
6464
6516
|
}),
|
|
6465
|
-
readRepoMarkdown: protectedProcedure.input(
|
|
6517
|
+
readRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
6466
6518
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6467
6519
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
6468
6520
|
}
|
|
@@ -6488,10 +6540,10 @@ var wikiRouter = router({
|
|
|
6488
6540
|
const content = await readFile2(realTarget, "utf-8");
|
|
6489
6541
|
return { path: input.path, content };
|
|
6490
6542
|
}),
|
|
6491
|
-
writeMarkdown: protectedProcedure.input(
|
|
6543
|
+
writeMarkdown: protectedProcedure.input(z28.object({
|
|
6492
6544
|
cwd: CWD_SCHEMA2,
|
|
6493
6545
|
path: REL_PATH_SCHEMA,
|
|
6494
|
-
content:
|
|
6546
|
+
content: z28.string().max(5e6)
|
|
6495
6547
|
})).mutation(async ({ input }) => {
|
|
6496
6548
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6497
6549
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
@@ -6502,7 +6554,7 @@ var wikiRouter = router({
|
|
|
6502
6554
|
await writeFile6(target, input.content, "utf-8");
|
|
6503
6555
|
return { path: input.path, ok: true };
|
|
6504
6556
|
}),
|
|
6505
|
-
createFile: protectedProcedure.input(
|
|
6557
|
+
createFile: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6506
6558
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6507
6559
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
6508
6560
|
}
|
|
@@ -6518,13 +6570,13 @@ var wikiRouter = router({
|
|
|
6518
6570
|
await writeFile6(target, "", "utf-8");
|
|
6519
6571
|
return { path: input.path, ok: true };
|
|
6520
6572
|
}),
|
|
6521
|
-
createDir: protectedProcedure.input(
|
|
6573
|
+
createDir: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6522
6574
|
const root = await resolveRoot(input.cwd);
|
|
6523
6575
|
const target = await resolveSafePath(root, input.path, false);
|
|
6524
6576
|
await mkdir6(target, { recursive: true });
|
|
6525
6577
|
return { path: input.path, ok: true };
|
|
6526
6578
|
}),
|
|
6527
|
-
renamePath: protectedProcedure.input(
|
|
6579
|
+
renamePath: protectedProcedure.input(z28.object({
|
|
6528
6580
|
cwd: CWD_SCHEMA2,
|
|
6529
6581
|
fromPath: REL_PATH_SCHEMA,
|
|
6530
6582
|
toPath: REL_PATH_SCHEMA
|
|
@@ -6542,14 +6594,14 @@ var wikiRouter = router({
|
|
|
6542
6594
|
await rename2(from, to);
|
|
6543
6595
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6544
6596
|
}),
|
|
6545
|
-
ensureRoot: protectedProcedure.input(
|
|
6597
|
+
ensureRoot: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
6546
6598
|
const expanded = expandEnvVar(input.cwd);
|
|
6547
6599
|
const abs = resolvePath3(expanded);
|
|
6548
6600
|
await mkdir6(abs, { recursive: true });
|
|
6549
6601
|
const root = await realpath(abs);
|
|
6550
6602
|
return { root, ok: true };
|
|
6551
6603
|
}),
|
|
6552
|
-
deletePath: protectedProcedure.input(
|
|
6604
|
+
deletePath: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6553
6605
|
const root = await resolveRoot(input.cwd);
|
|
6554
6606
|
const target = await resolveSafePath(root, input.path, true);
|
|
6555
6607
|
if (target === root) {
|