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,884 @@
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 fs_1 = __importDefault(require("fs"));
41
+ const path_1 = __importDefault(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const util_1 = require("util");
44
+ const projectMetadataStorage_1 = require("../services/projectMetadataStorage");
45
+ const agentStorage_1 = require("../services/agentStorage");
46
+ const a2aConfigService_js_1 = require("../services/a2a/a2aConfigService.js");
47
+ const apiKeyService_js_1 = require("../services/a2a/apiKeyService.js");
48
+ const a2a_js_1 = require("../schemas/a2a.js");
49
+ const router = express_1.default.Router();
50
+ const readFile = (0, util_1.promisify)(fs_1.default.readFile);
51
+ const writeFile = (0, util_1.promisify)(fs_1.default.writeFile);
52
+ const mkdir = (0, util_1.promisify)(fs_1.default.mkdir);
53
+ const stat = (0, util_1.promisify)(fs_1.default.stat);
54
+ // Use the new project metadata storage
55
+ const projectStorage = new projectMetadataStorage_1.ProjectMetadataStorage();
56
+ // Global agent storage for agent management
57
+ const globalAgentStorage = new agentStorage_1.AgentStorage();
58
+ // Ensure directory exists
59
+ async function ensureDir(dirPath) {
60
+ try {
61
+ await mkdir(dirPath, { recursive: true });
62
+ }
63
+ catch (error) {
64
+ // Directory already exists
65
+ }
66
+ }
67
+ // GET /api/projects - Get all projects
68
+ router.get('/', async (_req, res) => {
69
+ try {
70
+ const projects = projectStorage.getAllProjects();
71
+ res.json({ projects });
72
+ }
73
+ catch (error) {
74
+ console.error('Error fetching projects:', error);
75
+ res.status(500).json({ error: 'Failed to fetch projects' });
76
+ }
77
+ });
78
+ // GET /api/projects/:dirName - Get specific project
79
+ router.get('/:dirName', async (req, res) => {
80
+ try {
81
+ const { dirName } = req.params;
82
+ const project = projectStorage.getProject(dirName);
83
+ if (!project) {
84
+ return res.status(404).json({ error: 'Project not found' });
85
+ }
86
+ res.json({ project });
87
+ }
88
+ catch (error) {
89
+ console.error('Error fetching project:', error);
90
+ res.status(500).json({ error: 'Failed to fetch project' });
91
+ }
92
+ });
93
+ // POST /api/projects - Create new project
94
+ router.post('/', async (req, res) => {
95
+ try {
96
+ const { name, dirName, agentId, description, tags, metadata } = req.body;
97
+ if (!dirName) {
98
+ return res.status(400).json({ error: 'Directory name is required' });
99
+ }
100
+ // Check if project directory already exists
101
+ const existingProject = projectStorage.getProject(dirName);
102
+ if (existingProject) {
103
+ return res.status(409).json({ error: 'Project directory already exists' });
104
+ }
105
+ const projectMetadata = projectStorage.createProject(dirName, {
106
+ name: name || dirName,
107
+ description,
108
+ agentId,
109
+ tags,
110
+ metadata
111
+ });
112
+ const project = projectStorage.getProject(dirName);
113
+ res.json({ project, metadata: projectMetadata });
114
+ }
115
+ catch (error) {
116
+ console.error('Error creating project:', error);
117
+ res.status(500).json({ error: 'Failed to create project' });
118
+ }
119
+ });
120
+ // PUT /api/projects/:dirName - Update project info
121
+ router.put('/:dirName', async (req, res) => {
122
+ try {
123
+ const { dirName } = req.params;
124
+ const { name, description, tags, metadata } = req.body;
125
+ const project = projectStorage.getProject(dirName);
126
+ if (!project) {
127
+ return res.status(404).json({ error: 'Project not found' });
128
+ }
129
+ // Update basic info
130
+ if (name !== undefined || description !== undefined) {
131
+ projectStorage.updateProjectInfo(dirName, { name, description });
132
+ }
133
+ // Update tags
134
+ if (tags !== undefined) {
135
+ projectStorage.updateProjectTags(dirName, tags);
136
+ }
137
+ // Update metadata
138
+ if (metadata !== undefined) {
139
+ projectStorage.updateProjectMetadata(dirName, metadata);
140
+ }
141
+ const updatedProject = projectStorage.getProject(dirName);
142
+ res.json({ project: updatedProject });
143
+ }
144
+ catch (error) {
145
+ console.error('Error updating project:', error);
146
+ res.status(500).json({ error: 'Failed to update project' });
147
+ }
148
+ });
149
+ // DELETE /api/projects/:dirName - Delete project metadata
150
+ router.delete('/:dirName', async (req, res) => {
151
+ try {
152
+ const { dirName } = req.params;
153
+ const success = projectStorage.deleteProject(dirName);
154
+ if (!success) {
155
+ return res.status(404).json({ error: 'Project not found' });
156
+ }
157
+ res.json({ success: true });
158
+ }
159
+ catch (error) {
160
+ console.error('Error deleting project:', error);
161
+ res.status(500).json({ error: 'Failed to delete project' });
162
+ }
163
+ });
164
+ // PUT /api/projects/:dirName/default-agent - Set default agent
165
+ // Note: dirName is actually the full project path (URL encoded)
166
+ router.put('/:dirName/default-agent', async (req, res) => {
167
+ try {
168
+ // dirName here is actually the full project path (URL encoded)
169
+ const projectPath = decodeURIComponent(req.params.dirName);
170
+ const { agentId } = req.body;
171
+ if (!agentId) {
172
+ return res.status(400).json({ error: 'Agent ID is required' });
173
+ }
174
+ // Add the agent to the project and set it as default
175
+ projectStorage.addAgentToProject(projectPath, agentId);
176
+ projectStorage.setDefaultAgent(projectPath, agentId);
177
+ const updatedProject = projectStorage.getProject(projectPath);
178
+ if (!updatedProject) {
179
+ return res.status(404).json({ error: 'Project not found' });
180
+ }
181
+ res.json({
182
+ success: true,
183
+ project: updatedProject
184
+ });
185
+ }
186
+ catch (error) {
187
+ console.error('Error setting default agent:', error);
188
+ res.status(500).json({ error: 'Failed to set default agent' });
189
+ }
190
+ });
191
+ // PUT /api/projects/:dirName/agents/:agentId - Enable/disable agent for project
192
+ router.put('/:dirName/agents/:agentId', async (req, res) => {
193
+ try {
194
+ const { dirName, agentId } = req.params;
195
+ const { enabled } = req.body;
196
+ if (typeof enabled !== 'boolean') {
197
+ return res.status(400).json({ error: 'Enabled must be a boolean' });
198
+ }
199
+ if (enabled) {
200
+ projectStorage.addAgentToProject(dirName, agentId);
201
+ }
202
+ else {
203
+ projectStorage.removeAgentFromProject(dirName, agentId);
204
+ }
205
+ const updatedProject = projectStorage.getProject(dirName);
206
+ res.json({ project: updatedProject });
207
+ }
208
+ catch (error) {
209
+ console.error('Error updating project agent:', error);
210
+ res.status(500).json({ error: 'Failed to update project agent' });
211
+ }
212
+ });
213
+ // GET /api/projects/:dirName/check-agent - Check if project needs agent selection
214
+ router.get('/:dirName/check-agent', async (req, res) => {
215
+ try {
216
+ const { dirName } = req.params;
217
+ const project = projectStorage.getProject(dirName);
218
+ if (!project) {
219
+ return res.status(404).json({ error: 'Project not found' });
220
+ }
221
+ const needsAgent = project.agents.length === 0 || !project.defaultAgent;
222
+ res.json({
223
+ needsAgent,
224
+ project: {
225
+ name: project.name,
226
+ path: project.path,
227
+ agents: project.agents,
228
+ defaultAgent: project.defaultAgent
229
+ }
230
+ });
231
+ }
232
+ catch (error) {
233
+ console.error('Error checking project agent:', error);
234
+ res.status(500).json({ error: 'Failed to check project agent' });
235
+ }
236
+ });
237
+ // POST /api/projects/:dirName/select-agent - Select first agent for project
238
+ router.post('/:dirName/select-agent', async (req, res) => {
239
+ try {
240
+ // dirName here is actually the full project path (URL encoded)
241
+ const projectPath = decodeURIComponent(req.params.dirName);
242
+ const { agentId } = req.body;
243
+ console.log(`🎯 Select agent request - encoded: ${req.params.dirName}`);
244
+ console.log(`🎯 Select agent request - decoded path: ${projectPath}`);
245
+ console.log(`🎯 Select agent request - agentId: ${agentId}`);
246
+ if (!agentId) {
247
+ return res.status(400).json({ error: 'Agent ID is required' });
248
+ }
249
+ // Check if project exists, if not create it
250
+ let projectMetadata = projectStorage.getProjectMetadata(projectPath);
251
+ if (!projectMetadata) {
252
+ console.log(`⚠️ Project not found in metadata, creating: ${projectPath}`);
253
+ // Verify agent exists
254
+ const agent = globalAgentStorage.getAgent(agentId);
255
+ if (!agent) {
256
+ console.error(`❌ Agent not found: ${agentId}`);
257
+ return res.status(404).json({ error: 'Agent not found' });
258
+ }
259
+ // Create the project with the selected agent
260
+ const projectName = path_1.default.basename(projectPath);
261
+ projectMetadata = projectStorage.createProject(projectPath, {
262
+ name: projectName,
263
+ agentId: agentId,
264
+ description: ''
265
+ });
266
+ console.log(`✅ Created project metadata with ID: ${projectMetadata.id}`);
267
+ }
268
+ else {
269
+ console.log(`✅ Project found in metadata - ID: ${projectMetadata.id}, adding/updating agent`);
270
+ // Project exists, add the agent to the project and set it as default
271
+ projectStorage.addAgentToProject(projectPath, agentId);
272
+ projectStorage.setDefaultAgent(projectPath, agentId);
273
+ }
274
+ const updatedProject = projectStorage.getProject(projectPath);
275
+ if (!updatedProject) {
276
+ console.error(`❌ Failed to get project after creation/update: ${projectPath}`);
277
+ console.error(`❌ Available projects:`, projectStorage.getAllProjects().map(p => p.path));
278
+ return res.status(404).json({ error: 'Project not found' });
279
+ }
280
+ console.log(`✅ Agent selected successfully - project: ${updatedProject.name}, agent: ${agentId}`);
281
+ res.json({
282
+ success: true,
283
+ project: updatedProject
284
+ });
285
+ }
286
+ catch (error) {
287
+ console.error('Error selecting agent for project:', error);
288
+ res.status(500).json({ error: 'Failed to select agent for project' });
289
+ }
290
+ });
291
+ // GET /api/projects/:dirName/claude-md - Get project CLAUDE.md content
292
+ router.get('/:dirName/claude-md', async (req, res) => {
293
+ try {
294
+ const { dirName } = req.params;
295
+ const project = projectStorage.getProject(dirName);
296
+ if (!project) {
297
+ return res.status(404).json({ error: 'Project not found' });
298
+ }
299
+ // Try to find CLAUDE.md in project directory first, then parent directory
300
+ const claudeFilePath = path_1.default.join(project.path, 'CLAUDE.md');
301
+ console.log('Looking for CLAUDE.md at:', claudeFilePath);
302
+ try {
303
+ const content = await readFile(claudeFilePath, 'utf-8');
304
+ console.log('Successfully read CLAUDE.md, content length:', content.length);
305
+ res.json({ content });
306
+ }
307
+ catch (error) {
308
+ console.log('Error reading CLAUDE.md from project dir:', error.code);
309
+ if (error.code === 'ENOENT') {
310
+ // Try parent directory
311
+ const parentClaudeFilePath = path_1.default.join(path_1.default.dirname(project.path), 'CLAUDE.md');
312
+ console.log('Trying parent directory:', parentClaudeFilePath);
313
+ try {
314
+ const content = await readFile(parentClaudeFilePath, 'utf-8');
315
+ console.log('Successfully read CLAUDE.md from parent dir, content length:', content.length);
316
+ res.json({ content });
317
+ }
318
+ catch (parentError) {
319
+ console.log('Error reading CLAUDE.md from parent dir:', parentError.code);
320
+ if (parentError.code === 'ENOENT') {
321
+ // File doesn't exist in either location, return empty content
322
+ res.json({ content: '' });
323
+ }
324
+ else {
325
+ throw parentError;
326
+ }
327
+ }
328
+ }
329
+ else {
330
+ throw error;
331
+ }
332
+ }
333
+ }
334
+ catch (error) {
335
+ console.error('Error reading CLAUDE.md:', error);
336
+ res.status(500).json({ error: 'Failed to read CLAUDE.md file' });
337
+ }
338
+ });
339
+ // PUT /api/projects/:dirName/claude-md - Update project CLAUDE.md content
340
+ router.put('/:dirName/claude-md', async (req, res) => {
341
+ try {
342
+ const { dirName } = req.params;
343
+ const { content } = req.body;
344
+ if (typeof content !== 'string') {
345
+ return res.status(400).json({ error: 'Content must be a string' });
346
+ }
347
+ const project = projectStorage.getProject(dirName);
348
+ if (!project) {
349
+ return res.status(404).json({ error: 'Project not found' });
350
+ }
351
+ // Decide where to save the file - prefer project directory, but check if parent has existing file
352
+ let claudeFilePath = path_1.default.join(project.path, 'CLAUDE.md');
353
+ const parentClaudeFilePath = path_1.default.join(path_1.default.dirname(project.path), 'CLAUDE.md');
354
+ // Check if parent directory already has CLAUDE.md
355
+ try {
356
+ await stat(parentClaudeFilePath);
357
+ // Parent file exists, use that location
358
+ claudeFilePath = parentClaudeFilePath;
359
+ console.log('Using existing CLAUDE.md in parent directory:', claudeFilePath);
360
+ }
361
+ catch (error) {
362
+ // Parent file doesn't exist, use project directory
363
+ console.log('Using project directory for CLAUDE.md:', claudeFilePath);
364
+ }
365
+ // Ensure directory exists
366
+ await ensureDir(path_1.default.dirname(claudeFilePath));
367
+ // Write the content
368
+ await writeFile(claudeFilePath, content, 'utf-8');
369
+ res.json({ success: true });
370
+ }
371
+ catch (error) {
372
+ console.error('Error writing CLAUDE.md:', error);
373
+ res.status(500).json({ error: 'Failed to write CLAUDE.md file' });
374
+ }
375
+ });
376
+ // ========== ROUTES MIGRATED FROM AGENTS.TS ==========
377
+ // GET /api/projects/agents/:agentId - Get projects for a specific agent
378
+ router.get('/agents/:agentId', (req, res) => {
379
+ try {
380
+ const { agentId } = req.params;
381
+ // Verify agent exists
382
+ const agent = globalAgentStorage.getAgent(agentId);
383
+ if (!agent) {
384
+ return res.status(404).json({ error: 'Agent not found' });
385
+ }
386
+ // Get all projects and filter by agent
387
+ const allProjects = projectStorage.getAllProjects();
388
+ const agentProjects = allProjects.filter(project => project.agents.includes(agentId));
389
+ res.json({ projects: agentProjects });
390
+ }
391
+ catch (error) {
392
+ console.error('Failed to get agent projects:', error);
393
+ res.status(500).json({ error: 'Failed to retrieve agent projects' });
394
+ }
395
+ });
396
+ // POST /api/projects/import - Import existing project directory
397
+ router.post('/import', (req, res) => {
398
+ try {
399
+ const { agentId, projectPath } = req.body;
400
+ console.log(`📥 Import project request - agentId: ${agentId}, projectPath: ${projectPath}`);
401
+ if (!agentId || !projectPath) {
402
+ return res.status(400).json({ error: 'Agent ID and project path are required' });
403
+ }
404
+ // Verify agent exists
405
+ const agent = globalAgentStorage.getAgent(agentId);
406
+ if (!agent) {
407
+ return res.status(404).json({ error: 'Agent not found' });
408
+ }
409
+ // Check if project directory exists
410
+ if (!fs_1.default.existsSync(projectPath)) {
411
+ return res.status(404).json({ error: 'Project directory does not exist' });
412
+ }
413
+ // Check if it's actually a directory
414
+ const stats = fs_1.default.statSync(projectPath);
415
+ if (!stats.isDirectory()) {
416
+ return res.status(400).json({ error: 'Path is not a directory' });
417
+ }
418
+ // Add project path to agent's projects list
419
+ if (!agent.projects) {
420
+ agent.projects = [];
421
+ }
422
+ const normalizedPath = path_1.default.resolve(projectPath);
423
+ console.log(`📁 Normalized path: ${normalizedPath}`);
424
+ if (!agent.projects.includes(normalizedPath)) {
425
+ agent.projects.unshift(normalizedPath); // Add to beginning for most recent
426
+ agent.updatedAt = new Date().toISOString();
427
+ globalAgentStorage.saveAgent(agent);
428
+ }
429
+ // Extract project name from path
430
+ const projectName = path_1.default.basename(normalizedPath);
431
+ // Create or update project metadata in projectStorage
432
+ // This ensures the project exists when user selects agent later
433
+ let projectMetadata = projectStorage.getProjectMetadata(normalizedPath);
434
+ if (!projectMetadata) {
435
+ console.log(`✨ Creating new project metadata for: ${normalizedPath}`);
436
+ // Project doesn't exist in metadata storage, create it
437
+ projectMetadata = projectStorage.createProject(normalizedPath, {
438
+ name: projectName,
439
+ agentId: agentId,
440
+ description: ''
441
+ });
442
+ console.log(`✅ Project metadata created with ID: ${projectMetadata.id}`);
443
+ }
444
+ else {
445
+ console.log(`♻️ Project already exists, updating agent association`);
446
+ // Project already exists, just add the agent if not already added
447
+ if (!projectMetadata.agents[agentId]) {
448
+ projectStorage.addAgentToProject(normalizedPath, agentId);
449
+ }
450
+ // Set as default agent
451
+ projectStorage.setDefaultAgent(normalizedPath, agentId);
452
+ }
453
+ // Get the full project info with agent details
454
+ const project = projectStorage.getProject(normalizedPath);
455
+ if (!project) {
456
+ console.error(`❌ Failed to get project after creation: ${normalizedPath}`);
457
+ return res.status(500).json({ error: 'Failed to create project metadata' });
458
+ }
459
+ console.log(`✅ Import successful - project ID: ${project.id}, path: ${project.path}`);
460
+ res.json({
461
+ success: true,
462
+ project: project,
463
+ message: `Project "${projectName}" imported successfully`
464
+ });
465
+ }
466
+ catch (error) {
467
+ console.error('Failed to import project:', error);
468
+ res.status(500).json({
469
+ error: 'Failed to import project',
470
+ details: error instanceof Error ? error.message : String(error)
471
+ });
472
+ }
473
+ });
474
+ // POST /api/projects/create - Create new project directory in ~/.claude/projects
475
+ router.post('/create', (req, res) => {
476
+ try {
477
+ const { agentId, projectName, parentDirectory, description } = req.body;
478
+ if (!agentId || !projectName) {
479
+ return res.status(400).json({ error: 'Agent ID and project name are required' });
480
+ }
481
+ // Verify agent exists
482
+ const agent = globalAgentStorage.getAgent(agentId);
483
+ if (!agent) {
484
+ return res.status(404).json({ error: 'Agent not found' });
485
+ }
486
+ // Use custom parent directory if provided, otherwise default to ~/claude-code-projects
487
+ let projectPath;
488
+ if (parentDirectory && parentDirectory !== '~/claude-code-projects') {
489
+ // Expand tilde if present
490
+ const expandedParent = parentDirectory.startsWith('~/')
491
+ ? path_1.default.join(os.homedir(), parentDirectory.slice(2))
492
+ : parentDirectory;
493
+ projectPath = path_1.default.join(expandedParent, projectName);
494
+ }
495
+ else {
496
+ const homeDir = os.homedir();
497
+ const projectsDir = path_1.default.join(homeDir, 'claude-code-projects');
498
+ projectPath = path_1.default.join(projectsDir, projectName);
499
+ // Create projects directory if it doesn't exist
500
+ if (!fs_1.default.existsSync(projectsDir)) {
501
+ fs_1.default.mkdirSync(projectsDir, { recursive: true });
502
+ }
503
+ }
504
+ // Create project directory
505
+ if (!fs_1.default.existsSync(projectPath)) {
506
+ fs_1.default.mkdirSync(projectPath, { recursive: true });
507
+ // Create .cc-sessions directory and project metadata
508
+ const sessionsDir = path_1.default.join(projectPath, '.cc-sessions');
509
+ fs_1.default.mkdirSync(sessionsDir, { recursive: true });
510
+ const projectMetadata = {
511
+ name: projectName,
512
+ description: description || '',
513
+ agentId,
514
+ agentName: agent.name,
515
+ createdAt: new Date().toISOString(),
516
+ updatedAt: new Date().toISOString()
517
+ };
518
+ fs_1.default.writeFileSync(path_1.default.join(sessionsDir, 'project.json'), JSON.stringify(projectMetadata, null, 2));
519
+ // Create a basic README file
520
+ const readmeContent = `# ${projectName}
521
+
522
+ Created with ${agent.name} on ${new Date().toLocaleString()}
523
+
524
+ ${description ? `## Description\n${description}\n\n` : ''}This is your project workspace. You can:
525
+ - Store your files here
526
+ - Create subdirectories for organization
527
+ - Use this directory for your ${agent.name} sessions
528
+
529
+ The conversation history will be saved in \`.cc-sessions/${agentId}/\` within this directory.
530
+ `;
531
+ fs_1.default.writeFileSync(path_1.default.join(projectPath, 'README.md'), readmeContent);
532
+ // Add project path to agent's projects list
533
+ if (!agent.projects) {
534
+ agent.projects = [];
535
+ }
536
+ const normalizedPath = path_1.default.resolve(projectPath);
537
+ if (!agent.projects.includes(normalizedPath)) {
538
+ agent.projects.unshift(normalizedPath); // Add to beginning for most recent
539
+ agent.updatedAt = new Date().toISOString();
540
+ globalAgentStorage.saveAgent(agent);
541
+ }
542
+ // 🔧 FIX: Create project metadata using ProjectMetadataStorage
543
+ // This ensures the project shows up correctly in the projects list with proper agent info
544
+ // The metadata stores the real project path, regardless of where it is on the filesystem
545
+ projectStorage.createProject(normalizedPath, {
546
+ name: projectName,
547
+ description: description || '',
548
+ agentId: agentId,
549
+ tags: [],
550
+ metadata: {}
551
+ });
552
+ // Return project info that matches frontend interface
553
+ const projectId = `${agentId}-${Buffer.from(normalizedPath).toString('base64').replace(/[+/=]/g, '').slice(-8)}`;
554
+ res.json({
555
+ success: true,
556
+ project: {
557
+ id: projectId,
558
+ name: projectName,
559
+ dirName: projectName,
560
+ path: normalizedPath,
561
+ agents: [agentId],
562
+ defaultAgent: agentId,
563
+ defaultAgentName: agent.name,
564
+ defaultAgentIcon: agent.ui.icon,
565
+ createdAt: new Date().toISOString(),
566
+ lastAccessed: new Date().toISOString(),
567
+ description: description || ''
568
+ },
569
+ message: `Project "${projectName}" created successfully`
570
+ });
571
+ }
572
+ else {
573
+ res.status(409).json({ error: 'Project directory already exists' });
574
+ }
575
+ }
576
+ catch (error) {
577
+ console.error('Failed to create project:', error);
578
+ res.status(500).json({
579
+ error: 'Failed to create project directory',
580
+ details: error instanceof Error ? error.message : String(error)
581
+ });
582
+ }
583
+ });
584
+ // PUT /api/projects/by-id/:projectId - Update project metadata (legacy format support)
585
+ router.put('/by-id/:projectId', (req, res) => {
586
+ try {
587
+ const { projectId } = req.params;
588
+ const { description } = req.body;
589
+ // Find project by ID
590
+ const agents = globalAgentStorage.getAllAgents();
591
+ let targetProject = null;
592
+ for (const agent of agents) {
593
+ if (agent.projects && agent.projects.length > 0) {
594
+ for (const projectPath of agent.projects) {
595
+ const id = `${agent.id}-${Buffer.from(projectPath).toString('base64').replace(/[+/=]/g, '').slice(-8)}`;
596
+ if (id === projectId) {
597
+ targetProject = projectPath;
598
+ break;
599
+ }
600
+ }
601
+ if (targetProject)
602
+ break;
603
+ }
604
+ }
605
+ if (!targetProject || !fs_1.default.existsSync(targetProject)) {
606
+ return res.status(404).json({ error: 'Project not found' });
607
+ }
608
+ // Update project metadata
609
+ const sessionsDir = path_1.default.join(targetProject, '.cc-sessions');
610
+ if (!fs_1.default.existsSync(sessionsDir)) {
611
+ fs_1.default.mkdirSync(sessionsDir, { recursive: true });
612
+ }
613
+ const metadataPath = path_1.default.join(sessionsDir, 'project.json');
614
+ let metadata = {};
615
+ if (fs_1.default.existsSync(metadataPath)) {
616
+ try {
617
+ metadata = JSON.parse(fs_1.default.readFileSync(metadataPath, 'utf-8'));
618
+ }
619
+ catch (error) {
620
+ // Start with empty metadata if file is corrupted
621
+ }
622
+ }
623
+ const updatedMetadata = {
624
+ ...metadata,
625
+ description: description || '',
626
+ updatedAt: new Date().toISOString(),
627
+ createdAt: metadata.createdAt || fs_1.default.statSync(targetProject).birthtime.toISOString()
628
+ };
629
+ fs_1.default.writeFileSync(metadataPath, JSON.stringify(updatedMetadata, null, 2));
630
+ res.json({
631
+ success: true,
632
+ message: 'Project updated successfully'
633
+ });
634
+ }
635
+ catch (error) {
636
+ console.error('Failed to update project:', error);
637
+ res.status(500).json({ error: 'Failed to update project' });
638
+ }
639
+ });
640
+ // DELETE /api/projects/by-id/:projectId - Remove project from agent's list (legacy format support)
641
+ router.delete('/by-id/:projectId', (req, res) => {
642
+ try {
643
+ const { projectId } = req.params;
644
+ // Check if it's a new format project ID (starts with "project_")
645
+ if (projectId.startsWith('project_')) {
646
+ // Handle new project metadata format
647
+ const allProjects = projectStorage.getAllProjects();
648
+ const project = allProjects.find(p => p.id === projectId);
649
+ if (!project) {
650
+ return res.status(404).json({ error: 'Project not found' });
651
+ }
652
+ // Delete project metadata - use full path for deletion
653
+ const success = projectStorage.deleteProject(project.path);
654
+ if (!success) {
655
+ return res.status(404).json({ error: 'Project not found' });
656
+ }
657
+ res.json({
658
+ success: true,
659
+ message: 'Project removed successfully',
660
+ note: 'Project directory was not deleted from filesystem'
661
+ });
662
+ return;
663
+ }
664
+ // Handle legacy agent project format
665
+ const agents = globalAgentStorage.getAllAgents();
666
+ let targetProject = null;
667
+ for (const agent of agents) {
668
+ if (agent.projects && agent.projects.length > 0) {
669
+ for (let i = 0; i < agent.projects.length; i++) {
670
+ const projectPath = agent.projects[i];
671
+ const id = `${agent.id}-${Buffer.from(projectPath).toString('base64').replace(/[+/=]/g, '').slice(-8)}`;
672
+ if (id === projectId) {
673
+ targetProject = projectPath;
674
+ // Remove project from agent's projects list
675
+ agent.projects.splice(i, 1);
676
+ agent.updatedAt = new Date().toISOString();
677
+ globalAgentStorage.saveAgent(agent);
678
+ break;
679
+ }
680
+ }
681
+ if (targetProject)
682
+ break;
683
+ }
684
+ }
685
+ if (!targetProject) {
686
+ return res.status(404).json({ error: 'Project not found' });
687
+ }
688
+ res.json({
689
+ success: true,
690
+ message: 'Project removed from list successfully',
691
+ note: 'Project directory was not deleted from filesystem'
692
+ });
693
+ }
694
+ catch (error) {
695
+ console.error('Failed to delete project:', error);
696
+ res.status(500).json({ error: 'Failed to delete project' });
697
+ }
698
+ });
699
+ // ========== A2A CONFIGURATION ENDPOINTS ==========
700
+ // GET /api/projects/:projectId/a2a-config - Get project A2A configuration
701
+ router.get('/:projectId/a2a-config', async (req, res) => {
702
+ try {
703
+ const { projectId: projectPath } = req.params;
704
+ // Load A2A configuration using project path
705
+ const config = await (0, a2aConfigService_js_1.loadA2AConfig)(projectPath);
706
+ if (!config) {
707
+ return res.status(500).json({
708
+ error: 'Failed to load A2A configuration',
709
+ code: 'CONFIG_LOAD_ERROR'
710
+ });
711
+ }
712
+ res.json({ config });
713
+ }
714
+ catch (error) {
715
+ console.error('Error loading A2A configuration:', error);
716
+ res.status(500).json({
717
+ error: 'Failed to load A2A configuration',
718
+ details: error instanceof Error ? error.message : String(error)
719
+ });
720
+ }
721
+ });
722
+ // PUT /api/projects/:projectId/a2a-config - Update project A2A configuration
723
+ router.put('/:projectId/a2a-config', async (req, res) => {
724
+ try {
725
+ const { projectId: projectPath } = req.params;
726
+ const config = req.body;
727
+ // Convert project path to project ID for storage
728
+ // Create a deterministic project ID from path
729
+ const projectId = `proj_${Buffer.from(projectPath).toString('base64').replace(/[+/=]/g, '').slice(-12)}`;
730
+ // Validate configuration using Zod schema
731
+ const validation = (0, a2a_js_1.validateSafe)(a2a_js_1.A2AConfigSchema, config);
732
+ if (!validation.success) {
733
+ return res.status(400).json({
734
+ error: 'Invalid A2A configuration',
735
+ code: 'VALIDATION_ERROR',
736
+ details: validation.errors
737
+ });
738
+ }
739
+ // Additional validation using service validator
740
+ const serviceValidation = (0, a2aConfigService_js_1.validateA2AConfig)(validation.data);
741
+ if (!serviceValidation.valid) {
742
+ return res.status(400).json({
743
+ error: 'Invalid A2A configuration',
744
+ code: 'VALIDATION_ERROR',
745
+ details: serviceValidation.errors
746
+ });
747
+ }
748
+ // Save configuration using project path
749
+ await (0, a2aConfigService_js_1.saveA2AConfig)(projectPath, validation.data);
750
+ res.json({
751
+ success: true,
752
+ config: validation.data,
753
+ message: 'A2A configuration updated successfully'
754
+ });
755
+ }
756
+ catch (error) {
757
+ console.error('Error updating A2A configuration:', error);
758
+ res.status(500).json({
759
+ error: 'Failed to update A2A configuration',
760
+ details: error instanceof Error ? error.message : String(error)
761
+ });
762
+ }
763
+ });
764
+ // ========== A2A API KEY MANAGEMENT ENDPOINTS ==========
765
+ // POST /api/projects/:projectId/api-keys - Generate new API key
766
+ router.post('/:projectId/api-keys', async (req, res) => {
767
+ try {
768
+ const { projectId: projectPath } = req.params;
769
+ const body = req.body;
770
+ // Validate request body
771
+ const validation = (0, a2a_js_1.validateSafe)(a2a_js_1.GenerateApiKeyRequestSchema, body);
772
+ if (!validation.success) {
773
+ return res.status(400).json({
774
+ error: 'Invalid request',
775
+ code: 'VALIDATION_ERROR',
776
+ details: validation.errors,
777
+ });
778
+ }
779
+ const { description } = validation.data;
780
+ // Use the actual project path for storage
781
+ // Generate new API key
782
+ const { key, keyData } = await (0, apiKeyService_js_1.generateApiKey)(projectPath, description);
783
+ res.json({
784
+ success: true,
785
+ key, // Plaintext key - shown only once!
786
+ keyId: keyData.id,
787
+ createdAt: keyData.createdAt,
788
+ description: keyData.description,
789
+ message: 'API key generated successfully. Save it now - it will not be shown again.',
790
+ });
791
+ }
792
+ catch (error) {
793
+ console.error('Error generating API key:', error);
794
+ res.status(500).json({
795
+ error: 'Failed to generate API key',
796
+ details: error instanceof Error ? error.message : String(error),
797
+ });
798
+ }
799
+ });
800
+ // GET /api/projects/:projectId/api-keys - List all API keys
801
+ router.get('/:projectId/api-keys', async (req, res) => {
802
+ try {
803
+ const { projectId: projectPath } = req.params;
804
+ const includeRevoked = req.query.includeRevoked === 'true';
805
+ // List API keys (hashes only, never plaintext)
806
+ const keys = await (0, apiKeyService_js_1.listApiKeys)(projectPath, includeRevoked);
807
+ // Remove keyHash from response for security
808
+ const sanitizedKeys = keys.map(({ keyHash, ...rest }) => rest);
809
+ res.json({
810
+ keys: sanitizedKeys,
811
+ count: sanitizedKeys.length,
812
+ });
813
+ }
814
+ catch (error) {
815
+ console.error('Error listing API keys:', error);
816
+ res.status(500).json({
817
+ error: 'Failed to list API keys',
818
+ details: error instanceof Error ? error.message : String(error),
819
+ });
820
+ }
821
+ });
822
+ // DELETE /api/projects/:projectId/api-keys/:keyId - Revoke API key
823
+ router.delete('/:projectId/api-keys/:keyId', async (req, res) => {
824
+ try {
825
+ const { projectId: projectPath, keyId } = req.params;
826
+ // Revoke the key using project path
827
+ const success = await (0, apiKeyService_js_1.revokeApiKey)(projectPath, keyId);
828
+ if (!success) {
829
+ return res.status(404).json({
830
+ error: 'API key not found',
831
+ code: 'KEY_NOT_FOUND',
832
+ });
833
+ }
834
+ res.json({
835
+ success: true,
836
+ message: 'API key revoked successfully',
837
+ keyId,
838
+ revokedAt: new Date().toISOString(),
839
+ });
840
+ }
841
+ catch (error) {
842
+ console.error('Error revoking API key:', error);
843
+ res.status(500).json({
844
+ error: 'Failed to revoke API key',
845
+ details: error instanceof Error ? error.message : String(error),
846
+ });
847
+ }
848
+ });
849
+ // POST /api/projects/:projectId/api-keys/:keyId/rotate - Rotate API key
850
+ router.post('/:projectId/api-keys/:keyId/rotate', async (req, res) => {
851
+ try {
852
+ const { projectId, keyId } = req.params;
853
+ const { description, gracePeriodMs } = req.body;
854
+ // Verify old key exists
855
+ const oldKey = await (0, apiKeyService_js_1.getApiKey)(projectId, keyId);
856
+ if (!oldKey) {
857
+ return res.status(404).json({
858
+ error: 'API key not found',
859
+ code: 'KEY_NOT_FOUND',
860
+ });
861
+ }
862
+ // Rotate the key with optional grace period
863
+ const { key, keyData, oldKeyId } = await (0, apiKeyService_js_1.rotateApiKey)(projectId, keyId, description || oldKey.description, gracePeriodMs);
864
+ res.json({
865
+ success: true,
866
+ key, // New plaintext key - shown only once!
867
+ keyId: keyData.id,
868
+ oldKeyId,
869
+ createdAt: keyData.createdAt,
870
+ description: keyData.description,
871
+ gracePeriodMs: gracePeriodMs || 5 * 60 * 1000,
872
+ message: 'API key rotated successfully. Old key will be revoked after grace period.',
873
+ });
874
+ }
875
+ catch (error) {
876
+ console.error('Error rotating API key:', error);
877
+ res.status(500).json({
878
+ error: 'Failed to rotate API key',
879
+ details: error instanceof Error ? error.message : String(error),
880
+ });
881
+ }
882
+ });
883
+ exports.default = router;
884
+ //# sourceMappingURL=projects.js.map