@cloudcli-ai/cloudcli 1.29.5 → 1.31.0

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 (354) hide show
  1. package/README.de.md +1 -1
  2. package/README.ja.md +1 -1
  3. package/README.ko.md +1 -1
  4. package/README.md +1 -1
  5. package/README.ru.md +1 -1
  6. package/README.tr.md +252 -0
  7. package/README.zh-CN.md +1 -1
  8. package/dist/assets/index-DF8TTVHl.css +32 -0
  9. package/dist/assets/index-DbZAcc9z.js +1262 -0
  10. package/dist/index.html +2 -2
  11. package/dist-server/server/claude-sdk.js +13 -8
  12. package/dist-server/server/claude-sdk.js.map +1 -1
  13. package/dist-server/server/cursor-cli.js +7 -7
  14. package/dist-server/server/cursor-cli.js.map +1 -1
  15. package/dist-server/server/gemini-cli.js +5 -5
  16. package/dist-server/server/gemini-cli.js.map +1 -1
  17. package/dist-server/server/gemini-response-handler.js +2 -2
  18. package/dist-server/server/gemini-response-handler.js.map +1 -1
  19. package/dist-server/server/index.js +139 -977
  20. package/dist-server/server/index.js.map +1 -1
  21. package/dist-server/server/middleware/auth.js +1 -1
  22. package/dist-server/server/middleware/auth.js.map +1 -1
  23. package/dist-server/server/modules/database/connection.js +125 -0
  24. package/dist-server/server/modules/database/connection.js.map +1 -0
  25. package/dist-server/server/modules/database/index.js +13 -0
  26. package/dist-server/server/modules/database/index.js.map +1 -0
  27. package/dist-server/server/modules/database/init-db.js +18 -0
  28. package/dist-server/server/modules/database/init-db.js.map +1 -0
  29. package/dist-server/server/modules/database/migrations.js +370 -0
  30. package/dist-server/server/modules/database/migrations.js.map +1 -0
  31. package/dist-server/server/modules/database/repositories/api-keys.js +72 -0
  32. package/dist-server/server/modules/database/repositories/api-keys.js.map +1 -0
  33. package/dist-server/server/modules/database/repositories/app-config.js +47 -0
  34. package/dist-server/server/modules/database/repositories/app-config.js.map +1 -0
  35. package/dist-server/server/modules/database/repositories/credentials.js +68 -0
  36. package/dist-server/server/modules/database/repositories/credentials.js.map +1 -0
  37. package/dist-server/server/modules/database/repositories/github-tokens.js +54 -0
  38. package/dist-server/server/modules/database/repositories/github-tokens.js.map +1 -0
  39. package/dist-server/server/modules/database/repositories/notification-preferences.js +72 -0
  40. package/dist-server/server/modules/database/repositories/notification-preferences.js.map +1 -0
  41. package/dist-server/server/modules/database/repositories/projects.db.integration.test.js +64 -0
  42. package/dist-server/server/modules/database/repositories/projects.db.integration.test.js.map +1 -0
  43. package/dist-server/server/modules/database/repositories/projects.db.js +160 -0
  44. package/dist-server/server/modules/database/repositories/projects.db.js.map +1 -0
  45. package/dist-server/server/modules/database/repositories/push-subscriptions.js +49 -0
  46. package/dist-server/server/modules/database/repositories/push-subscriptions.js.map +1 -0
  47. package/dist-server/server/modules/database/repositories/scan-state.db.js +31 -0
  48. package/dist-server/server/modules/database/repositories/scan-state.db.js.map +1 -0
  49. package/dist-server/server/modules/database/repositories/sessions.db.js +109 -0
  50. package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -0
  51. package/dist-server/server/modules/database/repositories/users.js +88 -0
  52. package/dist-server/server/modules/database/repositories/users.js.map +1 -0
  53. package/dist-server/server/modules/database/repositories/vapid-keys.js +38 -0
  54. package/dist-server/server/modules/database/repositories/vapid-keys.js.map +1 -0
  55. package/dist-server/server/modules/database/schema.js +143 -0
  56. package/dist-server/server/modules/database/schema.js.map +1 -0
  57. package/dist-server/server/modules/projects/index.js +4 -0
  58. package/dist-server/server/modules/projects/index.js.map +1 -0
  59. package/dist-server/server/modules/projects/projects.routes.js +188 -0
  60. package/dist-server/server/modules/projects/projects.routes.js.map +1 -0
  61. package/dist-server/server/modules/projects/services/project-clone.service.js +219 -0
  62. package/dist-server/server/modules/projects/services/project-clone.service.js.map +1 -0
  63. package/dist-server/server/modules/projects/services/project-delete.service.js +65 -0
  64. package/dist-server/server/modules/projects/services/project-delete.service.js.map +1 -0
  65. package/dist-server/server/modules/projects/services/project-management.service.js +93 -0
  66. package/dist-server/server/modules/projects/services/project-management.service.js.map +1 -0
  67. package/dist-server/server/modules/projects/services/project-star.service.js +60 -0
  68. package/dist-server/server/modules/projects/services/project-star.service.js.map +1 -0
  69. package/dist-server/server/modules/projects/services/projects-has-taskmaster.service.js +167 -0
  70. package/dist-server/server/modules/projects/services/projects-has-taskmaster.service.js.map +1 -0
  71. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js +169 -0
  72. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js.map +1 -0
  73. package/dist-server/server/modules/projects/tests/project-clone.service.test.js +126 -0
  74. package/dist-server/server/modules/projects/tests/project-clone.service.test.js.map +1 -0
  75. package/dist-server/server/modules/projects/tests/project-management.service.test.js +85 -0
  76. package/dist-server/server/modules/projects/tests/project-management.service.test.js.map +1 -0
  77. package/dist-server/server/modules/projects/tests/project-star.service.test.js +95 -0
  78. package/dist-server/server/modules/projects/tests/project-star.service.test.js.map +1 -0
  79. package/dist-server/server/modules/projects/tests/projects-has-taskmaster.service.test.js +87 -0
  80. package/dist-server/server/modules/projects/tests/projects-has-taskmaster.service.test.js.map +1 -0
  81. package/dist-server/server/modules/providers/index.js +4 -0
  82. package/dist-server/server/modules/providers/index.js.map +1 -0
  83. package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js +103 -0
  84. package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js.map +1 -0
  85. package/dist-server/server/modules/providers/list/claude/claude-mcp.provider.js +103 -0
  86. package/dist-server/server/modules/providers/list/claude/claude-mcp.provider.js.map +1 -0
  87. package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js +63 -0
  88. package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js.map +1 -0
  89. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +403 -0
  90. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -0
  91. package/dist-server/server/modules/providers/list/claude/claude.provider.js +15 -0
  92. package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -0
  93. package/dist-server/server/modules/providers/list/codex/codex-auth.provider.js +84 -0
  94. package/dist-server/server/modules/providers/list/codex/codex-auth.provider.js.map +1 -0
  95. package/dist-server/server/modules/providers/list/codex/codex-mcp.provider.js +107 -0
  96. package/dist-server/server/modules/providers/list/codex/codex-mcp.provider.js.map +1 -0
  97. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +71 -0
  98. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -0
  99. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +494 -0
  100. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -0
  101. package/dist-server/server/modules/providers/list/codex/codex.provider.js +15 -0
  102. package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -0
  103. package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js +118 -0
  104. package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js.map +1 -0
  105. package/dist-server/server/modules/providers/list/cursor/cursor-mcp.provider.js +80 -0
  106. package/dist-server/server/modules/providers/list/cursor/cursor-mcp.provider.js.map +1 -0
  107. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js +127 -0
  108. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -0
  109. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js +369 -0
  110. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js.map +1 -0
  111. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js +15 -0
  112. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js.map +1 -0
  113. package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js +131 -0
  114. package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js.map +1 -0
  115. package/dist-server/server/modules/providers/list/gemini/gemini-mcp.provider.js +82 -0
  116. package/dist-server/server/modules/providers/list/gemini/gemini-mcp.provider.js.map +1 -0
  117. package/dist-server/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.js +296 -0
  118. package/dist-server/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.js.map +1 -0
  119. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js +474 -0
  120. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js.map +1 -0
  121. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js +15 -0
  122. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js.map +1 -0
  123. package/dist-server/server/modules/providers/provider.registry.js +31 -0
  124. package/dist-server/server/modules/providers/provider.registry.js.map +1 -0
  125. package/dist-server/server/modules/providers/provider.routes.js +331 -0
  126. package/dist-server/server/modules/providers/provider.routes.js.map +1 -0
  127. package/dist-server/server/modules/providers/services/mcp.service.js +69 -0
  128. package/dist-server/server/modules/providers/services/mcp.service.js.map +1 -0
  129. package/dist-server/server/modules/providers/services/provider-auth.service.js +25 -0
  130. package/dist-server/server/modules/providers/services/provider-auth.service.js.map +1 -0
  131. package/dist-server/server/modules/providers/services/session-conversations-search.service.js +868 -0
  132. package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -0
  133. package/dist-server/server/modules/providers/services/session-synchronizer.service.js +56 -0
  134. package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -0
  135. package/dist-server/server/modules/providers/services/sessions-watcher.service.js +234 -0
  136. package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -0
  137. package/dist-server/server/modules/providers/services/sessions.service.js +104 -0
  138. package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -0
  139. package/dist-server/server/modules/providers/shared/base/abstract.provider.js +14 -0
  140. package/dist-server/server/modules/providers/shared/base/abstract.provider.js.map +1 -0
  141. package/dist-server/server/modules/providers/shared/mcp/mcp.provider.js +102 -0
  142. package/dist-server/server/modules/providers/shared/mcp/mcp.provider.js.map +1 -0
  143. package/dist-server/server/modules/providers/tests/mcp.test.js +250 -0
  144. package/dist-server/server/modules/providers/tests/mcp.test.js.map +1 -0
  145. package/dist-server/server/modules/websocket/index.js +3 -0
  146. package/dist-server/server/modules/websocket/index.js.map +1 -0
  147. package/dist-server/server/modules/websocket/services/chat-websocket.service.js +188 -0
  148. package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -0
  149. package/dist-server/server/modules/websocket/services/plugin-websocket-proxy.service.js +52 -0
  150. package/dist-server/server/modules/websocket/services/plugin-websocket-proxy.service.js.map +1 -0
  151. package/dist-server/server/modules/websocket/services/shell-websocket.service.js +334 -0
  152. package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -0
  153. package/dist-server/server/modules/websocket/services/websocket-auth.service.js +32 -0
  154. package/dist-server/server/modules/websocket/services/websocket-auth.service.js.map +1 -0
  155. package/dist-server/server/modules/websocket/services/websocket-server.service.js +36 -0
  156. package/dist-server/server/modules/websocket/services/websocket-server.service.js.map +1 -0
  157. package/dist-server/server/modules/websocket/services/websocket-state.service.js +14 -0
  158. package/dist-server/server/modules/websocket/services/websocket-state.service.js.map +1 -0
  159. package/dist-server/server/modules/websocket/services/websocket-writer.service.js +32 -0
  160. package/dist-server/server/modules/websocket/services/websocket-writer.service.js.map +1 -0
  161. package/dist-server/server/openai-codex.js +5 -5
  162. package/dist-server/server/openai-codex.js.map +1 -1
  163. package/dist-server/server/routes/agent.js +10 -17
  164. package/dist-server/server/routes/agent.js.map +1 -1
  165. package/dist-server/server/routes/auth.js +3 -1
  166. package/dist-server/server/routes/auth.js.map +1 -1
  167. package/dist-server/server/routes/commands.js +1 -45
  168. package/dist-server/server/routes/commands.js.map +1 -1
  169. package/dist-server/server/routes/cursor.js +9 -489
  170. package/dist-server/server/routes/cursor.js.map +1 -1
  171. package/dist-server/server/routes/gemini.js +2 -2
  172. package/dist-server/server/routes/gemini.js.map +1 -1
  173. package/dist-server/server/routes/git.js +33 -29
  174. package/dist-server/server/routes/git.js.map +1 -1
  175. package/dist-server/server/routes/mcp-utils.js +1 -18
  176. package/dist-server/server/routes/mcp-utils.js.map +1 -1
  177. package/dist-server/server/routes/settings.js +11 -1
  178. package/dist-server/server/routes/settings.js.map +1 -1
  179. package/dist-server/server/routes/taskmaster.js +97 -569
  180. package/dist-server/server/routes/taskmaster.js.map +1 -1
  181. package/dist-server/server/routes/user.js +1 -1
  182. package/dist-server/server/routes/user.js.map +1 -1
  183. package/dist-server/server/services/notification-orchestrator.js +2 -2
  184. package/dist-server/server/services/notification-orchestrator.js.map +1 -1
  185. package/dist-server/server/services/vapid-keys.js +2 -1
  186. package/dist-server/server/services/vapid-keys.js.map +1 -1
  187. package/dist-server/server/shared/interfaces.js +2 -0
  188. package/dist-server/server/shared/interfaces.js.map +1 -0
  189. package/dist-server/server/shared/types.js +2 -0
  190. package/dist-server/server/shared/types.js.map +1 -0
  191. package/dist-server/server/shared/utils.js +551 -0
  192. package/dist-server/server/shared/utils.js.map +1 -0
  193. package/dist-server/server/utils/mcp-detector.js +0 -49
  194. package/dist-server/server/utils/mcp-detector.js.map +1 -1
  195. package/dist-server/server/utils/taskmaster-websocket.js +18 -12
  196. package/dist-server/server/utils/taskmaster-websocket.js.map +1 -1
  197. package/dist-server/shared/modelConstants.js +3 -1
  198. package/dist-server/shared/modelConstants.js.map +1 -1
  199. package/package.json +7 -2
  200. package/server/claude-sdk.js +14 -8
  201. package/server/cursor-cli.js +7 -7
  202. package/server/gemini-cli.js +5 -5
  203. package/server/gemini-response-handler.js +2 -2
  204. package/server/index.js +173 -1035
  205. package/server/middleware/auth.js +1 -1
  206. package/server/modules/database/connection.ts +143 -0
  207. package/server/modules/database/index.ts +12 -0
  208. package/server/modules/database/init-db.ts +17 -0
  209. package/server/modules/database/migrations.ts +442 -0
  210. package/server/modules/database/repositories/api-keys.ts +119 -0
  211. package/server/modules/database/repositories/app-config.ts +53 -0
  212. package/server/modules/database/repositories/credentials.ts +106 -0
  213. package/server/modules/database/repositories/github-tokens.ts +100 -0
  214. package/server/modules/database/repositories/notification-preferences.ts +103 -0
  215. package/server/modules/database/repositories/projects.db.integration.test.ts +72 -0
  216. package/server/modules/database/repositories/projects.db.ts +183 -0
  217. package/server/modules/database/repositories/push-subscriptions.ts +80 -0
  218. package/server/modules/database/repositories/scan-state.db.ts +42 -0
  219. package/server/modules/database/repositories/sessions.db.ts +174 -0
  220. package/server/modules/database/repositories/users.ts +140 -0
  221. package/server/modules/database/repositories/vapid-keys.ts +57 -0
  222. package/server/modules/database/schema.ts +152 -0
  223. package/server/modules/projects/index.ts +6 -0
  224. package/server/modules/projects/projects.routes.ts +247 -0
  225. package/server/modules/projects/services/project-clone.service.ts +321 -0
  226. package/server/modules/projects/services/project-delete.service.ts +75 -0
  227. package/server/modules/projects/services/project-management.service.ts +150 -0
  228. package/server/modules/projects/services/project-star.service.ts +78 -0
  229. package/server/modules/projects/services/projects-has-taskmaster.service.ts +248 -0
  230. package/server/modules/projects/services/projects-with-sessions-fetch.service.ts +285 -0
  231. package/server/modules/projects/tests/project-clone.service.test.ts +183 -0
  232. package/server/modules/projects/tests/project-management.service.test.ts +117 -0
  233. package/server/modules/projects/tests/project-star.service.test.ts +123 -0
  234. package/server/modules/projects/tests/projects-has-taskmaster.service.test.ts +105 -0
  235. package/server/modules/providers/index.ts +4 -0
  236. package/server/modules/providers/list/claude/claude-auth.provider.ts +123 -0
  237. package/server/modules/providers/list/claude/claude-mcp.provider.ts +135 -0
  238. package/server/modules/providers/list/claude/claude-session-synchronizer.provider.ts +110 -0
  239. package/server/modules/providers/list/claude/claude-sessions.provider.ts +475 -0
  240. package/server/modules/providers/list/claude/claude.provider.ts +17 -0
  241. package/server/modules/providers/list/codex/codex-auth.provider.ts +100 -0
  242. package/server/modules/providers/list/codex/codex-mcp.provider.ts +135 -0
  243. package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +119 -0
  244. package/server/modules/providers/list/codex/codex-sessions.provider.ts +564 -0
  245. package/server/modules/providers/list/codex/codex.provider.ts +17 -0
  246. package/server/modules/providers/list/cursor/cursor-auth.provider.ts +143 -0
  247. package/server/modules/providers/list/cursor/cursor-mcp.provider.ts +108 -0
  248. package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +176 -0
  249. package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +421 -0
  250. package/server/modules/providers/list/cursor/cursor.provider.ts +17 -0
  251. package/server/modules/providers/list/gemini/gemini-auth.provider.ts +151 -0
  252. package/server/modules/providers/list/gemini/gemini-mcp.provider.ts +110 -0
  253. package/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.ts +401 -0
  254. package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +541 -0
  255. package/server/modules/providers/list/gemini/gemini.provider.ts +17 -0
  256. package/server/modules/providers/provider.registry.ts +36 -0
  257. package/server/modules/providers/provider.routes.ts +425 -0
  258. package/server/modules/providers/services/mcp.service.ts +94 -0
  259. package/server/modules/providers/services/provider-auth.service.ts +26 -0
  260. package/server/modules/providers/services/session-conversations-search.service.ts +1167 -0
  261. package/server/modules/providers/services/session-synchronizer.service.ts +74 -0
  262. package/server/modules/providers/services/sessions-watcher.service.ts +283 -0
  263. package/server/modules/providers/services/sessions.service.ts +130 -0
  264. package/server/modules/providers/shared/base/abstract.provider.ts +27 -0
  265. package/server/modules/providers/shared/mcp/mcp.provider.ts +151 -0
  266. package/server/modules/providers/tests/mcp.test.ts +293 -0
  267. package/server/modules/websocket/README.md +267 -0
  268. package/server/modules/websocket/index.ts +2 -0
  269. package/server/modules/websocket/services/chat-websocket.service.ts +271 -0
  270. package/server/modules/websocket/services/plugin-websocket-proxy.service.ts +65 -0
  271. package/server/modules/websocket/services/shell-websocket.service.ts +453 -0
  272. package/server/modules/websocket/services/websocket-auth.service.ts +54 -0
  273. package/server/modules/websocket/services/websocket-server.service.ts +58 -0
  274. package/server/modules/websocket/services/websocket-state.service.ts +16 -0
  275. package/server/modules/websocket/services/websocket-writer.service.ts +38 -0
  276. package/server/openai-codex.js +5 -5
  277. package/server/routes/agent.js +11 -16
  278. package/server/routes/auth.js +4 -2
  279. package/server/routes/commands.js +1 -50
  280. package/server/routes/cursor.js +15 -527
  281. package/server/routes/gemini.js +3 -2
  282. package/server/routes/git.js +33 -28
  283. package/server/routes/mcp-utils.js +2 -19
  284. package/server/routes/settings.js +11 -1
  285. package/server/routes/taskmaster.js +107 -602
  286. package/server/routes/user.js +1 -1
  287. package/server/services/notification-orchestrator.js +3 -2
  288. package/server/services/vapid-keys.js +2 -1
  289. package/server/shared/interfaces.ts +92 -0
  290. package/server/shared/types.ts +327 -0
  291. package/server/shared/utils.ts +669 -0
  292. package/server/tsconfig.json +6 -3
  293. package/server/utils/mcp-detector.js +0 -51
  294. package/server/utils/taskmaster-websocket.js +19 -13
  295. package/shared/modelConstants.js +3 -1
  296. package/dist/assets/index-BBAE1OJ_.css +0 -32
  297. package/dist/assets/index-Ci1GOyV7.js +0 -1262
  298. package/dist-server/server/database/db.js +0 -535
  299. package/dist-server/server/database/db.js.map +0 -1
  300. package/dist-server/server/database/schema.js +0 -97
  301. package/dist-server/server/database/schema.js.map +0 -1
  302. package/dist-server/server/projects.js +0 -2325
  303. package/dist-server/server/projects.js.map +0 -1
  304. package/dist-server/server/providers/claude/adapter.js +0 -266
  305. package/dist-server/server/providers/claude/adapter.js.map +0 -1
  306. package/dist-server/server/providers/claude/status.js +0 -121
  307. package/dist-server/server/providers/claude/status.js.map +0 -1
  308. package/dist-server/server/providers/codex/adapter.js +0 -232
  309. package/dist-server/server/providers/codex/adapter.js.map +0 -1
  310. package/dist-server/server/providers/codex/status.js +0 -70
  311. package/dist-server/server/providers/codex/status.js.map +0 -1
  312. package/dist-server/server/providers/cursor/adapter.js +0 -342
  313. package/dist-server/server/providers/cursor/adapter.js.map +0 -1
  314. package/dist-server/server/providers/cursor/status.js +0 -118
  315. package/dist-server/server/providers/cursor/status.js.map +0 -1
  316. package/dist-server/server/providers/gemini/adapter.js +0 -174
  317. package/dist-server/server/providers/gemini/adapter.js.map +0 -1
  318. package/dist-server/server/providers/gemini/status.js +0 -104
  319. package/dist-server/server/providers/gemini/status.js.map +0 -1
  320. package/dist-server/server/providers/registry.js +0 -58
  321. package/dist-server/server/providers/registry.js.map +0 -1
  322. package/dist-server/server/providers/types.js +0 -117
  323. package/dist-server/server/providers/types.js.map +0 -1
  324. package/dist-server/server/providers/utils.js +0 -28
  325. package/dist-server/server/providers/utils.js.map +0 -1
  326. package/dist-server/server/routes/cli-auth.js +0 -25
  327. package/dist-server/server/routes/cli-auth.js.map +0 -1
  328. package/dist-server/server/routes/codex.js +0 -294
  329. package/dist-server/server/routes/codex.js.map +0 -1
  330. package/dist-server/server/routes/mcp.js +0 -480
  331. package/dist-server/server/routes/mcp.js.map +0 -1
  332. package/dist-server/server/routes/messages.js +0 -56
  333. package/dist-server/server/routes/messages.js.map +0 -1
  334. package/dist-server/server/routes/projects.js +0 -505
  335. package/dist-server/server/routes/projects.js.map +0 -1
  336. package/server/database/db.js +0 -593
  337. package/server/database/schema.js +0 -102
  338. package/server/projects.js +0 -2555
  339. package/server/providers/claude/adapter.js +0 -278
  340. package/server/providers/claude/status.js +0 -136
  341. package/server/providers/codex/adapter.js +0 -248
  342. package/server/providers/codex/status.js +0 -78
  343. package/server/providers/cursor/adapter.js +0 -348
  344. package/server/providers/cursor/status.js +0 -128
  345. package/server/providers/gemini/adapter.js +0 -186
  346. package/server/providers/gemini/status.js +0 -111
  347. package/server/providers/registry.js +0 -67
  348. package/server/providers/types.js +0 -132
  349. package/server/providers/utils.js +0 -29
  350. package/server/routes/cli-auth.js +0 -27
  351. package/server/routes/codex.js +0 -329
  352. package/server/routes/mcp.js +0 -552
  353. package/server/routes/messages.js +0 -61
  354. package/server/routes/projects.js +0 -548
@@ -0,0 +1,551 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import { access, lstat, mkdir, readFile, readdir, readlink, realpath, stat, writeFile, } from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import readline from 'node:readline';
7
+ // ---------------------------
8
+ //----------------- HTTP HANDLER UTILITIES ------------
9
+ /**
10
+ * Wraps arbitrary data in the standard API success envelope.
11
+ *
12
+ * Use this helper in route handlers to keep successful JSON responses consistent
13
+ * across endpoints.
14
+ */
15
+ export function createApiSuccessResponse(data) {
16
+ return {
17
+ success: true,
18
+ data,
19
+ };
20
+ }
21
+ /**
22
+ * Converts an async Express handler into a standard `RequestHandler` and routes
23
+ * rejected promises to Express error middleware.
24
+ *
25
+ * Use this to avoid repeating `try/catch(next)` in every async route.
26
+ */
27
+ export function asyncHandler(handler) {
28
+ return (req, res, next) => {
29
+ void Promise.resolve(handler(req, res, next)).catch(next);
30
+ };
31
+ }
32
+ // ---------------------------
33
+ //----------------- SHARED ERROR UTILITIES ------------
34
+ /**
35
+ * Shared application error with HTTP status and machine-readable code metadata.
36
+ *
37
+ * Throw this from service/route layers when the caller should receive a
38
+ * controlled error response rather than a generic 500.
39
+ */
40
+ export class AppError extends Error {
41
+ code;
42
+ statusCode;
43
+ details;
44
+ constructor(message, options = {}) {
45
+ super(message);
46
+ this.name = 'AppError';
47
+ this.code = options.code ?? 'INTERNAL_ERROR';
48
+ this.statusCode = options.statusCode ?? 500;
49
+ this.details = options.details;
50
+ }
51
+ }
52
+ // ---------------------------
53
+ //----------------- WORKSPACE PATH VALIDATION UTILITIES ------------
54
+ /**
55
+ * Root directory that all workspace/project paths must stay under.
56
+ *
57
+ * This is resolved from `WORKSPACES_ROOT` when configured; otherwise it falls
58
+ * back to the current user's home directory.
59
+ */
60
+ export const WORKSPACES_ROOT = process.env.WORKSPACES_ROOT || os.homedir();
61
+ /**
62
+ * System-critical paths that must never be used as workspace roots.
63
+ *
64
+ * The validation helper blocks these values directly and also blocks paths
65
+ * nested under them (with explicit allow-list exceptions where necessary).
66
+ */
67
+ export const FORBIDDEN_WORKSPACE_PATHS = [
68
+ // Unix
69
+ '/',
70
+ '/etc',
71
+ '/bin',
72
+ '/sbin',
73
+ '/usr',
74
+ '/dev',
75
+ '/proc',
76
+ '/sys',
77
+ '/var',
78
+ '/boot',
79
+ '/root',
80
+ '/lib',
81
+ '/lib64',
82
+ '/opt',
83
+ '/tmp',
84
+ '/run',
85
+ // Windows
86
+ 'C:\\Windows',
87
+ 'C:\\Program Files',
88
+ 'C:\\Program Files (x86)',
89
+ 'C:\\ProgramData',
90
+ 'C:\\System Volume Information',
91
+ 'C:\\$Recycle.Bin',
92
+ ];
93
+ function stripWindowsLongPathPrefix(inputPath) {
94
+ if (inputPath.startsWith('\\\\?\\UNC\\')) {
95
+ return `\\\\${inputPath.slice('\\\\?\\UNC\\'.length)}`;
96
+ }
97
+ if (inputPath.startsWith('\\\\?\\')) {
98
+ return inputPath.slice('\\\\?\\'.length);
99
+ }
100
+ return inputPath;
101
+ }
102
+ function shouldUseWindowsPathNormalization(inputPath) {
103
+ if (process.platform === 'win32') {
104
+ return true;
105
+ }
106
+ return inputPath.startsWith('\\\\') || /^[a-zA-Z]:([\\/]|$)/.test(inputPath);
107
+ }
108
+ /**
109
+ * Canonicalizes project/workspace paths for stable DB keys and comparisons.
110
+ *
111
+ * Normalization rules:
112
+ * - trim whitespace
113
+ * - strip Windows long-path prefixes (`\\?\` and `\\?\UNC\`)
114
+ * - normalize path separators and dot segments
115
+ * - trim trailing separators except for filesystem roots
116
+ */
117
+ export function normalizeProjectPath(inputPath) {
118
+ if (typeof inputPath !== 'string') {
119
+ return '';
120
+ }
121
+ const trimmed = inputPath.trim();
122
+ if (!trimmed) {
123
+ return '';
124
+ }
125
+ const withoutLongPrefix = stripWindowsLongPathPrefix(trimmed);
126
+ const useWindowsPathRules = shouldUseWindowsPathNormalization(withoutLongPrefix);
127
+ const normalized = useWindowsPathRules
128
+ ? path.win32.normalize(withoutLongPrefix)
129
+ : path.posix.normalize(withoutLongPrefix);
130
+ if (!normalized) {
131
+ return '';
132
+ }
133
+ const parser = useWindowsPathRules ? path.win32 : path.posix;
134
+ const root = parser.parse(normalized).root;
135
+ if (normalized === root) {
136
+ return normalized;
137
+ }
138
+ return normalized.replace(/[\\/]+$/, '');
139
+ }
140
+ /**
141
+ * Validates that a user-supplied workspace path is safe to use.
142
+ *
143
+ * Call this before any filesystem mutation that creates or registers projects.
144
+ * The function resolves symlinks, enforces `WORKSPACES_ROOT` containment, and
145
+ * blocks known system directories.
146
+ */
147
+ export async function validateWorkspacePath(requestedPath) {
148
+ try {
149
+ const normalizedRequestedPath = normalizeProjectPath(requestedPath);
150
+ if (!normalizedRequestedPath) {
151
+ return {
152
+ valid: false,
153
+ error: 'Workspace path is required',
154
+ };
155
+ }
156
+ const absolutePath = path.resolve(normalizedRequestedPath);
157
+ const normalizedPath = normalizeProjectPath(absolutePath);
158
+ if (FORBIDDEN_WORKSPACE_PATHS.includes(normalizedPath) || normalizedPath === '/') {
159
+ return {
160
+ valid: false,
161
+ error: 'Cannot use system-critical directories as workspace locations',
162
+ };
163
+ }
164
+ for (const forbiddenPath of FORBIDDEN_WORKSPACE_PATHS) {
165
+ const normalizedForbiddenPath = normalizeProjectPath(forbiddenPath);
166
+ if (normalizedPath === normalizedForbiddenPath
167
+ || normalizedPath.startsWith(`${normalizedForbiddenPath}${path.sep}`)) {
168
+ // Allow specific user-writable folders under /var.
169
+ if (normalizedForbiddenPath === '/var'
170
+ && (normalizedPath.startsWith('/var/tmp') || normalizedPath.startsWith('/var/folders'))) {
171
+ continue;
172
+ }
173
+ return {
174
+ valid: false,
175
+ error: `Cannot create workspace in system directory: ${forbiddenPath}`,
176
+ };
177
+ }
178
+ }
179
+ let resolvedPath = normalizeProjectPath(absolutePath);
180
+ try {
181
+ await access(absolutePath);
182
+ resolvedPath = normalizeProjectPath(await realpath(absolutePath));
183
+ }
184
+ catch (error) {
185
+ const fileError = error;
186
+ if (fileError.code !== 'ENOENT') {
187
+ throw fileError;
188
+ }
189
+ const parentPath = path.dirname(absolutePath);
190
+ try {
191
+ const parentRealPath = await realpath(parentPath);
192
+ resolvedPath = normalizeProjectPath(path.join(parentRealPath, path.basename(absolutePath)));
193
+ }
194
+ catch (parentError) {
195
+ const parentFileError = parentError;
196
+ if (parentFileError.code !== 'ENOENT') {
197
+ throw parentFileError;
198
+ }
199
+ }
200
+ }
201
+ const resolvedWorkspaceRoot = normalizeProjectPath(await realpath(WORKSPACES_ROOT));
202
+ if (!resolvedPath.startsWith(`${resolvedWorkspaceRoot}${path.sep}`)
203
+ && resolvedPath !== resolvedWorkspaceRoot) {
204
+ return {
205
+ valid: false,
206
+ error: `Workspace path must be within the allowed workspace root: ${WORKSPACES_ROOT}`,
207
+ };
208
+ }
209
+ try {
210
+ await access(absolutePath);
211
+ const pathStats = await lstat(absolutePath);
212
+ if (pathStats.isSymbolicLink()) {
213
+ const symlinkTarget = await readlink(absolutePath);
214
+ const resolvedSymlinkPath = path.resolve(path.dirname(absolutePath), symlinkTarget);
215
+ const realSymlinkPath = await realpath(resolvedSymlinkPath);
216
+ if (!realSymlinkPath.startsWith(`${resolvedWorkspaceRoot}${path.sep}`)
217
+ && realSymlinkPath !== resolvedWorkspaceRoot) {
218
+ return {
219
+ valid: false,
220
+ error: 'Symlink target is outside the allowed workspace root',
221
+ };
222
+ }
223
+ }
224
+ }
225
+ catch (error) {
226
+ const fileError = error;
227
+ if (fileError.code !== 'ENOENT') {
228
+ throw fileError;
229
+ }
230
+ }
231
+ return {
232
+ valid: true,
233
+ resolvedPath,
234
+ };
235
+ }
236
+ catch (error) {
237
+ return {
238
+ valid: false,
239
+ error: `Path validation failed: ${error.message}`,
240
+ };
241
+ }
242
+ }
243
+ // ---------------------------
244
+ //----------------- NORMALIZED PROVIDER MESSAGE UTILITIES ------------
245
+ /**
246
+ * Generates a stable unique id for normalized provider messages.
247
+ */
248
+ export function generateMessageId(prefix = 'msg') {
249
+ return `${prefix}_${randomUUID()}`;
250
+ }
251
+ /**
252
+ * Creates a normalized provider message and fills the shared envelope fields.
253
+ *
254
+ * Provider adapters and live SDK handlers pass through provider-specific fields,
255
+ * while this helper guarantees every emitted event has an id, session id,
256
+ * timestamp, and provider marker.
257
+ */
258
+ export function createNormalizedMessage(fields) {
259
+ return {
260
+ ...fields,
261
+ id: fields.id || generateMessageId(fields.kind),
262
+ sessionId: fields.sessionId || '',
263
+ timestamp: fields.timestamp || new Date().toISOString(),
264
+ provider: fields.provider,
265
+ };
266
+ }
267
+ // ---------------------------
268
+ //----------------- MCP CONFIG PARSING UTILITIES ------------
269
+ /**
270
+ * Safely narrows an unknown value to a plain object record.
271
+ *
272
+ * This deliberately rejects arrays, `null`, and primitive values so callers can
273
+ * treat the returned value as a JSON-style object map without repeating the same
274
+ * defensive shape checks at every config read site.
275
+ */
276
+ export const readObjectRecord = (value) => {
277
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
278
+ return null;
279
+ }
280
+ return value;
281
+ };
282
+ /**
283
+ * Reads an optional string from unknown input and normalizes empty or whitespace-only
284
+ * values to `undefined`.
285
+ *
286
+ * This is useful when parsing config files where a field may be missing, present
287
+ * with the wrong type, or present as an empty string that should be treated as
288
+ * "not configured".
289
+ */
290
+ export const readOptionalString = (value) => {
291
+ if (typeof value !== 'string') {
292
+ return undefined;
293
+ }
294
+ const normalized = value.trim();
295
+ return normalized.length > 0 ? normalized : undefined;
296
+ };
297
+ /**
298
+ * Reads an optional string array from unknown input.
299
+ *
300
+ * Non-array values are ignored, and any array entries that are not strings are
301
+ * filtered out. This lets provider config readers consume loosely shaped JSON/TOML
302
+ * data without failing on incidental invalid members.
303
+ */
304
+ export const readStringArray = (value) => {
305
+ if (!Array.isArray(value)) {
306
+ return undefined;
307
+ }
308
+ return value.filter((entry) => typeof entry === 'string');
309
+ };
310
+ /**
311
+ * Reads an optional string-to-string map from unknown input.
312
+ *
313
+ * The function first ensures the source value is a plain object, then keeps only
314
+ * keys whose values are strings. If no valid entries remain, it returns `undefined`
315
+ * so callers can distinguish "no usable map" from an empty object that was
316
+ * intentionally authored downstream.
317
+ */
318
+ export const readStringRecord = (value) => {
319
+ const record = readObjectRecord(value);
320
+ if (!record) {
321
+ return undefined;
322
+ }
323
+ const normalized = {};
324
+ for (const [key, entry] of Object.entries(record)) {
325
+ if (typeof entry === 'string') {
326
+ normalized[key] = entry;
327
+ }
328
+ }
329
+ return Object.keys(normalized).length > 0 ? normalized : undefined;
330
+ };
331
+ // ---------------------------
332
+ //----------------- WEBSOCKET PAYLOAD PARSING UTILITIES ------------
333
+ /**
334
+ * Parses one websocket message payload into a plain JSON object record.
335
+ *
336
+ * Use this in realtime handlers that receive raw websocket payloads as `string`,
337
+ * `Buffer`, `ArrayBuffer`, or chunk arrays. The helper converts supported
338
+ * payload formats to UTF-8 text, parses JSON, and returns only object payloads.
339
+ * Primitive/array/invalid payloads return `null` so callers can handle bad input
340
+ * without throwing from deeply nested message handlers.
341
+ */
342
+ export const parseIncomingJsonObject = (payload) => {
343
+ let text = null;
344
+ if (typeof payload === 'string') {
345
+ text = payload;
346
+ }
347
+ else if (Buffer.isBuffer(payload)) {
348
+ text = payload.toString('utf8');
349
+ }
350
+ else if (payload instanceof ArrayBuffer) {
351
+ text = Buffer.from(payload).toString('utf8');
352
+ }
353
+ else if (Array.isArray(payload)) {
354
+ const buffers = payload
355
+ .map((entry) => {
356
+ if (Buffer.isBuffer(entry)) {
357
+ return entry;
358
+ }
359
+ if (entry instanceof ArrayBuffer) {
360
+ return Buffer.from(entry);
361
+ }
362
+ if (ArrayBuffer.isView(entry)) {
363
+ return Buffer.from(entry.buffer, entry.byteOffset, entry.byteLength);
364
+ }
365
+ return null;
366
+ })
367
+ .filter((entry) => entry !== null);
368
+ if (buffers.length > 0) {
369
+ text = Buffer.concat(buffers).toString('utf8');
370
+ }
371
+ }
372
+ if (typeof text !== 'string' || text.trim().length === 0) {
373
+ return null;
374
+ }
375
+ try {
376
+ const parsed = JSON.parse(text);
377
+ return readObjectRecord(parsed);
378
+ }
379
+ catch {
380
+ return null;
381
+ }
382
+ };
383
+ /**
384
+ * Reads a JSON config file and guarantees a plain object result.
385
+ *
386
+ * Missing files are treated as an empty config object so provider-specific MCP
387
+ * readers can operate against first-run environments without special-case file
388
+ * existence checks. If the file exists but contains invalid JSON, the parse error
389
+ * is preserved and rethrown.
390
+ */
391
+ export const readJsonConfig = async (filePath) => {
392
+ try {
393
+ const content = await readFile(filePath, 'utf8');
394
+ const parsed = JSON.parse(content);
395
+ return readObjectRecord(parsed) ?? {};
396
+ }
397
+ catch (error) {
398
+ const code = error.code;
399
+ if (code === 'ENOENT') {
400
+ return {};
401
+ }
402
+ throw error;
403
+ }
404
+ };
405
+ /**
406
+ * Writes a JSON config file with stable, human-readable formatting.
407
+ *
408
+ * The parent directory is created automatically so callers can persist config into
409
+ * provider-specific folders without pre-creating the directory tree. Output always
410
+ * ends with a trailing newline to keep the file diff-friendly.
411
+ */
412
+ export const writeJsonConfig = async (filePath, data) => {
413
+ await mkdir(path.dirname(filePath), { recursive: true });
414
+ await writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
415
+ };
416
+ // ---------------------------
417
+ //----------------- SESSION SYNCHRONIZER TITLE HELPERS ------------
418
+ /**
419
+ * Produces a compact session title suitable for UI rendering and DB storage.
420
+ *
421
+ * Use this when converting provider-native names into a consistent title value.
422
+ * The helper collapses repeated whitespace, trims the result, and truncates it
423
+ * to 120 characters so every provider writes stable and bounded metadata.
424
+ * If the normalized input is empty, it returns the supplied fallback title.
425
+ */
426
+ export function normalizeSessionName(rawValue, fallback) {
427
+ const normalized = (rawValue ?? '').replace(/\s+/g, ' ').trim();
428
+ if (!normalized) {
429
+ return fallback;
430
+ }
431
+ return normalized.slice(0, 120);
432
+ }
433
+ // ---------------------------
434
+ //----------------- SESSION SYNCHRONIZER FILESYSTEM HELPERS ------------
435
+ /**
436
+ * Recursively discovers files that match one extension, with optional incremental filtering.
437
+ *
438
+ * Provider synchronizers call this to find transcript artifacts under provider
439
+ * home directories. Pass `lastScanAt` to include only files created after the
440
+ * previous scan, or pass `null` to perform a full rescan. Missing directories
441
+ * are treated as empty because not every provider exists on every machine.
442
+ */
443
+ export async function findFilesRecursivelyCreatedAfter(rootDir, extension, lastScanAt, fileList = []) {
444
+ try {
445
+ const entries = await readdir(rootDir, { withFileTypes: true });
446
+ for (const entry of entries) {
447
+ const fullPath = path.join(rootDir, entry.name);
448
+ if (entry.isDirectory()) {
449
+ await findFilesRecursivelyCreatedAfter(fullPath, extension, lastScanAt, fileList);
450
+ continue;
451
+ }
452
+ if (!entry.isFile() || !entry.name.endsWith(extension)) {
453
+ continue;
454
+ }
455
+ if (!lastScanAt) {
456
+ fileList.push(fullPath);
457
+ continue;
458
+ }
459
+ const fileStat = await stat(fullPath);
460
+ if (fileStat.birthtime > lastScanAt) {
461
+ fileList.push(fullPath);
462
+ }
463
+ }
464
+ }
465
+ catch {
466
+ // Missing provider folders are expected in first-run or partial setups.
467
+ }
468
+ return fileList;
469
+ }
470
+ /**
471
+ * Reads file creation/update timestamps and maps them to DB-friendly ISO strings.
472
+ *
473
+ * Session indexers use this to persist `created_at` and `updated_at` metadata
474
+ * when upserting sessions. If the file cannot be read, an empty object is
475
+ * returned so indexing can continue for other files.
476
+ */
477
+ export async function readFileTimestamps(filePath) {
478
+ try {
479
+ const fileStat = await stat(filePath);
480
+ return {
481
+ createdAt: fileStat.birthtime.toISOString(),
482
+ updatedAt: fileStat.mtime.toISOString(),
483
+ };
484
+ }
485
+ catch {
486
+ return {};
487
+ }
488
+ }
489
+ // ---------------------------
490
+ //----------------- SESSION SYNCHRONIZER JSONL PARSING HELPERS ------------
491
+ /**
492
+ * Builds a first-seen key/value lookup map from a JSONL file.
493
+ *
494
+ * Use this for provider index files where session id -> display name metadata
495
+ * is stored line-by-line. The first value for each key wins, preserving the
496
+ * earliest known label while avoiding repeated map overwrites.
497
+ */
498
+ export async function buildLookupMap(filePath, keyField, valueField) {
499
+ const lookup = new Map();
500
+ try {
501
+ const fileStream = fs.createReadStream(filePath);
502
+ const lineReader = readline.createInterface({ input: fileStream, crlfDelay: Infinity });
503
+ for await (const line of lineReader) {
504
+ const trimmed = line.trim();
505
+ if (!trimmed) {
506
+ continue;
507
+ }
508
+ const parsed = JSON.parse(trimmed);
509
+ const key = parsed[keyField];
510
+ const value = parsed[valueField];
511
+ if (typeof key === 'string' && typeof value === 'string' && !lookup.has(key)) {
512
+ lookup.set(key, value);
513
+ }
514
+ }
515
+ }
516
+ catch {
517
+ // Missing or unreadable lookup files should not block session sync.
518
+ }
519
+ return lookup;
520
+ }
521
+ /**
522
+ * Reads a JSONL file and returns the first extracted payload that matches caller criteria.
523
+ *
524
+ * The caller supplies an `extractor` that validates provider-specific row
525
+ * shapes. This helper centralizes line-by-line parsing and lets indexers stop
526
+ * scanning as soon as one valid row is found.
527
+ */
528
+ export async function extractFirstValidJsonlData(filePath, extractor) {
529
+ try {
530
+ const fileStream = fs.createReadStream(filePath);
531
+ const lineReader = readline.createInterface({ input: fileStream, crlfDelay: Infinity });
532
+ for await (const line of lineReader) {
533
+ const trimmed = line.trim();
534
+ if (!trimmed) {
535
+ continue;
536
+ }
537
+ const parsed = JSON.parse(trimmed);
538
+ const extracted = extractor(parsed);
539
+ if (extracted) {
540
+ lineReader.close();
541
+ fileStream.close();
542
+ return extracted;
543
+ }
544
+ }
545
+ }
546
+ catch {
547
+ // Ignore malformed or missing artifacts so full scans keep progressing.
548
+ }
549
+ return null;
550
+ }
551
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../server/shared/utils.ts"],"names":[],"mappings":"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"}
@@ -131,53 +131,4 @@ export async function detectTaskMasterMCPServer() {
131
131
  };
132
132
  }
133
133
  }
134
- /**
135
- * Get all configured MCP servers (not just TaskMaster)
136
- * @returns {Promise<Object>} All MCP servers configuration
137
- */
138
- export async function getAllMCPServers() {
139
- try {
140
- const homeDir = os.homedir();
141
- const configPaths = [
142
- path.join(homeDir, '.claude.json'),
143
- path.join(homeDir, '.claude', 'settings.json')
144
- ];
145
- let configData = null;
146
- let configPath = null;
147
- // Try to read from either config file
148
- for (const filepath of configPaths) {
149
- try {
150
- const fileContent = await fsPromises.readFile(filepath, 'utf8');
151
- configData = JSON.parse(fileContent);
152
- configPath = filepath;
153
- break;
154
- }
155
- catch (error) {
156
- continue;
157
- }
158
- }
159
- if (!configData) {
160
- return {
161
- hasConfig: false,
162
- servers: {},
163
- projectServers: {}
164
- };
165
- }
166
- return {
167
- hasConfig: true,
168
- configPath,
169
- servers: configData.mcpServers || {},
170
- projectServers: configData.projects || {}
171
- };
172
- }
173
- catch (error) {
174
- console.error('Error getting all MCP servers:', error);
175
- return {
176
- hasConfig: false,
177
- error: error.message,
178
- servers: {},
179
- projectServers: {}
180
- };
181
- }
182
- }
183
134
  //# sourceMappingURL=mcp-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-detector.js","sourceRoot":"","sources":["../../../server/utils/mcp-detector.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-detector.js","sourceRoot":"","sources":["../../../server/utils/mcp-detector.js"],"names":[],"mappings":"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"}