@runeya/runeya 2.0.130 → 2.0.132
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 +247 -177
- package/agent/index.js.map +1 -1
- package/agent-manager-J75NZ6MN.js +11 -0
- package/{chat-6ETYBINN.js → chat-ICUWJZEX.js} +7 -7
- package/{chunk-TTJNHZ6U.js → chunk-24UJRQRM.js} +2 -2
- package/{chunk-J2L6VONF.js → chunk-3HGTIUGB.js} +13 -53
- package/chunk-3HGTIUGB.js.map +1 -0
- package/{chunk-B7MABGQN.js → chunk-4RMM2OUU.js} +29 -2
- package/chunk-4RMM2OUU.js.map +1 -0
- package/{chunk-K2KSZRSI.js → chunk-PVLDFBL6.js} +6 -6
- package/{chunk-RDE3X3J4.js → chunk-RLLUJCPQ.js} +96 -13
- package/chunk-RLLUJCPQ.js.map +1 -0
- package/{chunk-7GBSCYXU.js → chunk-WN36W5OW.js} +81 -14
- package/chunk-WN36W5OW.js.map +1 -0
- package/{companion-SH4HLD6G.js → companion-IYK2652T.js} +5 -4
- package/{desktop-launcher-7UZF7PFH.js → desktop-launcher-GHCALSOS.js} +2 -2
- package/index.js +5 -5
- package/mcp-server/index.js +134 -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-3G5RHW3X.js} +3 -3
- package/{src-BNWVTXCY.js → src-FS7Y4DA7.js} +43 -15
- package/src-FS7Y4DA7.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-ojzSMuCC.js → AgentScalarChatInterface.vue-CImJBBKk.js} +1 -1
- package/web/assets/{AgentTerminalPage-Cf-ymD9E.js → AgentTerminalPage-iRrYZG3N.js} +1 -1
- package/web/assets/AiChatPage-DWAuKlmg.js +1 -0
- package/web/assets/{AppLayout-YtDku8pN.js → AppLayout-CkZbU0SI.js} +1 -1
- package/web/assets/{AuditPage-DCVZLRz4.js → AuditPage-C-yVNrOi.js} +1 -1
- package/web/assets/{CloudAccountPage-BOqt_ByJ.js → CloudAccountPage-7XqPLVAS.js} +1 -1
- package/web/assets/CloudAccountPage-Cxo7nX-K.js +1 -0
- package/web/assets/{CloudMessagingPage-BtlnnNf8.js → CloudMessagingPage-CZBpneaV.js} +1 -1
- package/web/assets/{DashboardPage-BOxdzarH.js → DashboardPage-CBZZyVwY.js} +1 -1
- package/web/assets/{DirectoryPickerDialog-B4MzYK-Y.js → DirectoryPickerDialog-1MThX25G.js} +1 -1
- package/web/assets/{EditorIcon-DAx2QpZA.js → EditorIcon-BVisg2uv.js} +1 -1
- package/web/assets/{EnvironmentForm-Cgcc_56Z.js → EnvironmentForm-C82fYWhW.js} +1 -1
- package/web/assets/{EnvironmentFormPage-n7m6dJUn.js → EnvironmentFormPage-BVOpMMJ7.js} +1 -1
- package/web/assets/{EnvironmentListPage-DS6s6UQk.js → EnvironmentListPage-CPRmFtVH.js} +1 -1
- package/web/assets/KanbanBoardPage-BmJwTFE8.css +1 -0
- package/web/assets/KanbanBoardPage-pzBPUjj2.js +4 -0
- package/web/assets/KanbanListPage-Cy0eP5v1.js +1 -0
- package/web/assets/KanbanListPage-pCWYPwBv.css +1 -0
- package/web/assets/{LaunchProjectPage-BFOzRnGw.js → LaunchProjectPage-Bn_wU_QT.js} +1 -1
- package/web/assets/{LaunchServicesPage-D7FmbH2H.js → LaunchServicesPage-BuxokNH7.js} +1 -1
- package/web/assets/{LogViewer-BbbpNT7v.js → LogViewer-DFPxgP8T.js} +1 -1
- package/web/assets/{OrgKeyPrompt-BGlTQGBE.js → OrgKeyPrompt-B8qmru6I.js} +1 -1
- package/web/assets/{OrgLogo-DfRefdu8.js → OrgLogo-9eOcBM3O.js} +1 -1
- package/web/assets/{ProcessControls-ByXJUYXz.js → ProcessControls-BA9IDUMF.js} +1 -1
- package/web/assets/{ProcessDetailPage-6q8wgWEP.js → ProcessDetailPage-CnOdgJXS.js} +1 -1
- package/web/assets/{ProcessMetrics-o6TQkXTa.js → ProcessMetrics-fFZhpyqE.js} +1 -1
- package/web/assets/{RandomJobTestPage-DuCKCB_n.js → RandomJobTestPage-Cw5KA5rW.js} +1 -1
- package/web/assets/{ScenarioEditorPage-ZCVivzeZ.js → ScenarioEditorPage-DY9Sfei7.js} +1 -1
- package/web/assets/{SendToChatDialog-CFd1Bubz.js → SendToChatDialog-DLR7jXBG.js} +1 -1
- package/web/assets/{ServiceControlsBar-B-3OrP1t.js → ServiceControlsBar-szGNMHjF.js} +1 -1
- package/web/assets/{ServiceDetailPage-Bm53GpUX.js → ServiceDetailPage-BXZ2tvHn.js} +1 -1
- package/web/assets/{ServiceFormPage-B5_95jOM.js → ServiceFormPage-B6oUWP9J.js} +1 -1
- package/web/assets/{SettingsPage-7Thq96Wn.js → SettingsPage-95JC2bIP.js} +4 -4
- package/web/assets/{UnlockPage-BXbKs3QZ.js → UnlockPage-P4gYB5LT.js} +1 -1
- package/web/assets/{VaultMigrationPage-h6NgaEOh.js → VaultMigrationPage-CQH54K0y.js} +1 -1
- package/web/assets/{VersionBadge-Bh8iLmG8.js → VersionBadge-D-Zv0XzJ.js} +1 -1
- package/web/assets/WikiPage-DzFvtMxw.js +1 -0
- package/web/assets/{WikiView-B905tAss.js → WikiView-BLoRr_y4.js} +1 -1
- package/web/assets/{add-scalar-classes-DW5rrkrl.js → add-scalar-classes-Bpf67R_k.js} +3 -3
- package/web/assets/{autocomplete-DxjWjky0.js → autocomplete-B4ASWozR.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-JSaiJ46F.js → basic-shape-diamond.svg-D96ayS7-.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-D1-hJiCH.js → basic-shape-hexagon.svg-lBCgoQIf.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-J6Ksp8Xz.js → basic-shape-primary-circle-ellipse-round.svg-BEzXT_e-.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-BR-QAok8.js → basic-shape-primary-square-rectangle.svg-Bkzr23_8.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-CmwxzzxD.js → basic-shape-shield.svg-C3H6eT_i.js} +1 -1
- package/web/assets/{browser-Dj-lNKWY.js → browser-C1dU95Eq.js} +1 -1
- package/web/assets/{browser-7cY4kFlm.js → browser-JZPiFr6p.js} +1 -1
- package/web/assets/{card-DAI9OTkc.js → card-Carw-Smf.js} +1 -1
- package/web/assets/{checkbox-Ct1yef0N.js → checkbox-SY6iZYJT.js} +1 -1
- package/web/assets/{chip-B9m8EUV4.js → chip-jKPsBaDG.js} +1 -1
- package/web/assets/{client-DULNwlfi.js → client-CrX3je4X.js} +1 -1
- package/web/assets/{cloud-chat.store-BufYJj6k.js → cloud-chat.store-Cv-pkXPK.js} +1 -1
- package/web/assets/cloud-client-D01e8Pib.js +1 -0
- package/web/assets/{cloud-session-DZ1APEU5.js → cloud-session-CY8qNDWs.js} +2 -2
- package/web/assets/cloud-session-DHJ2Dn0_.js +1 -0
- package/web/assets/{column-D9bX7M3H.js → column-Du74odg_.js} +1 -1
- package/web/assets/composables-CAPumxhl.js +1 -0
- package/web/assets/{computer-device-desktop-monitor.svg-kHhZDrn4.js → computer-device-desktop-monitor.svg-CKfHZCAn.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-CJqmzT8S.js → computer-device-desktop.svg-FokfiMmI.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-DVR2dE1I.js → computer-device-laptop.svg-u5TTufiX.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CEgkg7iO.js → computer-device-mobile-phone-android-samsung-back.svg-D-4JYDXb.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BNd9H2xb.js → computer-device-mobile-phone-android-samsung.svg-CZGGF9sY.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-C34x7LFE.js → computer-device-mobile-phone-iphone-x-back.svg-DA78gxI_.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-58jbIuoG.js → computer-device-mobile-phone-iphone-x.svg-B4MANHvY.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-Do-wo3C-.js → computer-device-mobile-tablet-touch.svg-C8TQMpJm.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-k9649lm5.js → computer-device-mobile-tablet.svg-BwWJUi6h.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-CHhUrJbo.js → computer-device-network-ethernet-cat6.svg-BbuOLgRf.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-CtPwhVZ6.js → computer-device-network-lan-www.svg-Bus_xZ3r.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-kx5mccFk.js → computer-device-network-wifi-connection.svg-D93e73Wq.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-sZs7A8Cr.js → computer-device-network-wifi-router.svg-6qPxKjkZ.js} +1 -1
- package/web/assets/{cssMode-B6unnb3U.js → cssMode-BA6ryPYU.js} +1 -1
- package/web/assets/{divider-BnMFAEx6.js → divider-Nf1cI936.js} +1 -1
- package/web/assets/{docx-preview-HgFKCX0F.js → docx-preview-Beq_uoGc.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-DOKj5_k1.js → ecology-science-erlenmeyer-flask.svg-D60hNAZ7.js} +1 -1
- package/web/assets/{fieldset-DZnEgPOU.js → fieldset-BO8ymcQg.js} +1 -1
- package/web/assets/{freemarker2-Bv0s6UQe.js → freemarker2-u4uWoBOZ.js} +1 -1
- package/web/assets/{handlebars-BTsC4Lqd.js → handlebars-Crco_whq.js} +1 -1
- package/web/assets/{html-BARKi29y.js → html-krzCI2Gx.js} +1 -1
- package/web/assets/{htmlMode-fK2j6Ha8.js → htmlMode-C9vDwT8E.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-CTaB0hJv.js → image-flash-lightning.svg-B4xlEwgS.js} +1 -1
- package/web/assets/{image-picture-flower.svg-M6Q_XtAy.js → image-picture-flower.svg-DXs_C4Eb.js} +1 -1
- package/web/assets/{index-DKmDGo1r.js → index-0Vd4ITAj.js} +198 -198
- package/web/assets/{interface-alert-exclamation-diamond.svg-DPTfDSD9.js → interface-alert-exclamation-diamond.svg-CQmiBFHu.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-AWUdZifI.js → interface-alert-exclamation-triangle-warning.svg-Ddp3S5kR.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-BtYZm3zK.js → interface-alert-information-circle.svg-CXZRx_eH.js} +1 -1
- package/web/assets/{interface-award-crown.svg-DXu8zQAy.js → interface-award-crown.svg-BLjchqiv.js} +1 -1
- package/web/assets/{interface-bookmark.svg-BVozfFi5.js → interface-bookmark-tag.svg-DykA4zk6.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-DEcpMXap.js → interface-bookmark.svg-BZXXPgVb.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-B3qaR9M3.js → interface-calendar-date-one.svg-DY5zquNe.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-DKEf3Z55.js → interface-content-book-open-pages.svg-BkhdueSK.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-D6molfdo.js → interface-content-book-page.svg-Do2xq5cr.js} +1 -1
- package/web/assets/{interface-content-file.svg-CA0q-5Sl.js → interface-content-file.svg-D-T9Y5v-.js} +1 -1
- package/web/assets/{interface-content-folder.svg-BztjfhZi.js → interface-content-folder.svg-C7Xt4Hhi.js} +1 -1
- package/web/assets/interface-content-folder.svg-D8Pl9Ud7.js +1 -0
- package/web/assets/{interface-copy-clipboard.svg-2_fmAnNV.js → interface-copy-clipboard.svg-CNChmFeI.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-Cb_upeaG.js → interface-edit-attachment.svg-BPFnKeJn.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-CCEAT7W8.js → interface-edit-binocular.svg-B15WWlwm.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-BeJ11Pji.js → interface-edit-magic-wand.svg-BOlpxpIl.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-BGiy8YPn.js → interface-edit-tool-paint-roller.svg-BAYfPrFg.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BOMoeGAt.js → interface-edit-tool-pencil.svg-BM5bmeTs.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-qHoFebiY.js → interface-favorite-award.svg-C2y2AP20.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-D9gpkTJz.js → interface-favorite-flag.svg-XykDhXhn.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-COMUv1Uh.js → interface-favorite-heart.svg-CZPb5io9.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-BsK5YVEB.js → interface-favorite-star.svg-DpNTOpjf.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-DevgE082.js → interface-favorite-stars-sparkles.svg-7cCHSGs4.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-C1dfAizc.js → interface-hierarchy-flowchart.svg-BjDJwof2.js} +1 -1
- package/web/assets/{interface-home-house.svg-LAWGxZwm.js → interface-home-house.svg-PIM3QWnr.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-DKfSIKhS.js → interface-hyperlink.svg-DGiT9LRd.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-CvWZXBko.js → interface-lighting-brightness.svg-MFs_QAAQ.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-DUT5D0je.js → interface-lock-closed.svg-CjFqOV9n.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-Cw8kzQQh.js → interface-lock-open-unlock.svg-DTgPXrba.js} +1 -1
- package/web/assets/{interface-login-key.svg-Bkp-rHPU.js → interface-login-key.svg-8cDLtR8c.js} +1 -1
- package/web/assets/{interface-search.svg-hG5ogu9p.js → interface-search.svg-SJaqfmP-.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BcPVq1LR.js → interface-setting-cog.svg-CYAoV6-k.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-M4niyPv3.js → interface-share-megaphone-bullhorn.svg-C6C8KuHc.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-BcPOpoTR.js → interface-share-rocket.svg-BgqOKppb.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-x1KDlm6g.js → interface-share-satellite.svg-BhfjDwyA.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-BfNSdNDO.js → interface-share-space-ship.svg-BUapB87z.js} +1 -1
- package/web/assets/{interface-share.svg-C97BmuMY.js → interface-share.svg-CwPC5e-3.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DWd44JJH.js → interface-signal-square.svg-BvC7799s.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-DlY-_Hwt.js → interface-time-clock-circle.svg-DYKRANoG.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-C2a691O4.js → interface-time-hour-glass.svg-AYkRiFe-.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-gNDhDRlp.js → interface-users-multiple.svg-BXFBhgsj.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-D7eISmrq.js → interface-weather-moon.svg-ZozvgB_v.js} +1 -1
- package/web/assets/{javascript-8VolDNmb.js → javascript-CTdiuLav.js} +1 -1
- package/web/assets/{jsonMode-D6awqTaJ.js → jsonMode-CLF3YN6s.js} +1 -1
- package/web/assets/{liquid-TTMHEa9a.js → liquid-CUugxlF_.js} +1 -1
- package/web/assets/{lspLanguageFeatures-UVF6GLcv.js → lspLanguageFeatures-yWNYHr_2.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-DjreUXqw.js → mail-chat-bubble-square.svg-BG2z_u4M.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-BcyYVqIq.js → mail-send-email-paper-airplane.svg-CUQDu7ep.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-BGg0186G.js → mail-send-envelope.svg-pk8Xd68w.js} +1 -1
- package/web/assets/{mdx-CoSOx_u6.js → mdx-BE-R90za.js} +1 -1
- package/web/assets/{minus-DKbcHNVU.js → minus-DXcyjEvM.js} +1 -1
- package/web/assets/modal-DDtmE9ls.js +1 -0
- package/web/assets/{modal-DziAnw0E.js → modal-DEXm8R-m.js} +1 -1
- package/web/assets/{money-cashier-receipt.svg-xin2Q2jV.js → money-cashier-receipt.svg-CN9CzrqX.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-CuVghNG0.js → money-currency-dollar-pay.svg-BUjSCFrb.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-CW-ESaRb.js → money-graph-arrow-increase.svg-B_90Bmbk.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-Ds63Ij9u.js → money-graph-bar-chart-increase.svg-DEHprvsR.js} +1 -1
- package/web/assets/{multiselect-EBj2jpFx.js → multiselect-DHN-4dF5.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-CROyMuJ6.js → nature-ecology-leaf.svg-VzV83bka.js} +1 -1
- package/web/assets/{password-M6cvez26.js → password-Cn-GHrdR.js} +1 -1
- package/web/assets/{phone-telephone.svg-ldFh2DtT.js → phone-telephone.svg-B7K0iTF5.js} +1 -1
- package/web/assets/{plus-B-HO9RRD.js → plus-BavJPboa.js} +1 -1
- package/web/assets/process.store-BHtXNXJN.js +1 -0
- package/web/assets/{programming-bug.svg-Bi-5bVtZ.js → programming-bug.svg-BQArvDEk.js} +1 -1
- package/web/assets/{programming-cloud.svg-BfsVdIyf.js → programming-cloud.svg-Diup3d6q.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-CGxQu1SC.js → programming-computer-database-server.svg-Cry9WzIl.js} +1 -1
- package/web/assets/{programming-computer-database.svg-B5TrOmSA.js → programming-computer-database.svg-B2DIP4pU.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-CX306feB.js → programming-module-four-layout.svg-BGnmF15h.js} +1 -1
- package/web/assets/{programming-module-three.svg-fIUP0jIs.js → programming-module-three.svg-Dlx8NKbv.js} +1 -1
- package/web/assets/{programming-module.svg-BaFMsOL8.js → programming-module.svg-1TSwsWTr.js} +1 -1
- package/web/assets/{programming-script-code.svg-asPax4Jv.js → programming-script-code.svg-DpNHCOrR.js} +1 -1
- package/web/assets/project-launch.store-MjBfxlB3.js +1 -0
- package/web/assets/project.store-4LkhN_Kf.js +1 -0
- package/web/assets/{python-B2HQyLbu.js → python-BfgnQ0Q-.js} +1 -1
- package/web/assets/{radiobutton-E9JzQOQ_.js → radiobutton-1vkC7CQy.js} +1 -1
- package/web/assets/{razor-chfLPaZ5.js → razor-a5t1Ro53.js} +1 -1
- package/web/assets/router-D2CFZuT6.js +1 -0
- package/web/assets/{selectbutton-BSfIGLAd.js → selectbutton-DSr_ExzW.js} +1 -1
- package/web/assets/settings-scope-Bfve93ym.js +1 -0
- package/web/assets/{settings.store-DdANKt-l.js → settings.store-BBQfvtZb.js} +1 -1
- package/web/assets/shared-sse-DiiJHjvL.js +1 -0
- package/web/assets/{shopping-cart.svg-CE-hccE4.js → shopping-cart.svg-16zfxHII.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-DcDsxpbS.js → shopping-gift-present.svg-DEDgwlxd.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-B-Hce7Vg.js → shopping-shipping-box-parcel-package.svg-CBOsBi-s.js} +1 -1
- package/web/assets/{src-CDO5h8Fg.js → src-B_TK9M1Z.js} +1 -1
- package/web/assets/src-DXLPQX5t.css +1 -0
- package/web/assets/{src-BCom7Av8.js → src-wb0MqCTT.js} +29 -29
- package/web/assets/{tabpanel-opi-GyXj.js → tabpanel-CqAq0gJE.js} +1 -1
- package/web/assets/{tag-new-circle.svg-CAAIvApW.js → tag-new-circle.svg-DN5XPkdR.js} +1 -1
- package/web/assets/theme-BRinmkRN.js +1 -0
- package/web/assets/{toggleswitch-CXZN5FrU.js → toggleswitch-Cr9zROI7.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-_I9aKmKu.js → travel-map-earth-globe.svg-CN8908SS.js} +1 -1
- package/web/assets/trpc-CGXr2as5.js +1 -0
- package/web/assets/{tsMode-Cis8_e0R.js → tsMode-D8tqTb6Z.js} +1 -1
- package/web/assets/{typescript-DwoucjlL.js → typescript-C2tUdKLU.js} +1 -1
- package/web/assets/useAiChatDrawer-1cmqYfrd.js +1 -0
- package/web/assets/{useCloudOrg-DSETGvJK.js → useCloudOrg-C1-UCQOV.js} +1 -1
- package/web/assets/{useEnvVarAutocomplete-SpekLSMv.js → useEnvVarAutocomplete-5sTKensF.js} +1 -1
- package/web/assets/{useProjectCatalog-DDZXnSWD.js → useProjectCatalog-Dj4rYNAZ.js} +1 -1
- package/web/assets/{useProjectCloudOrg-Dg9jETJH.js → useProjectCloudOrg-B1KHG4Co.js} +1 -1
- package/web/assets/{useServiceUrlHost-BhfsTBGb.js → useServiceUrlHost-CDiftJ5-.js} +1 -1
- package/web/assets/{xml-D6t1pRy0.js → xml-09bhQ5hy.js} +1 -1
- package/web/assets/{yaml-DAzbEAMy.js → yaml-DE2l2UeT.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/composables-DtqhVWR-.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/shared-sse-DUHeXaFO.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-J75NZ6MN.js.map} +0 -0
- /package/{chat-6ETYBINN.js.map → chat-ICUWJZEX.js.map} +0 -0
- /package/{chunk-TTJNHZ6U.js.map → chunk-24UJRQRM.js.map} +0 -0
- /package/{chunk-K2KSZRSI.js.map → chunk-PVLDFBL6.js.map} +0 -0
- /package/{companion-SH4HLD6G.js.map → companion-IYK2652T.js.map} +0 -0
- /package/{desktop-launcher-7UZF7PFH.js.map → desktop-launcher-GHCALSOS.js.map} +0 -0
- /package/{node-ILM6MV56.js.map → node-JU7A5NDT.js.map} +0 -0
- /package/{settings-manager-XD6U4QN3.js.map → settings-manager-3G5RHW3X.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,102 @@ 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
|
+
/** Les fichiers de la conversation sont en train d'être copiés : ils vont apparaître. */
|
|
1300
|
+
filesPending: z21.boolean(),
|
|
1301
|
+
linkedAt: z21.string().max(64),
|
|
1302
|
+
opening: z21.object({
|
|
1303
|
+
author: IntegrationMessageSchema.shape.author,
|
|
1304
|
+
body: z21.string().max(1e5),
|
|
1305
|
+
attachments: z21.array(KanbanAttachmentSchema).max(50),
|
|
1306
|
+
missingAttachments: z21.array(z21.string().max(500)).max(50)
|
|
1307
|
+
}).nullable(),
|
|
1308
|
+
messages: z21.array(IntegrationMessageSchema),
|
|
1309
|
+
otherCards: z21.array(z21.object({ boardId: z21.string().max(64), cardId: z21.string().max(64), title: z21.string().max(500) }))
|
|
1310
|
+
});
|
|
1311
|
+
var ConversationSearchHitSchema = IntegrationConversationSchema.extend({
|
|
1312
|
+
preview: z21.string().max(500),
|
|
1313
|
+
linkedCards: z21.array(z21.object({ boardId: z21.string().max(64), cardId: z21.string().max(64), title: z21.string().max(500) }))
|
|
1314
|
+
});
|
|
1315
|
+
|
|
1316
|
+
// ../../packages/shared/src/schemas/changelog.schema.ts
|
|
1317
|
+
import { z as z22 } from "zod";
|
|
1318
|
+
var ChangelogSurfaceSchema = z22.enum(["app", "cloud"]);
|
|
1319
|
+
var ChangelogChangeKindSchema = z22.enum(["feature", "improvement", "fix", "breaking"]);
|
|
1320
|
+
var ChangelogTextSchema = z22.object({
|
|
1321
|
+
fr: z22.string().min(1).max(500),
|
|
1322
|
+
en: z22.string().min(1).max(500)
|
|
1256
1323
|
});
|
|
1257
|
-
var ChangelogChangeSchema =
|
|
1324
|
+
var ChangelogChangeSchema = z22.object({
|
|
1258
1325
|
kind: ChangelogChangeKindSchema,
|
|
1259
1326
|
text: ChangelogTextSchema
|
|
1260
1327
|
});
|
|
1261
1328
|
var ChangelogDraftSchema = ChangelogChangeSchema.extend({
|
|
1262
|
-
date:
|
|
1329
|
+
date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1263
1330
|
title: ChangelogTextSchema.optional()
|
|
1264
1331
|
});
|
|
1265
|
-
var ChangelogReleaseSchema =
|
|
1332
|
+
var ChangelogReleaseSchema = z22.object({
|
|
1266
1333
|
surface: ChangelogSurfaceSchema,
|
|
1267
1334
|
/** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
|
|
1268
|
-
version:
|
|
1335
|
+
version: z22.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
|
|
1269
1336
|
/** Date de publication, `YYYY-MM-DD`. */
|
|
1270
|
-
date:
|
|
1337
|
+
date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1271
1338
|
/** Facultatif : une version peut s'annoncer par son seul numéro. */
|
|
1272
1339
|
title: ChangelogTextSchema.optional(),
|
|
1273
1340
|
/** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
|
|
1274
|
-
changes:
|
|
1341
|
+
changes: z22.array(ChangelogChangeSchema).min(1).max(50)
|
|
1275
1342
|
});
|
|
1276
1343
|
var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
|
|
1277
|
-
changeCount:
|
|
1344
|
+
changeCount: z22.number().int().nonnegative()
|
|
1278
1345
|
});
|
|
1279
1346
|
|
|
1280
1347
|
// ../../packages/shared/src/utils/crypto.ts
|
|
@@ -3215,7 +3282,7 @@ import { execa as execa3 } from "execa";
|
|
|
3215
3282
|
import { homedir as homedir4 } from "os";
|
|
3216
3283
|
|
|
3217
3284
|
// src/trpc/routers/config.ts
|
|
3218
|
-
import { z as
|
|
3285
|
+
import { z as z23 } from "zod";
|
|
3219
3286
|
|
|
3220
3287
|
// src/services/traefik-manager.ts
|
|
3221
3288
|
import { spawn, execFile as execFile2 } from "child_process";
|
|
@@ -3593,13 +3660,13 @@ function resolvePassthroughEnv() {
|
|
|
3593
3660
|
return result;
|
|
3594
3661
|
}
|
|
3595
3662
|
var configRouter = router({
|
|
3596
|
-
setPassthroughEnv: protectedProcedure.input(
|
|
3597
|
-
names:
|
|
3598
|
-
|
|
3663
|
+
setPassthroughEnv: protectedProcedure.input(z23.object({
|
|
3664
|
+
names: z23.array(
|
|
3665
|
+
z23.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
|
|
3599
3666
|
).max(100),
|
|
3600
|
-
values:
|
|
3601
|
-
|
|
3602
|
-
|
|
3667
|
+
values: z23.record(
|
|
3668
|
+
z23.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
|
|
3669
|
+
z23.string().max(32768)
|
|
3603
3670
|
).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
|
|
3604
3671
|
})).mutation(({ input }) => {
|
|
3605
3672
|
passthroughEnvNames = input.names;
|
|
@@ -3636,7 +3703,7 @@ var configRouter = router({
|
|
|
3636
3703
|
getTraefikFileTree: protectedProcedure.query(async () => {
|
|
3637
3704
|
return traefikManager.getFileTree();
|
|
3638
3705
|
}),
|
|
3639
|
-
getTraefikLogs: protectedProcedure.input(
|
|
3706
|
+
getTraefikLogs: protectedProcedure.input(z23.object({ lines: z23.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
|
|
3640
3707
|
const logs = await traefikManager.getLogs(input.lines);
|
|
3641
3708
|
return { logs };
|
|
3642
3709
|
})
|
|
@@ -3828,17 +3895,17 @@ var healthChecker = new HealthChecker();
|
|
|
3828
3895
|
import killPort from "kill-port";
|
|
3829
3896
|
|
|
3830
3897
|
// 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:
|
|
3898
|
+
import { z as z24 } from "zod";
|
|
3899
|
+
var EnvSchema = z24.object({
|
|
3900
|
+
RUNEYA_AGENT_PORT: z24.coerce.number().int().min(1).max(65535).default(4001),
|
|
3901
|
+
RUNEYA_AGENT_HOST: z24.string().default("127.0.0.1"),
|
|
3902
|
+
PASSPHRASE_OVERRIDE: z24.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
|
|
3903
|
+
AGENT_ID: z24.string().optional(),
|
|
3837
3904
|
// Set by spawner or manually for remote agents
|
|
3838
|
-
LOG_BUFFER_SIZE:
|
|
3839
|
-
METRICS_INTERVAL:
|
|
3840
|
-
GRACE_PERIOD:
|
|
3841
|
-
HEALTH_WS_INTERVAL:
|
|
3905
|
+
LOG_BUFFER_SIZE: z24.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
|
|
3906
|
+
METRICS_INTERVAL: z24.coerce.number().int().positive().default(METRICS_INTERVAL),
|
|
3907
|
+
GRACE_PERIOD: z24.coerce.number().int().positive().default(GRACE_PERIOD),
|
|
3908
|
+
HEALTH_WS_INTERVAL: z24.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
|
|
3842
3909
|
});
|
|
3843
3910
|
var env = EnvSchema.parse(process.env);
|
|
3844
3911
|
|
|
@@ -4626,7 +4693,7 @@ var processRouter = router({
|
|
|
4626
4693
|
return processManager.listStatuses();
|
|
4627
4694
|
}),
|
|
4628
4695
|
/** Get a single process */
|
|
4629
|
-
get: protectedProcedure.input(
|
|
4696
|
+
get: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(({ input }) => {
|
|
4630
4697
|
const status = processManager.getStatus(input.id);
|
|
4631
4698
|
if (!status) {
|
|
4632
4699
|
throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
|
|
@@ -4639,78 +4706,78 @@ var processRouter = router({
|
|
|
4639
4706
|
return { id };
|
|
4640
4707
|
}),
|
|
4641
4708
|
/** Undeploy: stop + remove */
|
|
4642
|
-
undeploy: protectedProcedure.input(
|
|
4709
|
+
undeploy: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4643
4710
|
await processManager.undeploy(input.id);
|
|
4644
4711
|
return { success: true };
|
|
4645
4712
|
}),
|
|
4646
4713
|
/** Update the service config for a deployed process */
|
|
4647
|
-
updateConfig: protectedProcedure.input(
|
|
4714
|
+
updateConfig: protectedProcedure.input(z25.object({ serviceId: z25.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
|
|
4648
4715
|
processManager.updateConfig(input.serviceId, input.config);
|
|
4649
4716
|
return { success: true };
|
|
4650
4717
|
}),
|
|
4651
4718
|
/** Start a deployed process */
|
|
4652
|
-
start: protectedProcedure.input(
|
|
4719
|
+
start: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4653
4720
|
console.log(`[agent] start service=${input.id}`);
|
|
4654
4721
|
await processManager.start(input.id);
|
|
4655
4722
|
return processManager.getStatus(input.id);
|
|
4656
4723
|
}),
|
|
4657
4724
|
/** Stop a running process */
|
|
4658
|
-
stop: protectedProcedure.input(
|
|
4725
|
+
stop: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4659
4726
|
console.log(`[agent] stop service=${input.id}`);
|
|
4660
4727
|
await processManager.stop(input.id);
|
|
4661
4728
|
return processManager.getStatus(input.id);
|
|
4662
4729
|
}),
|
|
4663
4730
|
/** Restart a process */
|
|
4664
|
-
restart: protectedProcedure.input(
|
|
4731
|
+
restart: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
|
|
4665
4732
|
console.log(`[agent] restart service=${input.id}`);
|
|
4666
4733
|
await processManager.restart(input.id);
|
|
4667
4734
|
return processManager.getStatus(input.id);
|
|
4668
4735
|
}),
|
|
4669
4736
|
/** Get buffered logs for a process */
|
|
4670
|
-
logs: protectedProcedure.input(
|
|
4737
|
+
logs: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(({ input }) => {
|
|
4671
4738
|
const logs = processManager.getLogs(input.id);
|
|
4672
4739
|
return logs;
|
|
4673
4740
|
}),
|
|
4674
4741
|
/** Clear buffered logs for a process */
|
|
4675
|
-
clearLogBuffer: protectedProcedure.input(
|
|
4742
|
+
clearLogBuffer: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(({ input }) => {
|
|
4676
4743
|
processManager.clearLogBuffer(input.id);
|
|
4677
4744
|
return { success: true };
|
|
4678
4745
|
}),
|
|
4679
4746
|
/** Execute a shortcut command and stream output into the process log */
|
|
4680
|
-
executeShortcut: protectedProcedure.input(
|
|
4747
|
+
executeShortcut: protectedProcedure.input(z25.object({ id: z25.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
|
|
4681
4748
|
const result = await processManager.executeShortcut(input.id, input.shortcut);
|
|
4682
4749
|
return result;
|
|
4683
4750
|
}),
|
|
4684
4751
|
/** Cancel a running shortcut command */
|
|
4685
|
-
cancelShortcut: protectedProcedure.input(
|
|
4752
|
+
cancelShortcut: protectedProcedure.input(z25.object({ id: z25.string().max(128), shortcutId: z25.string().max(128) })).mutation(({ input }) => {
|
|
4686
4753
|
processManager.cancelShortcut(input.id, input.shortcutId);
|
|
4687
4754
|
return { success: true };
|
|
4688
4755
|
}),
|
|
4689
4756
|
/** Cancel a running ad-hoc command */
|
|
4690
|
-
cancelAdHocCommand: protectedProcedure.input(
|
|
4757
|
+
cancelAdHocCommand: protectedProcedure.input(z25.object({ id: z25.string().max(128), commandId: z25.string().max(128).optional() })).mutation(({ input }) => {
|
|
4691
4758
|
processManager.cancelAdHocCommand(input.id, input.commandId);
|
|
4692
4759
|
return { success: true };
|
|
4693
4760
|
}),
|
|
4694
4761
|
/** Execute an ad-hoc command and stream output into the process log */
|
|
4695
|
-
executeAdHocCommand: protectedProcedure.input(
|
|
4696
|
-
id:
|
|
4697
|
-
command:
|
|
4698
|
-
cwd:
|
|
4699
|
-
commandId:
|
|
4762
|
+
executeAdHocCommand: protectedProcedure.input(z25.object({
|
|
4763
|
+
id: z25.string().max(128),
|
|
4764
|
+
command: z25.string().min(1).max(4096),
|
|
4765
|
+
cwd: z25.string().max(4096).optional(),
|
|
4766
|
+
commandId: z25.string().max(128).optional()
|
|
4700
4767
|
})).mutation(async ({ input }) => {
|
|
4701
4768
|
const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
|
|
4702
4769
|
return result;
|
|
4703
4770
|
}),
|
|
4704
4771
|
/** List active log source types for a process */
|
|
4705
|
-
logSources: protectedProcedure.input(
|
|
4772
|
+
logSources: protectedProcedure.input(z25.object({ processId: z25.string().max(128) })).query(({ input }) => {
|
|
4706
4773
|
return processManager.getLogSourceTypes(input.processId);
|
|
4707
4774
|
}),
|
|
4708
4775
|
/** Get current metrics for a process */
|
|
4709
|
-
metrics: protectedProcedure.input(
|
|
4776
|
+
metrics: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(async ({ input }) => {
|
|
4710
4777
|
return processManager.getMetrics(input.id);
|
|
4711
4778
|
}),
|
|
4712
4779
|
/** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
|
|
4713
|
-
onLog: protectedProcedure.input(
|
|
4780
|
+
onLog: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4714
4781
|
const queue = [];
|
|
4715
4782
|
let resolve2 = null;
|
|
4716
4783
|
const handler = (batch) => {
|
|
@@ -4739,7 +4806,7 @@ var processRouter = router({
|
|
|
4739
4806
|
}
|
|
4740
4807
|
}),
|
|
4741
4808
|
/** Subscribe to real-time status changes */
|
|
4742
|
-
onStatus: protectedProcedure.input(
|
|
4809
|
+
onStatus: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4743
4810
|
console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
|
|
4744
4811
|
const queue = [];
|
|
4745
4812
|
let resolve2 = null;
|
|
@@ -4771,7 +4838,7 @@ var processRouter = router({
|
|
|
4771
4838
|
}
|
|
4772
4839
|
}),
|
|
4773
4840
|
/** Subscribe to real-time health status changes */
|
|
4774
|
-
onHealth: protectedProcedure.input(
|
|
4841
|
+
onHealth: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4775
4842
|
const queue = [];
|
|
4776
4843
|
let resolve2 = null;
|
|
4777
4844
|
const handler = (healthData) => {
|
|
@@ -4801,7 +4868,7 @@ var processRouter = router({
|
|
|
4801
4868
|
}
|
|
4802
4869
|
}),
|
|
4803
4870
|
/** Subscribe to real-time metrics */
|
|
4804
|
-
onMetrics: protectedProcedure.input(
|
|
4871
|
+
onMetrics: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4805
4872
|
const queue = [];
|
|
4806
4873
|
let resolve2 = null;
|
|
4807
4874
|
const handler = (metrics) => {
|
|
@@ -4976,6 +5043,9 @@ async function isCliAvailable(cli, timeoutMs = 5e3) {
|
|
|
4976
5043
|
});
|
|
4977
5044
|
}
|
|
4978
5045
|
|
|
5046
|
+
// ../../packages/shared/src/node/aes-gcm.ts
|
|
5047
|
+
import { randomBytes as randomBytes2, createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2 } from "crypto";
|
|
5048
|
+
|
|
4979
5049
|
// src/trpc/routers/health.ts
|
|
4980
5050
|
var startedAt = Date.now();
|
|
4981
5051
|
function getLanIp2() {
|
|
@@ -5022,7 +5092,7 @@ var healthRouter = router({
|
|
|
5022
5092
|
});
|
|
5023
5093
|
|
|
5024
5094
|
// src/trpc/routers/terminal.ts
|
|
5025
|
-
import { z as
|
|
5095
|
+
import { z as z26 } from "zod";
|
|
5026
5096
|
import { TRPCError as TRPCError3 } from "@trpc/server";
|
|
5027
5097
|
|
|
5028
5098
|
// src/services/terminal-manager.ts
|
|
@@ -5115,11 +5185,11 @@ var terminalManager = new TerminalManager();
|
|
|
5115
5185
|
// src/trpc/routers/terminal.ts
|
|
5116
5186
|
var terminalRouter = router({
|
|
5117
5187
|
/** Spawn a new PTY shell session, returns a sessionId */
|
|
5118
|
-
create: protectedProcedure.input(
|
|
5119
|
-
cwd:
|
|
5120
|
-
cols:
|
|
5121
|
-
rows:
|
|
5122
|
-
title:
|
|
5188
|
+
create: protectedProcedure.input(z26.object({
|
|
5189
|
+
cwd: z26.string().max(512).optional(),
|
|
5190
|
+
cols: z26.number().int().min(1).max(512).optional(),
|
|
5191
|
+
rows: z26.number().int().min(1).max(256).optional(),
|
|
5192
|
+
title: z26.string().max(128).optional()
|
|
5123
5193
|
})).mutation(({ input }) => {
|
|
5124
5194
|
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
|
|
5125
5195
|
return { sessionId };
|
|
@@ -5127,34 +5197,34 @@ var terminalRouter = router({
|
|
|
5127
5197
|
/** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
|
|
5128
5198
|
list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
|
|
5129
5199
|
/** Renommer un onglet */
|
|
5130
|
-
rename: protectedProcedure.input(
|
|
5200
|
+
rename: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128), title: z26.string().max(128) })).mutation(({ input }) => {
|
|
5131
5201
|
terminalManager.rename(input.sessionId, input.title);
|
|
5132
5202
|
return { ok: true };
|
|
5133
5203
|
}),
|
|
5134
5204
|
/** Write data (keystrokes) to a PTY session */
|
|
5135
|
-
write: protectedProcedure.input(
|
|
5205
|
+
write: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128), data: z26.string().max(65536) })).mutation(({ input }) => {
|
|
5136
5206
|
terminalManager.write(input.sessionId, input.data);
|
|
5137
5207
|
return { ok: true };
|
|
5138
5208
|
}),
|
|
5139
5209
|
/** Resize a PTY session */
|
|
5140
|
-
resize: protectedProcedure.input(
|
|
5141
|
-
sessionId:
|
|
5142
|
-
cols:
|
|
5143
|
-
rows:
|
|
5210
|
+
resize: protectedProcedure.input(z26.object({
|
|
5211
|
+
sessionId: z26.string().max(128),
|
|
5212
|
+
cols: z26.number().int().min(1).max(512),
|
|
5213
|
+
rows: z26.number().int().min(1).max(256)
|
|
5144
5214
|
})).mutation(({ input }) => {
|
|
5145
5215
|
terminalManager.resize(input.sessionId, input.cols, input.rows);
|
|
5146
5216
|
return { ok: true };
|
|
5147
5217
|
}),
|
|
5148
5218
|
/** Destroy a PTY session */
|
|
5149
|
-
destroy: protectedProcedure.input(
|
|
5219
|
+
destroy: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).mutation(({ input }) => {
|
|
5150
5220
|
terminalManager.destroy(input.sessionId);
|
|
5151
5221
|
return { ok: true };
|
|
5152
5222
|
}),
|
|
5153
5223
|
/** Stream PTY output for a session (async generator subscription) */
|
|
5154
|
-
onData: protectedProcedure.input(
|
|
5155
|
-
sessionId:
|
|
5224
|
+
onData: protectedProcedure.input(z26.object({
|
|
5225
|
+
sessionId: z26.string().max(128),
|
|
5156
5226
|
/** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
|
|
5157
|
-
replay:
|
|
5227
|
+
replay: z26.boolean().optional()
|
|
5158
5228
|
})).subscription(async function* ({ input }) {
|
|
5159
5229
|
const emitter = terminalManager.getEmitter(input.sessionId);
|
|
5160
5230
|
if (!emitter) {
|
|
@@ -5199,7 +5269,7 @@ var terminalRouter = router({
|
|
|
5199
5269
|
});
|
|
5200
5270
|
|
|
5201
5271
|
// src/trpc/routers/git.ts
|
|
5202
|
-
import { z as
|
|
5272
|
+
import { z as z27 } from "zod";
|
|
5203
5273
|
import { TRPCError as TRPCError4 } from "@trpc/server";
|
|
5204
5274
|
import { execFile as execFile6, spawn as spawn3 } from "child_process";
|
|
5205
5275
|
import { promisify as promisify3 } from "util";
|
|
@@ -5267,12 +5337,12 @@ async function sameGitRemote(a, b, resolveHost = resolveSshHost) {
|
|
|
5267
5337
|
var execFileAsync3 = promisify3(execFile6);
|
|
5268
5338
|
var GIT_TIMEOUT = 15e3;
|
|
5269
5339
|
var DIFF_MAX_BYTES = 512 * 1024;
|
|
5270
|
-
var CWD_SCHEMA =
|
|
5271
|
-
var SAFE_PATH_SCHEMA =
|
|
5340
|
+
var CWD_SCHEMA = z27.string().min(1).max(4096);
|
|
5341
|
+
var SAFE_PATH_SCHEMA = z27.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
|
|
5272
5342
|
message: "Path must be relative and not traverse up"
|
|
5273
5343
|
});
|
|
5274
|
-
var REMOTE_SCHEMA =
|
|
5275
|
-
var BRANCH_SCHEMA =
|
|
5344
|
+
var REMOTE_SCHEMA = z27.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
|
|
5345
|
+
var BRANCH_SCHEMA = z27.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
|
|
5276
5346
|
function gitSafeEnv() {
|
|
5277
5347
|
const env2 = {
|
|
5278
5348
|
GIT_TERMINAL_PROMPT: "0",
|
|
@@ -5390,10 +5460,10 @@ async function getGitStatus(cwd) {
|
|
|
5390
5460
|
}
|
|
5391
5461
|
var gitRouter = router({
|
|
5392
5462
|
/** Check if a working directory exists and optionally verify its git remote */
|
|
5393
|
-
checkCwd: protectedProcedure.input(
|
|
5463
|
+
checkCwd: protectedProcedure.input(z27.object({
|
|
5394
5464
|
cwd: CWD_SCHEMA,
|
|
5395
|
-
remote:
|
|
5396
|
-
checkReachability:
|
|
5465
|
+
remote: z27.string().max(2048).optional(),
|
|
5466
|
+
checkReachability: z27.boolean().optional()
|
|
5397
5467
|
})).query(async ({ input }) => {
|
|
5398
5468
|
const resolvedCwd = expandEnvVar(input.cwd);
|
|
5399
5469
|
const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
|
|
@@ -5415,8 +5485,8 @@ var gitRouter = router({
|
|
|
5415
5485
|
return { exists, actualRemote, remoteMatches, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
|
|
5416
5486
|
}),
|
|
5417
5487
|
/** Clone a git repository into a target directory */
|
|
5418
|
-
clone: protectedProcedure.input(
|
|
5419
|
-
remote:
|
|
5488
|
+
clone: protectedProcedure.input(z27.object({
|
|
5489
|
+
remote: z27.string().min(1).max(2048),
|
|
5420
5490
|
cwd: CWD_SCHEMA
|
|
5421
5491
|
})).mutation(async ({ input }) => {
|
|
5422
5492
|
const absoluteCwd = resolvePath2(expandEnvVar(input.cwd));
|
|
@@ -5437,13 +5507,13 @@ var gitRouter = router({
|
|
|
5437
5507
|
return { success: true };
|
|
5438
5508
|
}),
|
|
5439
5509
|
/** Get full git status */
|
|
5440
|
-
status: protectedProcedure.input(
|
|
5510
|
+
status: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5441
5511
|
const cwd = assertCwdExists(input.cwd);
|
|
5442
5512
|
await assertGitRepo(cwd);
|
|
5443
5513
|
return getGitStatus(cwd);
|
|
5444
5514
|
}),
|
|
5445
5515
|
/** Watch .git/ for changes and stream updated status */
|
|
5446
|
-
onStatusChange: protectedProcedure.input(
|
|
5516
|
+
onStatusChange: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
|
|
5447
5517
|
const cwd = assertCwdExists(input.cwd);
|
|
5448
5518
|
await assertGitRepo(cwd);
|
|
5449
5519
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
@@ -5494,7 +5564,7 @@ var gitRouter = router({
|
|
|
5494
5564
|
}
|
|
5495
5565
|
}),
|
|
5496
5566
|
/** Get commit log */
|
|
5497
|
-
log: protectedProcedure.input(
|
|
5567
|
+
log: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, limit: z27.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
|
|
5498
5568
|
const cwd = assertCwdExists(input.cwd);
|
|
5499
5569
|
await assertGitRepo(cwd);
|
|
5500
5570
|
const format = "%H%h%an%ae%ai%s";
|
|
@@ -5505,7 +5575,7 @@ var gitRouter = router({
|
|
|
5505
5575
|
});
|
|
5506
5576
|
}),
|
|
5507
5577
|
/** List local and remote branches */
|
|
5508
|
-
branches: protectedProcedure.input(
|
|
5578
|
+
branches: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5509
5579
|
const cwd = assertCwdExists(input.cwd);
|
|
5510
5580
|
await assertGitRepo(cwd);
|
|
5511
5581
|
const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5517,7 +5587,7 @@ var gitRouter = router({
|
|
|
5517
5587
|
return { current, branches };
|
|
5518
5588
|
}),
|
|
5519
5589
|
/** Checkout a branch */
|
|
5520
|
-
checkout: protectedProcedure.input(
|
|
5590
|
+
checkout: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z27.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5521
5591
|
const cwd = assertCwdExists(input.cwd);
|
|
5522
5592
|
await assertGitRepo(cwd);
|
|
5523
5593
|
const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
|
|
@@ -5525,42 +5595,42 @@ var gitRouter = router({
|
|
|
5525
5595
|
return { ok: true };
|
|
5526
5596
|
}),
|
|
5527
5597
|
/** Stage files */
|
|
5528
|
-
stage: protectedProcedure.input(
|
|
5598
|
+
stage: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5529
5599
|
const cwd = assertCwdExists(input.cwd);
|
|
5530
5600
|
await assertGitRepo(cwd);
|
|
5531
5601
|
await git(["add", "--", ...input.paths], cwd);
|
|
5532
5602
|
return { ok: true };
|
|
5533
5603
|
}),
|
|
5534
5604
|
/** Stage all files */
|
|
5535
|
-
stageAll: protectedProcedure.input(
|
|
5605
|
+
stageAll: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5536
5606
|
const cwd = assertCwdExists(input.cwd);
|
|
5537
5607
|
await assertGitRepo(cwd);
|
|
5538
5608
|
await git(["add", "-A"], cwd);
|
|
5539
5609
|
return { ok: true };
|
|
5540
5610
|
}),
|
|
5541
5611
|
/** Unstage files */
|
|
5542
|
-
unstage: protectedProcedure.input(
|
|
5612
|
+
unstage: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5543
5613
|
const cwd = assertCwdExists(input.cwd);
|
|
5544
5614
|
await assertGitRepo(cwd);
|
|
5545
5615
|
await git(["restore", "--staged", "--", ...input.paths], cwd);
|
|
5546
5616
|
return { ok: true };
|
|
5547
5617
|
}),
|
|
5548
5618
|
/** Unstage all files */
|
|
5549
|
-
unstageAll: protectedProcedure.input(
|
|
5619
|
+
unstageAll: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5550
5620
|
const cwd = assertCwdExists(input.cwd);
|
|
5551
5621
|
await assertGitRepo(cwd);
|
|
5552
5622
|
await git(["reset", "--"], cwd);
|
|
5553
5623
|
return { ok: true };
|
|
5554
5624
|
}),
|
|
5555
5625
|
/** Commit staged changes */
|
|
5556
|
-
commit: protectedProcedure.input(
|
|
5626
|
+
commit: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, message: z27.string().min(1).max(4096) })).mutation(async ({ input }) => {
|
|
5557
5627
|
const cwd = assertCwdExists(input.cwd);
|
|
5558
5628
|
await assertGitRepo(cwd);
|
|
5559
5629
|
const output = await git(["commit", "-m", input.message], cwd);
|
|
5560
5630
|
return { ok: true, output: output.trim() };
|
|
5561
5631
|
}),
|
|
5562
5632
|
/** Push to remote */
|
|
5563
|
-
push: protectedProcedure.input(
|
|
5633
|
+
push: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z27.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5564
5634
|
const cwd = assertCwdExists(input.cwd);
|
|
5565
5635
|
await assertGitRepo(cwd);
|
|
5566
5636
|
const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5569,25 +5639,25 @@ var gitRouter = router({
|
|
|
5569
5639
|
return { ok: true, output: output.trim() };
|
|
5570
5640
|
}),
|
|
5571
5641
|
/** Pull from remote */
|
|
5572
|
-
pull: protectedProcedure.input(
|
|
5642
|
+
pull: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5573
5643
|
const cwd = assertCwdExists(input.cwd);
|
|
5574
5644
|
await assertGitRepo(cwd);
|
|
5575
5645
|
const output = await git(["pull", input.remote], cwd);
|
|
5576
5646
|
return { ok: true, output: output.trim() };
|
|
5577
5647
|
}),
|
|
5578
5648
|
/** Fetch from remote */
|
|
5579
|
-
fetch: protectedProcedure.input(
|
|
5649
|
+
fetch: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5580
5650
|
const cwd = assertCwdExists(input.cwd);
|
|
5581
5651
|
await assertGitRepo(cwd);
|
|
5582
5652
|
const output = await git(["fetch", input.remote], cwd);
|
|
5583
5653
|
return { ok: true, output: output.trim() };
|
|
5584
5654
|
}),
|
|
5585
5655
|
/** Get diff for a file or the whole index */
|
|
5586
|
-
diff: protectedProcedure.input(
|
|
5656
|
+
diff: protectedProcedure.input(z27.object({
|
|
5587
5657
|
cwd: CWD_SCHEMA,
|
|
5588
|
-
path:
|
|
5589
|
-
staged:
|
|
5590
|
-
untracked:
|
|
5658
|
+
path: z27.string().max(4096).optional(),
|
|
5659
|
+
staged: z27.boolean().default(false),
|
|
5660
|
+
untracked: z27.boolean().default(false)
|
|
5591
5661
|
})).query(async ({ input }) => {
|
|
5592
5662
|
const cwd = assertCwdExists(input.cwd);
|
|
5593
5663
|
await assertGitRepo(cwd);
|
|
@@ -5635,21 +5705,21 @@ var gitRouter = router({
|
|
|
5635
5705
|
};
|
|
5636
5706
|
}),
|
|
5637
5707
|
/** Discard changes to working tree files */
|
|
5638
|
-
discard: protectedProcedure.input(
|
|
5708
|
+
discard: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5639
5709
|
const cwd = assertCwdExists(input.cwd);
|
|
5640
5710
|
await assertGitRepo(cwd);
|
|
5641
5711
|
await git(["restore", "--", ...input.paths], cwd);
|
|
5642
5712
|
return { ok: true };
|
|
5643
5713
|
}),
|
|
5644
5714
|
/** Get staged diff (used by server for AI commit message generation) */
|
|
5645
|
-
stagedDiff: protectedProcedure.input(
|
|
5715
|
+
stagedDiff: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5646
5716
|
const cwd = assertCwdExists(input.cwd);
|
|
5647
5717
|
await assertGitRepo(cwd);
|
|
5648
5718
|
const diff = await git(["diff", "--staged"], cwd, true);
|
|
5649
5719
|
return { diff: diff.slice(0, 3e4) };
|
|
5650
5720
|
}),
|
|
5651
5721
|
/** Merge a branch into the current branch */
|
|
5652
|
-
merge: protectedProcedure.input(
|
|
5722
|
+
merge: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z27.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5653
5723
|
const cwd = assertCwdExists(input.cwd);
|
|
5654
5724
|
await assertGitRepo(cwd);
|
|
5655
5725
|
const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
|
|
@@ -5657,14 +5727,14 @@ var gitRouter = router({
|
|
|
5657
5727
|
return { ok: true, output: output.trim() };
|
|
5658
5728
|
}),
|
|
5659
5729
|
/** Rebase current branch onto another branch */
|
|
5660
|
-
rebase: protectedProcedure.input(
|
|
5730
|
+
rebase: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
|
|
5661
5731
|
const cwd = assertCwdExists(input.cwd);
|
|
5662
5732
|
await assertGitRepo(cwd);
|
|
5663
5733
|
const output = await git(["rebase", input.branch], cwd);
|
|
5664
5734
|
return { ok: true, output: output.trim() };
|
|
5665
5735
|
}),
|
|
5666
5736
|
/** List remotes */
|
|
5667
|
-
remotes: protectedProcedure.input(
|
|
5737
|
+
remotes: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5668
5738
|
const cwd = assertCwdExists(input.cwd);
|
|
5669
5739
|
await assertGitRepo(cwd);
|
|
5670
5740
|
const output = await git(["remote", "-v"], cwd, true);
|
|
@@ -5682,7 +5752,7 @@ var gitRouter = router({
|
|
|
5682
5752
|
return remotes;
|
|
5683
5753
|
}),
|
|
5684
5754
|
/** List stash entries */
|
|
5685
|
-
stashList: protectedProcedure.input(
|
|
5755
|
+
stashList: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5686
5756
|
const cwd = assertCwdExists(input.cwd);
|
|
5687
5757
|
await assertGitRepo(cwd);
|
|
5688
5758
|
const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
|
|
@@ -5695,10 +5765,10 @@ var gitRouter = router({
|
|
|
5695
5765
|
return entries;
|
|
5696
5766
|
}),
|
|
5697
5767
|
/** Stash current changes */
|
|
5698
|
-
stashPush: protectedProcedure.input(
|
|
5768
|
+
stashPush: protectedProcedure.input(z27.object({
|
|
5699
5769
|
cwd: CWD_SCHEMA,
|
|
5700
|
-
message:
|
|
5701
|
-
includeUntracked:
|
|
5770
|
+
message: z27.string().max(4096).optional(),
|
|
5771
|
+
includeUntracked: z27.boolean().default(true)
|
|
5702
5772
|
})).mutation(async ({ input }) => {
|
|
5703
5773
|
const cwd = assertCwdExists(input.cwd);
|
|
5704
5774
|
await assertGitRepo(cwd);
|
|
@@ -5709,21 +5779,21 @@ var gitRouter = router({
|
|
|
5709
5779
|
return { ok: true, output: output.trim() };
|
|
5710
5780
|
}),
|
|
5711
5781
|
/** Apply a stash entry and remove it from the list */
|
|
5712
|
-
stashPop: protectedProcedure.input(
|
|
5782
|
+
stashPop: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5713
5783
|
const cwd = assertCwdExists(input.cwd);
|
|
5714
5784
|
await assertGitRepo(cwd);
|
|
5715
5785
|
const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
|
|
5716
5786
|
return { ok: true, output: output.trim() };
|
|
5717
5787
|
}),
|
|
5718
5788
|
/** Apply a stash entry without removing it from the list */
|
|
5719
|
-
stashApply: protectedProcedure.input(
|
|
5789
|
+
stashApply: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5720
5790
|
const cwd = assertCwdExists(input.cwd);
|
|
5721
5791
|
await assertGitRepo(cwd);
|
|
5722
5792
|
const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
|
|
5723
5793
|
return { ok: true, output: output.trim() };
|
|
5724
5794
|
}),
|
|
5725
5795
|
/** Drop a stash entry */
|
|
5726
|
-
stashDrop: protectedProcedure.input(
|
|
5796
|
+
stashDrop: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5727
5797
|
const cwd = assertCwdExists(input.cwd);
|
|
5728
5798
|
await assertGitRepo(cwd);
|
|
5729
5799
|
const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
|
|
@@ -5756,7 +5826,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
|
|
|
5756
5826
|
}
|
|
5757
5827
|
|
|
5758
5828
|
// src/trpc/routers/ai.ts
|
|
5759
|
-
import { z as
|
|
5829
|
+
import { z as z28 } from "zod";
|
|
5760
5830
|
import { TRPCError as TRPCError5 } from "@trpc/server";
|
|
5761
5831
|
|
|
5762
5832
|
// src/services/ai-spawn-manager.ts
|
|
@@ -6451,25 +6521,25 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
|
|
|
6451
6521
|
var MAX_CONTEXT_TOTAL_BYTES = 5e6;
|
|
6452
6522
|
var aiRouter = router({
|
|
6453
6523
|
/** 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:
|
|
6524
|
+
spawn: protectedProcedure.input(z28.object({
|
|
6525
|
+
cli: z28.string().max(64),
|
|
6526
|
+
args: z28.array(z28.string().max(5e5)),
|
|
6527
|
+
env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional(),
|
|
6528
|
+
cwd: z28.string().max(4096).optional(),
|
|
6529
|
+
stdinData: z28.string().max(1e7).optional(),
|
|
6530
|
+
enableMcp: z28.boolean().optional(),
|
|
6531
|
+
mcpApiBaseUrl: z28.string().max(512).optional(),
|
|
6532
|
+
mcpApiToken: z28.string().max(8192).optional(),
|
|
6533
|
+
mcpProjectId: z28.string().max(128).optional(),
|
|
6534
|
+
mcpOrgId: z28.string().max(128).optional()
|
|
6465
6535
|
})).mutation(({ input }) => {
|
|
6466
6536
|
const spawnId = aiSpawnManager.spawn(input);
|
|
6467
6537
|
return { spawnId };
|
|
6468
6538
|
}),
|
|
6469
6539
|
/** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
|
|
6470
|
-
stream: protectedProcedure.input(
|
|
6471
|
-
spawnId:
|
|
6472
|
-
fromOffset:
|
|
6540
|
+
stream: protectedProcedure.input(z28.object({
|
|
6541
|
+
spawnId: z28.string().max(128),
|
|
6542
|
+
fromOffset: z28.number().int().min(0).default(0)
|
|
6473
6543
|
})).subscription(async function* ({ input }) {
|
|
6474
6544
|
try {
|
|
6475
6545
|
for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
|
|
@@ -6483,41 +6553,41 @@ var aiRouter = router({
|
|
|
6483
6553
|
}
|
|
6484
6554
|
}),
|
|
6485
6555
|
/** 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:
|
|
6556
|
+
spawnPty: protectedProcedure.input(z28.object({
|
|
6557
|
+
cli: z28.string().max(64),
|
|
6558
|
+
args: z28.array(z28.string().max(5e5)),
|
|
6559
|
+
env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional(),
|
|
6560
|
+
cwd: z28.string().max(4096).optional(),
|
|
6561
|
+
cols: z28.number().int().min(1).max(1e3).optional(),
|
|
6562
|
+
rows: z28.number().int().min(1).max(1e3).optional(),
|
|
6563
|
+
sessionId: z28.string().max(128).optional(),
|
|
6564
|
+
enableMcp: z28.boolean().optional(),
|
|
6565
|
+
mcpApiBaseUrl: z28.string().max(512).optional(),
|
|
6566
|
+
mcpApiToken: z28.string().max(8192).optional(),
|
|
6567
|
+
mcpProjectId: z28.string().max(128).optional(),
|
|
6568
|
+
mcpOrgId: z28.string().max(128).optional()
|
|
6499
6569
|
})).mutation(({ input }) => {
|
|
6500
6570
|
const spawnId = aiSpawnManager.spawnPty(input);
|
|
6501
6571
|
return { spawnId };
|
|
6502
6572
|
}),
|
|
6503
6573
|
/** Find a running PTY spawn by its logical sessionId (for re-attach). */
|
|
6504
|
-
findPtyBySession: protectedProcedure.input(
|
|
6574
|
+
findPtyBySession: protectedProcedure.input(z28.object({ sessionId: z28.string().max(128) })).query(({ input }) => {
|
|
6505
6575
|
return aiSpawnManager.findPtyBySessionId(input.sessionId);
|
|
6506
6576
|
}),
|
|
6507
6577
|
/** Write input to a PTY spawn (user keystrokes). */
|
|
6508
|
-
writePty: protectedProcedure.input(
|
|
6509
|
-
spawnId:
|
|
6510
|
-
data:
|
|
6578
|
+
writePty: protectedProcedure.input(z28.object({
|
|
6579
|
+
spawnId: z28.string().max(128),
|
|
6580
|
+
data: z28.string().max(1e6)
|
|
6511
6581
|
})).mutation(({ input }) => {
|
|
6512
6582
|
const ok = aiSpawnManager.writePty(input.spawnId, input.data);
|
|
6513
6583
|
return { ok };
|
|
6514
6584
|
}),
|
|
6515
6585
|
/** 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:
|
|
6586
|
+
writeContextFiles: protectedProcedure.input(z28.object({
|
|
6587
|
+
sessionId: z28.string().min(1).max(128),
|
|
6588
|
+
files: z28.array(z28.object({
|
|
6589
|
+
name: z28.string().min(1).max(256),
|
|
6590
|
+
content: z28.string().max(MAX_CONTEXT_FILE_BYTES)
|
|
6521
6591
|
})).min(1).max(MAX_CONTEXT_FILES)
|
|
6522
6592
|
}).refine(
|
|
6523
6593
|
(val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
|
|
@@ -6532,25 +6602,25 @@ var aiRouter = router({
|
|
|
6532
6602
|
* which clipboard method (if any) succeeded — caller decides whether to send
|
|
6533
6603
|
* Ctrl+V (\x16) or inject `@<path>` into the PTY.
|
|
6534
6604
|
*/
|
|
6535
|
-
pasteImage: protectedProcedure.input(
|
|
6536
|
-
sessionId:
|
|
6537
|
-
mimeType:
|
|
6538
|
-
base64:
|
|
6605
|
+
pasteImage: protectedProcedure.input(z28.object({
|
|
6606
|
+
sessionId: z28.string().max(128).optional(),
|
|
6607
|
+
mimeType: z28.string().max(64),
|
|
6608
|
+
base64: z28.string().max(15e6)
|
|
6539
6609
|
})).mutation(async ({ input }) => {
|
|
6540
6610
|
const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
|
|
6541
6611
|
return res;
|
|
6542
6612
|
}),
|
|
6543
6613
|
/** Resize a PTY spawn. */
|
|
6544
|
-
resizePty: protectedProcedure.input(
|
|
6545
|
-
spawnId:
|
|
6546
|
-
cols:
|
|
6547
|
-
rows:
|
|
6614
|
+
resizePty: protectedProcedure.input(z28.object({
|
|
6615
|
+
spawnId: z28.string().max(128),
|
|
6616
|
+
cols: z28.number().int().min(1).max(1e3),
|
|
6617
|
+
rows: z28.number().int().min(1).max(1e3)
|
|
6548
6618
|
})).mutation(({ input }) => {
|
|
6549
6619
|
const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
|
|
6550
6620
|
return { ok };
|
|
6551
6621
|
}),
|
|
6552
6622
|
/** Kill a running AI spawn. */
|
|
6553
|
-
kill: protectedProcedure.input(
|
|
6623
|
+
kill: protectedProcedure.input(z28.object({ spawnId: z28.string().max(128) })).mutation(({ input }) => {
|
|
6554
6624
|
const killed = aiSpawnManager.kill(input.spawnId);
|
|
6555
6625
|
return { ok: killed };
|
|
6556
6626
|
}),
|
|
@@ -6559,23 +6629,23 @@ var aiRouter = router({
|
|
|
6559
6629
|
return aiSpawnManager.list();
|
|
6560
6630
|
}),
|
|
6561
6631
|
/** Acknowledge receipt of all data — agent can clean up after TTL. */
|
|
6562
|
-
ack: protectedProcedure.input(
|
|
6632
|
+
ack: protectedProcedure.input(z28.object({ spawnId: z28.string().max(128) })).mutation(({ input }) => {
|
|
6563
6633
|
const acked = aiSpawnManager.ack(input.spawnId);
|
|
6564
6634
|
return { ok: acked };
|
|
6565
6635
|
}),
|
|
6566
6636
|
/** Forward a JSON-RPC request to the local codex app-server. */
|
|
6567
|
-
codexRequest: protectedProcedure.input(
|
|
6568
|
-
method:
|
|
6569
|
-
params:
|
|
6570
|
-
env:
|
|
6637
|
+
codexRequest: protectedProcedure.input(z28.object({
|
|
6638
|
+
method: z28.string().max(256),
|
|
6639
|
+
params: z28.record(z28.string(), z28.unknown()).default({}),
|
|
6640
|
+
env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional()
|
|
6571
6641
|
})).mutation(async ({ input }) => {
|
|
6572
6642
|
await codexAppServerManager.ensureConnected(input.env);
|
|
6573
6643
|
const result = await codexAppServerManager.sendRequest(input.method, input.params);
|
|
6574
6644
|
return { result };
|
|
6575
6645
|
}),
|
|
6576
6646
|
/** Stream notifications from the codex app-server. Optionally filter by threadId. */
|
|
6577
|
-
codexNotifications: protectedProcedure.input(
|
|
6578
|
-
threadId:
|
|
6647
|
+
codexNotifications: protectedProcedure.input(z28.object({
|
|
6648
|
+
threadId: z28.string().max(256).optional()
|
|
6579
6649
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
6580
6650
|
await codexAppServerManager.ensureConnected();
|
|
6581
6651
|
const queue = [];
|
|
@@ -6612,13 +6682,13 @@ var aiRouter = router({
|
|
|
6612
6682
|
});
|
|
6613
6683
|
|
|
6614
6684
|
// src/trpc/routers/wiki.ts
|
|
6615
|
-
import { z as
|
|
6685
|
+
import { z as z29 } from "zod";
|
|
6616
6686
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
6617
6687
|
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
6618
6688
|
import { dirname as dirname3 } from "path";
|
|
6619
6689
|
import { resolve as resolvePath3, join as join6, relative, sep } from "path";
|
|
6620
|
-
var CWD_SCHEMA2 =
|
|
6621
|
-
var REL_PATH_SCHEMA =
|
|
6690
|
+
var CWD_SCHEMA2 = z29.string().min(1).max(4096);
|
|
6691
|
+
var REL_PATH_SCHEMA = z29.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
|
|
6622
6692
|
message: "Path must be a relative path without traversal"
|
|
6623
6693
|
});
|
|
6624
6694
|
var MAX_FILES = 500;
|
|
@@ -6638,9 +6708,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
|
6638
6708
|
"target",
|
|
6639
6709
|
"out"
|
|
6640
6710
|
]);
|
|
6641
|
-
var RepoEntrySchema =
|
|
6642
|
-
|
|
6643
|
-
|
|
6711
|
+
var RepoEntrySchema = z29.lazy(() => z29.union([
|
|
6712
|
+
z29.object({ type: z29.literal("file"), name: z29.string(), path: z29.string() }),
|
|
6713
|
+
z29.object({ type: z29.literal("dir"), name: z29.string(), path: z29.string(), children: z29.array(RepoEntrySchema) })
|
|
6644
6714
|
]));
|
|
6645
6715
|
async function walkMarkdown(root, dir, depth, counter) {
|
|
6646
6716
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
@@ -6710,13 +6780,13 @@ async function resolveRoot(cwd) {
|
|
|
6710
6780
|
}
|
|
6711
6781
|
}
|
|
6712
6782
|
var wikiRouter = router({
|
|
6713
|
-
listRepoMarkdown: protectedProcedure.input(
|
|
6783
|
+
listRepoMarkdown: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
6714
6784
|
const root = await resolveRoot(input.cwd);
|
|
6715
6785
|
const counter = { n: 0 };
|
|
6716
6786
|
const entries = await walkMarkdown(root, root, 0, counter);
|
|
6717
6787
|
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
6718
6788
|
}),
|
|
6719
|
-
readRepoMarkdown: protectedProcedure.input(
|
|
6789
|
+
readRepoMarkdown: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
6720
6790
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6721
6791
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
6722
6792
|
}
|
|
@@ -6742,10 +6812,10 @@ var wikiRouter = router({
|
|
|
6742
6812
|
const content = await readFile2(realTarget, "utf-8");
|
|
6743
6813
|
return { path: input.path, content };
|
|
6744
6814
|
}),
|
|
6745
|
-
writeMarkdown: protectedProcedure.input(
|
|
6815
|
+
writeMarkdown: protectedProcedure.input(z29.object({
|
|
6746
6816
|
cwd: CWD_SCHEMA2,
|
|
6747
6817
|
path: REL_PATH_SCHEMA,
|
|
6748
|
-
content:
|
|
6818
|
+
content: z29.string().max(5e6)
|
|
6749
6819
|
})).mutation(async ({ input }) => {
|
|
6750
6820
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6751
6821
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
@@ -6756,7 +6826,7 @@ var wikiRouter = router({
|
|
|
6756
6826
|
await writeFile6(target, input.content, "utf-8");
|
|
6757
6827
|
return { path: input.path, ok: true };
|
|
6758
6828
|
}),
|
|
6759
|
-
createFile: protectedProcedure.input(
|
|
6829
|
+
createFile: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6760
6830
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6761
6831
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
6762
6832
|
}
|
|
@@ -6772,13 +6842,13 @@ var wikiRouter = router({
|
|
|
6772
6842
|
await writeFile6(target, "", "utf-8");
|
|
6773
6843
|
return { path: input.path, ok: true };
|
|
6774
6844
|
}),
|
|
6775
|
-
createDir: protectedProcedure.input(
|
|
6845
|
+
createDir: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6776
6846
|
const root = await resolveRoot(input.cwd);
|
|
6777
6847
|
const target = await resolveSafePath(root, input.path, false);
|
|
6778
6848
|
await mkdir6(target, { recursive: true });
|
|
6779
6849
|
return { path: input.path, ok: true };
|
|
6780
6850
|
}),
|
|
6781
|
-
renamePath: protectedProcedure.input(
|
|
6851
|
+
renamePath: protectedProcedure.input(z29.object({
|
|
6782
6852
|
cwd: CWD_SCHEMA2,
|
|
6783
6853
|
fromPath: REL_PATH_SCHEMA,
|
|
6784
6854
|
toPath: REL_PATH_SCHEMA
|
|
@@ -6796,14 +6866,14 @@ var wikiRouter = router({
|
|
|
6796
6866
|
await rename2(from, to);
|
|
6797
6867
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6798
6868
|
}),
|
|
6799
|
-
ensureRoot: protectedProcedure.input(
|
|
6869
|
+
ensureRoot: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
6800
6870
|
const expanded = expandEnvVar(input.cwd);
|
|
6801
6871
|
const abs = resolvePath3(expanded);
|
|
6802
6872
|
await mkdir6(abs, { recursive: true });
|
|
6803
6873
|
const root = await realpath(abs);
|
|
6804
6874
|
return { root, ok: true };
|
|
6805
6875
|
}),
|
|
6806
|
-
deletePath: protectedProcedure.input(
|
|
6876
|
+
deletePath: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6807
6877
|
const root = await resolveRoot(input.cwd);
|
|
6808
6878
|
const target = await resolveSafePath(root, input.path, true);
|
|
6809
6879
|
if (target === root) {
|