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