@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
@@ -1,78 +0,0 @@
1
- /**
2
- * Codex Provider Status
3
- *
4
- * Checks whether the user has valid Codex authentication credentials.
5
- * Codex uses an SDK that makes direct API calls (no external binary),
6
- * so installation check always returns true if the server is running.
7
- *
8
- * @module providers/codex/status
9
- */
10
-
11
- import { promises as fs } from 'fs';
12
- import path from 'path';
13
- import os from 'os';
14
-
15
- /**
16
- * Check if Codex is installed.
17
- * Codex SDK is bundled with this application — no external binary needed.
18
- * @returns {boolean}
19
- */
20
- export function checkInstalled() {
21
- return true;
22
- }
23
-
24
- /**
25
- * Full status check: installation + authentication.
26
- * @returns {Promise<import('../types.js').ProviderStatus>}
27
- */
28
- export async function checkStatus() {
29
- const installed = checkInstalled();
30
- const result = await checkCredentials();
31
-
32
- return {
33
- installed,
34
- authenticated: result.authenticated,
35
- email: result.email || null,
36
- error: result.error || null
37
- };
38
- }
39
-
40
- // ─── Internal helpers ───────────────────────────────────────────────────────
41
-
42
- async function checkCredentials() {
43
- try {
44
- const authPath = path.join(os.homedir(), '.codex', 'auth.json');
45
- const content = await fs.readFile(authPath, 'utf8');
46
- const auth = JSON.parse(content);
47
-
48
- const tokens = auth.tokens || {};
49
-
50
- if (tokens.id_token || tokens.access_token) {
51
- let email = 'Authenticated';
52
- if (tokens.id_token) {
53
- try {
54
- const parts = tokens.id_token.split('.');
55
- if (parts.length >= 2) {
56
- const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
57
- email = payload.email || payload.user || 'Authenticated';
58
- }
59
- } catch {
60
- email = 'Authenticated';
61
- }
62
- }
63
-
64
- return { authenticated: true, email };
65
- }
66
-
67
- if (auth.OPENAI_API_KEY) {
68
- return { authenticated: true, email: 'API Key Auth' };
69
- }
70
-
71
- return { authenticated: false, email: null, error: 'No valid tokens found' };
72
- } catch (error) {
73
- if (error.code === 'ENOENT') {
74
- return { authenticated: false, email: null, error: 'Codex not configured' };
75
- }
76
- return { authenticated: false, email: null, error: error.message };
77
- }
78
- }
@@ -1,348 +0,0 @@
1
- /**
2
- * Cursor provider adapter.
3
- *
4
- * Normalizes Cursor CLI session history into NormalizedMessage format.
5
- * @module adapters/cursor
6
- */
7
-
8
- import path from 'path';
9
- import os from 'os';
10
- import crypto from 'crypto';
11
- import { createNormalizedMessage, generateMessageId } from '../types.js';
12
-
13
- const PROVIDER = 'cursor';
14
-
15
- /**
16
- * Load raw blobs from Cursor's SQLite store.db, parse the DAG structure,
17
- * and return sorted message blobs in chronological order.
18
- * @param {string} sessionId
19
- * @param {string} projectPath - Absolute project path (used to compute cwdId hash)
20
- * @returns {Promise<Array<{id: string, sequence: number, rowid: number, content: object}>>}
21
- */
22
- async function loadCursorBlobs(sessionId, projectPath) {
23
- // Lazy-import better-sqlite3 so the module doesn't fail if it's unavailable
24
- const { default: Database } = await import('better-sqlite3');
25
-
26
- const cwdId = crypto.createHash('md5').update(projectPath || process.cwd()).digest('hex');
27
- const storeDbPath = path.join(os.homedir(), '.cursor', 'chats', cwdId, sessionId, 'store.db');
28
-
29
- const db = new Database(storeDbPath, { readonly: true, fileMustExist: true });
30
-
31
- try {
32
- const allBlobs = db.prepare('SELECT rowid, id, data FROM blobs').all();
33
-
34
- const blobMap = new Map();
35
- const parentRefs = new Map();
36
- const childRefs = new Map();
37
- const jsonBlobs = [];
38
-
39
- for (const blob of allBlobs) {
40
- blobMap.set(blob.id, blob);
41
-
42
- if (blob.data && blob.data[0] === 0x7B) {
43
- try {
44
- const parsed = JSON.parse(blob.data.toString('utf8'));
45
- jsonBlobs.push({ ...blob, parsed });
46
- } catch {
47
- // skip unparseable blobs
48
- }
49
- } else if (blob.data) {
50
- const parents = [];
51
- let i = 0;
52
- while (i < blob.data.length - 33) {
53
- if (blob.data[i] === 0x0A && blob.data[i + 1] === 0x20) {
54
- const parentHash = blob.data.slice(i + 2, i + 34).toString('hex');
55
- if (blobMap.has(parentHash)) {
56
- parents.push(parentHash);
57
- }
58
- i += 34;
59
- } else {
60
- i++;
61
- }
62
- }
63
- if (parents.length > 0) {
64
- parentRefs.set(blob.id, parents);
65
- for (const parentId of parents) {
66
- if (!childRefs.has(parentId)) childRefs.set(parentId, []);
67
- childRefs.get(parentId).push(blob.id);
68
- }
69
- }
70
- }
71
- }
72
-
73
- // Topological sort (DFS)
74
- const visited = new Set();
75
- const sorted = [];
76
- function visit(nodeId) {
77
- if (visited.has(nodeId)) return;
78
- visited.add(nodeId);
79
- for (const pid of (parentRefs.get(nodeId) || [])) visit(pid);
80
- const b = blobMap.get(nodeId);
81
- if (b) sorted.push(b);
82
- }
83
- for (const blob of allBlobs) {
84
- if (!parentRefs.has(blob.id)) visit(blob.id);
85
- }
86
- for (const blob of allBlobs) visit(blob.id);
87
-
88
- // Order JSON blobs by DAG appearance
89
- const messageOrder = new Map();
90
- let orderIndex = 0;
91
- for (const blob of sorted) {
92
- if (blob.data && blob.data[0] !== 0x7B) {
93
- for (const jb of jsonBlobs) {
94
- try {
95
- const idBytes = Buffer.from(jb.id, 'hex');
96
- if (blob.data.includes(idBytes) && !messageOrder.has(jb.id)) {
97
- messageOrder.set(jb.id, orderIndex++);
98
- }
99
- } catch { /* skip */ }
100
- }
101
- }
102
- }
103
-
104
- const sortedJsonBlobs = jsonBlobs.sort((a, b) => {
105
- const oa = messageOrder.get(a.id) ?? Number.MAX_SAFE_INTEGER;
106
- const ob = messageOrder.get(b.id) ?? Number.MAX_SAFE_INTEGER;
107
- return oa !== ob ? oa - ob : a.rowid - b.rowid;
108
- });
109
-
110
- const messages = [];
111
- for (let idx = 0; idx < sortedJsonBlobs.length; idx++) {
112
- const blob = sortedJsonBlobs[idx];
113
- const parsed = blob.parsed;
114
- if (!parsed) continue;
115
- const role = parsed?.role || parsed?.message?.role;
116
- if (role === 'system') continue;
117
- messages.push({
118
- id: blob.id,
119
- sequence: idx + 1,
120
- rowid: blob.rowid,
121
- content: parsed,
122
- });
123
- }
124
-
125
- return messages;
126
- } finally {
127
- db.close();
128
- }
129
- }
130
-
131
- /**
132
- * Normalize a realtime NDJSON event from Cursor CLI into NormalizedMessage(s).
133
- * History uses normalizeCursorBlobs (SQLite DAG), this handles streaming NDJSON.
134
- * @param {object|string} raw - A parsed NDJSON event or a raw text line
135
- * @param {string} sessionId
136
- * @returns {import('../types.js').NormalizedMessage[]}
137
- */
138
- export function normalizeMessage(raw, sessionId) {
139
- // Structured assistant message with content array
140
- if (raw && typeof raw === 'object' && raw.type === 'assistant' && raw.message?.content?.[0]?.text) {
141
- return [createNormalizedMessage({ kind: 'stream_delta', content: raw.message.content[0].text, sessionId, provider: PROVIDER })];
142
- }
143
- // Plain string line (non-JSON output)
144
- if (typeof raw === 'string' && raw.trim()) {
145
- return [createNormalizedMessage({ kind: 'stream_delta', content: raw, sessionId, provider: PROVIDER })];
146
- }
147
- return [];
148
- }
149
-
150
- /**
151
- * @type {import('../types.js').ProviderAdapter}
152
- */
153
- export const cursorAdapter = {
154
- normalizeMessage,
155
- /**
156
- * Fetch session history for Cursor from SQLite store.db.
157
- */
158
- async fetchHistory(sessionId, opts = {}) {
159
- const { projectPath = '', limit = null, offset = 0 } = opts;
160
-
161
- try {
162
- const blobs = await loadCursorBlobs(sessionId, projectPath);
163
- const allNormalized = cursorAdapter.normalizeCursorBlobs(blobs, sessionId);
164
-
165
- // Apply pagination
166
- if (limit !== null && limit > 0) {
167
- const start = offset;
168
- const page = allNormalized.slice(start, start + limit);
169
- return {
170
- messages: page,
171
- total: allNormalized.length,
172
- hasMore: start + limit < allNormalized.length,
173
- offset,
174
- limit,
175
- };
176
- }
177
-
178
- return {
179
- messages: allNormalized,
180
- total: allNormalized.length,
181
- hasMore: false,
182
- offset: 0,
183
- limit: null,
184
- };
185
- } catch (error) {
186
- // DB doesn't exist or is unreadable — return empty
187
- console.warn(`[CursorAdapter] Failed to load session ${sessionId}:`, error.message);
188
- return { messages: [], total: 0, hasMore: false, offset: 0, limit: null };
189
- }
190
- },
191
-
192
- /**
193
- * Normalize raw Cursor blob messages into NormalizedMessage[].
194
- * @param {any[]} blobs - Raw cursor blobs from store.db ({id, sequence, rowid, content})
195
- * @param {string} sessionId
196
- * @returns {import('../types.js').NormalizedMessage[]}
197
- */
198
- normalizeCursorBlobs(blobs, sessionId) {
199
- const messages = [];
200
- const toolUseMap = new Map();
201
-
202
- // Use a fixed base timestamp so messages have stable, monotonically-increasing
203
- // timestamps based on their sequence number rather than wall-clock time.
204
- const baseTime = Date.now();
205
-
206
- for (let i = 0; i < blobs.length; i++) {
207
- const blob = blobs[i];
208
- const content = blob.content;
209
- const ts = new Date(baseTime + (blob.sequence ?? i) * 100).toISOString();
210
- const baseId = blob.id || generateMessageId('cursor');
211
-
212
- try {
213
- if (!content?.role || !content?.content) {
214
- // Try nested message format
215
- if (content?.message?.role && content?.message?.content) {
216
- if (content.message.role === 'system') continue;
217
- const role = content.message.role === 'user' ? 'user' : 'assistant';
218
- let text = '';
219
- if (Array.isArray(content.message.content)) {
220
- text = content.message.content
221
- .map(p => typeof p === 'string' ? p : p?.text || '')
222
- .filter(Boolean)
223
- .join('\n');
224
- } else if (typeof content.message.content === 'string') {
225
- text = content.message.content;
226
- }
227
- if (text?.trim()) {
228
- messages.push(createNormalizedMessage({
229
- id: baseId,
230
- sessionId,
231
- timestamp: ts,
232
- provider: PROVIDER,
233
- kind: 'text',
234
- role,
235
- content: text,
236
- sequence: blob.sequence,
237
- rowid: blob.rowid,
238
- }));
239
- }
240
- }
241
- continue;
242
- }
243
-
244
- if (content.role === 'system') continue;
245
-
246
- // Tool results
247
- if (content.role === 'tool') {
248
- const toolItems = Array.isArray(content.content) ? content.content : [];
249
- for (const item of toolItems) {
250
- if (item?.type !== 'tool-result') continue;
251
- const toolCallId = item.toolCallId || content.id;
252
- messages.push(createNormalizedMessage({
253
- id: `${baseId}_tr`,
254
- sessionId,
255
- timestamp: ts,
256
- provider: PROVIDER,
257
- kind: 'tool_result',
258
- toolId: toolCallId,
259
- content: item.result || '',
260
- isError: false,
261
- }));
262
- }
263
- continue;
264
- }
265
-
266
- const role = content.role === 'user' ? 'user' : 'assistant';
267
-
268
- if (Array.isArray(content.content)) {
269
- for (let partIdx = 0; partIdx < content.content.length; partIdx++) {
270
- const part = content.content[partIdx];
271
-
272
- if (part?.type === 'text' && part?.text) {
273
- messages.push(createNormalizedMessage({
274
- id: `${baseId}_${partIdx}`,
275
- sessionId,
276
- timestamp: ts,
277
- provider: PROVIDER,
278
- kind: 'text',
279
- role,
280
- content: part.text,
281
- sequence: blob.sequence,
282
- rowid: blob.rowid,
283
- }));
284
- } else if (part?.type === 'reasoning' && part?.text) {
285
- messages.push(createNormalizedMessage({
286
- id: `${baseId}_${partIdx}`,
287
- sessionId,
288
- timestamp: ts,
289
- provider: PROVIDER,
290
- kind: 'thinking',
291
- content: part.text,
292
- }));
293
- } else if (part?.type === 'tool-call' || part?.type === 'tool_use') {
294
- const toolName = (part.toolName || part.name || 'Unknown Tool') === 'ApplyPatch'
295
- ? 'Edit' : (part.toolName || part.name || 'Unknown Tool');
296
- const toolId = part.toolCallId || part.id || `tool_${i}_${partIdx}`;
297
- messages.push(createNormalizedMessage({
298
- id: `${baseId}_${partIdx}`,
299
- sessionId,
300
- timestamp: ts,
301
- provider: PROVIDER,
302
- kind: 'tool_use',
303
- toolName,
304
- toolInput: part.args || part.input,
305
- toolId,
306
- }));
307
- toolUseMap.set(toolId, messages[messages.length - 1]);
308
- }
309
- }
310
- } else if (typeof content.content === 'string' && content.content.trim()) {
311
- messages.push(createNormalizedMessage({
312
- id: baseId,
313
- sessionId,
314
- timestamp: ts,
315
- provider: PROVIDER,
316
- kind: 'text',
317
- role,
318
- content: content.content,
319
- sequence: blob.sequence,
320
- rowid: blob.rowid,
321
- }));
322
- }
323
- } catch (error) {
324
- console.warn('Error normalizing cursor blob:', error);
325
- }
326
- }
327
-
328
- // Attach tool results to tool_use messages
329
- for (const msg of messages) {
330
- if (msg.kind === 'tool_result' && msg.toolId && toolUseMap.has(msg.toolId)) {
331
- const toolUse = toolUseMap.get(msg.toolId);
332
- toolUse.toolResult = {
333
- content: msg.content,
334
- isError: msg.isError,
335
- };
336
- }
337
- }
338
-
339
- // Sort by sequence/rowid
340
- messages.sort((a, b) => {
341
- if (a.sequence !== undefined && b.sequence !== undefined) return a.sequence - b.sequence;
342
- if (a.rowid !== undefined && b.rowid !== undefined) return a.rowid - b.rowid;
343
- return new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime();
344
- });
345
-
346
- return messages;
347
- },
348
- };
@@ -1,128 +0,0 @@
1
- /**
2
- * Cursor Provider Status
3
- *
4
- * Checks whether cursor-agent CLI is installed and whether the user
5
- * is logged in.
6
- *
7
- * @module providers/cursor/status
8
- */
9
-
10
- import { execFileSync, spawn } from 'child_process';
11
-
12
- /**
13
- * Check if cursor-agent CLI is installed.
14
- * @returns {boolean}
15
- */
16
- export function checkInstalled() {
17
- try {
18
- execFileSync('cursor-agent', ['--version'], { stdio: 'ignore', timeout: 5000 });
19
- return true;
20
- } catch {
21
- return false;
22
- }
23
- }
24
-
25
- /**
26
- * Full status check: installation + authentication.
27
- * @returns {Promise<import('../types.js').ProviderStatus>}
28
- */
29
- export async function checkStatus() {
30
- const installed = checkInstalled();
31
-
32
- if (!installed) {
33
- return {
34
- installed,
35
- authenticated: false,
36
- email: null,
37
- error: 'Cursor CLI is not installed'
38
- };
39
- }
40
-
41
- const result = await checkCursorLogin();
42
-
43
- return {
44
- installed,
45
- authenticated: result.authenticated,
46
- email: result.email || null,
47
- error: result.error || null
48
- };
49
- }
50
-
51
- // ─── Internal helpers ───────────────────────────────────────────────────────
52
-
53
- function checkCursorLogin() {
54
- return new Promise((resolve) => {
55
- let processCompleted = false;
56
-
57
- const timeout = setTimeout(() => {
58
- if (!processCompleted) {
59
- processCompleted = true;
60
- if (childProcess) {
61
- childProcess.kill();
62
- }
63
- resolve({
64
- authenticated: false,
65
- email: null,
66
- error: 'Command timeout'
67
- });
68
- }
69
- }, 5000);
70
-
71
- let childProcess;
72
- try {
73
- childProcess = spawn('cursor-agent', ['status']);
74
- } catch {
75
- clearTimeout(timeout);
76
- processCompleted = true;
77
- resolve({
78
- authenticated: false,
79
- email: null,
80
- error: 'Cursor CLI not found or not installed'
81
- });
82
- return;
83
- }
84
-
85
- let stdout = '';
86
- let stderr = '';
87
-
88
- childProcess.stdout.on('data', (data) => {
89
- stdout += data.toString();
90
- });
91
-
92
- childProcess.stderr.on('data', (data) => {
93
- stderr += data.toString();
94
- });
95
-
96
- childProcess.on('close', (code) => {
97
- if (processCompleted) return;
98
- processCompleted = true;
99
- clearTimeout(timeout);
100
-
101
- if (code === 0) {
102
- const emailMatch = stdout.match(/Logged in as ([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i);
103
-
104
- if (emailMatch) {
105
- resolve({ authenticated: true, email: emailMatch[1] });
106
- } else if (stdout.includes('Logged in')) {
107
- resolve({ authenticated: true, email: 'Logged in' });
108
- } else {
109
- resolve({ authenticated: false, email: null, error: 'Not logged in' });
110
- }
111
- } else {
112
- resolve({ authenticated: false, email: null, error: stderr || 'Not logged in' });
113
- }
114
- });
115
-
116
- childProcess.on('error', () => {
117
- if (processCompleted) return;
118
- processCompleted = true;
119
- clearTimeout(timeout);
120
-
121
- resolve({
122
- authenticated: false,
123
- email: null,
124
- error: 'Cursor CLI not found or not installed'
125
- });
126
- });
127
- });
128
- }