@runeya/runeya 2.0.130 → 2.0.131
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 +245 -177
- package/agent/index.js.map +1 -1
- package/agent-manager-QQHA3TUB.js +11 -0
- package/{chat-6ETYBINN.js → chat-VIVAFYYS.js} +7 -7
- package/{chunk-B7MABGQN.js → chunk-4RMM2OUU.js} +29 -2
- package/chunk-4RMM2OUU.js.map +1 -0
- package/{chunk-RDE3X3J4.js → chunk-B3QQGYKU.js} +83 -12
- package/chunk-B3QQGYKU.js.map +1 -0
- package/{chunk-K2KSZRSI.js → chunk-CVVAQTMF.js} +6 -6
- package/{chunk-J2L6VONF.js → chunk-GAK3Q3J4.js} +13 -53
- package/chunk-GAK3Q3J4.js.map +1 -0
- package/{chunk-TTJNHZ6U.js → chunk-GNVQH3VG.js} +2 -2
- package/{chunk-7GBSCYXU.js → chunk-IYPYVSY5.js} +79 -14
- package/chunk-IYPYVSY5.js.map +1 -0
- package/{companion-SH4HLD6G.js → companion-2VDWE5SP.js} +5 -4
- package/{desktop-launcher-7UZF7PFH.js → desktop-launcher-RSRAXX6B.js} +2 -2
- package/index.js +5 -5
- package/mcp-server/index.js +132 -28
- package/mcp-server/index.js.map +1 -1
- package/{node-ILM6MV56.js → node-JU7A5NDT.js} +6 -2
- package/package.json +1 -1
- package/{settings-manager-XD6U4QN3.js → settings-manager-3LMN34IT.js} +3 -3
- package/{src-BNWVTXCY.js → src-B4AVQCOQ.js} +43 -15
- package/src-B4AVQCOQ.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-ojzSMuCC.js → AgentScalarChatInterface.vue-CsQIfwOB.js} +1 -1
- package/web/assets/{AgentTerminalPage-Cf-ymD9E.js → AgentTerminalPage-MFiSz_rt.js} +1 -1
- package/web/assets/AiChatPage-YYiU2Rua.js +1 -0
- package/web/assets/{AppLayout-YtDku8pN.js → AppLayout-CNeI8_tj.js} +1 -1
- package/web/assets/{AuditPage-DCVZLRz4.js → AuditPage-Dpy84SYO.js} +1 -1
- package/web/assets/CloudAccountPage-CmsKXPgr.js +1 -0
- package/web/assets/{CloudAccountPage-BOqt_ByJ.js → CloudAccountPage-vlTrRoPG.js} +1 -1
- package/web/assets/{CloudMessagingPage-BtlnnNf8.js → CloudMessagingPage-DtPDjm-i.js} +1 -1
- package/web/assets/{DashboardPage-BOxdzarH.js → DashboardPage-BfGv9gYt.js} +1 -1
- package/web/assets/{DirectoryPickerDialog-B4MzYK-Y.js → DirectoryPickerDialog-DrR_sBln.js} +1 -1
- package/web/assets/{EditorIcon-DAx2QpZA.js → EditorIcon-CDOVftY6.js} +1 -1
- package/web/assets/{EnvironmentForm-Cgcc_56Z.js → EnvironmentForm-CyNV0uZa.js} +1 -1
- package/web/assets/{EnvironmentFormPage-n7m6dJUn.js → EnvironmentFormPage-DWDvoFtt.js} +1 -1
- package/web/assets/{EnvironmentListPage-DS6s6UQk.js → EnvironmentListPage-B-2RGzi7.js} +1 -1
- package/web/assets/KanbanBoardPage-ByPh1kiv.css +1 -0
- package/web/assets/KanbanBoardPage-ClTruaQ9.js +4 -0
- package/web/assets/KanbanListPage-Bl21zyCc.js +1 -0
- package/web/assets/KanbanListPage-pCWYPwBv.css +1 -0
- package/web/assets/{LaunchProjectPage-BFOzRnGw.js → LaunchProjectPage-Cxx-fhzO.js} +1 -1
- package/web/assets/{LaunchServicesPage-D7FmbH2H.js → LaunchServicesPage-VdZTXZlX.js} +1 -1
- package/web/assets/{LogViewer-BbbpNT7v.js → LogViewer-MDkKX5-F.js} +1 -1
- package/web/assets/{OrgKeyPrompt-BGlTQGBE.js → OrgKeyPrompt-BbPXlqYa.js} +1 -1
- package/web/assets/{OrgLogo-DfRefdu8.js → OrgLogo-DFdWtiJh.js} +1 -1
- package/web/assets/{ProcessControls-ByXJUYXz.js → ProcessControls-BpwS8iyb.js} +1 -1
- package/web/assets/{ProcessDetailPage-6q8wgWEP.js → ProcessDetailPage-Cx3RFAvr.js} +1 -1
- package/web/assets/{ProcessMetrics-o6TQkXTa.js → ProcessMetrics-DJ5p8cOH.js} +1 -1
- package/web/assets/{RandomJobTestPage-DuCKCB_n.js → RandomJobTestPage-CN8v2j2H.js} +1 -1
- package/web/assets/{ScenarioEditorPage-ZCVivzeZ.js → ScenarioEditorPage-DE4kRBuV.js} +1 -1
- package/web/assets/{SendToChatDialog-CFd1Bubz.js → SendToChatDialog-8baAtZJn.js} +1 -1
- package/web/assets/{ServiceControlsBar-B-3OrP1t.js → ServiceControlsBar-CvcG0cX2.js} +1 -1
- package/web/assets/{ServiceDetailPage-Bm53GpUX.js → ServiceDetailPage-Dhr3CMPx.js} +1 -1
- package/web/assets/{ServiceFormPage-B5_95jOM.js → ServiceFormPage-BpKSXmQj.js} +1 -1
- package/web/assets/{SettingsPage-7Thq96Wn.js → SettingsPage-EHsyWY9H.js} +4 -4
- package/web/assets/{UnlockPage-BXbKs3QZ.js → UnlockPage-BEyjPuiA.js} +1 -1
- package/web/assets/{VaultMigrationPage-h6NgaEOh.js → VaultMigrationPage-BL1-Q6M-.js} +1 -1
- package/web/assets/{VersionBadge-Bh8iLmG8.js → VersionBadge-C4M_NoTo.js} +1 -1
- package/web/assets/WikiPage-BIy78RnQ.js +1 -0
- package/web/assets/{WikiView-B905tAss.js → WikiView-hMl0Jo_9.js} +1 -1
- package/web/assets/{add-scalar-classes-DW5rrkrl.js → add-scalar-classes-CfYvUPFK.js} +3 -3
- package/web/assets/{autocomplete-DxjWjky0.js → autocomplete-DwJDpd_3.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-JSaiJ46F.js → basic-shape-diamond.svg-BHIWRSBW.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-D1-hJiCH.js → basic-shape-hexagon.svg-BCqMu4vI.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-J6Ksp8Xz.js → basic-shape-primary-circle-ellipse-round.svg-DkTApMxk.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-BR-QAok8.js → basic-shape-primary-square-rectangle.svg-Bk_gOdKn.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-CmwxzzxD.js → basic-shape-shield.svg-BEFRYMev.js} +1 -1
- package/web/assets/{browser-7cY4kFlm.js → browser-CRhcCyEg.js} +1 -1
- package/web/assets/{browser-Dj-lNKWY.js → browser-CrG_hVEM.js} +1 -1
- package/web/assets/{card-DAI9OTkc.js → card-DM6OLGrd.js} +1 -1
- package/web/assets/{checkbox-Ct1yef0N.js → checkbox-BXP57wuC.js} +1 -1
- package/web/assets/{chip-B9m8EUV4.js → chip-usPF87e4.js} +1 -1
- package/web/assets/{client-DULNwlfi.js → client-DbOX6SLW.js} +1 -1
- package/web/assets/{cloud-chat.store-BufYJj6k.js → cloud-chat.store-D_tehZfH.js} +1 -1
- package/web/assets/cloud-client-D_2Ghoat.js +1 -0
- package/web/assets/cloud-session-5zD-9FVh.js +1 -0
- package/web/assets/{cloud-session-DZ1APEU5.js → cloud-session-BjxvzZ5_.js} +2 -2
- package/web/assets/{column-D9bX7M3H.js → column-BpmV6tZf.js} +1 -1
- package/web/assets/{composables-DtqhVWR-.js → composables-Biguv8GA.js} +1 -1
- package/web/assets/{computer-device-desktop-monitor.svg-kHhZDrn4.js → computer-device-desktop-monitor.svg-CMCr-EbE.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-CJqmzT8S.js → computer-device-desktop.svg-bHjL2yIc.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-DVR2dE1I.js → computer-device-laptop.svg-CMIGmOQb.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CEgkg7iO.js → computer-device-mobile-phone-android-samsung-back.svg-BmDp3ARt.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BNd9H2xb.js → computer-device-mobile-phone-android-samsung.svg-BE8rx7DK.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-C34x7LFE.js → computer-device-mobile-phone-iphone-x-back.svg-Cp8Dbmih.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-58jbIuoG.js → computer-device-mobile-phone-iphone-x.svg-CXXBfAWJ.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-Do-wo3C-.js → computer-device-mobile-tablet-touch.svg-CeynlokP.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-k9649lm5.js → computer-device-mobile-tablet.svg-D5XjPVoW.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-CHhUrJbo.js → computer-device-network-ethernet-cat6.svg-Cbs45-9L.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-CtPwhVZ6.js → computer-device-network-lan-www.svg-Rexix5Rm.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-kx5mccFk.js → computer-device-network-wifi-connection.svg-3vuo7eWK.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-sZs7A8Cr.js → computer-device-network-wifi-router.svg-B_MKwO49.js} +1 -1
- package/web/assets/{cssMode-B6unnb3U.js → cssMode-BqcfXzGG.js} +1 -1
- package/web/assets/{divider-BnMFAEx6.js → divider-BRuXeRHe.js} +1 -1
- package/web/assets/{docx-preview-HgFKCX0F.js → docx-preview-BoM3W7oO.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-DOKj5_k1.js → ecology-science-erlenmeyer-flask.svg-D1XKaTkC.js} +1 -1
- package/web/assets/{fieldset-DZnEgPOU.js → fieldset-CGCve6DD.js} +1 -1
- package/web/assets/{freemarker2-Bv0s6UQe.js → freemarker2-C6nb9fM5.js} +1 -1
- package/web/assets/{handlebars-BTsC4Lqd.js → handlebars-DE3S5TjS.js} +1 -1
- package/web/assets/{html-BARKi29y.js → html-CY7hz01Y.js} +1 -1
- package/web/assets/{htmlMode-fK2j6Ha8.js → htmlMode-Ce4CB2KU.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-CTaB0hJv.js → image-flash-lightning.svg-b9sFr9AB.js} +1 -1
- package/web/assets/{image-picture-flower.svg-M6Q_XtAy.js → image-picture-flower.svg-Dr_wEXj0.js} +1 -1
- package/web/assets/{index-DKmDGo1r.js → index-94C9mIJ-.js} +198 -198
- package/web/assets/{interface-alert-exclamation-diamond.svg-DPTfDSD9.js → interface-alert-exclamation-diamond.svg-DqSTZgNx.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-AWUdZifI.js → interface-alert-exclamation-triangle-warning.svg-tR6mkG18.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-BtYZm3zK.js → interface-alert-information-circle.svg-CWK4PaRe.js} +1 -1
- package/web/assets/{interface-award-crown.svg-DXu8zQAy.js → interface-award-crown.svg-CH5gPwR6.js} +1 -1
- package/web/assets/{interface-bookmark.svg-BVozfFi5.js → interface-bookmark-tag.svg-B8EJS7Ye.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-DEcpMXap.js → interface-bookmark.svg-DMekWOuD.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-B3qaR9M3.js → interface-calendar-date-one.svg-DWVB9WFa.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-DKEf3Z55.js → interface-content-book-open-pages.svg-B6WD8yc0.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-D6molfdo.js → interface-content-book-page.svg-Dfh4LPoI.js} +1 -1
- package/web/assets/{interface-content-file.svg-CA0q-5Sl.js → interface-content-file.svg-DLxukAGD.js} +1 -1
- package/web/assets/interface-content-folder.svg-6goG-PKT.js +1 -0
- package/web/assets/{interface-content-folder.svg-BztjfhZi.js → interface-content-folder.svg-mZbluscP.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-2_fmAnNV.js → interface-copy-clipboard.svg-DPWOJX2E.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-Cb_upeaG.js → interface-edit-attachment.svg-BR_Sil6I.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-CCEAT7W8.js → interface-edit-binocular.svg-CVEd4vYc.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-BeJ11Pji.js → interface-edit-magic-wand.svg-DGp4DsbI.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-BGiy8YPn.js → interface-edit-tool-paint-roller.svg-D0WlzqI4.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BOMoeGAt.js → interface-edit-tool-pencil.svg-ehfPBOGD.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-qHoFebiY.js → interface-favorite-award.svg-Be7yHimT.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-D9gpkTJz.js → interface-favorite-flag.svg-3fARRMMR.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-COMUv1Uh.js → interface-favorite-heart.svg-5isgI-U6.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-BsK5YVEB.js → interface-favorite-star.svg-lezozzmW.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-DevgE082.js → interface-favorite-stars-sparkles.svg-oLtfcK6W.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-C1dfAizc.js → interface-hierarchy-flowchart.svg-C7k-UAZM.js} +1 -1
- package/web/assets/{interface-home-house.svg-LAWGxZwm.js → interface-home-house.svg-m-Ka02ss.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-DKfSIKhS.js → interface-hyperlink.svg-Bt31gmVw.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-CvWZXBko.js → interface-lighting-brightness.svg-n2I1uunc.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-DUT5D0je.js → interface-lock-closed.svg-DeS-CJrc.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-Cw8kzQQh.js → interface-lock-open-unlock.svg-CdDWPuMJ.js} +1 -1
- package/web/assets/{interface-login-key.svg-Bkp-rHPU.js → interface-login-key.svg-CvEFMs4P.js} +1 -1
- package/web/assets/{interface-search.svg-hG5ogu9p.js → interface-search.svg-Cxo-DctG.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BcPVq1LR.js → interface-setting-cog.svg-9-YFTxcs.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-M4niyPv3.js → interface-share-megaphone-bullhorn.svg-FHVAX6dI.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-BcPOpoTR.js → interface-share-rocket.svg-1jFzVaHL.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-x1KDlm6g.js → interface-share-satellite.svg-DJLNcOP6.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-BfNSdNDO.js → interface-share-space-ship.svg-pl6k0DBO.js} +1 -1
- package/web/assets/{interface-share.svg-C97BmuMY.js → interface-share.svg-ed08i2oG.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DWd44JJH.js → interface-signal-square.svg-De4LGj0W.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-DlY-_Hwt.js → interface-time-clock-circle.svg-CEJLWUZ3.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-C2a691O4.js → interface-time-hour-glass.svg-o76dSnkN.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-gNDhDRlp.js → interface-users-multiple.svg-CoqKFb_U.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-D7eISmrq.js → interface-weather-moon.svg-DilewmQl.js} +1 -1
- package/web/assets/{javascript-8VolDNmb.js → javascript-BXeBAiG8.js} +1 -1
- package/web/assets/{jsonMode-D6awqTaJ.js → jsonMode-BqyfnSvw.js} +1 -1
- package/web/assets/{liquid-TTMHEa9a.js → liquid-DReW7YnO.js} +1 -1
- package/web/assets/{lspLanguageFeatures-UVF6GLcv.js → lspLanguageFeatures-Chp8gGOd.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-DjreUXqw.js → mail-chat-bubble-square.svg-BGfaxE3Z.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-BcyYVqIq.js → mail-send-email-paper-airplane.svg-Behyq64U.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-BGg0186G.js → mail-send-envelope.svg-Bxrgi1uS.js} +1 -1
- package/web/assets/{mdx-CoSOx_u6.js → mdx-DlDWnOnw.js} +1 -1
- package/web/assets/{minus-DKbcHNVU.js → minus-TTIwv6X7.js} +1 -1
- package/web/assets/modal-1yF5hlWc.js +1 -0
- package/web/assets/{modal-DziAnw0E.js → modal-BmOXV_GD.js} +1 -1
- package/web/assets/{money-cashier-receipt.svg-xin2Q2jV.js → money-cashier-receipt.svg-C-cvnfPn.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-CuVghNG0.js → money-currency-dollar-pay.svg-CvwqB_Us.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-CW-ESaRb.js → money-graph-arrow-increase.svg-U8piy6iJ.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-Ds63Ij9u.js → money-graph-bar-chart-increase.svg-Czsghch7.js} +1 -1
- package/web/assets/{multiselect-EBj2jpFx.js → multiselect-BtsqfXUl.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-CROyMuJ6.js → nature-ecology-leaf.svg-DusYKwpP.js} +1 -1
- package/web/assets/{password-M6cvez26.js → password-D7zz_4x-.js} +1 -1
- package/web/assets/{phone-telephone.svg-ldFh2DtT.js → phone-telephone.svg-24q-zljc.js} +1 -1
- package/web/assets/{plus-B-HO9RRD.js → plus-QyL2zHhp.js} +1 -1
- package/web/assets/process.store-Di7QdGS6.js +1 -0
- package/web/assets/{programming-bug.svg-Bi-5bVtZ.js → programming-bug.svg-ljzgC2y_.js} +1 -1
- package/web/assets/{programming-cloud.svg-BfsVdIyf.js → programming-cloud.svg-DGSPYVKb.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-CGxQu1SC.js → programming-computer-database-server.svg-DinsEUs2.js} +1 -1
- package/web/assets/{programming-computer-database.svg-B5TrOmSA.js → programming-computer-database.svg-Bi-KIHKo.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-CX306feB.js → programming-module-four-layout.svg-8adkNiA8.js} +1 -1
- package/web/assets/{programming-module-three.svg-fIUP0jIs.js → programming-module-three.svg-D05fexpq.js} +1 -1
- package/web/assets/{programming-module.svg-BaFMsOL8.js → programming-module.svg-Bd_jG5Ld.js} +1 -1
- package/web/assets/{programming-script-code.svg-asPax4Jv.js → programming-script-code.svg-BR0wfmxH.js} +1 -1
- package/web/assets/project-launch.store-C5sqtO8-.js +1 -0
- package/web/assets/project.store-BHFNvoBC.js +1 -0
- package/web/assets/{python-B2HQyLbu.js → python--XCKQ7Mj.js} +1 -1
- package/web/assets/{radiobutton-E9JzQOQ_.js → radiobutton-BGxBny0T.js} +1 -1
- package/web/assets/{razor-chfLPaZ5.js → razor-DmUJwoTy.js} +1 -1
- package/web/assets/router-BTMrAdGT.js +1 -0
- package/web/assets/{selectbutton-BSfIGLAd.js → selectbutton-BeX4M-IG.js} +1 -1
- package/web/assets/settings-scope-DUOlLSMl.js +1 -0
- package/web/assets/{settings.store-DdANKt-l.js → settings.store-CbOGUuSM.js} +1 -1
- package/web/assets/{shopping-cart.svg-CE-hccE4.js → shopping-cart.svg-CAlBJM1f.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-DcDsxpbS.js → shopping-gift-present.svg-CmakOhp5.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-B-Hce7Vg.js → shopping-shipping-box-parcel-package.svg-DMr-nOJL.js} +1 -1
- package/web/assets/src-DztOEh3e.css +1 -0
- package/web/assets/{src-BCom7Av8.js → src-_lD-wMMD.js} +30 -30
- package/web/assets/{src-CDO5h8Fg.js → src-mXN4EdYU.js} +1 -1
- package/web/assets/{tabpanel-opi-GyXj.js → tabpanel-DFw1JNiJ.js} +1 -1
- package/web/assets/{tag-new-circle.svg-CAAIvApW.js → tag-new-circle.svg-BL7H0XEp.js} +1 -1
- package/web/assets/theme-E9nfXtHG.js +1 -0
- package/web/assets/{toggleswitch-CXZN5FrU.js → toggleswitch-hCIOkIWD.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-_I9aKmKu.js → travel-map-earth-globe.svg-DOsI_-VD.js} +1 -1
- package/web/assets/trpc-BskvL7g_.js +1 -0
- package/web/assets/{tsMode-Cis8_e0R.js → tsMode-DLtQZQME.js} +1 -1
- package/web/assets/{typescript-DwoucjlL.js → typescript-BiwtK-KD.js} +1 -1
- package/web/assets/useAiChatDrawer-BIkMnJ15.js +1 -0
- package/web/assets/{useCloudOrg-DSETGvJK.js → useCloudOrg-BOcbkFan.js} +1 -1
- package/web/assets/{useEnvVarAutocomplete-SpekLSMv.js → useEnvVarAutocomplete-B7JuI0eO.js} +1 -1
- package/web/assets/{useProjectCatalog-DDZXnSWD.js → useProjectCatalog-BKnj5RtX.js} +1 -1
- package/web/assets/{useProjectCloudOrg-Dg9jETJH.js → useProjectCloudOrg-DC78dk7F.js} +1 -1
- package/web/assets/{useServiceUrlHost-BhfsTBGb.js → useServiceUrlHost-Bi8nVdMP.js} +1 -1
- package/web/assets/{xml-D6t1pRy0.js → xml-4zuO3zgc.js} +1 -1
- package/web/assets/{yaml-DAzbEAMy.js → yaml-D5Zw4FPr.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-GFRVUJSI.js +0 -10
- package/chunk-7GBSCYXU.js.map +0 -1
- package/chunk-B7MABGQN.js.map +0 -1
- package/chunk-J2L6VONF.js.map +0 -1
- package/chunk-RDE3X3J4.js.map +0 -1
- package/src-BNWVTXCY.js.map +0 -1
- package/web/assets/AiChatPage-COFvhaB5.js +0 -1
- package/web/assets/CloudAccountPage-ClH4A4t9.js +0 -1
- package/web/assets/KanbanBoardPage-6I4n9kDT.css +0 -1
- package/web/assets/KanbanBoardPage-DOvBivfv.js +0 -4
- package/web/assets/KanbanListPage-D3xdMHNk.js +0 -1
- package/web/assets/KanbanListPage-DgHde06E.css +0 -1
- package/web/assets/WikiPage-BZVFtjfs.js +0 -1
- package/web/assets/cloud-client-DH0epluZ.js +0 -1
- package/web/assets/cloud-session-BBqRYcsm.js +0 -1
- package/web/assets/interface-content-folder.svg-DcL7Y965.js +0 -1
- package/web/assets/modal-C44iufem.js +0 -1
- package/web/assets/process.store-BLYbO6Uf.js +0 -1
- package/web/assets/project-launch.store-cRctADnj.js +0 -1
- package/web/assets/project.store-BIHP84Mj.js +0 -1
- package/web/assets/router-CgLDvz4F.js +0 -1
- package/web/assets/settings-scope-E-kRs7p5.js +0 -1
- package/web/assets/src-DkRsN6ug.css +0 -1
- package/web/assets/theme-7Rf1Y25Z.js +0 -1
- package/web/assets/trpc-D26KI2Tc.js +0 -1
- package/web/assets/useAiChatDrawer-DMkDsZjG.js +0 -1
- /package/{agent-manager-GFRVUJSI.js.map → agent-manager-QQHA3TUB.js.map} +0 -0
- /package/{chat-6ETYBINN.js.map → chat-VIVAFYYS.js.map} +0 -0
- /package/{chunk-K2KSZRSI.js.map → chunk-CVVAQTMF.js.map} +0 -0
- /package/{chunk-TTJNHZ6U.js.map → chunk-GNVQH3VG.js.map} +0 -0
- /package/{companion-SH4HLD6G.js.map → companion-2VDWE5SP.js.map} +0 -0
- /package/{desktop-launcher-7UZF7PFH.js.map → desktop-launcher-RSRAXX6B.js.map} +0 -0
- /package/{node-ILM6MV56.js.map → node-JU7A5NDT.js.map} +0 -0
- /package/{settings-manager-XD6U4QN3.js.map → settings-manager-3LMN34IT.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 z25 } from "zod";
|
|
64
64
|
import { TRPCError as TRPCError2 } from "@trpc/server";
|
|
65
65
|
|
|
66
66
|
// src/services/process-manager.ts
|
|
@@ -1246,35 +1246,100 @@ var UpdateCloudApiKeyInput = z20.object({
|
|
|
1246
1246
|
boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
|
|
1247
1247
|
});
|
|
1248
1248
|
|
|
1249
|
-
// ../../packages/shared/src/schemas/
|
|
1249
|
+
// ../../packages/shared/src/schemas/integration.schema.ts
|
|
1250
1250
|
import { z as z21 } from "zod";
|
|
1251
|
-
var
|
|
1252
|
-
var
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1251
|
+
var IntegrationProviderSchema = z21.enum(["intercom"]);
|
|
1252
|
+
var IntegrationConnectionSchema = z21.object({
|
|
1253
|
+
id: z21.string().max(128),
|
|
1254
|
+
organizationId: z21.string().max(128),
|
|
1255
|
+
provider: IntegrationProviderSchema,
|
|
1256
|
+
name: z21.string().min(1).max(200),
|
|
1257
|
+
/** Le tableau et la colonne de création — seulement avec la création automatique. */
|
|
1258
|
+
boardId: z21.string().max(64).nullable(),
|
|
1259
|
+
columnId: z21.string().max(128).nullable(),
|
|
1260
|
+
enabled: z21.boolean(),
|
|
1261
|
+
/**
|
|
1262
|
+
* L'URL complète du webhook à coller chez le fournisseur, construite par le
|
|
1263
|
+
* cloud (domaine public des webhooks). Elle contient un jeton imprévisible.
|
|
1264
|
+
*/
|
|
1265
|
+
webhookUrl: z21.string().max(2048),
|
|
1266
|
+
/** Les quatre derniers caractères du secret de signature, pour le reconnaître. */
|
|
1267
|
+
secretPreview: z21.string().max(8),
|
|
1268
|
+
region: z21.string().max(16),
|
|
1269
|
+
/** Créer une carte pour toute conversation qui n'est encore liée nulle part. */
|
|
1270
|
+
autoCreate: z21.boolean(),
|
|
1271
|
+
createdBy: z21.object({ id: z21.string().max(128), name: z21.string().max(200) }),
|
|
1272
|
+
createdAt: z21.string().max(64),
|
|
1273
|
+
lastEventAt: z21.string().max(64).nullable()
|
|
1274
|
+
});
|
|
1275
|
+
var IntegrationConversationStateSchema = z21.enum(["open", "resolved"]);
|
|
1276
|
+
var IntegrationMessageSchema = z21.object({
|
|
1277
|
+
id: z21.string().max(256),
|
|
1278
|
+
author: z21.object({ name: z21.string().max(500), role: z21.enum(["customer", "agent"]) }),
|
|
1279
|
+
body: z21.string().max(1e5),
|
|
1280
|
+
internal: z21.boolean(),
|
|
1281
|
+
sentAt: z21.string().max(64),
|
|
1282
|
+
/** Fichiers joints et images, copiés dans Runeya : ils se lisent comme ceux d'une carte. */
|
|
1283
|
+
attachments: z21.array(KanbanAttachmentSchema).max(50),
|
|
1284
|
+
/** Noms des fichiers qui n'ont pas pu être copiés. */
|
|
1285
|
+
missingAttachments: z21.array(z21.string().max(500)).max(50)
|
|
1286
|
+
});
|
|
1287
|
+
var IntegrationConversationSchema = z21.object({
|
|
1288
|
+
id: z21.string().max(256),
|
|
1289
|
+
connectionId: z21.string().max(128),
|
|
1290
|
+
provider: IntegrationProviderSchema,
|
|
1291
|
+
externalId: z21.string().max(128),
|
|
1292
|
+
title: z21.string().max(500),
|
|
1293
|
+
url: z21.string().max(2e3).nullable(),
|
|
1294
|
+
state: IntegrationConversationStateSchema,
|
|
1295
|
+
updatedAt: z21.string().max(64)
|
|
1296
|
+
});
|
|
1297
|
+
var CardConversationSchema = IntegrationConversationSchema.extend({
|
|
1298
|
+
origin: z21.enum(["auto", "manual"]),
|
|
1299
|
+
linkedAt: z21.string().max(64),
|
|
1300
|
+
opening: z21.object({
|
|
1301
|
+
author: IntegrationMessageSchema.shape.author,
|
|
1302
|
+
body: z21.string().max(1e5),
|
|
1303
|
+
attachments: z21.array(KanbanAttachmentSchema).max(50),
|
|
1304
|
+
missingAttachments: z21.array(z21.string().max(500)).max(50)
|
|
1305
|
+
}).nullable(),
|
|
1306
|
+
messages: z21.array(IntegrationMessageSchema),
|
|
1307
|
+
otherCards: z21.array(z21.object({ boardId: z21.string().max(64), cardId: z21.string().max(64), title: z21.string().max(500) }))
|
|
1308
|
+
});
|
|
1309
|
+
var ConversationSearchHitSchema = IntegrationConversationSchema.extend({
|
|
1310
|
+
preview: z21.string().max(500),
|
|
1311
|
+
linkedCards: z21.array(z21.object({ boardId: z21.string().max(64), cardId: z21.string().max(64), title: z21.string().max(500) }))
|
|
1312
|
+
});
|
|
1313
|
+
|
|
1314
|
+
// ../../packages/shared/src/schemas/changelog.schema.ts
|
|
1315
|
+
import { z as z22 } from "zod";
|
|
1316
|
+
var ChangelogSurfaceSchema = z22.enum(["app", "cloud"]);
|
|
1317
|
+
var ChangelogChangeKindSchema = z22.enum(["feature", "improvement", "fix", "breaking"]);
|
|
1318
|
+
var ChangelogTextSchema = z22.object({
|
|
1319
|
+
fr: z22.string().min(1).max(500),
|
|
1320
|
+
en: z22.string().min(1).max(500)
|
|
1256
1321
|
});
|
|
1257
|
-
var ChangelogChangeSchema =
|
|
1322
|
+
var ChangelogChangeSchema = z22.object({
|
|
1258
1323
|
kind: ChangelogChangeKindSchema,
|
|
1259
1324
|
text: ChangelogTextSchema
|
|
1260
1325
|
});
|
|
1261
1326
|
var ChangelogDraftSchema = ChangelogChangeSchema.extend({
|
|
1262
|
-
date:
|
|
1327
|
+
date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1263
1328
|
title: ChangelogTextSchema.optional()
|
|
1264
1329
|
});
|
|
1265
|
-
var ChangelogReleaseSchema =
|
|
1330
|
+
var ChangelogReleaseSchema = z22.object({
|
|
1266
1331
|
surface: ChangelogSurfaceSchema,
|
|
1267
1332
|
/** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
|
|
1268
|
-
version:
|
|
1333
|
+
version: z22.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
|
|
1269
1334
|
/** Date de publication, `YYYY-MM-DD`. */
|
|
1270
|
-
date:
|
|
1335
|
+
date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1271
1336
|
/** Facultatif : une version peut s'annoncer par son seul numéro. */
|
|
1272
1337
|
title: ChangelogTextSchema.optional(),
|
|
1273
1338
|
/** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
|
|
1274
|
-
changes:
|
|
1339
|
+
changes: z22.array(ChangelogChangeSchema).min(1).max(50)
|
|
1275
1340
|
});
|
|
1276
1341
|
var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
|
|
1277
|
-
changeCount:
|
|
1342
|
+
changeCount: z22.number().int().nonnegative()
|
|
1278
1343
|
});
|
|
1279
1344
|
|
|
1280
1345
|
// ../../packages/shared/src/utils/crypto.ts
|
|
@@ -3215,7 +3280,7 @@ import { execa as execa3 } from "execa";
|
|
|
3215
3280
|
import { homedir as homedir4 } from "os";
|
|
3216
3281
|
|
|
3217
3282
|
// src/trpc/routers/config.ts
|
|
3218
|
-
import { z as
|
|
3283
|
+
import { z as z23 } from "zod";
|
|
3219
3284
|
|
|
3220
3285
|
// src/services/traefik-manager.ts
|
|
3221
3286
|
import { spawn, execFile as execFile2 } from "child_process";
|
|
@@ -3593,13 +3658,13 @@ function resolvePassthroughEnv() {
|
|
|
3593
3658
|
return result;
|
|
3594
3659
|
}
|
|
3595
3660
|
var configRouter = router({
|
|
3596
|
-
setPassthroughEnv: protectedProcedure.input(
|
|
3597
|
-
names:
|
|
3598
|
-
|
|
3661
|
+
setPassthroughEnv: protectedProcedure.input(z23.object({
|
|
3662
|
+
names: z23.array(
|
|
3663
|
+
z23.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
|
|
3599
3664
|
).max(100),
|
|
3600
|
-
values:
|
|
3601
|
-
|
|
3602
|
-
|
|
3665
|
+
values: z23.record(
|
|
3666
|
+
z23.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
|
|
3667
|
+
z23.string().max(32768)
|
|
3603
3668
|
).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
|
|
3604
3669
|
})).mutation(({ input }) => {
|
|
3605
3670
|
passthroughEnvNames = input.names;
|
|
@@ -3636,7 +3701,7 @@ var configRouter = router({
|
|
|
3636
3701
|
getTraefikFileTree: protectedProcedure.query(async () => {
|
|
3637
3702
|
return traefikManager.getFileTree();
|
|
3638
3703
|
}),
|
|
3639
|
-
getTraefikLogs: protectedProcedure.input(
|
|
3704
|
+
getTraefikLogs: protectedProcedure.input(z23.object({ lines: z23.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
|
|
3640
3705
|
const logs = await traefikManager.getLogs(input.lines);
|
|
3641
3706
|
return { logs };
|
|
3642
3707
|
})
|
|
@@ -3828,17 +3893,17 @@ var healthChecker = new HealthChecker();
|
|
|
3828
3893
|
import killPort from "kill-port";
|
|
3829
3894
|
|
|
3830
3895
|
// src/config/env.ts
|
|
3831
|
-
import { z as
|
|
3832
|
-
var EnvSchema =
|
|
3833
|
-
RUNEYA_AGENT_PORT:
|
|
3834
|
-
RUNEYA_AGENT_HOST:
|
|
3835
|
-
PASSPHRASE_OVERRIDE:
|
|
3836
|
-
AGENT_ID:
|
|
3896
|
+
import { z as z24 } from "zod";
|
|
3897
|
+
var EnvSchema = z24.object({
|
|
3898
|
+
RUNEYA_AGENT_PORT: z24.coerce.number().int().min(1).max(65535).default(4001),
|
|
3899
|
+
RUNEYA_AGENT_HOST: z24.string().default("127.0.0.1"),
|
|
3900
|
+
PASSPHRASE_OVERRIDE: z24.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
|
|
3901
|
+
AGENT_ID: z24.string().optional(),
|
|
3837
3902
|
// Set by spawner or manually for remote agents
|
|
3838
|
-
LOG_BUFFER_SIZE:
|
|
3839
|
-
METRICS_INTERVAL:
|
|
3840
|
-
GRACE_PERIOD:
|
|
3841
|
-
HEALTH_WS_INTERVAL:
|
|
3903
|
+
LOG_BUFFER_SIZE: z24.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
|
|
3904
|
+
METRICS_INTERVAL: z24.coerce.number().int().positive().default(METRICS_INTERVAL),
|
|
3905
|
+
GRACE_PERIOD: z24.coerce.number().int().positive().default(GRACE_PERIOD),
|
|
3906
|
+
HEALTH_WS_INTERVAL: z24.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
|
|
3842
3907
|
});
|
|
3843
3908
|
var env = EnvSchema.parse(process.env);
|
|
3844
3909
|
|
|
@@ -4626,7 +4691,7 @@ var processRouter = router({
|
|
|
4626
4691
|
return processManager.listStatuses();
|
|
4627
4692
|
}),
|
|
4628
4693
|
/** Get a single process */
|
|
4629
|
-
get: protectedProcedure.input(
|
|
4694
|
+
get: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(({ input }) => {
|
|
4630
4695
|
const status = processManager.getStatus(input.id);
|
|
4631
4696
|
if (!status) {
|
|
4632
4697
|
throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
|
|
@@ -4639,78 +4704,78 @@ var processRouter = router({
|
|
|
4639
4704
|
return { id };
|
|
4640
4705
|
}),
|
|
4641
4706
|
/** Undeploy: stop + remove */
|
|
4642
|
-
undeploy: protectedProcedure.input(
|
|
4707
|
+
undeploy: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4643
4708
|
await processManager.undeploy(input.id);
|
|
4644
4709
|
return { success: true };
|
|
4645
4710
|
}),
|
|
4646
4711
|
/** Update the service config for a deployed process */
|
|
4647
|
-
updateConfig: protectedProcedure.input(
|
|
4712
|
+
updateConfig: protectedProcedure.input(z25.object({ serviceId: z25.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
|
|
4648
4713
|
processManager.updateConfig(input.serviceId, input.config);
|
|
4649
4714
|
return { success: true };
|
|
4650
4715
|
}),
|
|
4651
4716
|
/** Start a deployed process */
|
|
4652
|
-
start: protectedProcedure.input(
|
|
4717
|
+
start: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4653
4718
|
console.log(`[agent] start service=${input.id}`);
|
|
4654
4719
|
await processManager.start(input.id);
|
|
4655
4720
|
return processManager.getStatus(input.id);
|
|
4656
4721
|
}),
|
|
4657
4722
|
/** Stop a running process */
|
|
4658
|
-
stop: protectedProcedure.input(
|
|
4723
|
+
stop: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4659
4724
|
console.log(`[agent] stop service=${input.id}`);
|
|
4660
4725
|
await processManager.stop(input.id);
|
|
4661
4726
|
return processManager.getStatus(input.id);
|
|
4662
4727
|
}),
|
|
4663
4728
|
/** Restart a process */
|
|
4664
|
-
restart: protectedProcedure.input(
|
|
4729
|
+
restart: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4665
4730
|
console.log(`[agent] restart service=${input.id}`);
|
|
4666
4731
|
await processManager.restart(input.id);
|
|
4667
4732
|
return processManager.getStatus(input.id);
|
|
4668
4733
|
}),
|
|
4669
4734
|
/** Get buffered logs for a process */
|
|
4670
|
-
logs: protectedProcedure.input(
|
|
4735
|
+
logs: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(({ input }) => {
|
|
4671
4736
|
const logs = processManager.getLogs(input.id);
|
|
4672
4737
|
return logs;
|
|
4673
4738
|
}),
|
|
4674
4739
|
/** Clear buffered logs for a process */
|
|
4675
|
-
clearLogBuffer: protectedProcedure.input(
|
|
4740
|
+
clearLogBuffer: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(({ input }) => {
|
|
4676
4741
|
processManager.clearLogBuffer(input.id);
|
|
4677
4742
|
return { success: true };
|
|
4678
4743
|
}),
|
|
4679
4744
|
/** Execute a shortcut command and stream output into the process log */
|
|
4680
|
-
executeShortcut: protectedProcedure.input(
|
|
4745
|
+
executeShortcut: protectedProcedure.input(z25.object({ id: z25.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
|
|
4681
4746
|
const result = await processManager.executeShortcut(input.id, input.shortcut);
|
|
4682
4747
|
return result;
|
|
4683
4748
|
}),
|
|
4684
4749
|
/** Cancel a running shortcut command */
|
|
4685
|
-
cancelShortcut: protectedProcedure.input(
|
|
4750
|
+
cancelShortcut: protectedProcedure.input(z25.object({ id: z25.string().max(128), shortcutId: z25.string().max(128) })).mutation(({ input }) => {
|
|
4686
4751
|
processManager.cancelShortcut(input.id, input.shortcutId);
|
|
4687
4752
|
return { success: true };
|
|
4688
4753
|
}),
|
|
4689
4754
|
/** Cancel a running ad-hoc command */
|
|
4690
|
-
cancelAdHocCommand: protectedProcedure.input(
|
|
4755
|
+
cancelAdHocCommand: protectedProcedure.input(z25.object({ id: z25.string().max(128), commandId: z25.string().max(128).optional() })).mutation(({ input }) => {
|
|
4691
4756
|
processManager.cancelAdHocCommand(input.id, input.commandId);
|
|
4692
4757
|
return { success: true };
|
|
4693
4758
|
}),
|
|
4694
4759
|
/** Execute an ad-hoc command and stream output into the process log */
|
|
4695
|
-
executeAdHocCommand: protectedProcedure.input(
|
|
4696
|
-
id:
|
|
4697
|
-
command:
|
|
4698
|
-
cwd:
|
|
4699
|
-
commandId:
|
|
4760
|
+
executeAdHocCommand: protectedProcedure.input(z25.object({
|
|
4761
|
+
id: z25.string().max(128),
|
|
4762
|
+
command: z25.string().min(1).max(4096),
|
|
4763
|
+
cwd: z25.string().max(4096).optional(),
|
|
4764
|
+
commandId: z25.string().max(128).optional()
|
|
4700
4765
|
})).mutation(async ({ input }) => {
|
|
4701
4766
|
const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
|
|
4702
4767
|
return result;
|
|
4703
4768
|
}),
|
|
4704
4769
|
/** List active log source types for a process */
|
|
4705
|
-
logSources: protectedProcedure.input(
|
|
4770
|
+
logSources: protectedProcedure.input(z25.object({ processId: z25.string().max(128) })).query(({ input }) => {
|
|
4706
4771
|
return processManager.getLogSourceTypes(input.processId);
|
|
4707
4772
|
}),
|
|
4708
4773
|
/** Get current metrics for a process */
|
|
4709
|
-
metrics: protectedProcedure.input(
|
|
4774
|
+
metrics: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(async ({ input }) => {
|
|
4710
4775
|
return processManager.getMetrics(input.id);
|
|
4711
4776
|
}),
|
|
4712
4777
|
/** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
|
|
4713
|
-
onLog: protectedProcedure.input(
|
|
4778
|
+
onLog: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4714
4779
|
const queue = [];
|
|
4715
4780
|
let resolve2 = null;
|
|
4716
4781
|
const handler = (batch) => {
|
|
@@ -4739,7 +4804,7 @@ var processRouter = router({
|
|
|
4739
4804
|
}
|
|
4740
4805
|
}),
|
|
4741
4806
|
/** Subscribe to real-time status changes */
|
|
4742
|
-
onStatus: protectedProcedure.input(
|
|
4807
|
+
onStatus: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4743
4808
|
console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
|
|
4744
4809
|
const queue = [];
|
|
4745
4810
|
let resolve2 = null;
|
|
@@ -4771,7 +4836,7 @@ var processRouter = router({
|
|
|
4771
4836
|
}
|
|
4772
4837
|
}),
|
|
4773
4838
|
/** Subscribe to real-time health status changes */
|
|
4774
|
-
onHealth: protectedProcedure.input(
|
|
4839
|
+
onHealth: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4775
4840
|
const queue = [];
|
|
4776
4841
|
let resolve2 = null;
|
|
4777
4842
|
const handler = (healthData) => {
|
|
@@ -4801,7 +4866,7 @@ var processRouter = router({
|
|
|
4801
4866
|
}
|
|
4802
4867
|
}),
|
|
4803
4868
|
/** Subscribe to real-time metrics */
|
|
4804
|
-
onMetrics: protectedProcedure.input(
|
|
4869
|
+
onMetrics: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4805
4870
|
const queue = [];
|
|
4806
4871
|
let resolve2 = null;
|
|
4807
4872
|
const handler = (metrics) => {
|
|
@@ -4976,6 +5041,9 @@ async function isCliAvailable(cli, timeoutMs = 5e3) {
|
|
|
4976
5041
|
});
|
|
4977
5042
|
}
|
|
4978
5043
|
|
|
5044
|
+
// ../../packages/shared/src/node/aes-gcm.ts
|
|
5045
|
+
import { randomBytes as randomBytes2, createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2 } from "crypto";
|
|
5046
|
+
|
|
4979
5047
|
// src/trpc/routers/health.ts
|
|
4980
5048
|
var startedAt = Date.now();
|
|
4981
5049
|
function getLanIp2() {
|
|
@@ -5022,7 +5090,7 @@ var healthRouter = router({
|
|
|
5022
5090
|
});
|
|
5023
5091
|
|
|
5024
5092
|
// src/trpc/routers/terminal.ts
|
|
5025
|
-
import { z as
|
|
5093
|
+
import { z as z26 } from "zod";
|
|
5026
5094
|
import { TRPCError as TRPCError3 } from "@trpc/server";
|
|
5027
5095
|
|
|
5028
5096
|
// src/services/terminal-manager.ts
|
|
@@ -5115,11 +5183,11 @@ var terminalManager = new TerminalManager();
|
|
|
5115
5183
|
// src/trpc/routers/terminal.ts
|
|
5116
5184
|
var terminalRouter = router({
|
|
5117
5185
|
/** Spawn a new PTY shell session, returns a sessionId */
|
|
5118
|
-
create: protectedProcedure.input(
|
|
5119
|
-
cwd:
|
|
5120
|
-
cols:
|
|
5121
|
-
rows:
|
|
5122
|
-
title:
|
|
5186
|
+
create: protectedProcedure.input(z26.object({
|
|
5187
|
+
cwd: z26.string().max(512).optional(),
|
|
5188
|
+
cols: z26.number().int().min(1).max(512).optional(),
|
|
5189
|
+
rows: z26.number().int().min(1).max(256).optional(),
|
|
5190
|
+
title: z26.string().max(128).optional()
|
|
5123
5191
|
})).mutation(({ input }) => {
|
|
5124
5192
|
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
|
|
5125
5193
|
return { sessionId };
|
|
@@ -5127,34 +5195,34 @@ var terminalRouter = router({
|
|
|
5127
5195
|
/** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
|
|
5128
5196
|
list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
|
|
5129
5197
|
/** Renommer un onglet */
|
|
5130
|
-
rename: protectedProcedure.input(
|
|
5198
|
+
rename: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128), title: z26.string().max(128) })).mutation(({ input }) => {
|
|
5131
5199
|
terminalManager.rename(input.sessionId, input.title);
|
|
5132
5200
|
return { ok: true };
|
|
5133
5201
|
}),
|
|
5134
5202
|
/** Write data (keystrokes) to a PTY session */
|
|
5135
|
-
write: protectedProcedure.input(
|
|
5203
|
+
write: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128), data: z26.string().max(65536) })).mutation(({ input }) => {
|
|
5136
5204
|
terminalManager.write(input.sessionId, input.data);
|
|
5137
5205
|
return { ok: true };
|
|
5138
5206
|
}),
|
|
5139
5207
|
/** Resize a PTY session */
|
|
5140
|
-
resize: protectedProcedure.input(
|
|
5141
|
-
sessionId:
|
|
5142
|
-
cols:
|
|
5143
|
-
rows:
|
|
5208
|
+
resize: protectedProcedure.input(z26.object({
|
|
5209
|
+
sessionId: z26.string().max(128),
|
|
5210
|
+
cols: z26.number().int().min(1).max(512),
|
|
5211
|
+
rows: z26.number().int().min(1).max(256)
|
|
5144
5212
|
})).mutation(({ input }) => {
|
|
5145
5213
|
terminalManager.resize(input.sessionId, input.cols, input.rows);
|
|
5146
5214
|
return { ok: true };
|
|
5147
5215
|
}),
|
|
5148
5216
|
/** Destroy a PTY session */
|
|
5149
|
-
destroy: protectedProcedure.input(
|
|
5217
|
+
destroy: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).mutation(({ input }) => {
|
|
5150
5218
|
terminalManager.destroy(input.sessionId);
|
|
5151
5219
|
return { ok: true };
|
|
5152
5220
|
}),
|
|
5153
5221
|
/** Stream PTY output for a session (async generator subscription) */
|
|
5154
|
-
onData: protectedProcedure.input(
|
|
5155
|
-
sessionId:
|
|
5222
|
+
onData: protectedProcedure.input(z26.object({
|
|
5223
|
+
sessionId: z26.string().max(128),
|
|
5156
5224
|
/** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
|
|
5157
|
-
replay:
|
|
5225
|
+
replay: z26.boolean().optional()
|
|
5158
5226
|
})).subscription(async function* ({ input }) {
|
|
5159
5227
|
const emitter = terminalManager.getEmitter(input.sessionId);
|
|
5160
5228
|
if (!emitter) {
|
|
@@ -5199,7 +5267,7 @@ var terminalRouter = router({
|
|
|
5199
5267
|
});
|
|
5200
5268
|
|
|
5201
5269
|
// src/trpc/routers/git.ts
|
|
5202
|
-
import { z as
|
|
5270
|
+
import { z as z27 } from "zod";
|
|
5203
5271
|
import { TRPCError as TRPCError4 } from "@trpc/server";
|
|
5204
5272
|
import { execFile as execFile6, spawn as spawn3 } from "child_process";
|
|
5205
5273
|
import { promisify as promisify3 } from "util";
|
|
@@ -5267,12 +5335,12 @@ async function sameGitRemote(a, b, resolveHost = resolveSshHost) {
|
|
|
5267
5335
|
var execFileAsync3 = promisify3(execFile6);
|
|
5268
5336
|
var GIT_TIMEOUT = 15e3;
|
|
5269
5337
|
var DIFF_MAX_BYTES = 512 * 1024;
|
|
5270
|
-
var CWD_SCHEMA =
|
|
5271
|
-
var SAFE_PATH_SCHEMA =
|
|
5338
|
+
var CWD_SCHEMA = z27.string().min(1).max(4096);
|
|
5339
|
+
var SAFE_PATH_SCHEMA = z27.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
|
|
5272
5340
|
message: "Path must be relative and not traverse up"
|
|
5273
5341
|
});
|
|
5274
|
-
var REMOTE_SCHEMA =
|
|
5275
|
-
var BRANCH_SCHEMA =
|
|
5342
|
+
var REMOTE_SCHEMA = z27.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
|
|
5343
|
+
var BRANCH_SCHEMA = z27.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
|
|
5276
5344
|
function gitSafeEnv() {
|
|
5277
5345
|
const env2 = {
|
|
5278
5346
|
GIT_TERMINAL_PROMPT: "0",
|
|
@@ -5390,10 +5458,10 @@ async function getGitStatus(cwd) {
|
|
|
5390
5458
|
}
|
|
5391
5459
|
var gitRouter = router({
|
|
5392
5460
|
/** Check if a working directory exists and optionally verify its git remote */
|
|
5393
|
-
checkCwd: protectedProcedure.input(
|
|
5461
|
+
checkCwd: protectedProcedure.input(z27.object({
|
|
5394
5462
|
cwd: CWD_SCHEMA,
|
|
5395
|
-
remote:
|
|
5396
|
-
checkReachability:
|
|
5463
|
+
remote: z27.string().max(2048).optional(),
|
|
5464
|
+
checkReachability: z27.boolean().optional()
|
|
5397
5465
|
})).query(async ({ input }) => {
|
|
5398
5466
|
const resolvedCwd = expandEnvVar(input.cwd);
|
|
5399
5467
|
const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
|
|
@@ -5415,8 +5483,8 @@ var gitRouter = router({
|
|
|
5415
5483
|
return { exists, actualRemote, remoteMatches, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
|
|
5416
5484
|
}),
|
|
5417
5485
|
/** Clone a git repository into a target directory */
|
|
5418
|
-
clone: protectedProcedure.input(
|
|
5419
|
-
remote:
|
|
5486
|
+
clone: protectedProcedure.input(z27.object({
|
|
5487
|
+
remote: z27.string().min(1).max(2048),
|
|
5420
5488
|
cwd: CWD_SCHEMA
|
|
5421
5489
|
})).mutation(async ({ input }) => {
|
|
5422
5490
|
const absoluteCwd = resolvePath2(expandEnvVar(input.cwd));
|
|
@@ -5437,13 +5505,13 @@ var gitRouter = router({
|
|
|
5437
5505
|
return { success: true };
|
|
5438
5506
|
}),
|
|
5439
5507
|
/** Get full git status */
|
|
5440
|
-
status: protectedProcedure.input(
|
|
5508
|
+
status: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5441
5509
|
const cwd = assertCwdExists(input.cwd);
|
|
5442
5510
|
await assertGitRepo(cwd);
|
|
5443
5511
|
return getGitStatus(cwd);
|
|
5444
5512
|
}),
|
|
5445
5513
|
/** Watch .git/ for changes and stream updated status */
|
|
5446
|
-
onStatusChange: protectedProcedure.input(
|
|
5514
|
+
onStatusChange: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
|
|
5447
5515
|
const cwd = assertCwdExists(input.cwd);
|
|
5448
5516
|
await assertGitRepo(cwd);
|
|
5449
5517
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
@@ -5494,7 +5562,7 @@ var gitRouter = router({
|
|
|
5494
5562
|
}
|
|
5495
5563
|
}),
|
|
5496
5564
|
/** Get commit log */
|
|
5497
|
-
log: protectedProcedure.input(
|
|
5565
|
+
log: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, limit: z27.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
|
|
5498
5566
|
const cwd = assertCwdExists(input.cwd);
|
|
5499
5567
|
await assertGitRepo(cwd);
|
|
5500
5568
|
const format = "%H%h%an%ae%ai%s";
|
|
@@ -5505,7 +5573,7 @@ var gitRouter = router({
|
|
|
5505
5573
|
});
|
|
5506
5574
|
}),
|
|
5507
5575
|
/** List local and remote branches */
|
|
5508
|
-
branches: protectedProcedure.input(
|
|
5576
|
+
branches: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5509
5577
|
const cwd = assertCwdExists(input.cwd);
|
|
5510
5578
|
await assertGitRepo(cwd);
|
|
5511
5579
|
const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5517,7 +5585,7 @@ var gitRouter = router({
|
|
|
5517
5585
|
return { current, branches };
|
|
5518
5586
|
}),
|
|
5519
5587
|
/** Checkout a branch */
|
|
5520
|
-
checkout: protectedProcedure.input(
|
|
5588
|
+
checkout: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z27.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5521
5589
|
const cwd = assertCwdExists(input.cwd);
|
|
5522
5590
|
await assertGitRepo(cwd);
|
|
5523
5591
|
const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
|
|
@@ -5525,42 +5593,42 @@ var gitRouter = router({
|
|
|
5525
5593
|
return { ok: true };
|
|
5526
5594
|
}),
|
|
5527
5595
|
/** Stage files */
|
|
5528
|
-
stage: protectedProcedure.input(
|
|
5596
|
+
stage: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5529
5597
|
const cwd = assertCwdExists(input.cwd);
|
|
5530
5598
|
await assertGitRepo(cwd);
|
|
5531
5599
|
await git(["add", "--", ...input.paths], cwd);
|
|
5532
5600
|
return { ok: true };
|
|
5533
5601
|
}),
|
|
5534
5602
|
/** Stage all files */
|
|
5535
|
-
stageAll: protectedProcedure.input(
|
|
5603
|
+
stageAll: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5536
5604
|
const cwd = assertCwdExists(input.cwd);
|
|
5537
5605
|
await assertGitRepo(cwd);
|
|
5538
5606
|
await git(["add", "-A"], cwd);
|
|
5539
5607
|
return { ok: true };
|
|
5540
5608
|
}),
|
|
5541
5609
|
/** Unstage files */
|
|
5542
|
-
unstage: protectedProcedure.input(
|
|
5610
|
+
unstage: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5543
5611
|
const cwd = assertCwdExists(input.cwd);
|
|
5544
5612
|
await assertGitRepo(cwd);
|
|
5545
5613
|
await git(["restore", "--staged", "--", ...input.paths], cwd);
|
|
5546
5614
|
return { ok: true };
|
|
5547
5615
|
}),
|
|
5548
5616
|
/** Unstage all files */
|
|
5549
|
-
unstageAll: protectedProcedure.input(
|
|
5617
|
+
unstageAll: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5550
5618
|
const cwd = assertCwdExists(input.cwd);
|
|
5551
5619
|
await assertGitRepo(cwd);
|
|
5552
5620
|
await git(["reset", "--"], cwd);
|
|
5553
5621
|
return { ok: true };
|
|
5554
5622
|
}),
|
|
5555
5623
|
/** Commit staged changes */
|
|
5556
|
-
commit: protectedProcedure.input(
|
|
5624
|
+
commit: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, message: z27.string().min(1).max(4096) })).mutation(async ({ input }) => {
|
|
5557
5625
|
const cwd = assertCwdExists(input.cwd);
|
|
5558
5626
|
await assertGitRepo(cwd);
|
|
5559
5627
|
const output = await git(["commit", "-m", input.message], cwd);
|
|
5560
5628
|
return { ok: true, output: output.trim() };
|
|
5561
5629
|
}),
|
|
5562
5630
|
/** Push to remote */
|
|
5563
|
-
push: protectedProcedure.input(
|
|
5631
|
+
push: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z27.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5564
5632
|
const cwd = assertCwdExists(input.cwd);
|
|
5565
5633
|
await assertGitRepo(cwd);
|
|
5566
5634
|
const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5569,25 +5637,25 @@ var gitRouter = router({
|
|
|
5569
5637
|
return { ok: true, output: output.trim() };
|
|
5570
5638
|
}),
|
|
5571
5639
|
/** Pull from remote */
|
|
5572
|
-
pull: protectedProcedure.input(
|
|
5640
|
+
pull: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5573
5641
|
const cwd = assertCwdExists(input.cwd);
|
|
5574
5642
|
await assertGitRepo(cwd);
|
|
5575
5643
|
const output = await git(["pull", input.remote], cwd);
|
|
5576
5644
|
return { ok: true, output: output.trim() };
|
|
5577
5645
|
}),
|
|
5578
5646
|
/** Fetch from remote */
|
|
5579
|
-
fetch: protectedProcedure.input(
|
|
5647
|
+
fetch: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5580
5648
|
const cwd = assertCwdExists(input.cwd);
|
|
5581
5649
|
await assertGitRepo(cwd);
|
|
5582
5650
|
const output = await git(["fetch", input.remote], cwd);
|
|
5583
5651
|
return { ok: true, output: output.trim() };
|
|
5584
5652
|
}),
|
|
5585
5653
|
/** Get diff for a file or the whole index */
|
|
5586
|
-
diff: protectedProcedure.input(
|
|
5654
|
+
diff: protectedProcedure.input(z27.object({
|
|
5587
5655
|
cwd: CWD_SCHEMA,
|
|
5588
|
-
path:
|
|
5589
|
-
staged:
|
|
5590
|
-
untracked:
|
|
5656
|
+
path: z27.string().max(4096).optional(),
|
|
5657
|
+
staged: z27.boolean().default(false),
|
|
5658
|
+
untracked: z27.boolean().default(false)
|
|
5591
5659
|
})).query(async ({ input }) => {
|
|
5592
5660
|
const cwd = assertCwdExists(input.cwd);
|
|
5593
5661
|
await assertGitRepo(cwd);
|
|
@@ -5635,21 +5703,21 @@ var gitRouter = router({
|
|
|
5635
5703
|
};
|
|
5636
5704
|
}),
|
|
5637
5705
|
/** Discard changes to working tree files */
|
|
5638
|
-
discard: protectedProcedure.input(
|
|
5706
|
+
discard: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5639
5707
|
const cwd = assertCwdExists(input.cwd);
|
|
5640
5708
|
await assertGitRepo(cwd);
|
|
5641
5709
|
await git(["restore", "--", ...input.paths], cwd);
|
|
5642
5710
|
return { ok: true };
|
|
5643
5711
|
}),
|
|
5644
5712
|
/** Get staged diff (used by server for AI commit message generation) */
|
|
5645
|
-
stagedDiff: protectedProcedure.input(
|
|
5713
|
+
stagedDiff: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5646
5714
|
const cwd = assertCwdExists(input.cwd);
|
|
5647
5715
|
await assertGitRepo(cwd);
|
|
5648
5716
|
const diff = await git(["diff", "--staged"], cwd, true);
|
|
5649
5717
|
return { diff: diff.slice(0, 3e4) };
|
|
5650
5718
|
}),
|
|
5651
5719
|
/** Merge a branch into the current branch */
|
|
5652
|
-
merge: protectedProcedure.input(
|
|
5720
|
+
merge: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z27.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5653
5721
|
const cwd = assertCwdExists(input.cwd);
|
|
5654
5722
|
await assertGitRepo(cwd);
|
|
5655
5723
|
const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
|
|
@@ -5657,14 +5725,14 @@ var gitRouter = router({
|
|
|
5657
5725
|
return { ok: true, output: output.trim() };
|
|
5658
5726
|
}),
|
|
5659
5727
|
/** Rebase current branch onto another branch */
|
|
5660
|
-
rebase: protectedProcedure.input(
|
|
5728
|
+
rebase: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
|
|
5661
5729
|
const cwd = assertCwdExists(input.cwd);
|
|
5662
5730
|
await assertGitRepo(cwd);
|
|
5663
5731
|
const output = await git(["rebase", input.branch], cwd);
|
|
5664
5732
|
return { ok: true, output: output.trim() };
|
|
5665
5733
|
}),
|
|
5666
5734
|
/** List remotes */
|
|
5667
|
-
remotes: protectedProcedure.input(
|
|
5735
|
+
remotes: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5668
5736
|
const cwd = assertCwdExists(input.cwd);
|
|
5669
5737
|
await assertGitRepo(cwd);
|
|
5670
5738
|
const output = await git(["remote", "-v"], cwd, true);
|
|
@@ -5682,7 +5750,7 @@ var gitRouter = router({
|
|
|
5682
5750
|
return remotes;
|
|
5683
5751
|
}),
|
|
5684
5752
|
/** List stash entries */
|
|
5685
|
-
stashList: protectedProcedure.input(
|
|
5753
|
+
stashList: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5686
5754
|
const cwd = assertCwdExists(input.cwd);
|
|
5687
5755
|
await assertGitRepo(cwd);
|
|
5688
5756
|
const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
|
|
@@ -5695,10 +5763,10 @@ var gitRouter = router({
|
|
|
5695
5763
|
return entries;
|
|
5696
5764
|
}),
|
|
5697
5765
|
/** Stash current changes */
|
|
5698
|
-
stashPush: protectedProcedure.input(
|
|
5766
|
+
stashPush: protectedProcedure.input(z27.object({
|
|
5699
5767
|
cwd: CWD_SCHEMA,
|
|
5700
|
-
message:
|
|
5701
|
-
includeUntracked:
|
|
5768
|
+
message: z27.string().max(4096).optional(),
|
|
5769
|
+
includeUntracked: z27.boolean().default(true)
|
|
5702
5770
|
})).mutation(async ({ input }) => {
|
|
5703
5771
|
const cwd = assertCwdExists(input.cwd);
|
|
5704
5772
|
await assertGitRepo(cwd);
|
|
@@ -5709,21 +5777,21 @@ var gitRouter = router({
|
|
|
5709
5777
|
return { ok: true, output: output.trim() };
|
|
5710
5778
|
}),
|
|
5711
5779
|
/** Apply a stash entry and remove it from the list */
|
|
5712
|
-
stashPop: protectedProcedure.input(
|
|
5780
|
+
stashPop: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5713
5781
|
const cwd = assertCwdExists(input.cwd);
|
|
5714
5782
|
await assertGitRepo(cwd);
|
|
5715
5783
|
const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
|
|
5716
5784
|
return { ok: true, output: output.trim() };
|
|
5717
5785
|
}),
|
|
5718
5786
|
/** Apply a stash entry without removing it from the list */
|
|
5719
|
-
stashApply: protectedProcedure.input(
|
|
5787
|
+
stashApply: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5720
5788
|
const cwd = assertCwdExists(input.cwd);
|
|
5721
5789
|
await assertGitRepo(cwd);
|
|
5722
5790
|
const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
|
|
5723
5791
|
return { ok: true, output: output.trim() };
|
|
5724
5792
|
}),
|
|
5725
5793
|
/** Drop a stash entry */
|
|
5726
|
-
stashDrop: protectedProcedure.input(
|
|
5794
|
+
stashDrop: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5727
5795
|
const cwd = assertCwdExists(input.cwd);
|
|
5728
5796
|
await assertGitRepo(cwd);
|
|
5729
5797
|
const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
|
|
@@ -5756,7 +5824,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
|
|
|
5756
5824
|
}
|
|
5757
5825
|
|
|
5758
5826
|
// src/trpc/routers/ai.ts
|
|
5759
|
-
import { z as
|
|
5827
|
+
import { z as z28 } from "zod";
|
|
5760
5828
|
import { TRPCError as TRPCError5 } from "@trpc/server";
|
|
5761
5829
|
|
|
5762
5830
|
// src/services/ai-spawn-manager.ts
|
|
@@ -6451,25 +6519,25 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
|
|
|
6451
6519
|
var MAX_CONTEXT_TOTAL_BYTES = 5e6;
|
|
6452
6520
|
var aiRouter = router({
|
|
6453
6521
|
/** Spawn an AI CLI process. Returns a spawnId for streaming. */
|
|
6454
|
-
spawn: protectedProcedure.input(
|
|
6455
|
-
cli:
|
|
6456
|
-
args:
|
|
6457
|
-
env:
|
|
6458
|
-
cwd:
|
|
6459
|
-
stdinData:
|
|
6460
|
-
enableMcp:
|
|
6461
|
-
mcpApiBaseUrl:
|
|
6462
|
-
mcpApiToken:
|
|
6463
|
-
mcpProjectId:
|
|
6464
|
-
mcpOrgId:
|
|
6522
|
+
spawn: protectedProcedure.input(z28.object({
|
|
6523
|
+
cli: z28.string().max(64),
|
|
6524
|
+
args: z28.array(z28.string().max(5e5)),
|
|
6525
|
+
env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional(),
|
|
6526
|
+
cwd: z28.string().max(4096).optional(),
|
|
6527
|
+
stdinData: z28.string().max(1e7).optional(),
|
|
6528
|
+
enableMcp: z28.boolean().optional(),
|
|
6529
|
+
mcpApiBaseUrl: z28.string().max(512).optional(),
|
|
6530
|
+
mcpApiToken: z28.string().max(8192).optional(),
|
|
6531
|
+
mcpProjectId: z28.string().max(128).optional(),
|
|
6532
|
+
mcpOrgId: z28.string().max(128).optional()
|
|
6465
6533
|
})).mutation(({ input }) => {
|
|
6466
6534
|
const spawnId = aiSpawnManager.spawn(input);
|
|
6467
6535
|
return { spawnId };
|
|
6468
6536
|
}),
|
|
6469
6537
|
/** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
|
|
6470
|
-
stream: protectedProcedure.input(
|
|
6471
|
-
spawnId:
|
|
6472
|
-
fromOffset:
|
|
6538
|
+
stream: protectedProcedure.input(z28.object({
|
|
6539
|
+
spawnId: z28.string().max(128),
|
|
6540
|
+
fromOffset: z28.number().int().min(0).default(0)
|
|
6473
6541
|
})).subscription(async function* ({ input }) {
|
|
6474
6542
|
try {
|
|
6475
6543
|
for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
|
|
@@ -6483,41 +6551,41 @@ var aiRouter = router({
|
|
|
6483
6551
|
}
|
|
6484
6552
|
}),
|
|
6485
6553
|
/** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
|
|
6486
|
-
spawnPty: protectedProcedure.input(
|
|
6487
|
-
cli:
|
|
6488
|
-
args:
|
|
6489
|
-
env:
|
|
6490
|
-
cwd:
|
|
6491
|
-
cols:
|
|
6492
|
-
rows:
|
|
6493
|
-
sessionId:
|
|
6494
|
-
enableMcp:
|
|
6495
|
-
mcpApiBaseUrl:
|
|
6496
|
-
mcpApiToken:
|
|
6497
|
-
mcpProjectId:
|
|
6498
|
-
mcpOrgId:
|
|
6554
|
+
spawnPty: protectedProcedure.input(z28.object({
|
|
6555
|
+
cli: z28.string().max(64),
|
|
6556
|
+
args: z28.array(z28.string().max(5e5)),
|
|
6557
|
+
env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional(),
|
|
6558
|
+
cwd: z28.string().max(4096).optional(),
|
|
6559
|
+
cols: z28.number().int().min(1).max(1e3).optional(),
|
|
6560
|
+
rows: z28.number().int().min(1).max(1e3).optional(),
|
|
6561
|
+
sessionId: z28.string().max(128).optional(),
|
|
6562
|
+
enableMcp: z28.boolean().optional(),
|
|
6563
|
+
mcpApiBaseUrl: z28.string().max(512).optional(),
|
|
6564
|
+
mcpApiToken: z28.string().max(8192).optional(),
|
|
6565
|
+
mcpProjectId: z28.string().max(128).optional(),
|
|
6566
|
+
mcpOrgId: z28.string().max(128).optional()
|
|
6499
6567
|
})).mutation(({ input }) => {
|
|
6500
6568
|
const spawnId = aiSpawnManager.spawnPty(input);
|
|
6501
6569
|
return { spawnId };
|
|
6502
6570
|
}),
|
|
6503
6571
|
/** Find a running PTY spawn by its logical sessionId (for re-attach). */
|
|
6504
|
-
findPtyBySession: protectedProcedure.input(
|
|
6572
|
+
findPtyBySession: protectedProcedure.input(z28.object({ sessionId: z28.string().max(128) })).query(({ input }) => {
|
|
6505
6573
|
return aiSpawnManager.findPtyBySessionId(input.sessionId);
|
|
6506
6574
|
}),
|
|
6507
6575
|
/** Write input to a PTY spawn (user keystrokes). */
|
|
6508
|
-
writePty: protectedProcedure.input(
|
|
6509
|
-
spawnId:
|
|
6510
|
-
data:
|
|
6576
|
+
writePty: protectedProcedure.input(z28.object({
|
|
6577
|
+
spawnId: z28.string().max(128),
|
|
6578
|
+
data: z28.string().max(1e6)
|
|
6511
6579
|
})).mutation(({ input }) => {
|
|
6512
6580
|
const ok = aiSpawnManager.writePty(input.spawnId, input.data);
|
|
6513
6581
|
return { ok };
|
|
6514
6582
|
}),
|
|
6515
6583
|
/** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
|
|
6516
|
-
writeContextFiles: protectedProcedure.input(
|
|
6517
|
-
sessionId:
|
|
6518
|
-
files:
|
|
6519
|
-
name:
|
|
6520
|
-
content:
|
|
6584
|
+
writeContextFiles: protectedProcedure.input(z28.object({
|
|
6585
|
+
sessionId: z28.string().min(1).max(128),
|
|
6586
|
+
files: z28.array(z28.object({
|
|
6587
|
+
name: z28.string().min(1).max(256),
|
|
6588
|
+
content: z28.string().max(MAX_CONTEXT_FILE_BYTES)
|
|
6521
6589
|
})).min(1).max(MAX_CONTEXT_FILES)
|
|
6522
6590
|
}).refine(
|
|
6523
6591
|
(val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
|
|
@@ -6532,25 +6600,25 @@ var aiRouter = router({
|
|
|
6532
6600
|
* which clipboard method (if any) succeeded — caller decides whether to send
|
|
6533
6601
|
* Ctrl+V (\x16) or inject `@<path>` into the PTY.
|
|
6534
6602
|
*/
|
|
6535
|
-
pasteImage: protectedProcedure.input(
|
|
6536
|
-
sessionId:
|
|
6537
|
-
mimeType:
|
|
6538
|
-
base64:
|
|
6603
|
+
pasteImage: protectedProcedure.input(z28.object({
|
|
6604
|
+
sessionId: z28.string().max(128).optional(),
|
|
6605
|
+
mimeType: z28.string().max(64),
|
|
6606
|
+
base64: z28.string().max(15e6)
|
|
6539
6607
|
})).mutation(async ({ input }) => {
|
|
6540
6608
|
const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
|
|
6541
6609
|
return res;
|
|
6542
6610
|
}),
|
|
6543
6611
|
/** Resize a PTY spawn. */
|
|
6544
|
-
resizePty: protectedProcedure.input(
|
|
6545
|
-
spawnId:
|
|
6546
|
-
cols:
|
|
6547
|
-
rows:
|
|
6612
|
+
resizePty: protectedProcedure.input(z28.object({
|
|
6613
|
+
spawnId: z28.string().max(128),
|
|
6614
|
+
cols: z28.number().int().min(1).max(1e3),
|
|
6615
|
+
rows: z28.number().int().min(1).max(1e3)
|
|
6548
6616
|
})).mutation(({ input }) => {
|
|
6549
6617
|
const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
|
|
6550
6618
|
return { ok };
|
|
6551
6619
|
}),
|
|
6552
6620
|
/** Kill a running AI spawn. */
|
|
6553
|
-
kill: protectedProcedure.input(
|
|
6621
|
+
kill: protectedProcedure.input(z28.object({ spawnId: z28.string().max(128) })).mutation(({ input }) => {
|
|
6554
6622
|
const killed = aiSpawnManager.kill(input.spawnId);
|
|
6555
6623
|
return { ok: killed };
|
|
6556
6624
|
}),
|
|
@@ -6559,23 +6627,23 @@ var aiRouter = router({
|
|
|
6559
6627
|
return aiSpawnManager.list();
|
|
6560
6628
|
}),
|
|
6561
6629
|
/** Acknowledge receipt of all data — agent can clean up after TTL. */
|
|
6562
|
-
ack: protectedProcedure.input(
|
|
6630
|
+
ack: protectedProcedure.input(z28.object({ spawnId: z28.string().max(128) })).mutation(({ input }) => {
|
|
6563
6631
|
const acked = aiSpawnManager.ack(input.spawnId);
|
|
6564
6632
|
return { ok: acked };
|
|
6565
6633
|
}),
|
|
6566
6634
|
/** Forward a JSON-RPC request to the local codex app-server. */
|
|
6567
|
-
codexRequest: protectedProcedure.input(
|
|
6568
|
-
method:
|
|
6569
|
-
params:
|
|
6570
|
-
env:
|
|
6635
|
+
codexRequest: protectedProcedure.input(z28.object({
|
|
6636
|
+
method: z28.string().max(256),
|
|
6637
|
+
params: z28.record(z28.string(), z28.unknown()).default({}),
|
|
6638
|
+
env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional()
|
|
6571
6639
|
})).mutation(async ({ input }) => {
|
|
6572
6640
|
await codexAppServerManager.ensureConnected(input.env);
|
|
6573
6641
|
const result = await codexAppServerManager.sendRequest(input.method, input.params);
|
|
6574
6642
|
return { result };
|
|
6575
6643
|
}),
|
|
6576
6644
|
/** Stream notifications from the codex app-server. Optionally filter by threadId. */
|
|
6577
|
-
codexNotifications: protectedProcedure.input(
|
|
6578
|
-
threadId:
|
|
6645
|
+
codexNotifications: protectedProcedure.input(z28.object({
|
|
6646
|
+
threadId: z28.string().max(256).optional()
|
|
6579
6647
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
6580
6648
|
await codexAppServerManager.ensureConnected();
|
|
6581
6649
|
const queue = [];
|
|
@@ -6612,13 +6680,13 @@ var aiRouter = router({
|
|
|
6612
6680
|
});
|
|
6613
6681
|
|
|
6614
6682
|
// src/trpc/routers/wiki.ts
|
|
6615
|
-
import { z as
|
|
6683
|
+
import { z as z29 } from "zod";
|
|
6616
6684
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
6617
6685
|
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
6618
6686
|
import { dirname as dirname3 } from "path";
|
|
6619
6687
|
import { resolve as resolvePath3, join as join6, relative, sep } from "path";
|
|
6620
|
-
var CWD_SCHEMA2 =
|
|
6621
|
-
var REL_PATH_SCHEMA =
|
|
6688
|
+
var CWD_SCHEMA2 = z29.string().min(1).max(4096);
|
|
6689
|
+
var REL_PATH_SCHEMA = z29.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
|
|
6622
6690
|
message: "Path must be a relative path without traversal"
|
|
6623
6691
|
});
|
|
6624
6692
|
var MAX_FILES = 500;
|
|
@@ -6638,9 +6706,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
|
6638
6706
|
"target",
|
|
6639
6707
|
"out"
|
|
6640
6708
|
]);
|
|
6641
|
-
var RepoEntrySchema =
|
|
6642
|
-
|
|
6643
|
-
|
|
6709
|
+
var RepoEntrySchema = z29.lazy(() => z29.union([
|
|
6710
|
+
z29.object({ type: z29.literal("file"), name: z29.string(), path: z29.string() }),
|
|
6711
|
+
z29.object({ type: z29.literal("dir"), name: z29.string(), path: z29.string(), children: z29.array(RepoEntrySchema) })
|
|
6644
6712
|
]));
|
|
6645
6713
|
async function walkMarkdown(root, dir, depth, counter) {
|
|
6646
6714
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
@@ -6710,13 +6778,13 @@ async function resolveRoot(cwd) {
|
|
|
6710
6778
|
}
|
|
6711
6779
|
}
|
|
6712
6780
|
var wikiRouter = router({
|
|
6713
|
-
listRepoMarkdown: protectedProcedure.input(
|
|
6781
|
+
listRepoMarkdown: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
6714
6782
|
const root = await resolveRoot(input.cwd);
|
|
6715
6783
|
const counter = { n: 0 };
|
|
6716
6784
|
const entries = await walkMarkdown(root, root, 0, counter);
|
|
6717
6785
|
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
6718
6786
|
}),
|
|
6719
|
-
readRepoMarkdown: protectedProcedure.input(
|
|
6787
|
+
readRepoMarkdown: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
6720
6788
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6721
6789
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
6722
6790
|
}
|
|
@@ -6742,10 +6810,10 @@ var wikiRouter = router({
|
|
|
6742
6810
|
const content = await readFile2(realTarget, "utf-8");
|
|
6743
6811
|
return { path: input.path, content };
|
|
6744
6812
|
}),
|
|
6745
|
-
writeMarkdown: protectedProcedure.input(
|
|
6813
|
+
writeMarkdown: protectedProcedure.input(z29.object({
|
|
6746
6814
|
cwd: CWD_SCHEMA2,
|
|
6747
6815
|
path: REL_PATH_SCHEMA,
|
|
6748
|
-
content:
|
|
6816
|
+
content: z29.string().max(5e6)
|
|
6749
6817
|
})).mutation(async ({ input }) => {
|
|
6750
6818
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6751
6819
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
@@ -6756,7 +6824,7 @@ var wikiRouter = router({
|
|
|
6756
6824
|
await writeFile6(target, input.content, "utf-8");
|
|
6757
6825
|
return { path: input.path, ok: true };
|
|
6758
6826
|
}),
|
|
6759
|
-
createFile: protectedProcedure.input(
|
|
6827
|
+
createFile: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6760
6828
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6761
6829
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
6762
6830
|
}
|
|
@@ -6772,13 +6840,13 @@ var wikiRouter = router({
|
|
|
6772
6840
|
await writeFile6(target, "", "utf-8");
|
|
6773
6841
|
return { path: input.path, ok: true };
|
|
6774
6842
|
}),
|
|
6775
|
-
createDir: protectedProcedure.input(
|
|
6843
|
+
createDir: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6776
6844
|
const root = await resolveRoot(input.cwd);
|
|
6777
6845
|
const target = await resolveSafePath(root, input.path, false);
|
|
6778
6846
|
await mkdir6(target, { recursive: true });
|
|
6779
6847
|
return { path: input.path, ok: true };
|
|
6780
6848
|
}),
|
|
6781
|
-
renamePath: protectedProcedure.input(
|
|
6849
|
+
renamePath: protectedProcedure.input(z29.object({
|
|
6782
6850
|
cwd: CWD_SCHEMA2,
|
|
6783
6851
|
fromPath: REL_PATH_SCHEMA,
|
|
6784
6852
|
toPath: REL_PATH_SCHEMA
|
|
@@ -6796,14 +6864,14 @@ var wikiRouter = router({
|
|
|
6796
6864
|
await rename2(from, to);
|
|
6797
6865
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6798
6866
|
}),
|
|
6799
|
-
ensureRoot: protectedProcedure.input(
|
|
6867
|
+
ensureRoot: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
6800
6868
|
const expanded = expandEnvVar(input.cwd);
|
|
6801
6869
|
const abs = resolvePath3(expanded);
|
|
6802
6870
|
await mkdir6(abs, { recursive: true });
|
|
6803
6871
|
const root = await realpath(abs);
|
|
6804
6872
|
return { root, ok: true };
|
|
6805
6873
|
}),
|
|
6806
|
-
deletePath: protectedProcedure.input(
|
|
6874
|
+
deletePath: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6807
6875
|
const root = await resolveRoot(input.cwd);
|
|
6808
6876
|
const target = await resolveSafePath(root, input.path, true);
|
|
6809
6877
|
if (target === root) {
|