agentstudio 0.1.18 → 0.1.20
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/README.md +26 -505
- package/bin/agentstudio.js +305 -0
- package/bin/agentstudio.js.map +1 -0
- package/bin/serviceManager.d.ts +16 -0
- package/bin/serviceManager.d.ts.map +1 -0
- package/bin/serviceManager.js +434 -0
- package/bin/serviceManager.js.map +1 -0
- package/config/index.d.ts +74 -0
- package/config/index.d.ts.map +1 -0
- package/config/index.js +166 -0
- package/config/index.js.map +1 -0
- package/config/paths.d.ts +81 -0
- package/config/paths.d.ts.map +1 -0
- package/config/paths.js +98 -0
- package/config/paths.js.map +1 -0
- package/index.d.ts +4 -0
- package/index.d.ts.map +1 -0
- package/index.js +364 -0
- package/index.js.map +1 -0
- package/jobs/taskTimeoutMonitor.d.ts +25 -0
- package/jobs/taskTimeoutMonitor.d.ts.map +1 -0
- package/jobs/taskTimeoutMonitor.js +94 -0
- package/jobs/taskTimeoutMonitor.js.map +1 -0
- package/middleware/a2aAuth.d.ts +38 -0
- package/middleware/a2aAuth.d.ts.map +1 -0
- package/middleware/a2aAuth.js +134 -0
- package/middleware/a2aAuth.js.map +1 -0
- package/{backend/dist/middleware → middleware}/auth.d.ts +3 -1
- package/middleware/auth.d.ts.map +1 -0
- package/middleware/auth.js +35 -0
- package/middleware/auth.js.map +1 -0
- package/middleware/httpsOnly.d.ts +38 -0
- package/middleware/httpsOnly.d.ts.map +1 -0
- package/middleware/httpsOnly.js +105 -0
- package/middleware/httpsOnly.js.map +1 -0
- package/middleware/rateLimiting.d.ts +37 -0
- package/middleware/rateLimiting.d.ts.map +1 -0
- package/middleware/rateLimiting.js +118 -0
- package/middleware/rateLimiting.js.map +1 -0
- package/package.json +43 -38
- package/public/assets/AgentsPage-CKTz2ND6.js +10 -0
- package/public/assets/Button-Dg6ni5Yl.js +1 -0
- package/public/assets/ChatPage-DkO3kzY2.js +442 -0
- package/public/assets/CommandForm-CIfw9mVj.js +7 -0
- package/public/assets/CommandsPage-BgN0E41K.js +1 -0
- package/public/assets/DashboardPage-Duu6pBON.js +15 -0
- package/public/assets/FileBrowser-Bnm7ZyGT.js +6 -0
- package/public/assets/FileExplorer-Dy8ZFDtK.js +1 -0
- package/public/assets/GeneralSettingsPage-BJTiwSqP.js +1 -0
- package/public/assets/LandingPage-CCqtSDce.js +1 -0
- package/public/assets/LoginPage-DCI_RABC.js +16 -0
- package/public/assets/McpPage-Dj4bE6a2.js +40 -0
- package/public/assets/MemorySettingsPage-v7kI6DEB.js +1 -0
- package/public/assets/PluginsPage-CQ08px0h.js +1 -0
- package/public/assets/ProjectSelector-DKkhmVGz.js +1 -0
- package/public/assets/ProjectsPage-6nGz1v6U.js +21 -0
- package/public/assets/ScheduledTasksPage-Dv8qPeLY.js +1 -0
- package/public/assets/SettingsLayout-stXQCl6u.js +1 -0
- package/public/assets/SkillsPage-DlQPlwG5.js +18 -0
- package/{backend/dist/frontend/assets/SubagentForm-DXtTTIKg.js → public/assets/SubagentForm-iYJ0l9vh.js} +2 -2
- package/public/assets/SubagentsPage-ksh-LWAC.js +1 -0
- package/{backend/dist/frontend/assets/ToastTestPage-DT4wuN5C.js → public/assets/ToastTestPage-pxyInZeD.js} +1 -1
- package/public/assets/ToolsList-CWZLcBx2.js +1 -0
- package/public/assets/UnifiedToolSelector-A2UIt1Xn.js +1 -0
- package/public/assets/VersionSettingsPage-ClLBqAIC.js +5 -0
- package/public/assets/_basePickBy-Ce1_TuBk.js +1 -0
- package/public/assets/_baseUniq-Dt6C4BgZ.js +1 -0
- package/public/assets/agents-C4aCwcCz.js +1 -0
- package/public/assets/arc-c63c3GDw.js +1 -0
- package/public/assets/architectureDiagram-VXUJARFQ-rnurJGX4.js +36 -0
- package/public/assets/blockDiagram-VD42YOAC-CM33sjhb.js +122 -0
- package/public/assets/c4Diagram-YG6GDRKO-B1tJjciL.js +10 -0
- package/public/assets/channel-6fK1csbi.js +1 -0
- package/public/assets/chunk-4BX2VUAB-vbzk_8Ta.js +1 -0
- package/public/assets/chunk-55IACEB6-CNXjTgeK.js +1 -0
- package/public/assets/chunk-B4BG7PRW-CykotMKj.js +165 -0
- package/public/assets/chunk-DI55MBZ5-DbZodDrP.js +220 -0
- package/public/assets/chunk-FMBD7UC4-u0h-4JXb.js +15 -0
- package/public/assets/chunk-QN33PNHL-B7VLbRpC.js +1 -0
- package/public/assets/chunk-QZHKN3VN-DfcZEdwM.js +1 -0
- package/public/assets/chunk-TZMSLE5B-BP4O9iGm.js +1 -0
- package/public/assets/classDiagram-2ON5EDUG-PrDkNsdA.js +1 -0
- package/public/assets/classDiagram-v2-WZHVMYZB-PrDkNsdA.js +1 -0
- package/public/assets/clone-CXX9AxT7.js +1 -0
- package/public/assets/cose-bilkent-S5V4N54A-CSV8iDOr.js +1 -0
- package/public/assets/cytoscape.esm-DtBltrT8.js +331 -0
- package/public/assets/dagre-6UL2VRFP-S5vHkFwY.js +4 -0
- package/{backend/dist/frontend/assets/data-structures-DLJedtzx.js → public/assets/data-structures-C0h9Oap1.js} +1 -1
- package/public/assets/defaultLocale-C4B-KCzX.js +1 -0
- package/public/assets/diagram-PSM6KHXK-Bl4NbJsm.js +24 -0
- package/public/assets/diagram-QEK2KX5R-D-6ipdkt.js +43 -0
- package/public/assets/diagram-S2PKOQOG-DBuN3kfb.js +24 -0
- package/public/assets/erDiagram-Q2GNP2WA-DEhlyUw1.js +60 -0
- package/public/assets/flowDiagram-NV44I4VS-PsSk5-Xf.js +162 -0
- package/public/assets/ganttDiagram-LVOFAZNH-PfD-vtKp.js +267 -0
- package/public/assets/gitGraphDiagram-NY62KEGX-CUq51Mt1.js +65 -0
- package/public/assets/graph-Bc5M3bvZ.js +1 -0
- package/public/assets/index-ImPzdvfG.js +293 -0
- package/public/assets/index-TEVaBQiv.css +1 -0
- package/public/assets/infoDiagram-F6ZHWCRC-BTR1hJCm.js +2 -0
- package/public/assets/init-Gi6I4Gst.js +1 -0
- package/public/assets/journeyDiagram-XKPGCS4Q-CTyau8Sh.js +139 -0
- package/public/assets/kanban-definition-3W4ZIXB7-2R3dHQq1.js +89 -0
- package/public/assets/katex-qrhCpa0F.js +261 -0
- package/public/assets/layout-BCktuL_6.js +1 -0
- package/public/assets/linear-lHuinZOC.js +1 -0
- package/public/assets/mindmap-definition-VGOIOE7T-Dl8qR3zk.js +68 -0
- package/public/assets/monaco-editor-DHKm5-VF.js +19 -0
- package/public/assets/ordinal-Cboi1Yqb.js +1 -0
- package/public/assets/pieDiagram-ADFJNKIX-Bqcukh_c.js +30 -0
- package/public/assets/quadrantDiagram-AYHSOK5B-C_uML1JV.js +7 -0
- package/public/assets/requirementDiagram-UZGBJVZJ-QUbH9ShO.js +64 -0
- package/public/assets/sankeyDiagram-TZEHDZUN-CEomXpQ1.js +10 -0
- package/public/assets/sequenceDiagram-WL72ISMW-DNsDMjTd.js +145 -0
- package/public/assets/stateDiagram-FKZM4ZOC-BA_Narwp.js +1 -0
- package/public/assets/stateDiagram-v2-4FDKWEC3-Cy5am68v.js +1 -0
- package/{backend/dist/frontend/assets/syntax-highlighting-YWvMU4Hm.js → public/assets/syntax-highlighting-CnREyncB.js} +5 -5
- package/public/assets/tabManager-CkNKjP4G.js +30 -0
- package/{backend/dist/frontend/assets/table-D6q1rytw.js → public/assets/table-CSWCaVuS.js} +1 -1
- package/public/assets/timeline-definition-IT6M3QCI-DeEgHBeI.js +61 -0
- package/public/assets/tools-C7xmF_rB.js +1 -0
- package/public/assets/treemap-KMMF4GRG-5HQSTjk6.js +128 -0
- package/{backend/dist/frontend/assets/ui-components-Cw21Epuw.js → public/assets/ui-components-BNdpaz32.js} +221 -96
- package/public/assets/useAgents-C9aEFOWD.js +2 -0
- package/public/assets/useClaudeVersions-CcFqpR2o.js +1 -0
- package/public/assets/useCommands-BadxYHf2.js +1 -0
- package/public/assets/useProjects-Dgk7ldPq.js +1 -0
- package/public/assets/xychartDiagram-PRI3JC2R-C7BNHmgo.js +7 -0
- package/{backend/dist/frontend → public}/index.html +8 -8
- package/routes/__tests__/a2a.integration.test.d.ts +11 -0
- package/routes/__tests__/a2a.integration.test.d.ts.map +1 -0
- package/routes/__tests__/a2a.integration.test.js +314 -0
- package/routes/__tests__/a2a.integration.test.js.map +1 -0
- package/routes/__tests__/a2a.test.d.ts +6 -0
- package/routes/__tests__/a2a.test.d.ts.map +1 -0
- package/routes/__tests__/a2a.test.js +622 -0
- package/routes/__tests__/a2a.test.js.map +1 -0
- package/routes/__tests__/agents.test.d.ts +6 -0
- package/routes/__tests__/agents.test.d.ts.map +1 -0
- package/routes/__tests__/agents.test.js +315 -0
- package/routes/__tests__/agents.test.js.map +1 -0
- package/routes/__tests__/sessions.test.d.ts +7 -0
- package/routes/__tests__/sessions.test.d.ts.map +1 -0
- package/routes/__tests__/sessions.test.js +330 -0
- package/routes/__tests__/sessions.test.js.map +1 -0
- package/routes/a2a.d.ts +18 -0
- package/routes/a2a.d.ts.map +1 -0
- package/routes/a2a.js +649 -0
- package/routes/a2a.js.map +1 -0
- package/routes/a2a.streaming.test.d.ts +2 -0
- package/routes/a2a.streaming.test.d.ts.map +1 -0
- package/routes/a2a.streaming.test.js +167 -0
- package/routes/a2a.streaming.test.js.map +1 -0
- package/routes/a2aManagement.d.ts +21 -0
- package/routes/a2aManagement.d.ts.map +1 -0
- package/routes/a2aManagement.js +466 -0
- package/routes/a2aManagement.js.map +1 -0
- package/{backend/dist/routes → routes}/agents.d.ts.map +1 -1
- package/routes/agents.js +997 -0
- package/routes/agents.js.map +1 -0
- package/{backend/dist/routes → routes}/auth.d.ts.map +1 -1
- package/routes/auth.js +135 -0
- package/routes/auth.js.map +1 -0
- package/{backend/dist/routes → routes}/commands.d.ts.map +1 -1
- package/{backend/dist/routes → routes}/commands.js +115 -31
- package/routes/commands.js.map +1 -0
- package/routes/config.d.ts +4 -0
- package/routes/config.d.ts.map +1 -0
- package/routes/config.js +211 -0
- package/routes/config.js.map +1 -0
- package/{backend/dist/routes → routes}/files.d.ts.map +1 -1
- package/{backend/dist/routes → routes}/files.js +103 -43
- package/routes/files.js.map +1 -0
- package/{backend/dist/routes → routes}/mcp.d.ts.map +1 -1
- package/{backend/dist/routes → routes}/mcp.js +175 -88
- package/routes/mcp.js.map +1 -0
- package/routes/media.d.ts.map +1 -0
- package/{backend/dist/routes → routes}/media.js +52 -42
- package/routes/media.js.map +1 -0
- package/routes/mediaAuth.d.ts +8 -0
- package/routes/mediaAuth.d.ts.map +1 -0
- package/routes/mediaAuth.js +136 -0
- package/routes/mediaAuth.js.map +1 -0
- package/routes/plugins.d.ts +4 -0
- package/routes/plugins.d.ts.map +1 -0
- package/routes/plugins.js +339 -0
- package/routes/plugins.js.map +1 -0
- package/{backend/dist/routes → routes}/projects.d.ts.map +1 -1
- package/routes/projects.js +884 -0
- package/routes/projects.js.map +1 -0
- package/routes/scheduledTasks.d.ts +9 -0
- package/routes/scheduledTasks.d.ts.map +1 -0
- package/routes/scheduledTasks.js +320 -0
- package/routes/scheduledTasks.js.map +1 -0
- package/{backend/dist/routes → routes}/sessions.d.ts.map +1 -1
- package/{backend/dist/routes → routes}/sessions.js +258 -39
- package/routes/sessions.js.map +1 -0
- package/{backend/dist/routes → routes}/settings.d.ts.map +1 -1
- package/{backend/dist/routes → routes}/settings.js +82 -241
- package/routes/settings.js.map +1 -0
- package/routes/skills.d.ts +4 -0
- package/routes/skills.d.ts.map +1 -0
- package/routes/skills.js +272 -0
- package/routes/skills.js.map +1 -0
- package/routes/slack.d.ts +10 -0
- package/routes/slack.d.ts.map +1 -0
- package/routes/slack.js +189 -0
- package/routes/slack.js.map +1 -0
- package/{backend/dist/routes → routes}/slides.d.ts.map +1 -1
- package/{backend/dist/routes → routes}/slides.js +29 -27
- package/routes/slides.js.map +1 -0
- package/{backend/dist/routes → routes}/subagents.js +27 -22
- package/routes/subagents.js.map +1 -0
- package/schemas/a2a.d.ts +858 -0
- package/schemas/a2a.d.ts.map +1 -0
- package/schemas/a2a.js +300 -0
- package/schemas/a2a.js.map +1 -0
- package/scripts/postinstall.js +10 -0
- package/services/__tests__/pluginInstaller.test.d.ts +5 -0
- package/services/__tests__/pluginInstaller.test.d.ts.map +1 -0
- package/services/__tests__/pluginInstaller.test.js +290 -0
- package/services/__tests__/pluginInstaller.test.js.map +1 -0
- package/services/__tests__/pluginParser.test.d.ts +5 -0
- package/services/__tests__/pluginParser.test.d.ts.map +1 -0
- package/services/__tests__/pluginParser.test.js +272 -0
- package/services/__tests__/pluginParser.test.js.map +1 -0
- package/services/__tests__/pluginPaths.test.d.ts +5 -0
- package/services/__tests__/pluginPaths.test.d.ts.map +1 -0
- package/services/__tests__/pluginPaths.test.js +221 -0
- package/services/__tests__/pluginPaths.test.js.map +1 -0
- package/services/__tests__/pluginScanner.test.d.ts +5 -0
- package/services/__tests__/pluginScanner.test.d.ts.map +1 -0
- package/services/__tests__/pluginScanner.test.js +272 -0
- package/services/__tests__/pluginScanner.test.js.map +1 -0
- package/services/__tests__/pluginSymlink.test.d.ts +5 -0
- package/services/__tests__/pluginSymlink.test.d.ts.map +1 -0
- package/services/__tests__/pluginSymlink.test.js +318 -0
- package/services/__tests__/pluginSymlink.test.js.map +1 -0
- package/services/__tests__/slackAIService.test.d.ts +5 -0
- package/services/__tests__/slackAIService.test.d.ts.map +1 -0
- package/services/__tests__/slackAIService.test.js +477 -0
- package/services/__tests__/slackAIService.test.js.map +1 -0
- package/services/__tests__/slackThreadMapper.test.d.ts +5 -0
- package/services/__tests__/slackThreadMapper.test.d.ts.map +1 -0
- package/services/__tests__/slackThreadMapper.test.js +194 -0
- package/services/__tests__/slackThreadMapper.test.js.map +1 -0
- package/services/a2a/__tests__/a2aClientTool.integration.test.d.ts +6 -0
- package/services/a2a/__tests__/a2aClientTool.integration.test.d.ts.map +1 -0
- package/services/a2a/__tests__/a2aClientTool.integration.test.js +264 -0
- package/services/a2a/__tests__/a2aClientTool.integration.test.js.map +1 -0
- package/services/a2a/__tests__/a2aClientTool.test.d.ts +6 -0
- package/services/a2a/__tests__/a2aClientTool.test.d.ts.map +1 -0
- package/services/a2a/__tests__/a2aClientTool.test.js +418 -0
- package/services/a2a/__tests__/a2aClientTool.test.js.map +1 -0
- package/services/a2a/__tests__/a2aConfigService.test.d.ts +6 -0
- package/services/a2a/__tests__/a2aConfigService.test.d.ts.map +1 -0
- package/services/a2a/__tests__/a2aConfigService.test.js +431 -0
- package/services/a2a/__tests__/a2aConfigService.test.js.map +1 -0
- package/services/a2a/__tests__/a2aConfigServicePath.test.d.ts +2 -0
- package/services/a2a/__tests__/a2aConfigServicePath.test.d.ts.map +1 -0
- package/services/a2a/__tests__/a2aConfigServicePath.test.js +49 -0
- package/services/a2a/__tests__/a2aConfigServicePath.test.js.map +1 -0
- package/services/a2a/__tests__/a2aSdkMcp.test.d.ts +10 -0
- package/services/a2a/__tests__/a2aSdkMcp.test.d.ts.map +1 -0
- package/services/a2a/__tests__/a2aSdkMcp.test.js +239 -0
- package/services/a2a/__tests__/a2aSdkMcp.test.js.map +1 -0
- package/services/a2a/__tests__/agentCardService.test.d.ts +6 -0
- package/services/a2a/__tests__/agentCardService.test.d.ts.map +1 -0
- package/services/a2a/__tests__/agentCardService.test.js +292 -0
- package/services/a2a/__tests__/agentCardService.test.js.map +1 -0
- package/services/a2a/__tests__/apiKeyService.test.d.ts +6 -0
- package/services/a2a/__tests__/apiKeyService.test.d.ts.map +1 -0
- package/services/a2a/__tests__/apiKeyService.test.js +284 -0
- package/services/a2a/__tests__/apiKeyService.test.js.map +1 -0
- package/services/a2a/__tests__/buildQueryOptionsIntegration.test.d.ts +2 -0
- package/services/a2a/__tests__/buildQueryOptionsIntegration.test.d.ts.map +1 -0
- package/services/a2a/__tests__/buildQueryOptionsIntegration.test.js +70 -0
- package/services/a2a/__tests__/buildQueryOptionsIntegration.test.js.map +1 -0
- package/services/a2a/__tests__/dynamic_config_verification.test.d.ts +2 -0
- package/services/a2a/__tests__/dynamic_config_verification.test.d.ts.map +1 -0
- package/services/a2a/__tests__/dynamic_config_verification.test.js +67 -0
- package/services/a2a/__tests__/dynamic_config_verification.test.js.map +1 -0
- package/services/a2a/__tests__/integrateA2AMcpServer.test.d.ts +2 -0
- package/services/a2a/__tests__/integrateA2AMcpServer.test.d.ts.map +1 -0
- package/services/a2a/__tests__/integrateA2AMcpServer.test.js +112 -0
- package/services/a2a/__tests__/integrateA2AMcpServer.test.js.map +1 -0
- package/services/a2a/__tests__/taskManager.integration.test.d.ts +7 -0
- package/services/a2a/__tests__/taskManager.integration.test.d.ts.map +1 -0
- package/services/a2a/__tests__/taskManager.integration.test.js +346 -0
- package/services/a2a/__tests__/taskManager.integration.test.js.map +1 -0
- package/services/a2a/__tests__/taskManager.test.d.ts +7 -0
- package/services/a2a/__tests__/taskManager.test.d.ts.map +1 -0
- package/services/a2a/__tests__/taskManager.test.js +423 -0
- package/services/a2a/__tests__/taskManager.test.js.map +1 -0
- package/services/a2a/a2aClientTool.d.ts +73 -0
- package/services/a2a/a2aClientTool.d.ts.map +1 -0
- package/services/a2a/a2aClientTool.js +572 -0
- package/services/a2a/a2aClientTool.js.map +1 -0
- package/services/a2a/a2aConfigService.d.ts +50 -0
- package/services/a2a/a2aConfigService.d.ts.map +1 -0
- package/services/a2a/a2aConfigService.js +186 -0
- package/services/a2a/a2aConfigService.js.map +1 -0
- package/services/a2a/a2aHistoryService.d.ts +32 -0
- package/services/a2a/a2aHistoryService.d.ts.map +1 -0
- package/services/a2a/a2aHistoryService.js +108 -0
- package/services/a2a/a2aHistoryService.js.map +1 -0
- package/services/a2a/a2aIntegration.d.ts +9 -0
- package/services/a2a/a2aIntegration.d.ts.map +1 -0
- package/services/a2a/a2aIntegration.js +41 -0
- package/services/a2a/a2aIntegration.js.map +1 -0
- package/services/a2a/a2aQueryService.d.ts +71 -0
- package/services/a2a/a2aQueryService.d.ts.map +1 -0
- package/services/a2a/a2aQueryService.js +166 -0
- package/services/a2a/a2aQueryService.js.map +1 -0
- package/services/a2a/a2aSdkMcp.d.ts +51 -0
- package/services/a2a/a2aSdkMcp.d.ts.map +1 -0
- package/services/a2a/a2aSdkMcp.js +185 -0
- package/services/a2a/a2aSdkMcp.js.map +1 -0
- package/services/a2a/a2aStreamEvents.d.ts +94 -0
- package/services/a2a/a2aStreamEvents.d.ts.map +1 -0
- package/services/a2a/a2aStreamEvents.js +92 -0
- package/services/a2a/a2aStreamEvents.js.map +1 -0
- package/services/a2a/agentCardService.d.ts +34 -0
- package/services/a2a/agentCardService.d.ts.map +1 -0
- package/services/a2a/agentCardService.js +228 -0
- package/services/a2a/agentCardService.js.map +1 -0
- package/services/a2a/agentMappingService.d.ts +53 -0
- package/services/a2a/agentMappingService.d.ts.map +1 -0
- package/services/a2a/agentMappingService.js +185 -0
- package/services/a2a/agentMappingService.js.map +1 -0
- package/services/a2a/apiKeyService.d.ts +101 -0
- package/services/a2a/apiKeyService.d.ts.map +1 -0
- package/services/a2a/apiKeyService.js +314 -0
- package/services/a2a/apiKeyService.js.map +1 -0
- package/services/a2a/taskCleanup.d.ts +30 -0
- package/services/a2a/taskCleanup.d.ts.map +1 -0
- package/services/a2a/taskCleanup.js +184 -0
- package/services/a2a/taskCleanup.js.map +1 -0
- package/services/a2a/taskManager.d.ts +86 -0
- package/services/a2a/taskManager.d.ts.map +1 -0
- package/services/a2a/taskManager.js +263 -0
- package/services/a2a/taskManager.js.map +1 -0
- package/services/agentStorage.d.ts +27 -0
- package/services/agentStorage.d.ts.map +1 -0
- package/services/agentStorage.js +487 -0
- package/services/agentStorage.js.map +1 -0
- package/services/askUserQuestion/askUserQuestionIntegration.d.ts +24 -0
- package/services/askUserQuestion/askUserQuestionIntegration.d.ts.map +1 -0
- package/services/askUserQuestion/askUserQuestionIntegration.js +52 -0
- package/services/askUserQuestion/askUserQuestionIntegration.js.map +1 -0
- package/services/askUserQuestion/askUserQuestionMcp.d.ts +103 -0
- package/services/askUserQuestion/askUserQuestionMcp.d.ts.map +1 -0
- package/services/askUserQuestion/askUserQuestionMcp.js +129 -0
- package/services/askUserQuestion/askUserQuestionMcp.js.map +1 -0
- package/services/askUserQuestion/index.d.ts +13 -0
- package/services/askUserQuestion/index.d.ts.map +1 -0
- package/services/askUserQuestion/index.js +35 -0
- package/services/askUserQuestion/index.js.map +1 -0
- package/services/askUserQuestion/init.d.ts +17 -0
- package/services/askUserQuestion/init.d.ts.map +1 -0
- package/services/askUserQuestion/init.js +47 -0
- package/services/askUserQuestion/init.js.map +1 -0
- package/services/askUserQuestion/notificationChannel.d.ts +97 -0
- package/services/askUserQuestion/notificationChannel.d.ts.map +1 -0
- package/services/askUserQuestion/notificationChannel.js +147 -0
- package/services/askUserQuestion/notificationChannel.js.map +1 -0
- package/services/askUserQuestion/slackNotificationChannel.d.ts +35 -0
- package/services/askUserQuestion/slackNotificationChannel.d.ts.map +1 -0
- package/services/askUserQuestion/slackNotificationChannel.js +129 -0
- package/services/askUserQuestion/slackNotificationChannel.js.map +1 -0
- package/services/askUserQuestion/sseNotificationChannel.d.ts +36 -0
- package/services/askUserQuestion/sseNotificationChannel.d.ts.map +1 -0
- package/services/askUserQuestion/sseNotificationChannel.js +88 -0
- package/services/askUserQuestion/sseNotificationChannel.js.map +1 -0
- package/services/askUserQuestion/userInputRegistry.d.ts +107 -0
- package/services/askUserQuestion/userInputRegistry.d.ts.map +1 -0
- package/services/askUserQuestion/userInputRegistry.js +253 -0
- package/services/askUserQuestion/userInputRegistry.js.map +1 -0
- package/{backend/dist/services → services}/claudeSession.d.ts +20 -5
- package/services/claudeSession.d.ts.map +1 -0
- package/{backend/dist/services → services}/claudeSession.js +123 -41
- package/services/claudeSession.js.map +1 -0
- package/services/claudeVersionStorage.d.ts +20 -0
- package/services/claudeVersionStorage.d.ts.map +1 -0
- package/services/claudeVersionStorage.js +331 -0
- package/services/claudeVersionStorage.js.map +1 -0
- package/{backend/dist/services → services}/messageQueue.d.ts.map +1 -1
- package/{backend/dist/services → services}/messageQueue.js +16 -3
- package/services/messageQueue.js.map +1 -0
- package/services/pluginInstaller.d.ts +58 -0
- package/services/pluginInstaller.d.ts.map +1 -0
- package/services/pluginInstaller.js +321 -0
- package/services/pluginInstaller.js.map +1 -0
- package/services/pluginParser.d.ts +45 -0
- package/services/pluginParser.d.ts.map +1 -0
- package/services/pluginParser.js +437 -0
- package/services/pluginParser.js.map +1 -0
- package/services/pluginPaths.d.ts +80 -0
- package/services/pluginPaths.d.ts.map +1 -0
- package/services/pluginPaths.js +274 -0
- package/services/pluginPaths.js.map +1 -0
- package/services/pluginScanner.d.ts +36 -0
- package/services/pluginScanner.d.ts.map +1 -0
- package/services/pluginScanner.js +251 -0
- package/services/pluginScanner.js.map +1 -0
- package/services/pluginSymlink.d.ts +54 -0
- package/services/pluginSymlink.d.ts.map +1 -0
- package/services/pluginSymlink.js +223 -0
- package/services/pluginSymlink.js.map +1 -0
- package/services/projectMetadataStorage.d.ts +114 -0
- package/services/projectMetadataStorage.d.ts.map +1 -0
- package/services/projectMetadataStorage.js +711 -0
- package/services/projectMetadataStorage.js.map +1 -0
- package/services/scheduledTaskStorage.d.ts +52 -0
- package/services/scheduledTaskStorage.d.ts.map +1 -0
- package/services/scheduledTaskStorage.js +285 -0
- package/services/scheduledTaskStorage.js.map +1 -0
- package/services/schedulerService.d.ts +81 -0
- package/services/schedulerService.d.ts.map +1 -0
- package/services/schedulerService.js +743 -0
- package/services/schedulerService.js.map +1 -0
- package/{backend/dist/services → services}/sessionManager.d.ts +6 -4
- package/services/sessionManager.d.ts.map +1 -0
- package/{backend/dist/services → services}/sessionManager.js +77 -16
- package/services/sessionManager.js.map +1 -0
- package/services/skillStorage.d.ts +60 -0
- package/services/skillStorage.d.ts.map +1 -0
- package/services/skillStorage.js +398 -0
- package/services/skillStorage.js.map +1 -0
- package/services/slackAIService.d.ts +81 -0
- package/services/slackAIService.d.ts.map +1 -0
- package/services/slackAIService.js +1091 -0
- package/services/slackAIService.js.map +1 -0
- package/services/slackClient.d.ts +46 -0
- package/services/slackClient.d.ts.map +1 -0
- package/services/slackClient.js +85 -0
- package/services/slackClient.js.map +1 -0
- package/services/slackSessionLock.d.ts +79 -0
- package/services/slackSessionLock.d.ts.map +1 -0
- package/services/slackSessionLock.js +353 -0
- package/services/slackSessionLock.js.map +1 -0
- package/services/slackThreadMapper.d.ts +57 -0
- package/services/slackThreadMapper.d.ts.map +1 -0
- package/services/slackThreadMapper.js +140 -0
- package/services/slackThreadMapper.js.map +1 -0
- package/types/a2a.d.ts +275 -0
- package/types/a2a.d.ts.map +1 -0
- package/types/a2a.js +23 -0
- package/types/a2a.js.map +1 -0
- package/types/agents.d.ts +95 -0
- package/types/agents.d.ts.map +1 -0
- package/types/agents.js +46 -0
- package/types/agents.js.map +1 -0
- package/types/claude-history.d.ts +62 -0
- package/types/claude-history.d.ts.map +1 -0
- package/types/claude-history.js +4 -0
- package/types/claude-history.js.map +1 -0
- package/types/claude-versions.d.ts +36 -0
- package/types/claude-versions.d.ts.map +1 -0
- package/types/claude-versions.js +3 -0
- package/types/claude-versions.js.map +1 -0
- package/types/commands.d.ts +50 -0
- package/types/commands.d.ts.map +1 -0
- package/types/commands.js +23 -0
- package/types/commands.js.map +1 -0
- package/types/plugins.d.ts +144 -0
- package/types/plugins.d.ts.map +1 -0
- package/types/plugins.js +8 -0
- package/types/plugins.js.map +1 -0
- package/types/projects.d.ts +42 -0
- package/types/projects.d.ts.map +1 -0
- package/types/projects.js +4 -0
- package/types/projects.js.map +1 -0
- package/types/scheduledTasks.d.ts +164 -0
- package/types/scheduledTasks.d.ts.map +1 -0
- package/types/scheduledTasks.js +17 -0
- package/types/scheduledTasks.js.map +1 -0
- package/types/skills.d.ts +91 -0
- package/types/skills.d.ts.map +1 -0
- package/types/skills.js +6 -0
- package/types/skills.js.map +1 -0
- package/types/slack.d.ts +97 -0
- package/types/slack.d.ts.map +1 -0
- package/types/slack.js +8 -0
- package/types/slack.js.map +1 -0
- package/types/streaming.d.ts +12 -0
- package/types/streaming.d.ts.map +1 -0
- package/types/streaming.js +8 -0
- package/types/streaming.js.map +1 -0
- package/types/subagents.d.ts +26 -0
- package/types/subagents.d.ts.map +1 -0
- package/types/subagents.js +3 -0
- package/types/subagents.js.map +1 -0
- package/utils/__tests__/claudeUtils.test.d.ts +5 -0
- package/utils/__tests__/claudeUtils.test.d.ts.map +1 -0
- package/utils/__tests__/claudeUtils.test.js +282 -0
- package/utils/__tests__/claudeUtils.test.js.map +1 -0
- package/utils/__tests__/sessionUtils.test.d.ts +5 -0
- package/utils/__tests__/sessionUtils.test.d.ts.map +1 -0
- package/utils/__tests__/sessionUtils.test.js +295 -0
- package/utils/__tests__/sessionUtils.test.js.map +1 -0
- package/utils/agentCardCache.d.ts +93 -0
- package/utils/agentCardCache.d.ts.map +1 -0
- package/utils/agentCardCache.js +212 -0
- package/utils/agentCardCache.js.map +1 -0
- package/utils/claudeUtils.d.ts +54 -0
- package/utils/claudeUtils.d.ts.map +1 -0
- package/utils/claudeUtils.js +387 -0
- package/utils/claudeUtils.js.map +1 -0
- package/utils/fileUtils.d.ts +2 -0
- package/utils/fileUtils.d.ts.map +1 -0
- package/utils/fileUtils.js +11 -0
- package/utils/fileUtils.js.map +1 -0
- package/utils/jwt.d.ts +30 -0
- package/utils/jwt.d.ts.map +1 -0
- package/utils/jwt.js +95 -0
- package/utils/jwt.js.map +1 -0
- package/utils/sessionUtils.d.ts +64 -0
- package/utils/sessionUtils.d.ts.map +1 -0
- package/utils/sessionUtils.js +266 -0
- package/utils/sessionUtils.js.map +1 -0
- package/README.zh-CN.md +0 -525
- package/backend/dist/bin/agentstudio.js +0 -120
- package/backend/dist/bin/agentstudio.js.map +0 -1
- package/backend/dist/frontend/assets/AgentsPage-Dqb_aqAA.js +0 -1
- package/backend/dist/frontend/assets/ChatPage-L8Paywyc.js +0 -91
- package/backend/dist/frontend/assets/CommandForm-DLl7EIMS.js +0 -7
- package/backend/dist/frontend/assets/CommandsPage-Bzavq0Ec.js +0 -1
- package/backend/dist/frontend/assets/DashboardPage-B3o4AYFT.js +0 -15
- package/backend/dist/frontend/assets/FileBrowser-DL3ayaqb.js +0 -1
- package/backend/dist/frontend/assets/GeneralSettingsPage-CBN_de-V.js +0 -1
- package/backend/dist/frontend/assets/LandingPage-Dl4ioKos.js +0 -1
- package/backend/dist/frontend/assets/LoginPage-4QqRdiSi.js +0 -12
- package/backend/dist/frontend/assets/McpPage-CY3tYiqj.js +0 -39
- package/backend/dist/frontend/assets/MemorySettingsPage-DGxrok5K.js +0 -1
- package/backend/dist/frontend/assets/ProjectSelector-hgmGYVFh.js +0 -1
- package/backend/dist/frontend/assets/ProjectsPage-D399IM0c.js +0 -14
- package/backend/dist/frontend/assets/SettingsLayout-CL_K-lzJ.js +0 -1
- package/backend/dist/frontend/assets/SubagentsPage-Chbhj8p2.js +0 -1
- package/backend/dist/frontend/assets/UnifiedToolSelector-CsM9qBvs.js +0 -1
- package/backend/dist/frontend/assets/VersionSettingsPage-74Q-LVgA.js +0 -5
- package/backend/dist/frontend/assets/agents-ClAzIJTw.js +0 -1
- package/backend/dist/frontend/assets/authFetch-BATQyPG5.js +0 -1
- package/backend/dist/frontend/assets/index-B9YHa7XT.css +0 -1
- package/backend/dist/frontend/assets/index-B_CTNvca.js +0 -268
- package/backend/dist/frontend/assets/monaco-editor-C7Z4sOhS.js +0 -19
- package/backend/dist/frontend/assets/tabManager-DV8urRBM.js +0 -30
- package/backend/dist/frontend/assets/tools-C4EPanYi.js +0 -1
- package/backend/dist/frontend/assets/useAgents-DwnOE1_k.js +0 -2
- package/backend/dist/frontend/assets/useClaudeVersions-CQdGnCqv.js +0 -1
- package/backend/dist/frontend/assets/useCommands-CCVaurbt.js +0 -1
- package/backend/dist/index.d.ts +0 -3
- package/backend/dist/index.d.ts.map +0 -1
- package/backend/dist/index.js +0 -157
- package/backend/dist/index.js.map +0 -1
- package/backend/dist/middleware/auth.d.ts.map +0 -1
- package/backend/dist/middleware/auth.js +0 -21
- package/backend/dist/middleware/auth.js.map +0 -1
- package/backend/dist/routes/agents.js +0 -803
- package/backend/dist/routes/agents.js.map +0 -1
- package/backend/dist/routes/auth.js +0 -60
- package/backend/dist/routes/auth.js.map +0 -1
- package/backend/dist/routes/commands.js.map +0 -1
- package/backend/dist/routes/files.js.map +0 -1
- package/backend/dist/routes/mcp.js.map +0 -1
- package/backend/dist/routes/media.d.ts.map +0 -1
- package/backend/dist/routes/media.js.map +0 -1
- package/backend/dist/routes/projects.js +0 -528
- package/backend/dist/routes/projects.js.map +0 -1
- package/backend/dist/routes/sessions.js.map +0 -1
- package/backend/dist/routes/settings.js.map +0 -1
- package/backend/dist/routes/slides.js.map +0 -1
- package/backend/dist/routes/subagents.js.map +0 -1
- package/backend/dist/services/claudeSession.d.ts.map +0 -1
- package/backend/dist/services/claudeSession.js.map +0 -1
- package/backend/dist/services/messageQueue.js.map +0 -1
- package/backend/dist/services/sessionManager.d.ts.map +0 -1
- package/backend/dist/services/sessionManager.js.map +0 -1
- package/backend/dist/utils/jwt.d.ts +0 -15
- package/backend/dist/utils/jwt.d.ts.map +0 -1
- package/backend/dist/utils/jwt.js +0 -28
- package/backend/dist/utils/jwt.js.map +0 -1
- /package/{backend/dist/bin → bin}/agentstudio.d.ts +0 -0
- /package/{backend/dist/bin → bin}/agentstudio.d.ts.map +0 -0
- /package/{backend/dist/frontend → public}/assets/ChatPage-BvQmXfcP.css +0 -0
- /package/{backend/dist/frontend → public}/assets/agents-DwCY2K8p.css +0 -0
- /package/{backend/dist/frontend → public}/assets/dateFormat-CXa8VnEC.js +0 -0
- /package/{backend/dist/frontend → public}/cc-studio.png +0 -0
- /package/{backend/dist/frontend → public}/vite.svg +0 -0
- /package/{backend/dist/routes → routes}/agents.d.ts +0 -0
- /package/{backend/dist/routes → routes}/auth.d.ts +0 -0
- /package/{backend/dist/routes → routes}/commands.d.ts +0 -0
- /package/{backend/dist/routes → routes}/files.d.ts +0 -0
- /package/{backend/dist/routes → routes}/mcp.d.ts +0 -0
- /package/{backend/dist/routes → routes}/media.d.ts +0 -0
- /package/{backend/dist/routes → routes}/projects.d.ts +0 -0
- /package/{backend/dist/routes → routes}/sessions.d.ts +0 -0
- /package/{backend/dist/routes → routes}/settings.d.ts +0 -0
- /package/{backend/dist/routes → routes}/slides.d.ts +0 -0
- /package/{backend/dist/routes → routes}/subagents.d.ts +0 -0
- /package/{backend/dist/routes → routes}/subagents.d.ts.map +0 -0
- /package/{backend/dist/services → services}/messageQueue.d.ts +0 -0
|
@@ -1,20 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const express_1 = __importDefault(require("express"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const child_process_1 = require("child_process");
|
|
44
|
+
const util_1 = require("util");
|
|
45
|
+
const paths_js_1 = require("../config/paths.js");
|
|
46
|
+
const router = express_1.default.Router();
|
|
47
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
9
48
|
// Helper function to get MCP config file path
|
|
10
49
|
const getMcpConfigPath = () => {
|
|
11
|
-
return
|
|
50
|
+
return paths_js_1.MCP_SERVER_CONFIG_FILE;
|
|
12
51
|
};
|
|
13
52
|
// Helper function to ensure config directory exists
|
|
14
53
|
const ensureConfigDirectory = () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
fs.mkdirSync(configDir, { recursive: true });
|
|
54
|
+
if (!fs.existsSync(paths_js_1.CLAUDE_AGENT_DIR)) {
|
|
55
|
+
fs.mkdirSync(paths_js_1.CLAUDE_AGENT_DIR, { recursive: true });
|
|
18
56
|
}
|
|
19
57
|
};
|
|
20
58
|
// Helper function to read MCP config
|
|
@@ -62,18 +100,18 @@ router.get('/', (req, res) => {
|
|
|
62
100
|
// Add or update MCP configuration
|
|
63
101
|
router.post('/', (req, res) => {
|
|
64
102
|
try {
|
|
65
|
-
const { name, type,
|
|
103
|
+
const { name, type, ...restConfig } = req.body;
|
|
66
104
|
if (!name || !type) {
|
|
67
105
|
return res.status(400).json({ error: 'Missing required fields: name, type' });
|
|
68
106
|
}
|
|
69
107
|
// Validate based on type
|
|
70
108
|
if (type === 'stdio') {
|
|
71
|
-
if (!command || !Array.isArray(args)) {
|
|
109
|
+
if (!restConfig.command || !Array.isArray(restConfig.args)) {
|
|
72
110
|
return res.status(400).json({ error: 'For stdio type: command and args are required' });
|
|
73
111
|
}
|
|
74
112
|
}
|
|
75
113
|
else if (type === 'http') {
|
|
76
|
-
if (!url) {
|
|
114
|
+
if (!restConfig.url) {
|
|
77
115
|
return res.status(400).json({ error: 'For http type: url is required' });
|
|
78
116
|
}
|
|
79
117
|
}
|
|
@@ -81,14 +119,11 @@ router.post('/', (req, res) => {
|
|
|
81
119
|
return res.status(400).json({ error: 'Invalid type. Must be "stdio" or "http"' });
|
|
82
120
|
}
|
|
83
121
|
const config = readMcpConfig();
|
|
84
|
-
// Create server config without name field
|
|
122
|
+
// Create server config without name field, preserving all parameters
|
|
85
123
|
const serverConfig = {
|
|
86
124
|
type,
|
|
87
|
-
...
|
|
88
|
-
|
|
89
|
-
...(url && { url }),
|
|
90
|
-
...(timeout && { timeout }),
|
|
91
|
-
...(autoApprove && Array.isArray(autoApprove) && { autoApprove })
|
|
125
|
+
...restConfig,
|
|
126
|
+
source: restConfig.source || 'local', // Default to 'local' for newly created configs
|
|
92
127
|
};
|
|
93
128
|
config.mcpServers[name] = serverConfig;
|
|
94
129
|
writeMcpConfig(config);
|
|
@@ -104,18 +139,18 @@ router.post('/', (req, res) => {
|
|
|
104
139
|
router.put('/:name', (req, res) => {
|
|
105
140
|
try {
|
|
106
141
|
const { name } = req.params;
|
|
107
|
-
const { type,
|
|
142
|
+
const { type, ...restConfig } = req.body;
|
|
108
143
|
if (!type) {
|
|
109
144
|
return res.status(400).json({ error: 'Missing required field: type' });
|
|
110
145
|
}
|
|
111
146
|
// Validate based on type
|
|
112
147
|
if (type === 'stdio') {
|
|
113
|
-
if (!command || !Array.isArray(args)) {
|
|
148
|
+
if (!restConfig.command || !Array.isArray(restConfig.args)) {
|
|
114
149
|
return res.status(400).json({ error: 'For stdio type: command and args are required' });
|
|
115
150
|
}
|
|
116
151
|
}
|
|
117
152
|
else if (type === 'http') {
|
|
118
|
-
if (!url) {
|
|
153
|
+
if (!restConfig.url) {
|
|
119
154
|
return res.status(400).json({ error: 'For http type: url is required' });
|
|
120
155
|
}
|
|
121
156
|
}
|
|
@@ -126,14 +161,10 @@ router.put('/:name', (req, res) => {
|
|
|
126
161
|
if (!config.mcpServers[name]) {
|
|
127
162
|
return res.status(404).json({ error: 'MCP configuration not found' });
|
|
128
163
|
}
|
|
129
|
-
// Update server config
|
|
164
|
+
// Update server config, preserving all parameters
|
|
130
165
|
const serverConfig = {
|
|
131
166
|
type,
|
|
132
|
-
...
|
|
133
|
-
...(args && { args }),
|
|
134
|
-
...(url && { url }),
|
|
135
|
-
...(timeout && { timeout }),
|
|
136
|
-
...(autoApprove && Array.isArray(autoApprove) && { autoApprove })
|
|
167
|
+
...restConfig
|
|
137
168
|
};
|
|
138
169
|
config.mcpServers[name] = serverConfig;
|
|
139
170
|
writeMcpConfig(config);
|
|
@@ -171,6 +202,22 @@ router.post('/:name/validate', async (req, res) => {
|
|
|
171
202
|
return res.status(404).json({ error: 'MCP configuration not found' });
|
|
172
203
|
}
|
|
173
204
|
const serverConfig = config.mcpServers[name];
|
|
205
|
+
// Auto-detect type if not specified
|
|
206
|
+
if (!serverConfig.type) {
|
|
207
|
+
if (serverConfig.url) {
|
|
208
|
+
serverConfig.type = 'http';
|
|
209
|
+
}
|
|
210
|
+
else if (serverConfig.command) {
|
|
211
|
+
serverConfig.type = 'stdio';
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
return res.status(400).json({ error: 'Cannot determine MCP server type. Please specify type, url, or command.' });
|
|
215
|
+
}
|
|
216
|
+
// Update config with detected type
|
|
217
|
+
config.mcpServers[name] = serverConfig;
|
|
218
|
+
writeMcpConfig(config);
|
|
219
|
+
console.log(`Auto-detected type for ${name}: ${serverConfig.type}`);
|
|
220
|
+
}
|
|
174
221
|
if (serverConfig.type === 'http') {
|
|
175
222
|
// Validate HTTP MCP server
|
|
176
223
|
await validateHttpMcpServer(name, serverConfig, config, res);
|
|
@@ -180,7 +227,7 @@ router.post('/:name/validate', async (req, res) => {
|
|
|
180
227
|
await validateStdioMcpServer(name, serverConfig, config, res);
|
|
181
228
|
}
|
|
182
229
|
else {
|
|
183
|
-
res.status(400).json({ error: 'Invalid MCP server type' });
|
|
230
|
+
res.status(400).json({ error: 'Invalid MCP server type. Must be "stdio" or "http".' });
|
|
184
231
|
}
|
|
185
232
|
}
|
|
186
233
|
catch (error) {
|
|
@@ -191,63 +238,75 @@ router.post('/:name/validate', async (req, res) => {
|
|
|
191
238
|
});
|
|
192
239
|
}
|
|
193
240
|
});
|
|
194
|
-
// Get MCP configurations from Claude Code
|
|
241
|
+
// Get MCP configurations from Claude Code's ~/.claude.json file
|
|
195
242
|
router.get('/claude-code', async (req, res) => {
|
|
196
243
|
try {
|
|
197
|
-
//
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
244
|
+
// Read ~/.claude.json file
|
|
245
|
+
const claudeJsonPath = path.join(os.homedir(), '.claude.json');
|
|
246
|
+
if (!fs.existsSync(claudeJsonPath)) {
|
|
247
|
+
return res.json({ servers: [] });
|
|
248
|
+
}
|
|
249
|
+
const claudeJsonContent = fs.readFileSync(claudeJsonPath, 'utf-8');
|
|
250
|
+
const claudeJson = JSON.parse(claudeJsonContent);
|
|
251
|
+
// Extract MCP servers from all projects
|
|
201
252
|
const servers = [];
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
253
|
+
const seenServers = new Set(); // To avoid duplicates
|
|
254
|
+
if (claudeJson.projects) {
|
|
255
|
+
for (const [projectPath, projectConfig] of Object.entries(claudeJson.projects)) {
|
|
256
|
+
if (projectConfig.mcpServers && typeof projectConfig.mcpServers === 'object') {
|
|
257
|
+
for (const [serverName, serverConfig] of Object.entries(projectConfig.mcpServers)) {
|
|
258
|
+
// Skip if we've already added this server
|
|
259
|
+
if (seenServers.has(serverName)) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
seenServers.add(serverName);
|
|
263
|
+
// Normalize the server configuration
|
|
264
|
+
const server = {
|
|
265
|
+
name: serverName,
|
|
266
|
+
type: serverConfig.type || 'stdio',
|
|
267
|
+
...serverConfig
|
|
268
|
+
};
|
|
269
|
+
// Auto-detect type if not specified
|
|
270
|
+
if (!server.type) {
|
|
271
|
+
if (server.url) {
|
|
272
|
+
server.type = 'http';
|
|
273
|
+
}
|
|
274
|
+
else if (server.command) {
|
|
275
|
+
server.type = 'stdio';
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
servers.push(server);
|
|
279
|
+
}
|
|
225
280
|
}
|
|
226
|
-
servers.push(server);
|
|
227
281
|
}
|
|
228
282
|
}
|
|
283
|
+
console.log(`Found ${servers.length} MCP server(s) from Claude Code configuration`);
|
|
229
284
|
res.json({ servers });
|
|
230
285
|
}
|
|
231
286
|
catch (error) {
|
|
232
|
-
console.error('Failed to
|
|
287
|
+
console.error('Failed to read Claude Code MCP configurations:', error);
|
|
233
288
|
res.status(500).json({
|
|
234
|
-
error: 'Failed to
|
|
289
|
+
error: 'Failed to read Claude Code MCP configurations',
|
|
235
290
|
details: error instanceof Error ? error.message : String(error)
|
|
236
291
|
});
|
|
237
292
|
}
|
|
238
293
|
});
|
|
239
|
-
|
|
294
|
+
exports.default = router;
|
|
240
295
|
// Validate HTTP MCP server
|
|
241
296
|
async function validateHttpMcpServer(name, serverConfig, config, res) {
|
|
242
297
|
try {
|
|
243
298
|
console.log('Validating HTTP MCP server:', serverConfig.url);
|
|
244
299
|
// Test HTTP connection to MCP server
|
|
300
|
+
// Merge user-configured headers with default headers
|
|
301
|
+
const requestHeaders = {
|
|
302
|
+
'Content-Type': 'application/json',
|
|
303
|
+
'Accept': 'application/json, text/event-stream',
|
|
304
|
+
// User-configured headers override defaults
|
|
305
|
+
...(serverConfig.headers || {})
|
|
306
|
+
};
|
|
245
307
|
const response = await fetch(serverConfig.url, {
|
|
246
308
|
method: 'POST',
|
|
247
|
-
headers:
|
|
248
|
-
'Content-Type': 'application/json',
|
|
249
|
-
'Accept': 'application/json, text/event-stream',
|
|
250
|
-
},
|
|
309
|
+
headers: requestHeaders,
|
|
251
310
|
body: JSON.stringify({
|
|
252
311
|
jsonrpc: '2.0',
|
|
253
312
|
id: 1,
|
|
@@ -271,20 +330,27 @@ async function validateHttpMcpServer(name, serverConfig, config, res) {
|
|
|
271
330
|
const responseText = await response.text();
|
|
272
331
|
console.log('HTTP MCP initialize response text:', responseText);
|
|
273
332
|
// Extract JSON from SSE format
|
|
333
|
+
// SSE format can have multiple fields: id, event, data, etc.
|
|
274
334
|
let initResult = null;
|
|
275
335
|
const lines = responseText.split('\n');
|
|
276
336
|
for (const line of lines) {
|
|
277
|
-
|
|
337
|
+
const trimmedLine = line.trim();
|
|
338
|
+
// Look for data: lines which contain the actual JSON-RPC response
|
|
339
|
+
if (trimmedLine.startsWith('data:')) {
|
|
278
340
|
try {
|
|
279
|
-
|
|
341
|
+
// Remove 'data:' prefix and parse JSON
|
|
342
|
+
const jsonStr = trimmedLine.substring(5).trim();
|
|
343
|
+
initResult = JSON.parse(jsonStr);
|
|
344
|
+
console.log('Parsed SSE data:', initResult);
|
|
280
345
|
break;
|
|
281
346
|
}
|
|
282
347
|
catch (e) {
|
|
283
|
-
console.warn('Failed to parse SSE data line:',
|
|
348
|
+
console.warn('Failed to parse SSE data line:', trimmedLine, e);
|
|
284
349
|
}
|
|
285
350
|
}
|
|
286
351
|
}
|
|
287
352
|
if (!initResult) {
|
|
353
|
+
console.error('Failed to find valid data line in SSE response');
|
|
288
354
|
throw new Error('Failed to parse HTTP MCP response');
|
|
289
355
|
}
|
|
290
356
|
console.log('HTTP MCP initialize parsed result:', initResult);
|
|
@@ -292,7 +358,7 @@ async function validateHttpMcpServer(name, serverConfig, config, res) {
|
|
|
292
358
|
let tools = [];
|
|
293
359
|
console.log('Getting tools from HTTP MCP server...');
|
|
294
360
|
try {
|
|
295
|
-
tools = await getHttpMcpTools(serverConfig.url);
|
|
361
|
+
tools = await getHttpMcpTools(serverConfig.url, serverConfig.headers);
|
|
296
362
|
console.log('Successfully retrieved tools from HTTP MCP:', tools);
|
|
297
363
|
}
|
|
298
364
|
catch (error) {
|
|
@@ -344,10 +410,19 @@ async function validateStdioMcpServer(name, serverConfig, config, res) {
|
|
|
344
410
|
}
|
|
345
411
|
// Start MCP server process to test connection
|
|
346
412
|
console.log('Starting stdio MCP server:', serverConfig.command, serverConfig.args);
|
|
347
|
-
|
|
413
|
+
console.log('Environment variables:', serverConfig.env);
|
|
414
|
+
const spawnOptions = {
|
|
348
415
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
349
416
|
timeout: serverConfig.timeout || 15000
|
|
350
|
-
}
|
|
417
|
+
};
|
|
418
|
+
// Merge environment variables if provided
|
|
419
|
+
if (serverConfig.env && Object.keys(serverConfig.env).length > 0) {
|
|
420
|
+
spawnOptions.env = {
|
|
421
|
+
...process.env,
|
|
422
|
+
...serverConfig.env
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
const child = (0, child_process_1.spawn)(serverConfig.command, serverConfig.args, spawnOptions);
|
|
351
426
|
let stdout = '';
|
|
352
427
|
let stderr = '';
|
|
353
428
|
let tools = [];
|
|
@@ -541,15 +616,19 @@ async function validateStdioMcpServer(name, serverConfig, config, res) {
|
|
|
541
616
|
* Get tools from HTTP MCP server using proper session management
|
|
542
617
|
* HTTP MCP requires maintaining session state between initialize and tools/list calls
|
|
543
618
|
*/
|
|
544
|
-
async function getHttpMcpTools(url) {
|
|
619
|
+
async function getHttpMcpTools(url, userHeaders) {
|
|
545
620
|
console.log('Starting HTTP MCP tools discovery for:', url);
|
|
621
|
+
// Merge user-configured headers with default headers
|
|
622
|
+
const baseHeaders = {
|
|
623
|
+
'Content-Type': 'application/json',
|
|
624
|
+
'Accept': 'application/json, text/event-stream',
|
|
625
|
+
// User-configured headers override defaults
|
|
626
|
+
...(userHeaders || {})
|
|
627
|
+
};
|
|
546
628
|
// Step 1: Initialize the session
|
|
547
629
|
const initResponse = await fetch(url, {
|
|
548
630
|
method: 'POST',
|
|
549
|
-
headers:
|
|
550
|
-
'Content-Type': 'application/json',
|
|
551
|
-
'Accept': 'application/json, text/event-stream',
|
|
552
|
-
},
|
|
631
|
+
headers: baseHeaders,
|
|
553
632
|
body: JSON.stringify({
|
|
554
633
|
jsonrpc: '2.0',
|
|
555
634
|
id: 1,
|
|
@@ -571,21 +650,25 @@ async function getHttpMcpTools(url) {
|
|
|
571
650
|
}
|
|
572
651
|
const initResponseText = await initResponse.text();
|
|
573
652
|
console.log('HTTP MCP initialize response:', initResponseText);
|
|
574
|
-
// Parse initialize response
|
|
653
|
+
// Parse initialize response from SSE format
|
|
575
654
|
let initResult = null;
|
|
576
655
|
const initLines = initResponseText.split('\n');
|
|
577
656
|
for (const line of initLines) {
|
|
578
|
-
|
|
657
|
+
const trimmedLine = line.trim();
|
|
658
|
+
if (trimmedLine.startsWith('data:')) {
|
|
579
659
|
try {
|
|
580
|
-
|
|
660
|
+
const jsonStr = trimmedLine.substring(5).trim();
|
|
661
|
+
initResult = JSON.parse(jsonStr);
|
|
662
|
+
console.log('Parsed init SSE data:', initResult);
|
|
581
663
|
break;
|
|
582
664
|
}
|
|
583
665
|
catch (e) {
|
|
584
|
-
console.warn('Failed to parse init SSE data line:',
|
|
666
|
+
console.warn('Failed to parse init SSE data line:', trimmedLine, e);
|
|
585
667
|
}
|
|
586
668
|
}
|
|
587
669
|
}
|
|
588
670
|
if (!initResult || !initResult.result) {
|
|
671
|
+
console.error('Invalid or missing initialize response');
|
|
589
672
|
throw new Error('Invalid initialize response from HTTP MCP server');
|
|
590
673
|
}
|
|
591
674
|
// Extract session ID from response headers
|
|
@@ -594,9 +677,9 @@ async function getHttpMcpTools(url) {
|
|
|
594
677
|
// Step 2: Get tools list using the session ID
|
|
595
678
|
// Wait a bit to ensure the session is properly established
|
|
596
679
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
680
|
+
// Prepare headers for tools/list request
|
|
597
681
|
const toolsHeaders = {
|
|
598
|
-
|
|
599
|
-
'Accept': 'application/json, text/event-stream',
|
|
682
|
+
...baseHeaders // Reuse base headers which include user-configured headers
|
|
600
683
|
};
|
|
601
684
|
// Add session ID if available
|
|
602
685
|
if (sessionId) {
|
|
@@ -621,21 +704,25 @@ async function getHttpMcpTools(url) {
|
|
|
621
704
|
}
|
|
622
705
|
const toolsResponseText = await toolsResponse.text();
|
|
623
706
|
console.log('HTTP MCP tools/list response:', toolsResponseText);
|
|
624
|
-
// Parse tools response
|
|
707
|
+
// Parse tools response from SSE format
|
|
625
708
|
let toolsResult = null;
|
|
626
709
|
const toolsLines = toolsResponseText.split('\n');
|
|
627
710
|
for (const line of toolsLines) {
|
|
628
|
-
|
|
711
|
+
const trimmedLine = line.trim();
|
|
712
|
+
if (trimmedLine.startsWith('data:')) {
|
|
629
713
|
try {
|
|
630
|
-
|
|
714
|
+
const jsonStr = trimmedLine.substring(5).trim();
|
|
715
|
+
toolsResult = JSON.parse(jsonStr);
|
|
716
|
+
console.log('Parsed tools SSE data:', toolsResult);
|
|
631
717
|
break;
|
|
632
718
|
}
|
|
633
719
|
catch (e) {
|
|
634
|
-
console.warn('Failed to parse tools SSE data line:',
|
|
720
|
+
console.warn('Failed to parse tools SSE data line:', trimmedLine, e);
|
|
635
721
|
}
|
|
636
722
|
}
|
|
637
723
|
}
|
|
638
724
|
if (!toolsResult) {
|
|
725
|
+
console.error('Invalid or missing tools/list response');
|
|
639
726
|
throw new Error('Invalid tools/list response from HTTP MCP server');
|
|
640
727
|
}
|
|
641
728
|
if (toolsResult.error) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/routes/media.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM1C,QAAA,MAAM,MAAM,EAAE,MAAyB,CAAC;AAGxC,eAAO,MAAM,YAAY,GAAI,aAAa,MAAM,KAAG,MAElD,CAAC;AAgIF,eAAe,MAAM,CAAC"}
|
|
@@ -1,50 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { resolve, relative, extname, dirname } from 'path';
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
6
|
-
import crypto from 'crypto';
|
|
7
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
-
const __dirname = dirname(__filename);
|
|
9
|
-
const router = express.Router();
|
|
10
|
-
// Project ID to path mapping (in production, this should be stored in a database)
|
|
11
|
-
const projectMappings = new Map();
|
|
12
|
-
// Helper function to generate project ID from path
|
|
13
|
-
const generateProjectId = (projectPath) => {
|
|
14
|
-
return crypto.createHash('md5').update(projectPath).digest('hex').substring(0, 16);
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
4
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const projectId = generateProjectId(normalizedPath);
|
|
27
|
-
projectMappings.set(projectId, normalizedPath);
|
|
28
|
-
return projectId;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getProjectId = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const router = express_1.default.Router();
|
|
12
|
+
// Helper function to get or create project ID using base64url encoding (reversible)
|
|
13
|
+
const getProjectId = (projectPath) => {
|
|
14
|
+
return encodeProjectPath(projectPath);
|
|
29
15
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
16
|
+
exports.getProjectId = getProjectId;
|
|
17
|
+
// Helper function to decode project ID back to path using base64 encoding
|
|
18
|
+
// We'll use a reversible encoding scheme instead of hash
|
|
19
|
+
const encodeProjectPath = (projectPath) => {
|
|
20
|
+
const normalizedPath = (0, path_1.resolve)(projectPath);
|
|
21
|
+
// Use base64url encoding (URL-safe)
|
|
22
|
+
return Buffer.from(normalizedPath).toString('base64')
|
|
23
|
+
.replace(/\+/g, '-')
|
|
24
|
+
.replace(/\//g, '_')
|
|
25
|
+
.replace(/=/g, '');
|
|
26
|
+
};
|
|
27
|
+
const decodeProjectPath = (encodedPath) => {
|
|
28
|
+
try {
|
|
29
|
+
// Restore base64 padding and decode
|
|
30
|
+
const base64 = encodedPath
|
|
31
|
+
.replace(/-/g, '+')
|
|
32
|
+
.replace(/_/g, '/');
|
|
33
|
+
const padding = (4 - (base64.length % 4)) % 4;
|
|
34
|
+
const paddedBase64 = base64 + '='.repeat(padding);
|
|
35
|
+
return Buffer.from(paddedBase64, 'base64').toString('utf-8');
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error('Failed to decode project path:', error);
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
33
41
|
};
|
|
34
42
|
// Helper function to resolve and validate file path within project
|
|
35
43
|
const resolveSafeMediaPath = (projectPath, relativePath) => {
|
|
36
|
-
const resolvedProjectPath = resolve(projectPath);
|
|
37
|
-
const resolvedFilePath = resolve(resolvedProjectPath, relativePath);
|
|
44
|
+
const resolvedProjectPath = (0, path_1.resolve)(projectPath);
|
|
45
|
+
const resolvedFilePath = (0, path_1.resolve)(resolvedProjectPath, relativePath);
|
|
38
46
|
// Ensure the path is within the project directory for security
|
|
39
|
-
const relativeToProject = relative(resolvedProjectPath, resolvedFilePath);
|
|
40
|
-
if (relativeToProject.startsWith('..') || resolve(resolvedProjectPath, relativeToProject) !== resolvedFilePath) {
|
|
47
|
+
const relativeToProject = (0, path_1.relative)(resolvedProjectPath, resolvedFilePath);
|
|
48
|
+
if (relativeToProject.startsWith('..') || (0, path_1.resolve)(resolvedProjectPath, relativeToProject) !== resolvedFilePath) {
|
|
41
49
|
throw new Error('Path is outside project directory');
|
|
42
50
|
}
|
|
43
51
|
return resolvedFilePath;
|
|
44
52
|
};
|
|
45
53
|
// Helper function to get MIME type from file extension
|
|
46
54
|
const getMimeType = (filePath) => {
|
|
47
|
-
const ext = extname(filePath).toLowerCase();
|
|
55
|
+
const ext = (0, path_1.extname)(filePath).toLowerCase();
|
|
48
56
|
const mimeTypes = {
|
|
49
57
|
'.html': 'text/html',
|
|
50
58
|
'.htm': 'text/html',
|
|
@@ -64,7 +72,7 @@ const getMimeType = (filePath) => {
|
|
|
64
72
|
};
|
|
65
73
|
return mimeTypes[ext] || 'application/octet-stream';
|
|
66
74
|
};
|
|
67
|
-
// GET /media/{project-id}/{relative-path} - Serve static files from project directory
|
|
75
|
+
// GET /media/{project-id}/{relative-path} - Serve static files from project directory (PUBLIC)
|
|
68
76
|
router.get('/:projectId/*', async (req, res) => {
|
|
69
77
|
try {
|
|
70
78
|
const { projectId } = req.params;
|
|
@@ -72,19 +80,21 @@ router.get('/:projectId/*', async (req, res) => {
|
|
|
72
80
|
if (!relativePath) {
|
|
73
81
|
return res.status(400).json({ error: 'File path is required' });
|
|
74
82
|
}
|
|
75
|
-
//
|
|
76
|
-
const projectPath =
|
|
83
|
+
// Decode project path from ID (base64url encoded)
|
|
84
|
+
const projectPath = decodeProjectPath(projectId);
|
|
77
85
|
if (!projectPath) {
|
|
86
|
+
console.error('Failed to decode project ID:', projectId);
|
|
78
87
|
return res.status(404).json({ error: 'Project not found' });
|
|
79
88
|
}
|
|
89
|
+
console.log('Media route: Decoded projectPath:', projectPath, 'from projectId:', projectId);
|
|
80
90
|
// Resolve safe file path
|
|
81
91
|
const filePath = resolveSafeMediaPath(projectPath, relativePath);
|
|
82
92
|
// Check if file exists
|
|
83
|
-
if (!existsSync(filePath)) {
|
|
93
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
84
94
|
return res.status(404).json({ error: 'File not found' });
|
|
85
95
|
}
|
|
86
96
|
// Check if it's a file (not directory)
|
|
87
|
-
const stats = await
|
|
97
|
+
const stats = await fs_extra_1.default.stat(filePath);
|
|
88
98
|
if (!stats.isFile()) {
|
|
89
99
|
return res.status(400).json({ error: 'Path is not a file' });
|
|
90
100
|
}
|
|
@@ -96,7 +106,7 @@ router.get('/:projectId/*', async (req, res) => {
|
|
|
96
106
|
res.setHeader('Cache-Control', 'public, max-age=3600'); // 1 hour cache
|
|
97
107
|
}
|
|
98
108
|
// Stream the file
|
|
99
|
-
const fileStream =
|
|
109
|
+
const fileStream = fs_extra_1.default.createReadStream(filePath);
|
|
100
110
|
fileStream.pipe(res);
|
|
101
111
|
fileStream.on('error', (error) => {
|
|
102
112
|
console.error('Error streaming file:', error);
|
|
@@ -113,5 +123,5 @@ router.get('/:projectId/*', async (req, res) => {
|
|
|
113
123
|
res.status(500).json({ error: 'Failed to serve file' });
|
|
114
124
|
}
|
|
115
125
|
});
|
|
116
|
-
|
|
126
|
+
exports.default = router;
|
|
117
127
|
//# sourceMappingURL=media.js.map
|