agentstudio 0.1.18 → 0.1.21

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.
Files changed (664) hide show
  1. package/README.md +26 -505
  2. package/bin/agentstudio.js +305 -0
  3. package/bin/agentstudio.js.map +1 -0
  4. package/bin/serviceManager.d.ts +16 -0
  5. package/bin/serviceManager.d.ts.map +1 -0
  6. package/bin/serviceManager.js +434 -0
  7. package/bin/serviceManager.js.map +1 -0
  8. package/config/index.d.ts +74 -0
  9. package/config/index.d.ts.map +1 -0
  10. package/config/index.js +166 -0
  11. package/config/index.js.map +1 -0
  12. package/config/paths.d.ts +81 -0
  13. package/config/paths.d.ts.map +1 -0
  14. package/config/paths.js +98 -0
  15. package/config/paths.js.map +1 -0
  16. package/index.d.ts +4 -0
  17. package/index.d.ts.map +1 -0
  18. package/index.js +369 -0
  19. package/index.js.map +1 -0
  20. package/jobs/taskTimeoutMonitor.d.ts +25 -0
  21. package/jobs/taskTimeoutMonitor.d.ts.map +1 -0
  22. package/jobs/taskTimeoutMonitor.js +94 -0
  23. package/jobs/taskTimeoutMonitor.js.map +1 -0
  24. package/middleware/a2aAuth.d.ts +38 -0
  25. package/middleware/a2aAuth.d.ts.map +1 -0
  26. package/middleware/a2aAuth.js +134 -0
  27. package/middleware/a2aAuth.js.map +1 -0
  28. package/{backend/dist/middleware → middleware}/auth.d.ts +3 -1
  29. package/middleware/auth.d.ts.map +1 -0
  30. package/middleware/auth.js +35 -0
  31. package/middleware/auth.js.map +1 -0
  32. package/middleware/httpsOnly.d.ts +38 -0
  33. package/middleware/httpsOnly.d.ts.map +1 -0
  34. package/middleware/httpsOnly.js +105 -0
  35. package/middleware/httpsOnly.js.map +1 -0
  36. package/middleware/rateLimiting.d.ts +37 -0
  37. package/middleware/rateLimiting.d.ts.map +1 -0
  38. package/middleware/rateLimiting.js +118 -0
  39. package/middleware/rateLimiting.js.map +1 -0
  40. package/package.json +43 -38
  41. package/public/assets/AgentsPage-Nvg2xu6K.js +10 -0
  42. package/public/assets/Button-Co56C389.js +1 -0
  43. package/public/assets/ChatPage-D6sol0ad.js +442 -0
  44. package/public/assets/CommandForm-Bk7F_HU8.js +7 -0
  45. package/public/assets/CommandsPage-DZHyOdKd.js +1 -0
  46. package/public/assets/DashboardPage-29qC7Ev1.js +15 -0
  47. package/public/assets/FileBrowser-BYweUPH4.js +6 -0
  48. package/public/assets/FileExplorer-DNYj6Tsx.js +1 -0
  49. package/public/assets/GeneralSettingsPage-D9Xa7Nd8.js +1 -0
  50. package/public/assets/LandingPage-CjnT-cvO.js +1 -0
  51. package/public/assets/LoginPage-DcaGNCXH.js +16 -0
  52. package/public/assets/McpAdminSettingsPage-DgR3E2Bd.js +7 -0
  53. package/public/assets/McpPage-CtWf1CoL.js +40 -0
  54. package/public/assets/MemorySettingsPage-JTry4Ccp.js +1 -0
  55. package/public/assets/PluginsPage-D-BHjQ3P.js +1 -0
  56. package/public/assets/ProjectSelector-DSXOjMQC.js +1 -0
  57. package/public/assets/ProjectsPage-lLUk4-Xa.js +21 -0
  58. package/public/assets/ScheduledTasksPage-5hPbd9Vs.js +1 -0
  59. package/public/assets/SettingsLayout-DGJspXLp.js +1 -0
  60. package/public/assets/SkillsPage-DBw0m7D2.js +18 -0
  61. package/{backend/dist/frontend/assets/SubagentForm-DXtTTIKg.js → public/assets/SubagentForm-BdUK1U4y.js} +2 -2
  62. package/public/assets/SubagentsPage-Dnq70IFd.js +1 -0
  63. package/{backend/dist/frontend/assets/ToastTestPage-DT4wuN5C.js → public/assets/ToastTestPage-BfJQRFIm.js} +1 -1
  64. package/public/assets/ToolsList-Dl5F2fWk.js +1 -0
  65. package/public/assets/UnifiedToolSelector-CNbPsiuq.js +1 -0
  66. package/public/assets/VersionSettingsPage-BfoCcham.js +5 -0
  67. package/public/assets/_basePickBy-7C_e0Xv1.js +1 -0
  68. package/public/assets/_baseUniq-eGJNLBzx.js +1 -0
  69. package/public/assets/agents-ChrA1R0y.js +1 -0
  70. package/public/assets/arc-CuA752eE.js +1 -0
  71. package/public/assets/architectureDiagram-VXUJARFQ-BnPYh1OW.js +36 -0
  72. package/public/assets/blockDiagram-VD42YOAC-72nsMt_i.js +122 -0
  73. package/public/assets/c4Diagram-YG6GDRKO-BNJSAXcg.js +10 -0
  74. package/public/assets/channel-CIunGC5m.js +1 -0
  75. package/public/assets/chunk-4BX2VUAB-RPxkCWhH.js +1 -0
  76. package/public/assets/chunk-55IACEB6-3ePDt0kp.js +1 -0
  77. package/public/assets/chunk-B4BG7PRW-CBg_BBfl.js +165 -0
  78. package/public/assets/chunk-DI55MBZ5-DIh69TUJ.js +220 -0
  79. package/public/assets/chunk-FMBD7UC4-BbjwhyTe.js +15 -0
  80. package/public/assets/chunk-QN33PNHL-BpH-o_YR.js +1 -0
  81. package/public/assets/chunk-QZHKN3VN-DYB7rh5Q.js +1 -0
  82. package/public/assets/chunk-TZMSLE5B-DPCYEVb3.js +1 -0
  83. package/public/assets/classDiagram-2ON5EDUG-aUQHFsTA.js +1 -0
  84. package/public/assets/classDiagram-v2-WZHVMYZB-aUQHFsTA.js +1 -0
  85. package/public/assets/clone-Ckf7tA1V.js +1 -0
  86. package/public/assets/cose-bilkent-S5V4N54A-CnpfmL-Y.js +1 -0
  87. package/public/assets/cytoscape.esm-DtBltrT8.js +331 -0
  88. package/public/assets/dagre-6UL2VRFP-DR9x77Xf.js +4 -0
  89. package/{backend/dist/frontend/assets/data-structures-DLJedtzx.js → public/assets/data-structures-C0h9Oap1.js} +1 -1
  90. package/public/assets/defaultLocale-C4B-KCzX.js +1 -0
  91. package/public/assets/diagram-PSM6KHXK-SONPsQNx.js +24 -0
  92. package/public/assets/diagram-QEK2KX5R-BKYFSfC1.js +43 -0
  93. package/public/assets/diagram-S2PKOQOG-CkM0APZj.js +24 -0
  94. package/public/assets/erDiagram-Q2GNP2WA-BX1DpOGx.js +60 -0
  95. package/public/assets/flowDiagram-NV44I4VS-HAAlzNbq.js +162 -0
  96. package/public/assets/ganttDiagram-LVOFAZNH-BqzWexqa.js +267 -0
  97. package/public/assets/gitGraphDiagram-NY62KEGX-CIPmSp43.js +65 -0
  98. package/public/assets/graph-m515btDj.js +1 -0
  99. package/public/assets/index-Bn3v3S9-.js +293 -0
  100. package/public/assets/index-DWieeYj4.css +1 -0
  101. package/public/assets/infoDiagram-F6ZHWCRC-Pn4yNWrF.js +2 -0
  102. package/public/assets/init-Gi6I4Gst.js +1 -0
  103. package/public/assets/journeyDiagram-XKPGCS4Q-BfzTomS0.js +139 -0
  104. package/public/assets/kanban-definition-3W4ZIXB7-Cgju7b-L.js +89 -0
  105. package/public/assets/katex-qrhCpa0F.js +261 -0
  106. package/public/assets/layout-BKQfQSxJ.js +1 -0
  107. package/public/assets/linear-DigtLz3B.js +1 -0
  108. package/public/assets/mindmap-definition-VGOIOE7T-qopraVFy.js +68 -0
  109. package/public/assets/monaco-editor-DHKm5-VF.js +19 -0
  110. package/public/assets/ordinal-Cboi1Yqb.js +1 -0
  111. package/public/assets/pieDiagram-ADFJNKIX-BcoaAI-L.js +30 -0
  112. package/public/assets/quadrantDiagram-AYHSOK5B-D-DwcoSd.js +7 -0
  113. package/public/assets/requirementDiagram-UZGBJVZJ-DbQCpx77.js +64 -0
  114. package/public/assets/sankeyDiagram-TZEHDZUN-BVk8387S.js +10 -0
  115. package/public/assets/sequenceDiagram-WL72ISMW-BdzICjxO.js +145 -0
  116. package/public/assets/stateDiagram-FKZM4ZOC-CYY-uUvJ.js +1 -0
  117. package/public/assets/stateDiagram-v2-4FDKWEC3-Dh2Kvomq.js +1 -0
  118. package/{backend/dist/frontend/assets/syntax-highlighting-YWvMU4Hm.js → public/assets/syntax-highlighting-CnREyncB.js} +5 -5
  119. package/public/assets/tabManager-B2LQO_Ll.js +30 -0
  120. package/{backend/dist/frontend/assets/table-D6q1rytw.js → public/assets/table-D0L2RL5i.js} +1 -1
  121. package/public/assets/timeline-definition-IT6M3QCI-BAvjPYvX.js +61 -0
  122. package/public/assets/tools-IcPNZlPj.js +1 -0
  123. package/public/assets/treemap-KMMF4GRG-DtkpVA56.js +128 -0
  124. package/{backend/dist/frontend/assets/ui-components-Cw21Epuw.js → public/assets/ui-components-D1St49qC.js} +231 -96
  125. package/public/assets/useAgents-BnDTkOG8.js +2 -0
  126. package/public/assets/useClaudeVersions-CD59tFWM.js +1 -0
  127. package/public/assets/useCommands-mvMu3mMD.js +1 -0
  128. package/public/assets/useProjects-YXOjaOwL.js +1 -0
  129. package/public/assets/xychartDiagram-PRI3JC2R-ByBTDWE2.js +7 -0
  130. package/{backend/dist/frontend → public}/index.html +8 -8
  131. package/routes/__tests__/a2a.integration.test.d.ts +11 -0
  132. package/routes/__tests__/a2a.integration.test.d.ts.map +1 -0
  133. package/routes/__tests__/a2a.integration.test.js +314 -0
  134. package/routes/__tests__/a2a.integration.test.js.map +1 -0
  135. package/routes/__tests__/a2a.test.d.ts +6 -0
  136. package/routes/__tests__/a2a.test.d.ts.map +1 -0
  137. package/routes/__tests__/a2a.test.js +622 -0
  138. package/routes/__tests__/a2a.test.js.map +1 -0
  139. package/routes/__tests__/agents.test.d.ts +6 -0
  140. package/routes/__tests__/agents.test.d.ts.map +1 -0
  141. package/routes/__tests__/agents.test.js +315 -0
  142. package/routes/__tests__/agents.test.js.map +1 -0
  143. package/routes/__tests__/sessions.test.d.ts +7 -0
  144. package/routes/__tests__/sessions.test.d.ts.map +1 -0
  145. package/routes/__tests__/sessions.test.js +330 -0
  146. package/routes/__tests__/sessions.test.js.map +1 -0
  147. package/routes/a2a.d.ts +18 -0
  148. package/routes/a2a.d.ts.map +1 -0
  149. package/routes/a2a.js +649 -0
  150. package/routes/a2a.js.map +1 -0
  151. package/routes/a2a.streaming.test.d.ts +2 -0
  152. package/routes/a2a.streaming.test.d.ts.map +1 -0
  153. package/routes/a2a.streaming.test.js +167 -0
  154. package/routes/a2a.streaming.test.js.map +1 -0
  155. package/routes/a2aManagement.d.ts +21 -0
  156. package/routes/a2aManagement.d.ts.map +1 -0
  157. package/routes/a2aManagement.js +466 -0
  158. package/routes/a2aManagement.js.map +1 -0
  159. package/{backend/dist/routes → routes}/agents.d.ts.map +1 -1
  160. package/routes/agents.js +997 -0
  161. package/routes/agents.js.map +1 -0
  162. package/{backend/dist/routes → routes}/auth.d.ts.map +1 -1
  163. package/routes/auth.js +135 -0
  164. package/routes/auth.js.map +1 -0
  165. package/{backend/dist/routes → routes}/commands.d.ts.map +1 -1
  166. package/{backend/dist/routes → routes}/commands.js +115 -31
  167. package/routes/commands.js.map +1 -0
  168. package/routes/config.d.ts +4 -0
  169. package/routes/config.d.ts.map +1 -0
  170. package/routes/config.js +211 -0
  171. package/routes/config.js.map +1 -0
  172. package/{backend/dist/routes → routes}/files.d.ts.map +1 -1
  173. package/{backend/dist/routes → routes}/files.js +103 -43
  174. package/routes/files.js.map +1 -0
  175. package/routes/mcp.d.ts +27 -0
  176. package/routes/mcp.d.ts.map +1 -0
  177. package/{backend/dist/routes → routes}/mcp.js +195 -105
  178. package/routes/mcp.js.map +1 -0
  179. package/routes/mcpAdmin.d.ts +16 -0
  180. package/routes/mcpAdmin.d.ts.map +1 -0
  181. package/routes/mcpAdmin.js +308 -0
  182. package/routes/mcpAdmin.js.map +1 -0
  183. package/routes/mcpAdminManagement.d.ts +17 -0
  184. package/routes/mcpAdminManagement.d.ts.map +1 -0
  185. package/routes/mcpAdminManagement.js +345 -0
  186. package/routes/mcpAdminManagement.js.map +1 -0
  187. package/routes/media.d.ts.map +1 -0
  188. package/{backend/dist/routes → routes}/media.js +52 -42
  189. package/routes/media.js.map +1 -0
  190. package/routes/mediaAuth.d.ts +8 -0
  191. package/routes/mediaAuth.d.ts.map +1 -0
  192. package/routes/mediaAuth.js +136 -0
  193. package/routes/mediaAuth.js.map +1 -0
  194. package/routes/plugins.d.ts +4 -0
  195. package/routes/plugins.d.ts.map +1 -0
  196. package/routes/plugins.js +339 -0
  197. package/routes/plugins.js.map +1 -0
  198. package/{backend/dist/routes → routes}/projects.d.ts.map +1 -1
  199. package/routes/projects.js +884 -0
  200. package/routes/projects.js.map +1 -0
  201. package/routes/scheduledTasks.d.ts +9 -0
  202. package/routes/scheduledTasks.d.ts.map +1 -0
  203. package/routes/scheduledTasks.js +320 -0
  204. package/routes/scheduledTasks.js.map +1 -0
  205. package/{backend/dist/routes → routes}/sessions.d.ts.map +1 -1
  206. package/{backend/dist/routes → routes}/sessions.js +258 -39
  207. package/routes/sessions.js.map +1 -0
  208. package/{backend/dist/routes → routes}/settings.d.ts.map +1 -1
  209. package/{backend/dist/routes → routes}/settings.js +82 -241
  210. package/routes/settings.js.map +1 -0
  211. package/{backend/dist/routes/mcp.d.ts → routes/skills.d.ts} +1 -1
  212. package/routes/skills.d.ts.map +1 -0
  213. package/routes/skills.js +272 -0
  214. package/routes/skills.js.map +1 -0
  215. package/routes/slack.d.ts +10 -0
  216. package/routes/slack.d.ts.map +1 -0
  217. package/routes/slack.js +189 -0
  218. package/routes/slack.js.map +1 -0
  219. package/{backend/dist/routes → routes}/slides.d.ts.map +1 -1
  220. package/{backend/dist/routes → routes}/slides.js +29 -27
  221. package/routes/slides.js.map +1 -0
  222. package/{backend/dist/routes → routes}/subagents.js +27 -22
  223. package/routes/subagents.js.map +1 -0
  224. package/schemas/a2a.d.ts +858 -0
  225. package/schemas/a2a.d.ts.map +1 -0
  226. package/schemas/a2a.js +300 -0
  227. package/schemas/a2a.js.map +1 -0
  228. package/scripts/postinstall.js +10 -0
  229. package/services/__tests__/pluginInstaller.test.d.ts +5 -0
  230. package/services/__tests__/pluginInstaller.test.d.ts.map +1 -0
  231. package/services/__tests__/pluginInstaller.test.js +290 -0
  232. package/services/__tests__/pluginInstaller.test.js.map +1 -0
  233. package/services/__tests__/pluginParser.test.d.ts +5 -0
  234. package/services/__tests__/pluginParser.test.d.ts.map +1 -0
  235. package/services/__tests__/pluginParser.test.js +272 -0
  236. package/services/__tests__/pluginParser.test.js.map +1 -0
  237. package/services/__tests__/pluginPaths.test.d.ts +5 -0
  238. package/services/__tests__/pluginPaths.test.d.ts.map +1 -0
  239. package/services/__tests__/pluginPaths.test.js +221 -0
  240. package/services/__tests__/pluginPaths.test.js.map +1 -0
  241. package/services/__tests__/pluginScanner.test.d.ts +5 -0
  242. package/services/__tests__/pluginScanner.test.d.ts.map +1 -0
  243. package/services/__tests__/pluginScanner.test.js +272 -0
  244. package/services/__tests__/pluginScanner.test.js.map +1 -0
  245. package/services/__tests__/pluginSymlink.test.d.ts +5 -0
  246. package/services/__tests__/pluginSymlink.test.d.ts.map +1 -0
  247. package/services/__tests__/pluginSymlink.test.js +318 -0
  248. package/services/__tests__/pluginSymlink.test.js.map +1 -0
  249. package/services/__tests__/slackAIService.test.d.ts +5 -0
  250. package/services/__tests__/slackAIService.test.d.ts.map +1 -0
  251. package/services/__tests__/slackAIService.test.js +477 -0
  252. package/services/__tests__/slackAIService.test.js.map +1 -0
  253. package/services/__tests__/slackThreadMapper.test.d.ts +5 -0
  254. package/services/__tests__/slackThreadMapper.test.d.ts.map +1 -0
  255. package/services/__tests__/slackThreadMapper.test.js +194 -0
  256. package/services/__tests__/slackThreadMapper.test.js.map +1 -0
  257. package/services/a2a/__tests__/a2aClientTool.integration.test.d.ts +6 -0
  258. package/services/a2a/__tests__/a2aClientTool.integration.test.d.ts.map +1 -0
  259. package/services/a2a/__tests__/a2aClientTool.integration.test.js +264 -0
  260. package/services/a2a/__tests__/a2aClientTool.integration.test.js.map +1 -0
  261. package/services/a2a/__tests__/a2aClientTool.test.d.ts +6 -0
  262. package/services/a2a/__tests__/a2aClientTool.test.d.ts.map +1 -0
  263. package/services/a2a/__tests__/a2aClientTool.test.js +418 -0
  264. package/services/a2a/__tests__/a2aClientTool.test.js.map +1 -0
  265. package/services/a2a/__tests__/a2aConfigService.test.d.ts +6 -0
  266. package/services/a2a/__tests__/a2aConfigService.test.d.ts.map +1 -0
  267. package/services/a2a/__tests__/a2aConfigService.test.js +431 -0
  268. package/services/a2a/__tests__/a2aConfigService.test.js.map +1 -0
  269. package/services/a2a/__tests__/a2aConfigServicePath.test.d.ts +2 -0
  270. package/services/a2a/__tests__/a2aConfigServicePath.test.d.ts.map +1 -0
  271. package/services/a2a/__tests__/a2aConfigServicePath.test.js +49 -0
  272. package/services/a2a/__tests__/a2aConfigServicePath.test.js.map +1 -0
  273. package/services/a2a/__tests__/a2aSdkMcp.test.d.ts +10 -0
  274. package/services/a2a/__tests__/a2aSdkMcp.test.d.ts.map +1 -0
  275. package/services/a2a/__tests__/a2aSdkMcp.test.js +239 -0
  276. package/services/a2a/__tests__/a2aSdkMcp.test.js.map +1 -0
  277. package/services/a2a/__tests__/agentCardService.test.d.ts +6 -0
  278. package/services/a2a/__tests__/agentCardService.test.d.ts.map +1 -0
  279. package/services/a2a/__tests__/agentCardService.test.js +292 -0
  280. package/services/a2a/__tests__/agentCardService.test.js.map +1 -0
  281. package/services/a2a/__tests__/apiKeyService.test.d.ts +6 -0
  282. package/services/a2a/__tests__/apiKeyService.test.d.ts.map +1 -0
  283. package/services/a2a/__tests__/apiKeyService.test.js +284 -0
  284. package/services/a2a/__tests__/apiKeyService.test.js.map +1 -0
  285. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.d.ts +2 -0
  286. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.d.ts.map +1 -0
  287. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.js +70 -0
  288. package/services/a2a/__tests__/buildQueryOptionsIntegration.test.js.map +1 -0
  289. package/services/a2a/__tests__/dynamic_config_verification.test.d.ts +2 -0
  290. package/services/a2a/__tests__/dynamic_config_verification.test.d.ts.map +1 -0
  291. package/services/a2a/__tests__/dynamic_config_verification.test.js +67 -0
  292. package/services/a2a/__tests__/dynamic_config_verification.test.js.map +1 -0
  293. package/services/a2a/__tests__/integrateA2AMcpServer.test.d.ts +2 -0
  294. package/services/a2a/__tests__/integrateA2AMcpServer.test.d.ts.map +1 -0
  295. package/services/a2a/__tests__/integrateA2AMcpServer.test.js +112 -0
  296. package/services/a2a/__tests__/integrateA2AMcpServer.test.js.map +1 -0
  297. package/services/a2a/__tests__/taskManager.integration.test.d.ts +7 -0
  298. package/services/a2a/__tests__/taskManager.integration.test.d.ts.map +1 -0
  299. package/services/a2a/__tests__/taskManager.integration.test.js +346 -0
  300. package/services/a2a/__tests__/taskManager.integration.test.js.map +1 -0
  301. package/services/a2a/__tests__/taskManager.test.d.ts +7 -0
  302. package/services/a2a/__tests__/taskManager.test.d.ts.map +1 -0
  303. package/services/a2a/__tests__/taskManager.test.js +423 -0
  304. package/services/a2a/__tests__/taskManager.test.js.map +1 -0
  305. package/services/a2a/a2aClientTool.d.ts +73 -0
  306. package/services/a2a/a2aClientTool.d.ts.map +1 -0
  307. package/services/a2a/a2aClientTool.js +572 -0
  308. package/services/a2a/a2aClientTool.js.map +1 -0
  309. package/services/a2a/a2aConfigService.d.ts +50 -0
  310. package/services/a2a/a2aConfigService.d.ts.map +1 -0
  311. package/services/a2a/a2aConfigService.js +186 -0
  312. package/services/a2a/a2aConfigService.js.map +1 -0
  313. package/services/a2a/a2aHistoryService.d.ts +32 -0
  314. package/services/a2a/a2aHistoryService.d.ts.map +1 -0
  315. package/services/a2a/a2aHistoryService.js +108 -0
  316. package/services/a2a/a2aHistoryService.js.map +1 -0
  317. package/services/a2a/a2aIntegration.d.ts +9 -0
  318. package/services/a2a/a2aIntegration.d.ts.map +1 -0
  319. package/services/a2a/a2aIntegration.js +41 -0
  320. package/services/a2a/a2aIntegration.js.map +1 -0
  321. package/services/a2a/a2aQueryService.d.ts +71 -0
  322. package/services/a2a/a2aQueryService.d.ts.map +1 -0
  323. package/services/a2a/a2aQueryService.js +166 -0
  324. package/services/a2a/a2aQueryService.js.map +1 -0
  325. package/services/a2a/a2aSdkMcp.d.ts +51 -0
  326. package/services/a2a/a2aSdkMcp.d.ts.map +1 -0
  327. package/services/a2a/a2aSdkMcp.js +185 -0
  328. package/services/a2a/a2aSdkMcp.js.map +1 -0
  329. package/services/a2a/a2aStreamEvents.d.ts +94 -0
  330. package/services/a2a/a2aStreamEvents.d.ts.map +1 -0
  331. package/services/a2a/a2aStreamEvents.js +92 -0
  332. package/services/a2a/a2aStreamEvents.js.map +1 -0
  333. package/services/a2a/agentCardService.d.ts +34 -0
  334. package/services/a2a/agentCardService.d.ts.map +1 -0
  335. package/services/a2a/agentCardService.js +228 -0
  336. package/services/a2a/agentCardService.js.map +1 -0
  337. package/services/a2a/agentMappingService.d.ts +53 -0
  338. package/services/a2a/agentMappingService.d.ts.map +1 -0
  339. package/services/a2a/agentMappingService.js +185 -0
  340. package/services/a2a/agentMappingService.js.map +1 -0
  341. package/services/a2a/apiKeyService.d.ts +101 -0
  342. package/services/a2a/apiKeyService.d.ts.map +1 -0
  343. package/services/a2a/apiKeyService.js +314 -0
  344. package/services/a2a/apiKeyService.js.map +1 -0
  345. package/services/a2a/taskCleanup.d.ts +30 -0
  346. package/services/a2a/taskCleanup.d.ts.map +1 -0
  347. package/services/a2a/taskCleanup.js +184 -0
  348. package/services/a2a/taskCleanup.js.map +1 -0
  349. package/services/a2a/taskManager.d.ts +86 -0
  350. package/services/a2a/taskManager.d.ts.map +1 -0
  351. package/services/a2a/taskManager.js +263 -0
  352. package/services/a2a/taskManager.js.map +1 -0
  353. package/services/agentStorage.d.ts +27 -0
  354. package/services/agentStorage.d.ts.map +1 -0
  355. package/services/agentStorage.js +487 -0
  356. package/services/agentStorage.js.map +1 -0
  357. package/services/askUserQuestion/askUserQuestionIntegration.d.ts +24 -0
  358. package/services/askUserQuestion/askUserQuestionIntegration.d.ts.map +1 -0
  359. package/services/askUserQuestion/askUserQuestionIntegration.js +52 -0
  360. package/services/askUserQuestion/askUserQuestionIntegration.js.map +1 -0
  361. package/services/askUserQuestion/askUserQuestionMcp.d.ts +103 -0
  362. package/services/askUserQuestion/askUserQuestionMcp.d.ts.map +1 -0
  363. package/services/askUserQuestion/askUserQuestionMcp.js +129 -0
  364. package/services/askUserQuestion/askUserQuestionMcp.js.map +1 -0
  365. package/services/askUserQuestion/index.d.ts +13 -0
  366. package/services/askUserQuestion/index.d.ts.map +1 -0
  367. package/services/askUserQuestion/index.js +35 -0
  368. package/services/askUserQuestion/index.js.map +1 -0
  369. package/services/askUserQuestion/init.d.ts +17 -0
  370. package/services/askUserQuestion/init.d.ts.map +1 -0
  371. package/services/askUserQuestion/init.js +47 -0
  372. package/services/askUserQuestion/init.js.map +1 -0
  373. package/services/askUserQuestion/notificationChannel.d.ts +97 -0
  374. package/services/askUserQuestion/notificationChannel.d.ts.map +1 -0
  375. package/services/askUserQuestion/notificationChannel.js +147 -0
  376. package/services/askUserQuestion/notificationChannel.js.map +1 -0
  377. package/services/askUserQuestion/slackNotificationChannel.d.ts +35 -0
  378. package/services/askUserQuestion/slackNotificationChannel.d.ts.map +1 -0
  379. package/services/askUserQuestion/slackNotificationChannel.js +129 -0
  380. package/services/askUserQuestion/slackNotificationChannel.js.map +1 -0
  381. package/services/askUserQuestion/sseNotificationChannel.d.ts +36 -0
  382. package/services/askUserQuestion/sseNotificationChannel.d.ts.map +1 -0
  383. package/services/askUserQuestion/sseNotificationChannel.js +88 -0
  384. package/services/askUserQuestion/sseNotificationChannel.js.map +1 -0
  385. package/services/askUserQuestion/userInputRegistry.d.ts +107 -0
  386. package/services/askUserQuestion/userInputRegistry.d.ts.map +1 -0
  387. package/services/askUserQuestion/userInputRegistry.js +253 -0
  388. package/services/askUserQuestion/userInputRegistry.js.map +1 -0
  389. package/{backend/dist/services → services}/claudeSession.d.ts +20 -5
  390. package/services/claudeSession.d.ts.map +1 -0
  391. package/{backend/dist/services → services}/claudeSession.js +123 -41
  392. package/services/claudeSession.js.map +1 -0
  393. package/services/claudeVersionStorage.d.ts +20 -0
  394. package/services/claudeVersionStorage.d.ts.map +1 -0
  395. package/services/claudeVersionStorage.js +331 -0
  396. package/services/claudeVersionStorage.js.map +1 -0
  397. package/services/mcpAdmin/__tests__/adminApiKeyService.test.d.ts +5 -0
  398. package/services/mcpAdmin/__tests__/adminApiKeyService.test.d.ts.map +1 -0
  399. package/services/mcpAdmin/__tests__/adminApiKeyService.test.js +289 -0
  400. package/services/mcpAdmin/__tests__/adminApiKeyService.test.js.map +1 -0
  401. package/services/mcpAdmin/__tests__/mcpAdminRoutes.test.d.ts +5 -0
  402. package/services/mcpAdmin/__tests__/mcpAdminRoutes.test.d.ts.map +1 -0
  403. package/services/mcpAdmin/__tests__/mcpAdminRoutes.test.js +345 -0
  404. package/services/mcpAdmin/__tests__/mcpAdminRoutes.test.js.map +1 -0
  405. package/services/mcpAdmin/__tests__/mcpAdminServer.test.d.ts +5 -0
  406. package/services/mcpAdmin/__tests__/mcpAdminServer.test.d.ts.map +1 -0
  407. package/services/mcpAdmin/__tests__/mcpAdminServer.test.js +453 -0
  408. package/services/mcpAdmin/__tests__/mcpAdminServer.test.js.map +1 -0
  409. package/services/mcpAdmin/__tests__/tools.test.d.ts +5 -0
  410. package/services/mcpAdmin/__tests__/tools.test.d.ts.map +1 -0
  411. package/services/mcpAdmin/__tests__/tools.test.js +371 -0
  412. package/services/mcpAdmin/__tests__/tools.test.js.map +1 -0
  413. package/services/mcpAdmin/adminApiKeyService.d.ts +61 -0
  414. package/services/mcpAdmin/adminApiKeyService.d.ts.map +1 -0
  415. package/services/mcpAdmin/adminApiKeyService.js +270 -0
  416. package/services/mcpAdmin/adminApiKeyService.js.map +1 -0
  417. package/services/mcpAdmin/index.d.ts +10 -0
  418. package/services/mcpAdmin/index.d.ts.map +1 -0
  419. package/services/mcpAdmin/index.js +43 -0
  420. package/services/mcpAdmin/index.js.map +1 -0
  421. package/services/mcpAdmin/mcpAdminServer.d.ts +76 -0
  422. package/services/mcpAdmin/mcpAdminServer.d.ts.map +1 -0
  423. package/services/mcpAdmin/mcpAdminServer.js +243 -0
  424. package/services/mcpAdmin/mcpAdminServer.js.map +1 -0
  425. package/services/mcpAdmin/tools/agentTools.d.ts +27 -0
  426. package/services/mcpAdmin/tools/agentTools.d.ts.map +1 -0
  427. package/services/mcpAdmin/tools/agentTools.js +359 -0
  428. package/services/mcpAdmin/tools/agentTools.js.map +1 -0
  429. package/services/mcpAdmin/tools/index.d.ts +15 -0
  430. package/services/mcpAdmin/tools/index.d.ts.map +1 -0
  431. package/services/mcpAdmin/tools/index.js +30 -0
  432. package/services/mcpAdmin/tools/index.js.map +1 -0
  433. package/services/mcpAdmin/tools/mcpServerTools.d.ts +27 -0
  434. package/services/mcpAdmin/tools/mcpServerTools.d.ts.map +1 -0
  435. package/services/mcpAdmin/tools/mcpServerTools.js +334 -0
  436. package/services/mcpAdmin/tools/mcpServerTools.js.map +1 -0
  437. package/services/mcpAdmin/tools/projectTools.d.ts +27 -0
  438. package/services/mcpAdmin/tools/projectTools.d.ts.map +1 -0
  439. package/services/mcpAdmin/tools/projectTools.js +353 -0
  440. package/services/mcpAdmin/tools/projectTools.js.map +1 -0
  441. package/services/mcpAdmin/tools/systemTools.d.ts +23 -0
  442. package/services/mcpAdmin/tools/systemTools.d.ts.map +1 -0
  443. package/services/mcpAdmin/tools/systemTools.js +241 -0
  444. package/services/mcpAdmin/tools/systemTools.js.map +1 -0
  445. package/services/mcpAdmin/types.d.ts +124 -0
  446. package/services/mcpAdmin/types.d.ts.map +1 -0
  447. package/services/mcpAdmin/types.js +18 -0
  448. package/services/mcpAdmin/types.js.map +1 -0
  449. package/{backend/dist/services → services}/messageQueue.d.ts.map +1 -1
  450. package/{backend/dist/services → services}/messageQueue.js +16 -3
  451. package/services/messageQueue.js.map +1 -0
  452. package/services/pluginInstaller.d.ts +58 -0
  453. package/services/pluginInstaller.d.ts.map +1 -0
  454. package/services/pluginInstaller.js +321 -0
  455. package/services/pluginInstaller.js.map +1 -0
  456. package/services/pluginParser.d.ts +45 -0
  457. package/services/pluginParser.d.ts.map +1 -0
  458. package/services/pluginParser.js +437 -0
  459. package/services/pluginParser.js.map +1 -0
  460. package/services/pluginPaths.d.ts +80 -0
  461. package/services/pluginPaths.d.ts.map +1 -0
  462. package/services/pluginPaths.js +274 -0
  463. package/services/pluginPaths.js.map +1 -0
  464. package/services/pluginScanner.d.ts +36 -0
  465. package/services/pluginScanner.d.ts.map +1 -0
  466. package/services/pluginScanner.js +251 -0
  467. package/services/pluginScanner.js.map +1 -0
  468. package/services/pluginSymlink.d.ts +54 -0
  469. package/services/pluginSymlink.d.ts.map +1 -0
  470. package/services/pluginSymlink.js +223 -0
  471. package/services/pluginSymlink.js.map +1 -0
  472. package/services/projectMetadataStorage.d.ts +114 -0
  473. package/services/projectMetadataStorage.d.ts.map +1 -0
  474. package/services/projectMetadataStorage.js +711 -0
  475. package/services/projectMetadataStorage.js.map +1 -0
  476. package/services/scheduledTaskStorage.d.ts +52 -0
  477. package/services/scheduledTaskStorage.d.ts.map +1 -0
  478. package/services/scheduledTaskStorage.js +285 -0
  479. package/services/scheduledTaskStorage.js.map +1 -0
  480. package/services/schedulerService.d.ts +81 -0
  481. package/services/schedulerService.d.ts.map +1 -0
  482. package/services/schedulerService.js +743 -0
  483. package/services/schedulerService.js.map +1 -0
  484. package/{backend/dist/services → services}/sessionManager.d.ts +6 -4
  485. package/services/sessionManager.d.ts.map +1 -0
  486. package/{backend/dist/services → services}/sessionManager.js +77 -16
  487. package/services/sessionManager.js.map +1 -0
  488. package/services/skillStorage.d.ts +60 -0
  489. package/services/skillStorage.d.ts.map +1 -0
  490. package/services/skillStorage.js +398 -0
  491. package/services/skillStorage.js.map +1 -0
  492. package/services/slackAIService.d.ts +81 -0
  493. package/services/slackAIService.d.ts.map +1 -0
  494. package/services/slackAIService.js +1091 -0
  495. package/services/slackAIService.js.map +1 -0
  496. package/services/slackClient.d.ts +46 -0
  497. package/services/slackClient.d.ts.map +1 -0
  498. package/services/slackClient.js +85 -0
  499. package/services/slackClient.js.map +1 -0
  500. package/services/slackSessionLock.d.ts +79 -0
  501. package/services/slackSessionLock.d.ts.map +1 -0
  502. package/services/slackSessionLock.js +353 -0
  503. package/services/slackSessionLock.js.map +1 -0
  504. package/services/slackThreadMapper.d.ts +57 -0
  505. package/services/slackThreadMapper.d.ts.map +1 -0
  506. package/services/slackThreadMapper.js +140 -0
  507. package/services/slackThreadMapper.js.map +1 -0
  508. package/types/a2a.d.ts +275 -0
  509. package/types/a2a.d.ts.map +1 -0
  510. package/types/a2a.js +23 -0
  511. package/types/a2a.js.map +1 -0
  512. package/types/agents.d.ts +95 -0
  513. package/types/agents.d.ts.map +1 -0
  514. package/types/agents.js +46 -0
  515. package/types/agents.js.map +1 -0
  516. package/types/claude-history.d.ts +62 -0
  517. package/types/claude-history.d.ts.map +1 -0
  518. package/types/claude-history.js +4 -0
  519. package/types/claude-history.js.map +1 -0
  520. package/types/claude-versions.d.ts +36 -0
  521. package/types/claude-versions.d.ts.map +1 -0
  522. package/types/claude-versions.js +3 -0
  523. package/types/claude-versions.js.map +1 -0
  524. package/types/commands.d.ts +50 -0
  525. package/types/commands.d.ts.map +1 -0
  526. package/types/commands.js +23 -0
  527. package/types/commands.js.map +1 -0
  528. package/types/plugins.d.ts +144 -0
  529. package/types/plugins.d.ts.map +1 -0
  530. package/types/plugins.js +8 -0
  531. package/types/plugins.js.map +1 -0
  532. package/types/projects.d.ts +42 -0
  533. package/types/projects.d.ts.map +1 -0
  534. package/types/projects.js +4 -0
  535. package/types/projects.js.map +1 -0
  536. package/types/scheduledTasks.d.ts +164 -0
  537. package/types/scheduledTasks.d.ts.map +1 -0
  538. package/types/scheduledTasks.js +17 -0
  539. package/types/scheduledTasks.js.map +1 -0
  540. package/types/skills.d.ts +91 -0
  541. package/types/skills.d.ts.map +1 -0
  542. package/types/skills.js +6 -0
  543. package/types/skills.js.map +1 -0
  544. package/types/slack.d.ts +97 -0
  545. package/types/slack.d.ts.map +1 -0
  546. package/types/slack.js +8 -0
  547. package/types/slack.js.map +1 -0
  548. package/types/streaming.d.ts +12 -0
  549. package/types/streaming.d.ts.map +1 -0
  550. package/types/streaming.js +8 -0
  551. package/types/streaming.js.map +1 -0
  552. package/types/subagents.d.ts +26 -0
  553. package/types/subagents.d.ts.map +1 -0
  554. package/types/subagents.js +3 -0
  555. package/types/subagents.js.map +1 -0
  556. package/utils/__tests__/claudeUtils.test.d.ts +5 -0
  557. package/utils/__tests__/claudeUtils.test.d.ts.map +1 -0
  558. package/utils/__tests__/claudeUtils.test.js +282 -0
  559. package/utils/__tests__/claudeUtils.test.js.map +1 -0
  560. package/utils/__tests__/sessionUtils.test.d.ts +5 -0
  561. package/utils/__tests__/sessionUtils.test.d.ts.map +1 -0
  562. package/utils/__tests__/sessionUtils.test.js +295 -0
  563. package/utils/__tests__/sessionUtils.test.js.map +1 -0
  564. package/utils/agentCardCache.d.ts +93 -0
  565. package/utils/agentCardCache.d.ts.map +1 -0
  566. package/utils/agentCardCache.js +212 -0
  567. package/utils/agentCardCache.js.map +1 -0
  568. package/utils/claudeUtils.d.ts +54 -0
  569. package/utils/claudeUtils.d.ts.map +1 -0
  570. package/utils/claudeUtils.js +387 -0
  571. package/utils/claudeUtils.js.map +1 -0
  572. package/utils/fileUtils.d.ts +2 -0
  573. package/utils/fileUtils.d.ts.map +1 -0
  574. package/utils/fileUtils.js +11 -0
  575. package/utils/fileUtils.js.map +1 -0
  576. package/utils/jwt.d.ts +30 -0
  577. package/utils/jwt.d.ts.map +1 -0
  578. package/utils/jwt.js +95 -0
  579. package/utils/jwt.js.map +1 -0
  580. package/utils/sessionUtils.d.ts +64 -0
  581. package/utils/sessionUtils.d.ts.map +1 -0
  582. package/utils/sessionUtils.js +266 -0
  583. package/utils/sessionUtils.js.map +1 -0
  584. package/README.zh-CN.md +0 -525
  585. package/backend/dist/bin/agentstudio.js +0 -120
  586. package/backend/dist/bin/agentstudio.js.map +0 -1
  587. package/backend/dist/frontend/assets/AgentsPage-Dqb_aqAA.js +0 -1
  588. package/backend/dist/frontend/assets/ChatPage-L8Paywyc.js +0 -91
  589. package/backend/dist/frontend/assets/CommandForm-DLl7EIMS.js +0 -7
  590. package/backend/dist/frontend/assets/CommandsPage-Bzavq0Ec.js +0 -1
  591. package/backend/dist/frontend/assets/DashboardPage-B3o4AYFT.js +0 -15
  592. package/backend/dist/frontend/assets/FileBrowser-DL3ayaqb.js +0 -1
  593. package/backend/dist/frontend/assets/GeneralSettingsPage-CBN_de-V.js +0 -1
  594. package/backend/dist/frontend/assets/LandingPage-Dl4ioKos.js +0 -1
  595. package/backend/dist/frontend/assets/LoginPage-4QqRdiSi.js +0 -12
  596. package/backend/dist/frontend/assets/McpPage-CY3tYiqj.js +0 -39
  597. package/backend/dist/frontend/assets/MemorySettingsPage-DGxrok5K.js +0 -1
  598. package/backend/dist/frontend/assets/ProjectSelector-hgmGYVFh.js +0 -1
  599. package/backend/dist/frontend/assets/ProjectsPage-D399IM0c.js +0 -14
  600. package/backend/dist/frontend/assets/SettingsLayout-CL_K-lzJ.js +0 -1
  601. package/backend/dist/frontend/assets/SubagentsPage-Chbhj8p2.js +0 -1
  602. package/backend/dist/frontend/assets/UnifiedToolSelector-CsM9qBvs.js +0 -1
  603. package/backend/dist/frontend/assets/VersionSettingsPage-74Q-LVgA.js +0 -5
  604. package/backend/dist/frontend/assets/agents-ClAzIJTw.js +0 -1
  605. package/backend/dist/frontend/assets/authFetch-BATQyPG5.js +0 -1
  606. package/backend/dist/frontend/assets/index-B9YHa7XT.css +0 -1
  607. package/backend/dist/frontend/assets/index-B_CTNvca.js +0 -268
  608. package/backend/dist/frontend/assets/monaco-editor-C7Z4sOhS.js +0 -19
  609. package/backend/dist/frontend/assets/tabManager-DV8urRBM.js +0 -30
  610. package/backend/dist/frontend/assets/tools-C4EPanYi.js +0 -1
  611. package/backend/dist/frontend/assets/useAgents-DwnOE1_k.js +0 -2
  612. package/backend/dist/frontend/assets/useClaudeVersions-CQdGnCqv.js +0 -1
  613. package/backend/dist/frontend/assets/useCommands-CCVaurbt.js +0 -1
  614. package/backend/dist/index.d.ts +0 -3
  615. package/backend/dist/index.d.ts.map +0 -1
  616. package/backend/dist/index.js +0 -157
  617. package/backend/dist/index.js.map +0 -1
  618. package/backend/dist/middleware/auth.d.ts.map +0 -1
  619. package/backend/dist/middleware/auth.js +0 -21
  620. package/backend/dist/middleware/auth.js.map +0 -1
  621. package/backend/dist/routes/agents.js +0 -803
  622. package/backend/dist/routes/agents.js.map +0 -1
  623. package/backend/dist/routes/auth.js +0 -60
  624. package/backend/dist/routes/auth.js.map +0 -1
  625. package/backend/dist/routes/commands.js.map +0 -1
  626. package/backend/dist/routes/files.js.map +0 -1
  627. package/backend/dist/routes/mcp.d.ts.map +0 -1
  628. package/backend/dist/routes/mcp.js.map +0 -1
  629. package/backend/dist/routes/media.d.ts.map +0 -1
  630. package/backend/dist/routes/media.js.map +0 -1
  631. package/backend/dist/routes/projects.js +0 -528
  632. package/backend/dist/routes/projects.js.map +0 -1
  633. package/backend/dist/routes/sessions.js.map +0 -1
  634. package/backend/dist/routes/settings.js.map +0 -1
  635. package/backend/dist/routes/slides.js.map +0 -1
  636. package/backend/dist/routes/subagents.js.map +0 -1
  637. package/backend/dist/services/claudeSession.d.ts.map +0 -1
  638. package/backend/dist/services/claudeSession.js.map +0 -1
  639. package/backend/dist/services/messageQueue.js.map +0 -1
  640. package/backend/dist/services/sessionManager.d.ts.map +0 -1
  641. package/backend/dist/services/sessionManager.js.map +0 -1
  642. package/backend/dist/utils/jwt.d.ts +0 -15
  643. package/backend/dist/utils/jwt.d.ts.map +0 -1
  644. package/backend/dist/utils/jwt.js +0 -28
  645. package/backend/dist/utils/jwt.js.map +0 -1
  646. /package/{backend/dist/bin → bin}/agentstudio.d.ts +0 -0
  647. /package/{backend/dist/bin → bin}/agentstudio.d.ts.map +0 -0
  648. /package/{backend/dist/frontend → public}/assets/ChatPage-BvQmXfcP.css +0 -0
  649. /package/{backend/dist/frontend → public}/assets/agents-DwCY2K8p.css +0 -0
  650. /package/{backend/dist/frontend → public}/assets/dateFormat-CXa8VnEC.js +0 -0
  651. /package/{backend/dist/frontend → public}/cc-studio.png +0 -0
  652. /package/{backend/dist/frontend → public}/vite.svg +0 -0
  653. /package/{backend/dist/routes → routes}/agents.d.ts +0 -0
  654. /package/{backend/dist/routes → routes}/auth.d.ts +0 -0
  655. /package/{backend/dist/routes → routes}/commands.d.ts +0 -0
  656. /package/{backend/dist/routes → routes}/files.d.ts +0 -0
  657. /package/{backend/dist/routes → routes}/media.d.ts +0 -0
  658. /package/{backend/dist/routes → routes}/projects.d.ts +0 -0
  659. /package/{backend/dist/routes → routes}/sessions.d.ts +0 -0
  660. /package/{backend/dist/routes → routes}/settings.d.ts +0 -0
  661. /package/{backend/dist/routes → routes}/slides.d.ts +0 -0
  662. /package/{backend/dist/routes → routes}/subagents.d.ts +0 -0
  663. /package/{backend/dist/routes → routes}/subagents.d.ts.map +0 -0
  664. /package/{backend/dist/services → services}/messageQueue.d.ts +0 -0
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * A2A Authentication Middleware
4
+ *
5
+ * Validates API keys for all A2A protocol endpoints.
6
+ * Extracts API key from Authorization header, resolves a2aAgentId to projectId,
7
+ * and validates the key against project's API key registry.
8
+ *
9
+ * Usage: Apply to all routes under /a2a/:a2aAgentId/*
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.a2aAuth = a2aAuth;
13
+ exports.optionalA2AAuth = optionalA2AAuth;
14
+ const agentMappingService_js_1 = require("../services/a2a/agentMappingService.js");
15
+ const apiKeyService_js_1 = require("../services/a2a/apiKeyService.js");
16
+ /**
17
+ * A2A Authentication Middleware
18
+ *
19
+ * Steps:
20
+ * 1. Extract API key from Authorization header
21
+ * 2. Resolve a2aAgentId from URL params to projectId/agentType
22
+ * 3. Validate API key against project's API key registry
23
+ * 4. Attach A2A context to request object
24
+ */
25
+ async function a2aAuth(req, res, next) {
26
+ try {
27
+ // Step 1: Extract API key from Authorization header
28
+ const authHeader = req.headers.authorization;
29
+ if (!authHeader) {
30
+ res.status(401).json({
31
+ error: 'Missing Authorization header',
32
+ code: 'MISSING_AUTH_HEADER',
33
+ message: 'A2A endpoints require API key authentication. Include: Authorization: Bearer <api-key>',
34
+ });
35
+ return;
36
+ }
37
+ if (!authHeader.startsWith('Bearer ')) {
38
+ res.status(401).json({
39
+ error: 'Invalid Authorization header format',
40
+ code: 'INVALID_AUTH_FORMAT',
41
+ message: 'Authorization header must use Bearer scheme: Authorization: Bearer <api-key>',
42
+ });
43
+ return;
44
+ }
45
+ const apiKey = authHeader.substring(7); // Remove 'Bearer ' prefix
46
+ if (!apiKey) {
47
+ res.status(401).json({
48
+ error: 'Empty API key',
49
+ code: 'EMPTY_API_KEY',
50
+ message: 'API key cannot be empty',
51
+ });
52
+ return;
53
+ }
54
+ // Step 2: Resolve a2aAgentId to projectId/agentType
55
+ const a2aAgentId = req.params.a2aAgentId;
56
+ if (!a2aAgentId) {
57
+ res.status(400).json({
58
+ error: 'Missing a2aAgentId in URL',
59
+ code: 'MISSING_AGENT_ID',
60
+ message: 'A2A agent ID must be specified in URL path: /a2a/:a2aAgentId/...',
61
+ });
62
+ return;
63
+ }
64
+ const agentMapping = await (0, agentMappingService_js_1.resolveA2AId)(a2aAgentId);
65
+ if (!agentMapping) {
66
+ res.status(404).json({
67
+ error: 'Agent not found',
68
+ code: 'AGENT_NOT_FOUND',
69
+ message: `No agent found with A2A ID: ${a2aAgentId}`,
70
+ });
71
+ return;
72
+ }
73
+ // Step 3: Validate API key against project's API key registry
74
+ // Use workingDirectory as the path for API key storage, not projectId
75
+ const { projectId, workingDirectory } = agentMapping;
76
+ const validation = await (0, apiKeyService_js_1.validateApiKey)(workingDirectory, apiKey);
77
+ if (!validation.valid) {
78
+ // Log failed authentication attempt (for security monitoring)
79
+ console.warn('[A2A Auth] Failed authentication attempt:', {
80
+ a2aAgentId,
81
+ projectId,
82
+ workingDirectory,
83
+ timestamp: new Date().toISOString(),
84
+ ip: req.ip,
85
+ });
86
+ res.status(401).json({
87
+ error: 'Invalid API key',
88
+ code: 'INVALID_API_KEY',
89
+ message: 'The provided API key is invalid or has been revoked',
90
+ });
91
+ return;
92
+ }
93
+ // Step 4: Attach A2A context to request
94
+ req.a2aContext = {
95
+ a2aAgentId,
96
+ projectId: agentMapping.projectId,
97
+ agentType: agentMapping.agentType,
98
+ workingDirectory: agentMapping.workingDirectory,
99
+ apiKeyId: validation.keyId,
100
+ };
101
+ // Log successful authentication (for monitoring)
102
+ console.info('[A2A Auth] Successful authentication:', {
103
+ a2aAgentId,
104
+ projectId: agentMapping.projectId,
105
+ agentType: agentMapping.agentType,
106
+ keyId: validation.keyId,
107
+ timestamp: new Date().toISOString(),
108
+ });
109
+ next();
110
+ }
111
+ catch (error) {
112
+ console.error('[A2A Auth] Authentication error:', error);
113
+ res.status(500).json({
114
+ error: 'Authentication error',
115
+ code: 'AUTH_ERROR',
116
+ message: 'An error occurred during authentication',
117
+ });
118
+ }
119
+ }
120
+ /**
121
+ * Optional middleware to allow unauthenticated access (for public endpoints like health checks)
122
+ * This should be used sparingly - most A2A endpoints should require authentication
123
+ */
124
+ function optionalA2AAuth(req, res, next) {
125
+ // If Authorization header is present, validate it
126
+ if (req.headers.authorization) {
127
+ a2aAuth(req, res, next);
128
+ }
129
+ else {
130
+ // Otherwise, continue without authentication
131
+ next();
132
+ }
133
+ }
134
+ //# sourceMappingURL=a2aAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2aAuth.js","sourceRoot":"","sources":["../../src/middleware/a2aAuth.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { Request, Response, NextFunction } from 'express';
2
2
  /**
3
3
  * Middleware to authenticate requests using JWT token
4
- * Expects token in Authorization header as "Bearer <token>"
4
+ * Supports:
5
+ * 1. Authorization header as "Bearer <token>"
6
+ * 2. Query parameter "token=<token>" (for EventSource/SSE connections)
5
7
  */
6
8
  export declare function authMiddleware(req: Request, res: Response, next: NextFunction): void;
7
9
  //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CA6BpF"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authMiddleware = authMiddleware;
4
+ const jwt_1 = require("../utils/jwt");
5
+ /**
6
+ * Middleware to authenticate requests using JWT token
7
+ * Supports:
8
+ * 1. Authorization header as "Bearer <token>"
9
+ * 2. Query parameter "token=<token>" (for EventSource/SSE connections)
10
+ */
11
+ function authMiddleware(req, res, next) {
12
+ const authHeader = req.headers.authorization;
13
+ const queryToken = req.query.token;
14
+ let token;
15
+ // Check Authorization header first
16
+ if (authHeader && authHeader.startsWith('Bearer ')) {
17
+ token = authHeader.substring(7); // Remove "Bearer " prefix
18
+ }
19
+ // Fall back to query parameter (for EventSource/SSE)
20
+ else if (queryToken) {
21
+ token = queryToken;
22
+ }
23
+ if (!token) {
24
+ res.status(401).json({ error: 'Unauthorized: No token provided' });
25
+ return;
26
+ }
27
+ const payload = (0, jwt_1.verifyToken)(token);
28
+ if (!payload) {
29
+ res.status(401).json({ error: 'Unauthorized: Invalid or expired token' });
30
+ return;
31
+ }
32
+ // Token is valid, proceed to next middleware
33
+ next();
34
+ }
35
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":";;AASA,wCA6BC;AArCD,sCAA2C;AAE3C;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;IAC5E,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,KAA2B,CAAC;IAEzD,IAAI,KAAyB,CAAC;IAE9B,mCAAmC;IACnC,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnD,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;IAC7D,CAAC;IACD,qDAAqD;SAChD,IAAI,UAAU,EAAE,CAAC;QACpB,KAAK,GAAG,UAAU,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,iBAAW,EAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,6CAA6C;IAC7C,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * HTTPS Enforcement Middleware
3
+ *
4
+ * Ensures that A2A endpoints are only accessible over HTTPS in production.
5
+ * This prevents man-in-the-middle attacks and protects API keys in transit.
6
+ *
7
+ * Phase 10 (Polish): T089 - HTTPS enforcement middleware for production
8
+ *
9
+ * Note: IP address access is exempt from HTTPS requirement, as these are typically
10
+ * internal/development access patterns or behind reverse proxies like Nginx.
11
+ */
12
+ import type { Request, Response, NextFunction } from 'express';
13
+ /**
14
+ * Check if a hostname is an IP address (IPv4 or IPv6)
15
+ *
16
+ * @param hostname - The hostname to check
17
+ * @returns true if the hostname is an IP address
18
+ */
19
+ export declare function isIPAddress(hostname: string): boolean;
20
+ /**
21
+ * Middleware to enforce HTTPS for specific routes in production
22
+ * Exempt: IP address access (internal/development patterns)
23
+ *
24
+ * @param req - Express request object
25
+ * @param res - Express response object
26
+ * @param next - Express next function
27
+ */
28
+ export declare function httpsOnly(req: Request, res: Response, next: NextFunction): any;
29
+ /**
30
+ * Middleware to enforce HTTPS and redirect HTTP to HTTPS
31
+ * Use this for user-facing pages that should redirect
32
+ *
33
+ * @param req - Express request object
34
+ * @param res - Express response object
35
+ * @param next - Express next function
36
+ */
37
+ export declare function httpsRedirect(req: Request, res: Response, next: NextFunction): any;
38
+ //# sourceMappingURL=httpsOnly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpsOnly.d.ts","sourceRoot":"","sources":["../../src/middleware/httpsOnly.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA6BrD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,GAAG,CA6B9E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,GAAG,CAmBlF"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * HTTPS Enforcement Middleware
4
+ *
5
+ * Ensures that A2A endpoints are only accessible over HTTPS in production.
6
+ * This prevents man-in-the-middle attacks and protects API keys in transit.
7
+ *
8
+ * Phase 10 (Polish): T089 - HTTPS enforcement middleware for production
9
+ *
10
+ * Note: IP address access is exempt from HTTPS requirement, as these are typically
11
+ * internal/development access patterns or behind reverse proxies like Nginx.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.isIPAddress = isIPAddress;
15
+ exports.httpsOnly = httpsOnly;
16
+ exports.httpsRedirect = httpsRedirect;
17
+ /**
18
+ * Check if a hostname is an IP address (IPv4 or IPv6)
19
+ *
20
+ * @param hostname - The hostname to check
21
+ * @returns true if the hostname is an IP address
22
+ */
23
+ function isIPAddress(hostname) {
24
+ if (!hostname)
25
+ return false;
26
+ // Remove port if present
27
+ const hostWithoutPort = hostname.split(':')[0];
28
+ // IPv4 pattern: xxx.xxx.xxx.xxx
29
+ const ipv4Pattern = /^(\d{1,3}\.){3}\d{1,3}$/;
30
+ if (ipv4Pattern.test(hostWithoutPort)) {
31
+ // Validate each octet is 0-255
32
+ const octets = hostWithoutPort.split('.');
33
+ return octets.every((octet) => {
34
+ const num = parseInt(octet, 10);
35
+ return num >= 0 && num <= 255;
36
+ });
37
+ }
38
+ // IPv6 patterns (simplified check for common formats)
39
+ // Full IPv6: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
40
+ // Compressed IPv6: ::1, ::ffff:192.0.2.1, etc.
41
+ const ipv6Pattern = /^([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}$/;
42
+ const ipv6LoopbackPattern = /^::1$/;
43
+ const ipv6MappedPattern = /^::ffff:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/i;
44
+ return (ipv6Pattern.test(hostWithoutPort) ||
45
+ ipv6LoopbackPattern.test(hostWithoutPort) ||
46
+ ipv6MappedPattern.test(hostWithoutPort));
47
+ }
48
+ /**
49
+ * Middleware to enforce HTTPS for specific routes in production
50
+ * Exempt: IP address access (internal/development patterns)
51
+ *
52
+ * @param req - Express request object
53
+ * @param res - Express response object
54
+ * @param next - Express next function
55
+ */
56
+ function httpsOnly(req, res, next) {
57
+ // Only enforce HTTPS in production
58
+ if (process.env.NODE_ENV !== 'production') {
59
+ return next();
60
+ }
61
+ // Allow IP address access without HTTPS (internal/proxy scenarios)
62
+ const host = req.get('host') || '';
63
+ if (isIPAddress(host)) {
64
+ return next();
65
+ }
66
+ // Check if request is secure (HTTPS)
67
+ // req.secure checks for req.protocol === 'https'
68
+ // Also check X-Forwarded-Proto header for proxy/load balancer scenarios
69
+ const isSecure = req.secure ||
70
+ req.headers['x-forwarded-proto'] === 'https' ||
71
+ req.headers['x-forwarded-proto']?.includes('https');
72
+ if (!isSecure) {
73
+ return res.status(403).json({
74
+ error: 'HTTPS required',
75
+ code: 'HTTPS_REQUIRED',
76
+ message: 'This endpoint requires HTTPS connection in production environment',
77
+ });
78
+ }
79
+ next();
80
+ }
81
+ /**
82
+ * Middleware to enforce HTTPS and redirect HTTP to HTTPS
83
+ * Use this for user-facing pages that should redirect
84
+ *
85
+ * @param req - Express request object
86
+ * @param res - Express response object
87
+ * @param next - Express next function
88
+ */
89
+ function httpsRedirect(req, res, next) {
90
+ // Only enforce HTTPS in production
91
+ if (process.env.NODE_ENV !== 'production') {
92
+ return next();
93
+ }
94
+ // Check if request is secure
95
+ const isSecure = req.secure ||
96
+ req.headers['x-forwarded-proto'] === 'https' ||
97
+ req.headers['x-forwarded-proto']?.includes('https');
98
+ if (!isSecure) {
99
+ // Redirect to HTTPS
100
+ const httpsUrl = `https://${req.get('host')}${req.originalUrl}`;
101
+ return res.redirect(301, httpsUrl);
102
+ }
103
+ next();
104
+ }
105
+ //# sourceMappingURL=httpsOnly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpsOnly.js","sourceRoot":"","sources":["../../src/middleware/httpsOnly.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Rate Limiting Middleware for A2A Endpoints
3
+ *
4
+ * Limits requests to 100 per hour per API key to prevent abuse.
5
+ * Returns 429 Too Many Requests with retryAfter header when limit exceeded.
6
+ *
7
+ * Uses in-memory storage (resets on server restart).
8
+ */
9
+ import rateLimit from 'express-rate-limit';
10
+ /**
11
+ * Rate limiter configuration for A2A endpoints
12
+ *
13
+ * - Window: 1 hour (60 minutes)
14
+ * - Max requests: 100 per window
15
+ * - Key generator: Uses API key from a2aContext (set by a2aAuth middleware)
16
+ * - Response: 429 with retryAfter header
17
+ */
18
+ export declare const a2aRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
19
+ /**
20
+ * Stricter rate limiter for sensitive operations (e.g., task creation)
21
+ *
22
+ * - Window: 1 hour
23
+ * - Max requests: 50 per window
24
+ */
25
+ export declare const a2aStrictRateLimiter: import("express-rate-limit").RateLimitRequestHandler;
26
+ /**
27
+ * Custom rate limiter factory for flexible configuration
28
+ *
29
+ * @param options - Rate limiter options
30
+ * @returns Configured rate limiter middleware
31
+ */
32
+ export declare function createA2ARateLimiter(options: {
33
+ windowMs?: number;
34
+ max?: number;
35
+ message?: string;
36
+ }): ReturnType<typeof rateLimit>;
37
+ //# sourceMappingURL=rateLimiting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimiting.d.ts","sourceRoot":"","sources":["../../src/middleware/rateLimiting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAI3C;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,sDAkDzB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,sDAiB/B,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAqB/B"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * Rate Limiting Middleware for A2A Endpoints
4
+ *
5
+ * Limits requests to 100 per hour per API key to prevent abuse.
6
+ * Returns 429 Too Many Requests with retryAfter header when limit exceeded.
7
+ *
8
+ * Uses in-memory storage (resets on server restart).
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.a2aStrictRateLimiter = exports.a2aRateLimiter = void 0;
15
+ exports.createA2ARateLimiter = createA2ARateLimiter;
16
+ const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
17
+ /**
18
+ * Rate limiter configuration for A2A endpoints
19
+ *
20
+ * - Window: 1 hour (60 minutes)
21
+ * - Max requests: 100 per window
22
+ * - Key generator: Uses API key from a2aContext (set by a2aAuth middleware)
23
+ * - Response: 429 with retryAfter header
24
+ */
25
+ exports.a2aRateLimiter = (0, express_rate_limit_1.default)({
26
+ // Rate limit window (1 hour)
27
+ windowMs: 60 * 60 * 1000, // 60 minutes
28
+ // Maximum requests per window
29
+ max: 100,
30
+ // Use API key as identifier (from a2aContext set by auth middleware)
31
+ keyGenerator: (req) => {
32
+ const a2aReq = req;
33
+ // If a2aContext is available, use API key ID
34
+ if (a2aReq.a2aContext?.apiKeyId) {
35
+ return a2aReq.a2aContext.apiKeyId;
36
+ }
37
+ // Fallback to IP address if no API key (shouldn't happen with auth middleware)
38
+ return req.ip || 'unknown';
39
+ },
40
+ // Standardized error response
41
+ handler: (req, res) => {
42
+ const a2aReq = req;
43
+ const keyId = a2aReq.a2aContext?.apiKeyId || 'unknown';
44
+ console.warn('[A2A Rate Limit] Rate limit exceeded:', {
45
+ keyId,
46
+ projectId: a2aReq.a2aContext?.projectId,
47
+ a2aAgentId: a2aReq.a2aContext?.a2aAgentId,
48
+ ip: req.ip,
49
+ timestamp: new Date().toISOString(),
50
+ });
51
+ res.status(429).json({
52
+ error: 'Rate limit exceeded',
53
+ code: 'RATE_LIMIT_EXCEEDED',
54
+ message: 'Too many requests. Maximum 100 requests per hour per API key.',
55
+ retryAfter: 3600, // 1 hour in seconds
56
+ });
57
+ },
58
+ // Skip successful requests from rate limit counting (only count actual processing)
59
+ skip: (req) => {
60
+ // Don't skip any requests - count all attempts
61
+ return false;
62
+ },
63
+ // Include rate limit info in response headers
64
+ standardHeaders: true, // Return rate limit info in `RateLimit-*` headers
65
+ legacyHeaders: false, // Disable `X-RateLimit-*` headers
66
+ });
67
+ /**
68
+ * Stricter rate limiter for sensitive operations (e.g., task creation)
69
+ *
70
+ * - Window: 1 hour
71
+ * - Max requests: 50 per window
72
+ */
73
+ exports.a2aStrictRateLimiter = (0, express_rate_limit_1.default)({
74
+ windowMs: 60 * 60 * 1000, // 1 hour
75
+ max: 50, // Stricter limit
76
+ keyGenerator: (req) => {
77
+ const a2aReq = req;
78
+ return a2aReq.a2aContext?.apiKeyId || req.ip || 'unknown';
79
+ },
80
+ handler: (req, res) => {
81
+ res.status(429).json({
82
+ error: 'Rate limit exceeded',
83
+ code: 'RATE_LIMIT_EXCEEDED',
84
+ message: 'Too many task creation requests. Maximum 50 per hour per API key.',
85
+ retryAfter: 3600,
86
+ });
87
+ },
88
+ standardHeaders: true,
89
+ legacyHeaders: false,
90
+ });
91
+ /**
92
+ * Custom rate limiter factory for flexible configuration
93
+ *
94
+ * @param options - Rate limiter options
95
+ * @returns Configured rate limiter middleware
96
+ */
97
+ function createA2ARateLimiter(options) {
98
+ const { windowMs = 60 * 60 * 1000, max = 100, message = 'Rate limit exceeded' } = options;
99
+ return (0, express_rate_limit_1.default)({
100
+ windowMs,
101
+ max,
102
+ keyGenerator: (req) => {
103
+ const a2aReq = req;
104
+ return a2aReq.a2aContext?.apiKeyId || req.ip || 'unknown';
105
+ },
106
+ handler: (req, res) => {
107
+ res.status(429).json({
108
+ error: 'Rate limit exceeded',
109
+ code: 'RATE_LIMIT_EXCEEDED',
110
+ message,
111
+ retryAfter: Math.ceil(windowMs / 1000),
112
+ });
113
+ },
114
+ standardHeaders: true,
115
+ legacyHeaders: false,
116
+ });
117
+ }
118
+ //# sourceMappingURL=rateLimiting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimiting.js","sourceRoot":"","sources":["../../src/middleware/rateLimiting.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,59 +1,64 @@
1
1
  {
2
2
  "name": "agentstudio",
3
- "version": "0.1.18",
4
- "description": "Claude-powered AgentStudio with React frontend and Node.js backend, built on top of Claude Code SDK",
5
- "type": "module",
6
- "private": false,
7
- "main": "./backend/dist/index.js",
3
+ "version": "0.1.21",
4
+ "description": "AgentStudio - AI-powered agent workspace with Claude integration. One command to start your AI agent studio.",
5
+ "main": "index.js",
8
6
  "bin": {
9
- "agentstudio": "./backend/dist/bin/agentstudio.js"
7
+ "agentstudio": "bin/agentstudio.js"
10
8
  },
11
- "files": [
12
- "backend/dist/**/*"
13
- ],
14
9
  "scripts": {
15
- "start": "node backend/dist/index.js",
16
- "build": "node scripts/build-complete.js",
17
- "build:backend": "cd backend && npm install && npm run build",
18
- "build:complete": "node scripts/build-complete.js"
19
- },
20
- "keywords": [
21
- "ai",
22
- "agent",
23
- "studio",
24
- "editor",
25
- "react",
26
- "typescript"
27
- ],
28
- "author": "jeffkit <bbmyth@gmail.com>",
29
- "license": "MIT",
30
- "repository": {
31
- "type": "git",
32
- "url": "https://github.com/git-men/agentstudio.git"
33
- },
34
- "homepage": "https://github.com/git-men/agentstudio#readme",
35
- "bugs": {
36
- "url": "https://github.com/git-men/agentstudio/issues"
37
- },
38
- "devDependencies": {
39
- "concurrently": "^8.2.2",
40
- "typescript": "^5.9.2"
10
+ "start": "node index.js",
11
+ "postinstall": "node scripts/postinstall.js || true"
41
12
  },
42
13
  "dependencies": {
43
- "agentstudio-shared": "^0.1.0",
14
+ "@a2a-js/sdk": "^0.2.5",
44
15
  "@ai-sdk/anthropic": "^1.0.5",
45
16
  "@ai-sdk/openai": "^1.0.7",
46
- "@anthropic-ai/claude-code": "^2.0.10",
17
+ "@anthropic-ai/claude-agent-sdk": "^0.1.62",
18
+ "@types/js-yaml": "^4.0.9",
47
19
  "ai": "^5.0.22",
20
+ "bcryptjs": "^2.4.3",
48
21
  "commander": "^11.1.0",
49
22
  "cors": "^2.8.5",
50
23
  "dotenv": "^16.3.1",
51
24
  "eventsource": "^4.0.0",
52
25
  "express": "^4.18.2",
26
+ "express-rate-limit": "^6.11.2",
53
27
  "fs-extra": "^11.1.1",
54
28
  "gray-matter": "^4.0.3",
55
29
  "helmet": "^7.0.0",
30
+ "js-yaml": "^4.1.0",
56
31
  "jsonwebtoken": "^9.0.2",
32
+ "node-cron": "^4.2.1",
33
+ "proper-lockfile": "^4.1.2",
34
+ "undici": "^7.16.0",
57
35
  "zod": "^3.22.2"
36
+ },
37
+ "author": "okguitar <okguitar@gmail.com>",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/okguitar/agentstudio.git"
42
+ },
43
+ "homepage": "https://github.com/okguitar/agentstudio#readme",
44
+ "bugs": {
45
+ "url": "https://github.com/okguitar/agentstudio/issues"
46
+ },
47
+ "keywords": [
48
+ "ai",
49
+ "agent",
50
+ "studio",
51
+ "claude",
52
+ "anthropic",
53
+ "mcp",
54
+ "ai-assistant",
55
+ "workspace",
56
+ "cli"
57
+ ],
58
+ "files": [
59
+ "**/*"
60
+ ],
61
+ "engines": {
62
+ "node": ">=18.0.0"
58
63
  }
59
- }
64
+ }