@runeya/runeya 2.0.14 → 2.0.18
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 +259 -20
- package/agent/index.js.map +1 -1
- package/agent-manager-7IDZTNVZ-HVRWIXYW.js +8 -0
- package/{chunk-AJW7LDO5.js → chunk-AHOJAT74.js} +9 -3
- package/chunk-AHOJAT74.js.map +1 -0
- package/{dist-TI3HFRUW.js → dist-CJTJWMCR.js} +321 -92
- package/dist-CJTJWMCR.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/web/assets/{AddressBar.vue-B6BOLYmO.js → AddressBar.vue-BZnGu8vW.js} +1 -1
- package/web/assets/{AgentScalarChatInterface.vue-DKSmjtvV.js → AgentScalarChatInterface.vue-QkKS0oIt.js} +1 -1
- package/web/assets/{AgentTerminalPage-BZ6jaRAs.js → AgentTerminalPage-CfI3DoEO.js} +1 -1
- package/web/assets/AiChatPage-C_j-aspS.js +1 -0
- package/web/assets/{AppLayout-B7-y0tBI.css → AppLayout-Cf8sRK63.css} +1 -1
- package/web/assets/{AppLayout-DnMCPCO8.js → AppLayout-CgU4s6lb.js} +1 -1
- package/web/assets/{AuditPage-CTdEvLE-.js → AuditPage-C42BeKr5.js} +1 -1
- package/web/assets/{CodeInput.vue-Sp2dM8hl.js → CodeInput.vue-BGBOdacc.js} +1 -1
- package/web/assets/{Collection.vue-CdPjaC9d.js → Collection.vue-Vub9L9if.js} +1 -1
- package/web/assets/{CollectionAuthentication.vue-DMPykUah.js → CollectionAuthentication.vue-DMa9nYTH.js} +1 -1
- package/web/assets/CollectionCookies.vue-Dr_bErXS.js +1 -0
- package/web/assets/{CollectionEnvironment.vue-DKab6xJJ.js → CollectionEnvironment.vue-CcS_RH1F.js} +1 -1
- package/web/assets/{CollectionOverview.vue-DlODh8Vk.js → CollectionOverview.vue-Cm3m-3IA.js} +1 -1
- package/web/assets/CollectionScripts.vue-DwfCDW_N.js +1 -0
- package/web/assets/{CollectionServers.vue-Br-QackN.js → CollectionServers.vue-CDU7RCJI.js} +1 -1
- package/web/assets/{CollectionSettings.vue-Cm6NQbDm.js → CollectionSettings.vue-QApKyKpx.js} +1 -1
- package/web/assets/CollectionSync.vue-2mc6W9Vb.js +1 -0
- package/web/assets/{CommandActionInput.vue-CZ3-rqSL.js → CommandActionInput.vue-CSydiKjM.js} +1 -1
- package/web/assets/{Cookies.vue-Duz-a-ga.js → Cookies.vue-2UMujX_l.js} +1 -1
- package/web/assets/DashboardPage-CSkUCQHY.css +1 -0
- package/web/assets/DashboardPage-Dt5zSm2a.js +1 -0
- package/web/assets/{DataTable.vue-Dorr-r7J.js → DataTable.vue-BKb6QQRz.js} +1 -1
- package/web/assets/{DataTableCheckbox.vue-CATn-YYp.js → DataTableCheckbox.vue-DC2n-xeZ.js} +1 -1
- package/web/assets/{DataTableHeader.vue-C3SUSaR8.js → DataTableHeader.vue-Cbolg5AE.js} +1 -1
- package/web/assets/{DataTableInput.vue-_06pwPUA.js → DataTableInput.vue-DoVPLXed.js} +1 -1
- package/web/assets/{DeleteSidebarListElement.vue-DoqRnMXx.js → DeleteSidebarListElement.vue-Br-Lvh7k.js} +1 -1
- package/web/assets/{EditSidebarListElement.vue-BqTw6Tho.js → EditSidebarListElement.vue-BVJ4wsTf.js} +1 -1
- package/web/assets/{EditorIcon-CbpIT0A1.js → EditorIcon-D3F3QHD_.js} +1 -1
- package/web/assets/{EmptyState.vue-Bur5L0a4.js → EmptyState.vue-DMCTVrXN.js} +1 -1
- package/web/assets/{Environment.vue-C50lH9cP.js → Environment.vue-CEBYjegx.js} +1 -1
- package/web/assets/{EnvironmentForm-BDfzXuHx.js → EnvironmentForm-D9pUNi_S.js} +1 -1
- package/web/assets/{EnvironmentFormPage-CLylRN6B.js → EnvironmentFormPage-BQwHvpiH.js} +1 -1
- package/web/assets/{EnvironmentListPage-DlUT6LnX.js → EnvironmentListPage-BEX6YTjm.js} +1 -1
- package/web/assets/{EnvironmentModal.vue-Dz5CArRX.js → EnvironmentModal.vue-Bipjnu_F.js} +1 -1
- package/web/assets/{EnvironmentSelector-DHoYUCTH.js → EnvironmentSelector-BsLO-o9W.js} +1 -1
- package/web/assets/{Form.vue-BzZCMgN1.js → Form.vue-CwujTuIH.js} +1 -1
- package/web/assets/{IconSelector.vue-BCmeqlrs.js → IconSelector.vue-xGa1snoB.js} +1 -1
- package/web/assets/KanbanBoardPage-CS0DFaYQ.js +2 -0
- package/web/assets/KanbanBoardPage-GHv836NO.css +1 -0
- package/web/assets/{KanbanListPage-BLdNz80q.js → KanbanListPage-BlycDa8i.js} +1 -1
- package/web/assets/{LaunchProjectPage-DjRA2D3h.js → LaunchProjectPage-CQPXVRR8.js} +1 -1
- package/web/assets/{LaunchServicesPage-CKaGcu3z.js → LaunchServicesPage-DIc47d5w.js} +1 -1
- package/web/assets/{LogViewer-CtX_6uFM.js → LogViewer-D-j9SP-8.js} +1 -1
- package/web/assets/{ProcessControls-BY-_9zo7.js → ProcessControls-D3MHr6vJ.js} +1 -1
- package/web/assets/{ProcessDetailPage-Bqis1qMA.js → ProcessDetailPage-DArVdn5O.js} +1 -1
- package/web/assets/{ProcessMetrics-DQybvwcA.js → ProcessMetrics-tRbudcTQ.js} +1 -1
- package/web/assets/{ProjectDetailPage-FBPonwd5.js → ProjectDetailPage-DQWbqmra.js} +1 -1
- package/web/assets/{ProjectListPage-xwlVXN8A.js → ProjectListPage-BArhG94f.js} +1 -1
- package/web/assets/{RandomJobTestPage-0pqne-FD.js → RandomJobTestPage-cx0kQXnf.js} +1 -1
- package/web/assets/{Request.vue-Db4XEPKt.js → Request.vue-B9DoYtI8.js} +1 -1
- package/web/assets/{RequestAuth.vue-CK1A6ySt.js → RequestAuth.vue-CqHxzl6g.js} +1 -1
- package/web/assets/{RequestRoot.vue-BLF0GGT5.js → RequestRoot.vue-C28ISMld.js} +1 -1
- package/web/assets/{ScalarAsciiArt.vue-BPdUsXWj.js → ScalarAsciiArt.vue-BYd0f-av.js} +1 -1
- package/web/assets/{ScalarIconEyeSlash.vue-BBDBShRO.js → ScalarIconEyeSlash.vue-Ct2ktTXq.js} +1 -1
- package/web/assets/{ScalarIconTrash.vue-Tpr15aNY.js → ScalarIconTrash.vue-DQO_gQ8s.js} +1 -1
- package/web/assets/{ScenarioEditorPage-DNuo-2Gi.js → ScenarioEditorPage-DP06DP64.js} +1 -1
- package/web/assets/{ServerVariablesForm.vue-XLQ145gw.js → ServerVariablesForm.vue-D11m7aiX.js} +1 -1
- package/web/assets/{ServiceControlsBar-CCTGcA1t.js → ServiceControlsBar-DMq83CtH.js} +1 -1
- package/web/assets/{ServiceDetailPage-BELECRic.css → ServiceDetailPage-BngfQIAo.css} +1 -1
- package/web/assets/ServiceDetailPage-Cn1MTG_u.js +2 -0
- package/web/assets/{ServiceFormPage-F3boRKs-.js → ServiceFormPage-CyIValC5.js} +1 -1
- package/web/assets/{Settings.vue-D_1yQu6i.js → Settings.vue-CCeUjK5z.js} +1 -1
- package/web/assets/{SettingsPage-CgJN_IL7.css → SettingsPage-BhGoaUHP.css} +1 -1
- package/web/assets/SettingsPage-LVnvVA93.js +225 -0
- package/web/assets/{SetupKeyPage-BcaSoLjU.js → SetupKeyPage-DOxR0hTs.js} +1 -1
- package/web/assets/{SetupPage-mCVAKLtm.js → SetupPage-DTQqk8IW.js} +1 -1
- package/web/assets/{Sidebar.vue-De4YlW0c.js → Sidebar.vue-BLpHEfAt.js} +1 -1
- package/web/assets/{SidebarButton.vue-CctYiTRp.js → SidebarButton.vue-CNMSjNtm.js} +1 -1
- package/web/assets/{SidebarListElement.vue-Cv7jUZIM.js → SidebarListElement.vue-DSsy6NQT.js} +1 -1
- package/web/assets/TiptapEditor-DzMKh7Iq.css +1 -0
- package/web/assets/TiptapEditor-TuQki585.js +181 -0
- package/web/assets/{UnlockPage-BSpzyZnd.js → UnlockPage-D4x8qq_i.js} +1 -1
- package/web/assets/{VariablesTable-Dn3IvplD.js → VariablesTable-BP8KuwPI.js} +1 -1
- package/web/assets/{ViewLayout.vue-fiagi8zc.js → ViewLayout.vue-Dui_p5J4.js} +1 -1
- package/web/assets/{ViewLayoutContent.vue-BehGrsED.js → ViewLayoutContent.vue-CZRQTJFb.js} +1 -1
- package/web/assets/{ViewLayoutSection.vue-D4icCgQI.js → ViewLayoutSection.vue-C87DZ2QU.js} +1 -1
- package/web/assets/WikiPage-BrgnqOvx.js +1 -0
- package/web/assets/WikiView-CMF4PzXp.css +1 -0
- package/web/assets/WikiView-Decl55xY.js +1 -0
- package/web/assets/{active-entities-CkBGjwu9.js → active-entities-DEkfqGrE.js} +1 -1
- package/web/assets/{api-reference-D1EfYtPj.js → api-reference-DP5iGzGP.js} +1 -1
- package/web/assets/{autocomplete-CjBHTJWh.js → autocomplete-DcAAfn0y.js} +1 -1
- package/web/assets/{card-CsmU2iiY.js → card-DyK4dvjg.js} +1 -1
- package/web/assets/{checkbox-B5XZqi1U.js → checkbox-Csn61_gJ.js} +1 -1
- package/web/assets/{chip-C4pSomPm.js → chip-DkjFl7f-.js} +1 -1
- package/web/assets/{column-CR3Hix4J.js → column-DyznW54C.js} +1 -1
- package/web/assets/{core-CtGUajLi.js → core-BXP8Yp-2.js} +1 -1
- package/web/assets/{cssMode-nuznbveH.js → cssMode-C9nCeku9.js} +1 -1
- package/web/assets/{dist--ZlcDulO.js → dist-DKLcX5kd.js} +1 -1
- package/web/assets/{dist-DH_zJr7W.js → dist-DM4_kDGf.js} +1 -1
- package/web/assets/{dist-WjGUyWSO.js → dist-DOfPSpzL.js} +1 -1
- package/web/assets/{dist-CXkMrHNP.js → dist-zqENM1-W.js} +1 -1
- package/web/assets/{divider-CnJlD7qO.js → divider-BJQexqne.js} +1 -1
- package/web/assets/{fieldset-D9zY6R6s.js → fieldset-BPm9DkKy.js} +1 -1
- package/web/assets/{freemarker2-Bw43sOne.js → freemarker2-BaJGEPal.js} +1 -1
- package/web/assets/{handlebars-C8qgW7u6.js → handlebars-BQFn9RdQ.js} +1 -1
- package/web/assets/{html-Dy9PKnkr.js → html-Cr5a-EYz.js} +1 -1
- package/web/assets/{htmlMode-o8EU0tqo.js → htmlMode-CC9GYLNa.js} +1 -1
- package/web/assets/{index-CIcE6DNv.js → index-CV_lCcKm.js} +5 -5
- package/web/assets/{javascript-CuRngcUR.js → javascript-mDqsZBlu.js} +1 -1
- package/web/assets/{jsonMode-CsUIxwQq.js → jsonMode-B54JAo3i.js} +1 -1
- package/web/assets/{keyboard-DhkINir5.js → keyboard-BALpgxzI.js} +1 -1
- package/web/assets/{lib-E9M4L9vE.js → lib-CbGVmNqI.js} +1 -1
- package/web/assets/{library-BXoSag-V.js → library-DL2YIihE.js} +1 -1
- package/web/assets/{liquid-CraMnqaK.js → liquid-DiGHjG_L.js} +1 -1
- package/web/assets/{mdx-DPSW5q1A.js → mdx-D6dV5_Hg.js} +1 -1
- package/web/assets/{mediaTypes-DDACekzr.js → mediaTypes-97PR9Ryv.js} +1 -1
- package/web/assets/{message-DKOCajc6.js → message-CkvY1zpy.js} +1 -1
- package/web/assets/{minus-CtlH9Syh.js → minus-Cz1A1nRX.js} +1 -1
- package/web/assets/{multiselect-sshNnjnF.js → multiselect-Cg_IvTVL.js} +1 -1
- package/web/assets/{password-Dv9g39jb.js → password-DnBPksM5.js} +1 -1
- package/web/assets/{plus-CG5Ui-l-.js → plus-DLza1kmt.js} +1 -1
- package/web/assets/{pretty-ms-D2BVTeMx.js → pretty-ms-CFs2lDEt.js} +1 -1
- package/web/assets/process.store-DOZqELYx.js +1 -0
- package/web/assets/{project.store-CVbXSH5d.js → project.store-1ZxiIOdG.js} +1 -1
- package/web/assets/{python-BLq8fVkV.js → python-CBOkbLwS.js} +1 -1
- package/web/assets/{radiobutton-Bz_ltBfM.js → radiobutton-Bzj_cgKU.js} +1 -1
- package/web/assets/{razor-CVrBU-Fk.js → razor-DbhB_XzZ.js} +1 -1
- package/web/assets/router-BXlVOZht.js +1 -0
- package/web/assets/{settings.store-vM-8jbAF.js → settings.store-Qq6Gc2CT.js} +1 -1
- package/web/assets/{store-CTKZgNiD.js → store-Cuguy-ft.js} +1 -1
- package/web/assets/{tabpanel-DaZzgdrv.js → tabpanel-BkIDALQ8.js} +1 -1
- package/web/assets/trpc-BFwMZelk.js +1 -0
- package/web/assets/{tsMode-DO5zEzzD.js → tsMode-B48YcNcc.js} +1 -1
- package/web/assets/{typescript-Do-K_3Jj.js → typescript-DNe7mq9Z.js} +1 -1
- package/web/assets/{urls-BlVUwVFM.js → urls-Bhy-NKbg.js} +1 -1
- package/web/assets/{use-tree-walker-xoEX554A.js → use-tree-walker-DGf54lqT.js} +1 -1
- package/web/assets/useAiChatDrawer-C-QgDgQO.js +1 -0
- package/web/assets/{useClipboard-B3J6cGK-.js → useClipboard-Ba0ZMSjV.js} +1 -1
- package/web/assets/{useLayout-DHrumlpr.js → useLayout-CmsWxVhO.js} +1 -1
- package/web/assets/{usePluginManager-BEbBxZnF.js → usePluginManager-DBLyufEz.js} +1 -1
- package/web/assets/{useSidebar-BCBwVF2x.js → useSidebar-BWKBo0y4.js} +1 -1
- package/web/assets/{vue-router-CuFIegGa.js → vue-router-By6H_4a-.js} +1 -1
- package/web/assets/{xml-BolCsFLY.js → xml-zVv61nBe.js} +1 -1
- package/web/assets/{yaml-5iZTkCV3.js → yaml-DJ0ncxUH.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-3DHUF2DC-KN6O7WSA.js +0 -8
- package/chunk-AJW7LDO5.js.map +0 -1
- package/dist-TI3HFRUW.js.map +0 -1
- package/web/assets/AiChatPage-C1r42kX7.js +0 -1
- package/web/assets/CollectionCookies.vue-DqNgVtd-.js +0 -1
- package/web/assets/CollectionScripts.vue-B2gkfo4d.js +0 -1
- package/web/assets/CollectionSync.vue-bB7sdahP.js +0 -1
- package/web/assets/DashboardPage-gZJ4_s8T.css +0 -1
- package/web/assets/DashboardPage-hIc9wP_Q.js +0 -1
- package/web/assets/KanbanBoardPage-DoXgFMvo.js +0 -141
- package/web/assets/KanbanBoardPage-hqNojI5j.css +0 -1
- package/web/assets/ServiceDetailPage-UVg73scN.js +0 -2
- package/web/assets/SettingsPage-Cg78lQZF.js +0 -225
- package/web/assets/process.store-CutdTiYB.js +0 -1
- package/web/assets/router-CuxdGfLF.js +0 -1
- package/web/assets/trpc-BIjF6nTt.js +0 -1
- package/web/assets/useAiChatDrawer-BJugMTj0.js +0 -1
- /package/{agent-manager-3DHUF2DC-KN6O7WSA.js.map → agent-manager-7IDZTNVZ-HVRWIXYW.js.map} +0 -0
- /package/web/assets/{_plugin-vue_export-helper-C08BWUE4.js → _plugin-vue_export-helper-BVSTY9ge.js} +0 -0
- /package/web/assets/{abap-BMPR0rjj.js → abap-DktqfXDx.js} +0 -0
- /package/web/assets/{apex-DYC4uYYf.js → apex-C84w8VGC.js} +0 -0
- /package/web/assets/{azcli-GZlxEjpa.js → azcli-Cs5iRzPw.js} +0 -0
- /package/web/assets/{base64-VLYHbiMn.js → base64-CG47Jc3Y.js} +0 -0
- /package/web/assets/{bat-Cv8OxItG.js → bat-Bxztgnvx.js} +0 -0
- /package/web/assets/{bicep-CuCbE6Ue.js → bicep-EmTmx6Fy.js} +0 -0
- /package/web/assets/{cameligo-BEPX3585.js → cameligo-DZYk6cOD.js} +0 -0
- /package/web/assets/{clojure--6rbXIPY.js → clojure-QYeZgX63.js} +0 -0
- /package/web/assets/{coffee-ByvVcDGX.js → coffee-DP64XG_I.js} +0 -0
- /package/web/assets/{cpp-CECtPnZp.js → cpp-Dz6-l8vs.js} +0 -0
- /package/web/assets/{csharp-DyYyZ8UX.js → csharp-CcVGRY-t.js} +0 -0
- /package/web/assets/{csp-B9apvcI9.js → csp-Cqpt0M-R.js} +0 -0
- /package/web/assets/{css-CfdBNbB0.js → css-BEjT2o3U.js} +0 -0
- /package/web/assets/{cypher-BPqQq4XX.js → cypher-CFsKHT39.js} +0 -0
- /package/web/assets/{dart-BLToxiYU.js → dart-Dd8xW03D.js} +0 -0
- /package/web/assets/{dist-COg0nRYK.js → dist-BPIMeATj.js} +0 -0
- /package/web/assets/{dockerfile-CKo5jN7V.js → dockerfile-MHoTmcM0.js} +0 -0
- /package/web/assets/{ecl-qo8pi1Ty.js → ecl-DDOk3_u-.js} +0 -0
- /package/web/assets/{elixir-Dv1YAMPJ.js → elixir-BrvvYQkl.js} +0 -0
- /package/web/assets/{flow9-BKTKs1nN.js → flow9-Desf9xEz.js} +0 -0
- /package/web/assets/{fsharp-BPoxgmtD.js → fsharp-B8Icgpa6.js} +0 -0
- /package/web/assets/{go-DgJ-2ryf.js → go-Do5MIzaM.js} +0 -0
- /package/web/assets/{graphql-YTK8zpFe.js → graphql-CiG6oX7b.js} +0 -0
- /package/web/assets/{hcl-tYOvwaJ3.js → hcl-C-xKM4WW.js} +0 -0
- /package/web/assets/{ini-BTZ3lNbM.js → ini-DXIR0OjP.js} +0 -0
- /package/web/assets/{java-boRe0CIQ.js → java-Dy8EfEt9.js} +0 -0
- /package/web/assets/{julia-K6BtoWYX.js → julia-DkrFX1s_.js} +0 -0
- /package/web/assets/{kotlin-CglG00z4.js → kotlin-Dar7GDKm.js} +0 -0
- /package/web/assets/{less-DlnIYk4g.js → less-DzP6DgzU.js} +0 -0
- /package/web/assets/{lexon-D4aKXJ0J.js → lexon-DptP6qTd.js} +0 -0
- /package/web/assets/{lua-DeQCQ0IN.js → lua-CCVwtOWf.js} +0 -0
- /package/web/assets/{m3-yCjRJP_i.js → m3-DrEvvio5.js} +0 -0
- /package/web/assets/{markdown-C2IT79AR.js → markdown-ruxuCKkk.js} +0 -0
- /package/web/assets/{mips-BAnhwv_D.js → mips-BQqMOsEB.js} +0 -0
- /package/web/assets/{msdax-D1jHDTih.js → msdax-phO8WA3n.js} +0 -0
- /package/web/assets/{mysql-CTJU-jL7.js → mysql-CTdeo58Q.js} +0 -0
- /package/web/assets/{objective-c-CwxzUA28.js → objective-c-jhQ0iM6X.js} +0 -0
- /package/web/assets/{pascal-DpSQp86i.js → pascal-C8SkzMHp.js} +0 -0
- /package/web/assets/{pascaligo-C4F0Gc12.js → pascaligo-ArPaQLGJ.js} +0 -0
- /package/web/assets/{perl-87HvGh3u.js → perl-DdJtSHIR.js} +0 -0
- /package/web/assets/{pgsql-DUB3YVHd.js → pgsql-DzJ8nWb2.js} +0 -0
- /package/web/assets/{php-gpgbnwXh.js → php-CCjtAB9z.js} +0 -0
- /package/web/assets/{pla-9VH1h0qA.js → pla-BcEbmw3g.js} +0 -0
- /package/web/assets/{postiats-DYNil0RB.js → postiats-Fpcus-uJ.js} +0 -0
- /package/web/assets/{powerquery-Cyj_QMWN.js → powerquery-Cu-9g7NG.js} +0 -0
- /package/web/assets/{powershell-BxsWzjwy.js → powershell-DO2fUGfn.js} +0 -0
- /package/web/assets/{protobuf-CpB35fc2.js → protobuf-DQup7qRj.js} +0 -0
- /package/web/assets/{pug-CQ3BHXrf.js → pug-Duim2NdD.js} +0 -0
- /package/web/assets/{qsharp-hvdiA16n.js → qsharp-CytI7IVT.js} +0 -0
- /package/web/assets/{r-BcpSD-1e.js → r-DZINbLk_.js} +0 -0
- /package/web/assets/{redis-B2JGUU7L.js → redis-Bf0SVuM0.js} +0 -0
- /package/web/assets/{redshift-DtV7K8A1.js → redshift-oHIhn4rc.js} +0 -0
- /package/web/assets/{restructuredtext-avYcqBCA.js → restructuredtext-B3n-oeH1.js} +0 -0
- /package/web/assets/{ruby-B75_Tp8C.js → ruby-DXTCv0Dq.js} +0 -0
- /package/web/assets/{rust-CHon-ZXH.js → rust-BM9bjpGj.js} +0 -0
- /package/web/assets/{sb-iehvyQKY.js → sb-BU8bPS70.js} +0 -0
- /package/web/assets/{scala-LBw1ennX.js → scala-BP9uGS4X.js} +0 -0
- /package/web/assets/{scheme-BRK_sKgt.js → scheme-rmkEHrlu.js} +0 -0
- /package/web/assets/{scss-CzbUsG5V.js → scss-BtCDKYlG.js} +0 -0
- /package/web/assets/{shell-DdtWj1FH.js → shell-CG1BTV1P.js} +0 -0
- /package/web/assets/{solidity-CBYPsj6K.js → solidity-DAYsr878.js} +0 -0
- /package/web/assets/{sophia-BAmZLhFu.js → sophia-DLSOk_-J.js} +0 -0
- /package/web/assets/{sparql-DzxQz_25.js → sparql-C_sea8Qf.js} +0 -0
- /package/web/assets/{sql-CtZa8xg5.js → sql-zI2PRpPJ.js} +0 -0
- /package/web/assets/{st-3yAXYt2f.js → st-VM0k3m2K.js} +0 -0
- /package/web/assets/{swift-nwo4k0Qx.js → swift-DAxKPUqq.js} +0 -0
- /package/web/assets/{systemverilog-38mUSYaO.js → systemverilog-D3gk_LvQ.js} +0 -0
- /package/web/assets/{tcl-DfkL3MZ2.js → tcl-YQSEIPQI.js} +0 -0
- /package/web/assets/{twig-C2_DTvv-.js → twig-Bt5uw3P4.js} +0 -0
- /package/web/assets/{typespec-Dn7A_7aO.js → typespec-CF_qDuWb.js} +0 -0
- /package/web/assets/{vb-ByZEqbuQ.js → vb-DERgblZJ.js} +0 -0
- /package/web/assets/{w3c-keyname-CXRaQfIQ.js → w3c-keyname-B0Po4pAC.js} +0 -0
- /package/web/assets/{wgsl-BqCLRRs9.js → wgsl-BrfJ-tM_.js} +0 -0
package/agent/index.js
CHANGED
|
@@ -920,7 +920,9 @@ var SettingsSchema = z5.object({
|
|
|
920
920
|
mode: z5.enum(["local-simple", "cloud"]),
|
|
921
921
|
cloudUrl: z5.string().url().max(2048).nullable().optional(),
|
|
922
922
|
logParsers: z5.array(JSLogParserSchema).max(100).default([]),
|
|
923
|
-
scenarios: z5.array(ScenarioSchema).max(100).default([])
|
|
923
|
+
scenarios: z5.array(ScenarioSchema).max(100).default([]),
|
|
924
|
+
/** Absolute path to the folder where the global wiki/docs markdown files live. Optional. */
|
|
925
|
+
globalDocsPath: z5.string().max(4096).optional()
|
|
924
926
|
});
|
|
925
927
|
var TraefikConfigSchema = z5.object({
|
|
926
928
|
enabled: z5.boolean().default(false),
|
|
@@ -1106,6 +1108,8 @@ var ServiceConfigSchema = z7.object({
|
|
|
1106
1108
|
// Metadata fields (migration from old Runeya)
|
|
1107
1109
|
groups: z7.array(z7.string().max(200)).max(20).optional().default([]),
|
|
1108
1110
|
description: z7.string().max(2e3).optional(),
|
|
1111
|
+
/** Path (relative to service.cwd or absolute) where the service's docs/wiki markdown files live. Optional — defaults to service.cwd. */
|
|
1112
|
+
docsPath: z7.string().max(4096).optional(),
|
|
1109
1113
|
url: z7.string().max(2048).optional(),
|
|
1110
1114
|
localUrls: z7.array(z7.object({
|
|
1111
1115
|
url: z7.string().max(253).regex(/^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/),
|
|
@@ -2048,8 +2052,8 @@ var FileLogSource = class extends EventEmitter2 {
|
|
|
2048
2052
|
}
|
|
2049
2053
|
}
|
|
2050
2054
|
if (this.config.startFromEnd) {
|
|
2051
|
-
const
|
|
2052
|
-
this.offset =
|
|
2055
|
+
const stat3 = await fsPromises.stat(this.config.path);
|
|
2056
|
+
this.offset = stat3.size;
|
|
2053
2057
|
} else {
|
|
2054
2058
|
this.offset = 0;
|
|
2055
2059
|
}
|
|
@@ -2082,17 +2086,17 @@ var FileLogSource = class extends EventEmitter2 {
|
|
|
2082
2086
|
return this.logBuffer.getByProcessId(processId);
|
|
2083
2087
|
}
|
|
2084
2088
|
async readNewLines(processId) {
|
|
2085
|
-
let
|
|
2089
|
+
let stat3;
|
|
2086
2090
|
try {
|
|
2087
|
-
|
|
2091
|
+
stat3 = await fsPromises.stat(this.config.path);
|
|
2088
2092
|
} catch {
|
|
2089
2093
|
return;
|
|
2090
2094
|
}
|
|
2091
|
-
if (
|
|
2095
|
+
if (stat3.size < this.offset) {
|
|
2092
2096
|
this.offset = 0;
|
|
2093
2097
|
}
|
|
2094
|
-
if (
|
|
2095
|
-
const length =
|
|
2098
|
+
if (stat3.size === this.offset) return;
|
|
2099
|
+
const length = stat3.size - this.offset;
|
|
2096
2100
|
const buf = Buffer.alloc(length);
|
|
2097
2101
|
let fd = null;
|
|
2098
2102
|
try {
|
|
@@ -2890,8 +2894,8 @@ var TraefikManager = class {
|
|
|
2890
2894
|
const walk = async (dir, base) => {
|
|
2891
2895
|
let entries;
|
|
2892
2896
|
try {
|
|
2893
|
-
const { readdir } = await import("fs/promises");
|
|
2894
|
-
entries = await
|
|
2897
|
+
const { readdir: readdir2 } = await import("fs/promises");
|
|
2898
|
+
entries = await readdir2(dir);
|
|
2895
2899
|
} catch {
|
|
2896
2900
|
return;
|
|
2897
2901
|
}
|
|
@@ -2899,8 +2903,8 @@ var TraefikManager = class {
|
|
|
2899
2903
|
const full = join2(dir, entry);
|
|
2900
2904
|
const rel = join2(base, entry);
|
|
2901
2905
|
try {
|
|
2902
|
-
const { stat:
|
|
2903
|
-
const s = await
|
|
2906
|
+
const { stat: stat3 } = await import("fs/promises");
|
|
2907
|
+
const s = await stat3(full);
|
|
2904
2908
|
if (s.isDirectory()) {
|
|
2905
2909
|
await walk(full, rel);
|
|
2906
2910
|
} else {
|
|
@@ -4361,7 +4365,7 @@ var terminalRouter = router({
|
|
|
4361
4365
|
}
|
|
4362
4366
|
const queue = [];
|
|
4363
4367
|
let resolve = null;
|
|
4364
|
-
let
|
|
4368
|
+
let done2 = false;
|
|
4365
4369
|
const onData = (data) => {
|
|
4366
4370
|
queue.push(data);
|
|
4367
4371
|
if (resolve) {
|
|
@@ -4370,7 +4374,7 @@ var terminalRouter = router({
|
|
|
4370
4374
|
}
|
|
4371
4375
|
};
|
|
4372
4376
|
const onExit = () => {
|
|
4373
|
-
|
|
4377
|
+
done2 = true;
|
|
4374
4378
|
if (resolve) {
|
|
4375
4379
|
resolve();
|
|
4376
4380
|
resolve = null;
|
|
@@ -4379,7 +4383,7 @@ var terminalRouter = router({
|
|
|
4379
4383
|
emitter.on("data", onData);
|
|
4380
4384
|
emitter.on("exit", onExit);
|
|
4381
4385
|
try {
|
|
4382
|
-
while (!
|
|
4386
|
+
while (!done2 || queue.length > 0) {
|
|
4383
4387
|
if (queue.length > 0) {
|
|
4384
4388
|
yield queue.shift();
|
|
4385
4389
|
} else {
|
|
@@ -5026,7 +5030,7 @@ var AiSpawnManager = class {
|
|
|
5026
5030
|
if (!entry) throw new Error(`AI spawn ${spawnId} not found`);
|
|
5027
5031
|
let offset = fromOffset;
|
|
5028
5032
|
let resolve = null;
|
|
5029
|
-
let
|
|
5033
|
+
let done2 = false;
|
|
5030
5034
|
const onChunk = () => {
|
|
5031
5035
|
if (resolve) {
|
|
5032
5036
|
resolve();
|
|
@@ -5034,7 +5038,7 @@ var AiSpawnManager = class {
|
|
|
5034
5038
|
}
|
|
5035
5039
|
};
|
|
5036
5040
|
const onDone = () => {
|
|
5037
|
-
|
|
5041
|
+
done2 = true;
|
|
5038
5042
|
if (resolve) {
|
|
5039
5043
|
resolve();
|
|
5040
5044
|
resolve = null;
|
|
@@ -5043,7 +5047,7 @@ var AiSpawnManager = class {
|
|
|
5043
5047
|
entry.emitter.on("chunk", onChunk);
|
|
5044
5048
|
entry.emitter.on("done", onDone);
|
|
5045
5049
|
if (entry.status !== "running" && offset >= entry.buffer.length) {
|
|
5046
|
-
|
|
5050
|
+
done2 = true;
|
|
5047
5051
|
}
|
|
5048
5052
|
try {
|
|
5049
5053
|
while (true) {
|
|
@@ -5054,7 +5058,7 @@ var AiSpawnManager = class {
|
|
|
5054
5058
|
if (entry.status !== "running" && offset >= entry.buffer.length) {
|
|
5055
5059
|
break;
|
|
5056
5060
|
}
|
|
5057
|
-
if (
|
|
5061
|
+
if (done2 && offset >= entry.buffer.length) break;
|
|
5058
5062
|
await new Promise((r) => {
|
|
5059
5063
|
resolve = r;
|
|
5060
5064
|
});
|
|
@@ -5682,6 +5686,209 @@ var aiRouter = router({
|
|
|
5682
5686
|
})
|
|
5683
5687
|
});
|
|
5684
5688
|
|
|
5689
|
+
// src/trpc/routers/wiki.ts
|
|
5690
|
+
import { z as z26 } from "zod";
|
|
5691
|
+
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
5692
|
+
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
5693
|
+
import { dirname } from "path";
|
|
5694
|
+
import { resolve as resolvePath2, join as join5, relative, sep } from "path";
|
|
5695
|
+
var CWD_SCHEMA2 = z26.string().min(1).max(4096);
|
|
5696
|
+
var REL_PATH_SCHEMA = z26.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
|
|
5697
|
+
message: "Path must be a relative path without traversal"
|
|
5698
|
+
});
|
|
5699
|
+
var MAX_FILES = 500;
|
|
5700
|
+
var MAX_DEPTH = 8;
|
|
5701
|
+
var MAX_FILE_BYTES = 2e6;
|
|
5702
|
+
var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
5703
|
+
"node_modules",
|
|
5704
|
+
".git",
|
|
5705
|
+
"dist",
|
|
5706
|
+
"build",
|
|
5707
|
+
".next",
|
|
5708
|
+
".turbo",
|
|
5709
|
+
".cache",
|
|
5710
|
+
"coverage",
|
|
5711
|
+
".yarn",
|
|
5712
|
+
".pnpm-store",
|
|
5713
|
+
"target",
|
|
5714
|
+
"out"
|
|
5715
|
+
]);
|
|
5716
|
+
var RepoEntrySchema = z26.lazy(() => z26.union([
|
|
5717
|
+
z26.object({ type: z26.literal("file"), name: z26.string(), path: z26.string() }),
|
|
5718
|
+
z26.object({ type: z26.literal("dir"), name: z26.string(), path: z26.string(), children: z26.array(RepoEntrySchema) })
|
|
5719
|
+
]));
|
|
5720
|
+
async function walkMarkdown(root, dir, depth, counter) {
|
|
5721
|
+
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
5722
|
+
let entries;
|
|
5723
|
+
try {
|
|
5724
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
5725
|
+
} catch {
|
|
5726
|
+
return [];
|
|
5727
|
+
}
|
|
5728
|
+
const out = [];
|
|
5729
|
+
for (const e of entries) {
|
|
5730
|
+
if (counter.n >= MAX_FILES) break;
|
|
5731
|
+
if (e.name.startsWith(".") && e.name !== ".") continue;
|
|
5732
|
+
const abs = join5(dir, e.name);
|
|
5733
|
+
const rel = relative(root, abs).split(sep).join("/");
|
|
5734
|
+
if (e.isDirectory()) {
|
|
5735
|
+
if (IGNORED_DIRS.has(e.name)) continue;
|
|
5736
|
+
const children = await walkMarkdown(root, abs, depth + 1, counter);
|
|
5737
|
+
out.push({ type: "dir", name: e.name, path: rel, children });
|
|
5738
|
+
} else if (e.isFile() && /\.(md|markdown)$/i.test(e.name)) {
|
|
5739
|
+
counter.n += 1;
|
|
5740
|
+
out.push({ type: "file", name: e.name, path: rel });
|
|
5741
|
+
}
|
|
5742
|
+
}
|
|
5743
|
+
out.sort((a, b) => {
|
|
5744
|
+
if (a.type !== b.type) return a.type === "dir" ? -1 : 1;
|
|
5745
|
+
return a.name.localeCompare(b.name);
|
|
5746
|
+
});
|
|
5747
|
+
return out;
|
|
5748
|
+
}
|
|
5749
|
+
async function resolveSafePath(root, relPath, requireExist) {
|
|
5750
|
+
if (relPath.includes("..") || relPath.startsWith("/")) {
|
|
5751
|
+
throw new TRPCError6({ code: "BAD_REQUEST", message: "Chemin invalide" });
|
|
5752
|
+
}
|
|
5753
|
+
const target = resolvePath2(root, relPath);
|
|
5754
|
+
if (requireExist) {
|
|
5755
|
+
let real;
|
|
5756
|
+
try {
|
|
5757
|
+
real = await realpath(target);
|
|
5758
|
+
} catch {
|
|
5759
|
+
throw new TRPCError6({ code: "NOT_FOUND", message: "Chemin introuvable" });
|
|
5760
|
+
}
|
|
5761
|
+
if (real !== root && !(real + sep).startsWith(root + sep)) {
|
|
5762
|
+
throw new TRPCError6({ code: "FORBIDDEN", message: "Hors du dossier autoris\xE9" });
|
|
5763
|
+
}
|
|
5764
|
+
return real;
|
|
5765
|
+
}
|
|
5766
|
+
const parent = dirname(target);
|
|
5767
|
+
let realParent;
|
|
5768
|
+
try {
|
|
5769
|
+
realParent = await realpath(parent);
|
|
5770
|
+
} catch {
|
|
5771
|
+
realParent = parent;
|
|
5772
|
+
}
|
|
5773
|
+
if (realParent !== root && !(realParent + sep).startsWith(root + sep)) {
|
|
5774
|
+
throw new TRPCError6({ code: "FORBIDDEN", message: "Hors du dossier autoris\xE9" });
|
|
5775
|
+
}
|
|
5776
|
+
return resolvePath2(realParent, target.slice(parent.length).replace(/^[\\/]+/, ""));
|
|
5777
|
+
}
|
|
5778
|
+
async function resolveRoot(cwd) {
|
|
5779
|
+
const expanded = expandEnvVar(cwd);
|
|
5780
|
+
const abs = resolvePath2(expanded);
|
|
5781
|
+
try {
|
|
5782
|
+
return await realpath(abs);
|
|
5783
|
+
} catch {
|
|
5784
|
+
throw new TRPCError6({ code: "NOT_FOUND", message: `Dossier introuvable: ${abs}` });
|
|
5785
|
+
}
|
|
5786
|
+
}
|
|
5787
|
+
var wikiRouter = router({
|
|
5788
|
+
listRepoMarkdown: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
5789
|
+
const root = await resolveRoot(input.cwd);
|
|
5790
|
+
const counter = { n: 0 };
|
|
5791
|
+
const entries = await walkMarkdown(root, root, 0, counter);
|
|
5792
|
+
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
5793
|
+
}),
|
|
5794
|
+
readRepoMarkdown: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
5795
|
+
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
5796
|
+
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
5797
|
+
}
|
|
5798
|
+
const root = await resolveRoot(input.cwd);
|
|
5799
|
+
const target = resolvePath2(root, input.path);
|
|
5800
|
+
let realTarget;
|
|
5801
|
+
try {
|
|
5802
|
+
realTarget = await realpath(target);
|
|
5803
|
+
} catch {
|
|
5804
|
+
throw new TRPCError6({ code: "NOT_FOUND", message: "Fichier introuvable" });
|
|
5805
|
+
}
|
|
5806
|
+
const realTargetWithSep = realTarget + sep;
|
|
5807
|
+
if (realTarget !== root && !realTargetWithSep.startsWith(root + sep)) {
|
|
5808
|
+
throw new TRPCError6({ code: "FORBIDDEN", message: "Hors du dossier du service" });
|
|
5809
|
+
}
|
|
5810
|
+
const s = await stat2(realTarget);
|
|
5811
|
+
if (!s.isFile()) {
|
|
5812
|
+
throw new TRPCError6({ code: "BAD_REQUEST", message: "Pas un fichier" });
|
|
5813
|
+
}
|
|
5814
|
+
if (s.size > MAX_FILE_BYTES) {
|
|
5815
|
+
throw new TRPCError6({ code: "PAYLOAD_TOO_LARGE", message: "Fichier trop volumineux" });
|
|
5816
|
+
}
|
|
5817
|
+
const content = await readFile2(realTarget, "utf-8");
|
|
5818
|
+
return { path: input.path, content };
|
|
5819
|
+
}),
|
|
5820
|
+
writeMarkdown: protectedProcedure.input(z26.object({
|
|
5821
|
+
cwd: CWD_SCHEMA2,
|
|
5822
|
+
path: REL_PATH_SCHEMA,
|
|
5823
|
+
content: z26.string().max(5e6)
|
|
5824
|
+
})).mutation(async ({ input }) => {
|
|
5825
|
+
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
5826
|
+
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
5827
|
+
}
|
|
5828
|
+
const root = await resolveRoot(input.cwd);
|
|
5829
|
+
const target = await resolveSafePath(root, input.path, false);
|
|
5830
|
+
await mkdir6(dirname(target), { recursive: true });
|
|
5831
|
+
await writeFile6(target, input.content, "utf-8");
|
|
5832
|
+
return { path: input.path, ok: true };
|
|
5833
|
+
}),
|
|
5834
|
+
createFile: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
5835
|
+
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
5836
|
+
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
5837
|
+
}
|
|
5838
|
+
const root = await resolveRoot(input.cwd);
|
|
5839
|
+
const target = await resolveSafePath(root, input.path, false);
|
|
5840
|
+
try {
|
|
5841
|
+
await stat2(target);
|
|
5842
|
+
throw new TRPCError6({ code: "CONFLICT", message: "Fichier d\xE9j\xE0 existant" });
|
|
5843
|
+
} catch (err) {
|
|
5844
|
+
if (err instanceof TRPCError6) throw err;
|
|
5845
|
+
}
|
|
5846
|
+
await mkdir6(dirname(target), { recursive: true });
|
|
5847
|
+
await writeFile6(target, "", "utf-8");
|
|
5848
|
+
return { path: input.path, ok: true };
|
|
5849
|
+
}),
|
|
5850
|
+
createDir: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
5851
|
+
const root = await resolveRoot(input.cwd);
|
|
5852
|
+
const target = await resolveSafePath(root, input.path, false);
|
|
5853
|
+
await mkdir6(target, { recursive: true });
|
|
5854
|
+
return { path: input.path, ok: true };
|
|
5855
|
+
}),
|
|
5856
|
+
renamePath: protectedProcedure.input(z26.object({
|
|
5857
|
+
cwd: CWD_SCHEMA2,
|
|
5858
|
+
fromPath: REL_PATH_SCHEMA,
|
|
5859
|
+
toPath: REL_PATH_SCHEMA
|
|
5860
|
+
})).mutation(async ({ input }) => {
|
|
5861
|
+
const root = await resolveRoot(input.cwd);
|
|
5862
|
+
const from = await resolveSafePath(root, input.fromPath, true);
|
|
5863
|
+
const to = await resolveSafePath(root, input.toPath, false);
|
|
5864
|
+
try {
|
|
5865
|
+
await stat2(to);
|
|
5866
|
+
throw new TRPCError6({ code: "CONFLICT", message: "La cible existe d\xE9j\xE0" });
|
|
5867
|
+
} catch (err) {
|
|
5868
|
+
if (err instanceof TRPCError6) throw err;
|
|
5869
|
+
}
|
|
5870
|
+
await mkdir6(dirname(to), { recursive: true });
|
|
5871
|
+
await rename2(from, to);
|
|
5872
|
+
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
5873
|
+
}),
|
|
5874
|
+
ensureRoot: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
5875
|
+
const expanded = expandEnvVar(input.cwd);
|
|
5876
|
+
const abs = resolvePath2(expanded);
|
|
5877
|
+
await mkdir6(abs, { recursive: true });
|
|
5878
|
+
const root = await realpath(abs);
|
|
5879
|
+
return { root, ok: true };
|
|
5880
|
+
}),
|
|
5881
|
+
deletePath: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
5882
|
+
const root = await resolveRoot(input.cwd);
|
|
5883
|
+
const target = await resolveSafePath(root, input.path, true);
|
|
5884
|
+
if (target === root) {
|
|
5885
|
+
throw new TRPCError6({ code: "FORBIDDEN", message: "Impossible de supprimer la racine" });
|
|
5886
|
+
}
|
|
5887
|
+
await rm(target, { recursive: true, force: true });
|
|
5888
|
+
return { path: input.path, ok: true };
|
|
5889
|
+
})
|
|
5890
|
+
});
|
|
5891
|
+
|
|
5685
5892
|
// src/trpc/router.ts
|
|
5686
5893
|
var appRouter = router({
|
|
5687
5894
|
process: processRouter,
|
|
@@ -5689,14 +5896,46 @@ var appRouter = router({
|
|
|
5689
5896
|
config: configRouter,
|
|
5690
5897
|
terminal: terminalRouter,
|
|
5691
5898
|
git: gitRouter,
|
|
5692
|
-
ai: aiRouter
|
|
5899
|
+
ai: aiRouter,
|
|
5900
|
+
wiki: wikiRouter
|
|
5693
5901
|
});
|
|
5694
5902
|
|
|
5903
|
+
// src/utils/ensure-pty-helper.ts
|
|
5904
|
+
import { createRequire as createRequire2 } from "module";
|
|
5905
|
+
import { chmodSync, existsSync as existsSync3, statSync } from "fs";
|
|
5906
|
+
import { dirname as dirname2, join as join6 } from "path";
|
|
5907
|
+
var done = false;
|
|
5908
|
+
function ensurePtyHelperExecutable() {
|
|
5909
|
+
if (done) return;
|
|
5910
|
+
done = true;
|
|
5911
|
+
if (process.platform === "win32") return;
|
|
5912
|
+
try {
|
|
5913
|
+
const require2 = createRequire2(import.meta.url);
|
|
5914
|
+
const ptyDir = dirname2(require2.resolve("node-pty/package.json"));
|
|
5915
|
+
const candidates = [
|
|
5916
|
+
"build/Release",
|
|
5917
|
+
"build/Debug",
|
|
5918
|
+
`prebuilds/${process.platform}-${process.arch}`
|
|
5919
|
+
];
|
|
5920
|
+
for (const sub of candidates) {
|
|
5921
|
+
const helper = join6(ptyDir, sub, "spawn-helper");
|
|
5922
|
+
if (!existsSync3(helper)) continue;
|
|
5923
|
+
const mode = statSync(helper).mode;
|
|
5924
|
+
if ((mode & 73) !== 73) {
|
|
5925
|
+
chmodSync(helper, mode | 73);
|
|
5926
|
+
console.log(`[agent] made node-pty spawn-helper executable: ${helper}`);
|
|
5927
|
+
}
|
|
5928
|
+
}
|
|
5929
|
+
} catch {
|
|
5930
|
+
}
|
|
5931
|
+
}
|
|
5932
|
+
|
|
5695
5933
|
// src/create-agent.ts
|
|
5696
5934
|
function createAgent(opts) {
|
|
5697
5935
|
const passphraseHex = opts?.passphraseHex ?? crypto2.randomBytes(32).toString("hex");
|
|
5698
5936
|
const healthWsIntervalMs = opts?.healthWsIntervalMs ?? env.HEALTH_WS_INTERVAL;
|
|
5699
5937
|
setPassphrase(passphraseHex);
|
|
5938
|
+
ensurePtyHelperExecutable();
|
|
5700
5939
|
const app = express();
|
|
5701
5940
|
const server = createServer(app);
|
|
5702
5941
|
app.use(cors({ origin: "http://localhost:4000" }));
|