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
package/routes/a2a.js
ADDED
|
@@ -0,0 +1,649 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A2A Protocol Routes
|
|
4
|
+
*
|
|
5
|
+
* Implements A2A (Agent-to-Agent) protocol HTTP endpoints for external agent communication.
|
|
6
|
+
*
|
|
7
|
+
* Endpoints:
|
|
8
|
+
* - GET /.well-known/agent-card.json - Retrieve Agent Card (discovery)
|
|
9
|
+
* - POST /messages - Send synchronous message
|
|
10
|
+
* - POST /tasks - Create asynchronous task
|
|
11
|
+
* - GET /tasks/:taskId - Query task status
|
|
12
|
+
* - DELETE /tasks/:taskId - Cancel task
|
|
13
|
+
*
|
|
14
|
+
* All endpoints require API key authentication via Authorization header.
|
|
15
|
+
*/
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
const express_1 = __importDefault(require("express"));
|
|
21
|
+
const a2aAuth_js_1 = require("../middleware/a2aAuth.js");
|
|
22
|
+
const rateLimiting_js_1 = require("../middleware/rateLimiting.js");
|
|
23
|
+
const a2a_js_1 = require("../schemas/a2a.js");
|
|
24
|
+
const agentCardService_js_1 = require("../services/a2a/agentCardService.js");
|
|
25
|
+
const agentCardCache_js_1 = require("../utils/agentCardCache.js");
|
|
26
|
+
const agentStorage_js_1 = require("../services/agentStorage.js");
|
|
27
|
+
const projectMetadataStorage_js_1 = require("../services/projectMetadataStorage.js");
|
|
28
|
+
const taskManager_js_1 = require("../services/a2a/taskManager.js");
|
|
29
|
+
const a2aHistoryService_js_1 = require("../services/a2a/a2aHistoryService.js");
|
|
30
|
+
const sessionManager_js_1 = require("../services/sessionManager.js");
|
|
31
|
+
const sessionUtils_js_1 = require("../utils/sessionUtils.js");
|
|
32
|
+
const claudeUtils_js_1 = require("../utils/claudeUtils.js");
|
|
33
|
+
const a2aQueryService_js_1 = require("../services/a2a/a2aQueryService.js");
|
|
34
|
+
const router = express_1.default.Router({ mergeParams: true });
|
|
35
|
+
// Initialize storage services
|
|
36
|
+
const agentStorage = new agentStorage_js_1.AgentStorage();
|
|
37
|
+
const projectMetadataStorage = new projectMetadataStorage_js_1.ProjectMetadataStorage();
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Middleware: Apply authentication and rate limiting to all routes
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// All routes require authentication
|
|
42
|
+
router.use(a2aAuth_js_1.a2aAuth);
|
|
43
|
+
// Default rate limiting for all routes
|
|
44
|
+
router.use(rateLimiting_js_1.a2aRateLimiter);
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// GET /.well-known/agent-card.json - Agent Card Discovery
|
|
47
|
+
// ============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Retrieve Agent Card for an agent
|
|
50
|
+
* This is the standard A2A discovery endpoint
|
|
51
|
+
*
|
|
52
|
+
* @route GET /a2a/:a2aAgentId/.well-known/agent-card.json
|
|
53
|
+
* @access Authenticated (API key required)
|
|
54
|
+
* @rateLimit 100 requests/hour per API key
|
|
55
|
+
*
|
|
56
|
+
* @response 200 - Agent Card JSON
|
|
57
|
+
* @response 401 - Unauthorized (invalid/missing API key)
|
|
58
|
+
* @response 404 - Agent not found
|
|
59
|
+
* @response 429 - Rate limit exceeded
|
|
60
|
+
*/
|
|
61
|
+
router.get('/.well-known/agent-card.json', async (req, res) => {
|
|
62
|
+
try {
|
|
63
|
+
const { a2aContext } = req;
|
|
64
|
+
if (!a2aContext) {
|
|
65
|
+
return res.status(500).json({
|
|
66
|
+
error: 'Authentication context missing',
|
|
67
|
+
code: 'AUTH_CONTEXT_MISSING',
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// Load agent configuration
|
|
71
|
+
const agentConfig = agentStorage.getAgent(a2aContext.agentType);
|
|
72
|
+
if (!agentConfig) {
|
|
73
|
+
return res.status(404).json({
|
|
74
|
+
error: `Agent '${a2aContext.agentType}' not found`,
|
|
75
|
+
code: 'AGENT_NOT_FOUND',
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// Get project metadata for project name
|
|
79
|
+
const projectMetadata = projectMetadataStorage.getProjectMetadata(a2aContext.workingDirectory);
|
|
80
|
+
const projectName = projectMetadata?.name || a2aContext.projectId;
|
|
81
|
+
// Build project context for Agent Card generation
|
|
82
|
+
const baseUrl = `${req.protocol}://${req.get('host')}`;
|
|
83
|
+
const projectContext = {
|
|
84
|
+
projectId: a2aContext.projectId,
|
|
85
|
+
projectName,
|
|
86
|
+
workingDirectory: a2aContext.workingDirectory,
|
|
87
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
88
|
+
baseUrl,
|
|
89
|
+
};
|
|
90
|
+
// Try to get from cache first
|
|
91
|
+
let agentCard = agentCardCache_js_1.agentCardCache.get(agentConfig, projectContext);
|
|
92
|
+
if (!agentCard) {
|
|
93
|
+
// Generate Agent Card from agent configuration
|
|
94
|
+
agentCard = (0, agentCardService_js_1.generateAgentCard)(agentConfig, projectContext);
|
|
95
|
+
// Cache the generated Agent Card
|
|
96
|
+
agentCardCache_js_1.agentCardCache.set(agentConfig, projectContext, agentCard);
|
|
97
|
+
console.info('[A2A] Agent Card generated and cached:', {
|
|
98
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
99
|
+
agentType: a2aContext.agentType,
|
|
100
|
+
skillCount: agentCard.skills.length,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.info('[A2A] Agent Card served from cache:', {
|
|
105
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
106
|
+
agentType: a2aContext.agentType,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
res.json(agentCard);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error('[A2A] Error retrieving agent card:', error);
|
|
113
|
+
res.status(500).json({
|
|
114
|
+
error: 'Failed to retrieve agent card',
|
|
115
|
+
code: 'AGENT_CARD_ERROR',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// POST /messages - Synchronous Message
|
|
121
|
+
// ============================================================================
|
|
122
|
+
/**
|
|
123
|
+
* Send a synchronous message to an agent
|
|
124
|
+
* The agent processes the message and returns a response immediately
|
|
125
|
+
*
|
|
126
|
+
* @route POST /a2a/:a2aAgentId/messages
|
|
127
|
+
* @access Authenticated (API key required)
|
|
128
|
+
* @rateLimit 100 requests/hour per API key
|
|
129
|
+
*
|
|
130
|
+
* @body {message: string, context?: Record<string, unknown>}
|
|
131
|
+
* @response 200 - Message response
|
|
132
|
+
* @response 400 - Invalid request
|
|
133
|
+
* @response 401 - Unauthorized
|
|
134
|
+
* @response 429 - Rate limit exceeded
|
|
135
|
+
* @response 500 - Processing error
|
|
136
|
+
*/
|
|
137
|
+
router.post('/messages', async (req, res) => {
|
|
138
|
+
try {
|
|
139
|
+
const { a2aContext } = req;
|
|
140
|
+
if (!a2aContext) {
|
|
141
|
+
return res.status(500).json({
|
|
142
|
+
error: 'Authentication context missing',
|
|
143
|
+
code: 'AUTH_CONTEXT_MISSING',
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// Validate request body
|
|
147
|
+
const validation = (0, a2a_js_1.validateSafe)(a2a_js_1.A2AMessageRequestSchema, req.body);
|
|
148
|
+
if (!validation.success) {
|
|
149
|
+
return res.status(400).json({
|
|
150
|
+
error: 'Invalid request',
|
|
151
|
+
code: 'VALIDATION_ERROR',
|
|
152
|
+
details: validation.errors,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const { message, sessionId, sessionMode = 'new' } = validation.data;
|
|
156
|
+
const stream = req.query.stream === 'true' || req.headers.accept === 'text/event-stream';
|
|
157
|
+
console.info('[A2A] Message received:', {
|
|
158
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
159
|
+
projectId: a2aContext.projectId,
|
|
160
|
+
agentType: a2aContext.agentType,
|
|
161
|
+
messageLength: message.length,
|
|
162
|
+
sessionId,
|
|
163
|
+
sessionMode,
|
|
164
|
+
stream,
|
|
165
|
+
});
|
|
166
|
+
// Load agent configuration
|
|
167
|
+
const agentConfig = agentStorage.getAgent(a2aContext.agentType);
|
|
168
|
+
if (!agentConfig) {
|
|
169
|
+
return res.status(404).json({
|
|
170
|
+
error: `Agent '${a2aContext.agentType}' not found`,
|
|
171
|
+
code: 'AGENT_NOT_FOUND',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (!agentConfig.enabled) {
|
|
175
|
+
return res.status(403).json({
|
|
176
|
+
error: `Agent '${a2aContext.agentType}' is disabled`,
|
|
177
|
+
code: 'AGENT_DISABLED',
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
// Build query options for Claude using the shared utility
|
|
181
|
+
// This automatically handles A2A SDK MCP server integration
|
|
182
|
+
const { queryOptions } = await (0, claudeUtils_js_1.buildQueryOptions)({
|
|
183
|
+
systemPrompt: agentConfig.systemPrompt || undefined,
|
|
184
|
+
allowedTools: agentConfig.allowedTools || [],
|
|
185
|
+
maxTurns: 30,
|
|
186
|
+
workingDirectory: a2aContext.workingDirectory,
|
|
187
|
+
permissionMode: 'default',
|
|
188
|
+
model: 'sonnet', // Default model
|
|
189
|
+
}, a2aContext.workingDirectory, undefined, // mcpTools
|
|
190
|
+
undefined, // permissionMode
|
|
191
|
+
undefined, // model
|
|
192
|
+
undefined, // claudeVersion
|
|
193
|
+
undefined // defaultEnv
|
|
194
|
+
);
|
|
195
|
+
// Override specific options for A2A
|
|
196
|
+
// User requested includePartialMessages = false for A2A streaming to get complete messages
|
|
197
|
+
queryOptions.includePartialMessages = false;
|
|
198
|
+
const startTime = Date.now();
|
|
199
|
+
// ============================================================================
|
|
200
|
+
// sessionMode='new': Use one-shot Query (no SessionManager/ClaudeSession reuse)
|
|
201
|
+
// ============================================================================
|
|
202
|
+
if (sessionMode === 'new') {
|
|
203
|
+
console.log(`🆕 [A2A] Using one-shot Query mode (sessionMode=new)`);
|
|
204
|
+
// Add resume option if sessionId is provided
|
|
205
|
+
if (sessionId) {
|
|
206
|
+
queryOptions.resume = sessionId;
|
|
207
|
+
}
|
|
208
|
+
if (stream) {
|
|
209
|
+
// Streaming Mode (SSE) with one-shot Query
|
|
210
|
+
res.setHeader('Content-Type', 'text/event-stream');
|
|
211
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
212
|
+
res.setHeader('Connection', 'keep-alive');
|
|
213
|
+
res.flushHeaders();
|
|
214
|
+
let capturedSessionId = null;
|
|
215
|
+
try {
|
|
216
|
+
const result = await (0, a2aQueryService_js_1.executeA2AQueryStreaming)(message, undefined, // images
|
|
217
|
+
queryOptions, (sdkMessage) => {
|
|
218
|
+
// Capture session ID
|
|
219
|
+
if (sdkMessage.session_id && !capturedSessionId) {
|
|
220
|
+
capturedSessionId = sdkMessage.session_id;
|
|
221
|
+
}
|
|
222
|
+
const eventData = {
|
|
223
|
+
...sdkMessage,
|
|
224
|
+
sessionId: capturedSessionId || sessionId,
|
|
225
|
+
timestamp: Date.now(),
|
|
226
|
+
};
|
|
227
|
+
// Write to SSE stream
|
|
228
|
+
res.write(`data: ${JSON.stringify(eventData)}\n\n`);
|
|
229
|
+
// Persist to history (fire and forget for streaming)
|
|
230
|
+
if (capturedSessionId || sessionId) {
|
|
231
|
+
a2aHistoryService_js_1.a2aHistoryService.appendEvent(a2aContext.workingDirectory, capturedSessionId || sessionId, eventData).catch(err => console.error('[A2A] Failed to write history event:', err));
|
|
232
|
+
}
|
|
233
|
+
// Check for completion
|
|
234
|
+
if (sdkMessage.type === 'result') {
|
|
235
|
+
res.write(`data: ${JSON.stringify({ type: 'done' })}\n\n`);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
capturedSessionId = result.sessionId || capturedSessionId;
|
|
239
|
+
res.end();
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
console.error('[A2A] Error in one-shot streaming query:', error);
|
|
243
|
+
const errorEvent = {
|
|
244
|
+
type: 'error',
|
|
245
|
+
error: error instanceof Error ? error.message : String(error)
|
|
246
|
+
};
|
|
247
|
+
res.write(`data: ${JSON.stringify(errorEvent)}\n\n`);
|
|
248
|
+
res.end();
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// Synchronous Mode with one-shot Query
|
|
253
|
+
try {
|
|
254
|
+
const result = await (0, a2aQueryService_js_1.executeA2AQuery)(message, undefined, // images
|
|
255
|
+
queryOptions, async (sdkMessage) => {
|
|
256
|
+
// Persist to history
|
|
257
|
+
const eventData = {
|
|
258
|
+
...sdkMessage,
|
|
259
|
+
sessionId: sessionId,
|
|
260
|
+
timestamp: Date.now(),
|
|
261
|
+
};
|
|
262
|
+
if (sessionId) {
|
|
263
|
+
try {
|
|
264
|
+
await a2aHistoryService_js_1.a2aHistoryService.appendEvent(a2aContext.workingDirectory, sessionId, eventData);
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
console.error('[A2A] Failed to write history event:', err);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
const processingTimeMs = Date.now() - startTime;
|
|
272
|
+
console.info('[A2A] Message processed successfully (one-shot mode):', {
|
|
273
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
274
|
+
processingTimeMs,
|
|
275
|
+
responseLength: result.fullResponse.length,
|
|
276
|
+
tokensUsed: result.tokensUsed,
|
|
277
|
+
sessionId: result.sessionId,
|
|
278
|
+
});
|
|
279
|
+
res.json({
|
|
280
|
+
response: result.fullResponse || 'No response generated',
|
|
281
|
+
sessionId: result.sessionId,
|
|
282
|
+
metadata: {
|
|
283
|
+
processingTimeMs,
|
|
284
|
+
tokensUsed: result.tokensUsed,
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
console.error('[A2A] Error in one-shot query:', error);
|
|
290
|
+
throw error;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
// ============================================================================
|
|
296
|
+
// sessionMode='reuse': Use ClaudeSession/SessionManager (original behavior)
|
|
297
|
+
// ============================================================================
|
|
298
|
+
console.log(`♻️ [A2A] Using ClaudeSession reuse mode (sessionMode=reuse)`);
|
|
299
|
+
const { claudeSession, actualSessionId } = await (0, sessionUtils_js_1.handleSessionManagement)(a2aContext.agentType, sessionId || null, a2aContext.workingDirectory, queryOptions, undefined, // claudeVersionId
|
|
300
|
+
undefined, // modelId
|
|
301
|
+
'reuse');
|
|
302
|
+
if (stream) {
|
|
303
|
+
// Streaming Mode (SSE) with ClaudeSession
|
|
304
|
+
res.setHeader('Content-Type', 'text/event-stream');
|
|
305
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
306
|
+
res.setHeader('Connection', 'keep-alive');
|
|
307
|
+
res.flushHeaders();
|
|
308
|
+
const userMessage = {
|
|
309
|
+
type: 'user',
|
|
310
|
+
message: {
|
|
311
|
+
role: 'user',
|
|
312
|
+
content: [{ type: 'text', text: message }]
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
try {
|
|
316
|
+
await claudeSession.sendMessage(userMessage, async (sdkMessage) => {
|
|
317
|
+
const eventData = {
|
|
318
|
+
...sdkMessage,
|
|
319
|
+
sessionId: actualSessionId,
|
|
320
|
+
timestamp: Date.now(),
|
|
321
|
+
};
|
|
322
|
+
res.write(`data: ${JSON.stringify(eventData)}\n\n`);
|
|
323
|
+
try {
|
|
324
|
+
if (actualSessionId) {
|
|
325
|
+
await a2aHistoryService_js_1.a2aHistoryService.appendEvent(a2aContext.workingDirectory, actualSessionId, eventData);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch (err) {
|
|
329
|
+
console.error('[A2A] Failed to write history event:', err);
|
|
330
|
+
}
|
|
331
|
+
if (sdkMessage.type === 'result') {
|
|
332
|
+
res.write(`data: ${JSON.stringify({ type: 'done' })}\n\n`);
|
|
333
|
+
res.end();
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
console.error('[A2A] Error in streaming session:', error);
|
|
339
|
+
const errorEvent = {
|
|
340
|
+
type: 'error',
|
|
341
|
+
error: error instanceof Error ? error.message : String(error)
|
|
342
|
+
};
|
|
343
|
+
res.write(`data: ${JSON.stringify(errorEvent)}\n\n`);
|
|
344
|
+
res.end();
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
// Synchronous Mode with ClaudeSession
|
|
349
|
+
let fullResponse = '';
|
|
350
|
+
let tokensUsed = 0;
|
|
351
|
+
try {
|
|
352
|
+
await new Promise((resolve, reject) => {
|
|
353
|
+
const userMessage = {
|
|
354
|
+
type: 'user',
|
|
355
|
+
message: {
|
|
356
|
+
role: 'user',
|
|
357
|
+
content: [{ type: 'text', text: message }]
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
claudeSession.sendMessage(userMessage, async (sdkMessage) => {
|
|
361
|
+
const eventData = {
|
|
362
|
+
...sdkMessage,
|
|
363
|
+
sessionId: actualSessionId,
|
|
364
|
+
timestamp: Date.now(),
|
|
365
|
+
};
|
|
366
|
+
try {
|
|
367
|
+
if (actualSessionId) {
|
|
368
|
+
await a2aHistoryService_js_1.a2aHistoryService.appendEvent(a2aContext.workingDirectory, actualSessionId, eventData);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
console.error('[A2A] Failed to write history event:', err);
|
|
373
|
+
}
|
|
374
|
+
if (sdkMessage.type === 'assistant' && sdkMessage.message?.content) {
|
|
375
|
+
for (const block of sdkMessage.message.content) {
|
|
376
|
+
if (block.type === 'text') {
|
|
377
|
+
fullResponse += block.text;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
if (sdkMessage.type === 'assistant' && sdkMessage.usage) {
|
|
382
|
+
const usage = sdkMessage.usage;
|
|
383
|
+
tokensUsed = (usage.input_tokens || 0) + (usage.output_tokens || 0);
|
|
384
|
+
}
|
|
385
|
+
const sdkSessionId = sdkMessage.session_id;
|
|
386
|
+
if (sdkSessionId && claudeSession.getClaudeSessionId() !== sdkSessionId) {
|
|
387
|
+
claudeSession.setClaudeSessionId(sdkSessionId);
|
|
388
|
+
sessionManager_js_1.sessionManager.confirmSessionId(claudeSession, sdkSessionId);
|
|
389
|
+
console.log(`✅ Confirmed session ${sdkSessionId} for agent: ${a2aContext.agentType}`);
|
|
390
|
+
}
|
|
391
|
+
if (sdkMessage.type === 'result') {
|
|
392
|
+
resolve();
|
|
393
|
+
}
|
|
394
|
+
}).catch((err) => {
|
|
395
|
+
reject(err);
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
const finalSessionId = claudeSession.getClaudeSessionId();
|
|
399
|
+
const processingTimeMs = Date.now() - startTime;
|
|
400
|
+
console.info('[A2A] Message processed successfully:', {
|
|
401
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
402
|
+
processingTimeMs,
|
|
403
|
+
responseLength: fullResponse.length,
|
|
404
|
+
tokensUsed,
|
|
405
|
+
sessionId: finalSessionId,
|
|
406
|
+
});
|
|
407
|
+
res.json({
|
|
408
|
+
response: fullResponse || 'No response generated',
|
|
409
|
+
sessionId: finalSessionId,
|
|
410
|
+
metadata: {
|
|
411
|
+
processingTimeMs,
|
|
412
|
+
tokensUsed,
|
|
413
|
+
},
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
catch (error) {
|
|
417
|
+
console.error('[A2A] Error calling Claude:', error);
|
|
418
|
+
throw error;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
console.error('[A2A] Error processing message:', error);
|
|
425
|
+
if (!res.headersSent) {
|
|
426
|
+
res.status(500).json({
|
|
427
|
+
error: 'Failed to process message',
|
|
428
|
+
code: 'MESSAGE_PROCESSING_ERROR',
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
// ============================================================================
|
|
434
|
+
// POST /tasks - Create Asynchronous Task
|
|
435
|
+
// ============================================================================
|
|
436
|
+
/**
|
|
437
|
+
* Create an asynchronous task for long-running operations
|
|
438
|
+
* Returns immediately with task ID for status polling
|
|
439
|
+
*
|
|
440
|
+
* @route POST /a2a/:a2aAgentId/tasks
|
|
441
|
+
* @access Authenticated (API key required)
|
|
442
|
+
* @rateLimit 50 requests/hour per API key (stricter for task creation)
|
|
443
|
+
*
|
|
444
|
+
* @body {message: string, timeout?: number, context?: Record<string, unknown>}
|
|
445
|
+
* @response 202 - Task created (returns task ID and status URL)
|
|
446
|
+
* @response 400 - Invalid request
|
|
447
|
+
* @response 401 - Unauthorized
|
|
448
|
+
* @response 429 - Rate limit exceeded
|
|
449
|
+
* @response 500 - Task creation error
|
|
450
|
+
*/
|
|
451
|
+
router.post('/tasks', rateLimiting_js_1.a2aStrictRateLimiter, async (req, res) => {
|
|
452
|
+
try {
|
|
453
|
+
const { a2aContext } = req;
|
|
454
|
+
if (!a2aContext) {
|
|
455
|
+
return res.status(500).json({
|
|
456
|
+
error: 'Authentication context missing',
|
|
457
|
+
code: 'AUTH_CONTEXT_MISSING',
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
// Validate request body
|
|
461
|
+
const validation = (0, a2a_js_1.validateSafe)(a2a_js_1.A2ATaskRequestSchema, req.body);
|
|
462
|
+
if (!validation.success) {
|
|
463
|
+
return res.status(400).json({
|
|
464
|
+
error: 'Invalid request',
|
|
465
|
+
code: 'VALIDATION_ERROR',
|
|
466
|
+
details: validation.errors,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
const { message, timeout, context } = validation.data;
|
|
470
|
+
console.info('[A2A] Task creation requested:', {
|
|
471
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
472
|
+
projectId: a2aContext.projectId,
|
|
473
|
+
agentType: a2aContext.agentType,
|
|
474
|
+
timeout,
|
|
475
|
+
});
|
|
476
|
+
// Create task using TaskManager
|
|
477
|
+
const task = await taskManager_js_1.taskManager.createTask({
|
|
478
|
+
workingDirectory: a2aContext.workingDirectory,
|
|
479
|
+
projectId: a2aContext.projectId,
|
|
480
|
+
agentId: a2aContext.agentType,
|
|
481
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
482
|
+
input: {
|
|
483
|
+
message,
|
|
484
|
+
additionalContext: context,
|
|
485
|
+
},
|
|
486
|
+
timeoutMs: timeout,
|
|
487
|
+
});
|
|
488
|
+
res.status(202).json({
|
|
489
|
+
taskId: task.id,
|
|
490
|
+
status: task.status,
|
|
491
|
+
checkUrl: `/a2a/${a2aContext.a2aAgentId}/tasks/${task.id}`,
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
console.error('[A2A] Error creating task:', error);
|
|
496
|
+
res.status(500).json({
|
|
497
|
+
error: 'Failed to create task',
|
|
498
|
+
code: 'TASK_CREATION_ERROR',
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
// ============================================================================
|
|
503
|
+
// GET /tasks/:taskId - Query Task Status
|
|
504
|
+
// ============================================================================
|
|
505
|
+
/**
|
|
506
|
+
* Query the status of an asynchronous task
|
|
507
|
+
*
|
|
508
|
+
* @route GET /a2a/:a2aAgentId/tasks/:taskId
|
|
509
|
+
* @access Authenticated (API key required)
|
|
510
|
+
* @rateLimit 100 requests/hour per API key
|
|
511
|
+
*
|
|
512
|
+
* @response 200 - Task status
|
|
513
|
+
* @response 401 - Unauthorized
|
|
514
|
+
* @response 404 - Task not found
|
|
515
|
+
* @response 429 - Rate limit exceeded
|
|
516
|
+
*/
|
|
517
|
+
router.get('/tasks/:taskId', async (req, res) => {
|
|
518
|
+
try {
|
|
519
|
+
const { a2aContext } = req;
|
|
520
|
+
const { taskId } = req.params;
|
|
521
|
+
if (!a2aContext) {
|
|
522
|
+
return res.status(500).json({
|
|
523
|
+
error: 'Authentication context missing',
|
|
524
|
+
code: 'AUTH_CONTEXT_MISSING',
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
console.info('[A2A] Task status query:', {
|
|
528
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
529
|
+
projectId: a2aContext.projectId,
|
|
530
|
+
taskId,
|
|
531
|
+
});
|
|
532
|
+
// Get task from TaskManager
|
|
533
|
+
const task = await taskManager_js_1.taskManager.getTask(a2aContext.workingDirectory, taskId);
|
|
534
|
+
if (!task) {
|
|
535
|
+
return res.status(404).json({
|
|
536
|
+
error: `Task not found: ${taskId}`,
|
|
537
|
+
code: 'TASK_NOT_FOUND',
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
// Build response
|
|
541
|
+
const response = {
|
|
542
|
+
taskId: task.id,
|
|
543
|
+
status: task.status,
|
|
544
|
+
createdAt: task.createdAt,
|
|
545
|
+
updatedAt: task.updatedAt,
|
|
546
|
+
};
|
|
547
|
+
// Add optional fields if present
|
|
548
|
+
if (task.startedAt) {
|
|
549
|
+
response.startedAt = task.startedAt;
|
|
550
|
+
}
|
|
551
|
+
if (task.completedAt) {
|
|
552
|
+
response.completedAt = task.completedAt;
|
|
553
|
+
}
|
|
554
|
+
if (task.output) {
|
|
555
|
+
response.output = task.output;
|
|
556
|
+
}
|
|
557
|
+
if (task.errorDetails) {
|
|
558
|
+
response.errorDetails = task.errorDetails;
|
|
559
|
+
}
|
|
560
|
+
if (task.progress) {
|
|
561
|
+
response.progress = task.progress;
|
|
562
|
+
}
|
|
563
|
+
// Add progress information for running tasks
|
|
564
|
+
if (task.status === 'running') {
|
|
565
|
+
response.progress = {
|
|
566
|
+
currentStep: 'Processing',
|
|
567
|
+
percentComplete: 50, // TODO: Implement real progress tracking
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
res.json(response);
|
|
571
|
+
}
|
|
572
|
+
catch (error) {
|
|
573
|
+
console.error('[A2A] Error querying task status:', error);
|
|
574
|
+
res.status(500).json({
|
|
575
|
+
error: 'Failed to query task status',
|
|
576
|
+
code: 'TASK_STATUS_ERROR',
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
// ============================================================================
|
|
581
|
+
// DELETE /tasks/:taskId - Cancel Task
|
|
582
|
+
// ============================================================================
|
|
583
|
+
/**
|
|
584
|
+
* Cancel a running or pending task
|
|
585
|
+
*
|
|
586
|
+
* @route DELETE /a2a/:a2aAgentId/tasks/:taskId
|
|
587
|
+
* @access Authenticated (API key required)
|
|
588
|
+
* @rateLimit 100 requests/hour per API key
|
|
589
|
+
*
|
|
590
|
+
* @response 200 - Task canceled
|
|
591
|
+
* @response 400 - Task cannot be canceled (already completed/failed)
|
|
592
|
+
* @response 401 - Unauthorized
|
|
593
|
+
* @response 404 - Task not found
|
|
594
|
+
* @response 429 - Rate limit exceeded
|
|
595
|
+
*/
|
|
596
|
+
router.delete('/tasks/:taskId', async (req, res) => {
|
|
597
|
+
try {
|
|
598
|
+
const { a2aContext } = req;
|
|
599
|
+
const { taskId } = req.params;
|
|
600
|
+
if (!a2aContext) {
|
|
601
|
+
return res.status(500).json({
|
|
602
|
+
error: 'Authentication context missing',
|
|
603
|
+
code: 'AUTH_CONTEXT_MISSING',
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
console.info('[A2A] Task cancellation requested:', {
|
|
607
|
+
a2aAgentId: a2aContext.a2aAgentId,
|
|
608
|
+
projectId: a2aContext.projectId,
|
|
609
|
+
taskId,
|
|
610
|
+
});
|
|
611
|
+
// Cancel task using TaskManager
|
|
612
|
+
try {
|
|
613
|
+
const task = await taskManager_js_1.taskManager.cancelTask(a2aContext.workingDirectory, taskId);
|
|
614
|
+
res.json({
|
|
615
|
+
taskId: task.id,
|
|
616
|
+
status: task.status,
|
|
617
|
+
message: 'Task canceled successfully',
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
catch (error) {
|
|
621
|
+
// Handle specific error cases
|
|
622
|
+
if (error.message.includes('not found')) {
|
|
623
|
+
return res.status(404).json({
|
|
624
|
+
error: `Task not found: ${taskId}`,
|
|
625
|
+
code: 'TASK_NOT_FOUND',
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
if (error.message.includes('Cannot cancel')) {
|
|
629
|
+
return res.status(400).json({
|
|
630
|
+
error: error.message,
|
|
631
|
+
code: 'TASK_CANNOT_BE_CANCELED',
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
throw error; // Re-throw for general error handler
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
catch (error) {
|
|
638
|
+
console.error('[A2A] Error canceling task:', error);
|
|
639
|
+
res.status(500).json({
|
|
640
|
+
error: 'Failed to cancel task',
|
|
641
|
+
code: 'TASK_CANCELLATION_ERROR',
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
// ============================================================================
|
|
646
|
+
// Export Router
|
|
647
|
+
// ============================================================================
|
|
648
|
+
exports.default = router;
|
|
649
|
+
//# sourceMappingURL=a2a.js.map
|