@cloudcli-ai/cloudcli 1.30.0 → 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 (237) hide show
  1. package/dist/assets/{index-DI22MZMb.css → index-DF8TTVHl.css} +1 -1
  2. package/dist/assets/index-DbZAcc9z.js +1262 -0
  3. package/dist/index.html +2 -2
  4. package/dist-server/server/index.js +115 -955
  5. package/dist-server/server/index.js.map +1 -1
  6. package/dist-server/server/middleware/auth.js +1 -1
  7. package/dist-server/server/middleware/auth.js.map +1 -1
  8. package/dist-server/server/modules/database/connection.js +125 -0
  9. package/dist-server/server/modules/database/connection.js.map +1 -0
  10. package/dist-server/server/modules/database/index.js +13 -0
  11. package/dist-server/server/modules/database/index.js.map +1 -0
  12. package/dist-server/server/modules/database/init-db.js +18 -0
  13. package/dist-server/server/modules/database/init-db.js.map +1 -0
  14. package/dist-server/server/modules/database/migrations.js +370 -0
  15. package/dist-server/server/modules/database/migrations.js.map +1 -0
  16. package/dist-server/server/modules/database/repositories/api-keys.js +72 -0
  17. package/dist-server/server/modules/database/repositories/api-keys.js.map +1 -0
  18. package/dist-server/server/modules/database/repositories/app-config.js +47 -0
  19. package/dist-server/server/modules/database/repositories/app-config.js.map +1 -0
  20. package/dist-server/server/modules/database/repositories/credentials.js +68 -0
  21. package/dist-server/server/modules/database/repositories/credentials.js.map +1 -0
  22. package/dist-server/server/modules/database/repositories/github-tokens.js +54 -0
  23. package/dist-server/server/modules/database/repositories/github-tokens.js.map +1 -0
  24. package/dist-server/server/modules/database/repositories/notification-preferences.js +72 -0
  25. package/dist-server/server/modules/database/repositories/notification-preferences.js.map +1 -0
  26. package/dist-server/server/modules/database/repositories/projects.db.integration.test.js +64 -0
  27. package/dist-server/server/modules/database/repositories/projects.db.integration.test.js.map +1 -0
  28. package/dist-server/server/modules/database/repositories/projects.db.js +160 -0
  29. package/dist-server/server/modules/database/repositories/projects.db.js.map +1 -0
  30. package/dist-server/server/modules/database/repositories/push-subscriptions.js +49 -0
  31. package/dist-server/server/modules/database/repositories/push-subscriptions.js.map +1 -0
  32. package/dist-server/server/modules/database/repositories/scan-state.db.js +31 -0
  33. package/dist-server/server/modules/database/repositories/scan-state.db.js.map +1 -0
  34. package/dist-server/server/modules/database/repositories/sessions.db.js +109 -0
  35. package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -0
  36. package/dist-server/server/modules/database/repositories/users.js +88 -0
  37. package/dist-server/server/modules/database/repositories/users.js.map +1 -0
  38. package/dist-server/server/modules/database/repositories/vapid-keys.js +38 -0
  39. package/dist-server/server/modules/database/repositories/vapid-keys.js.map +1 -0
  40. package/dist-server/server/modules/database/schema.js +143 -0
  41. package/dist-server/server/modules/database/schema.js.map +1 -0
  42. package/dist-server/server/modules/projects/index.js +4 -0
  43. package/dist-server/server/modules/projects/index.js.map +1 -0
  44. package/dist-server/server/modules/projects/projects.routes.js +188 -0
  45. package/dist-server/server/modules/projects/projects.routes.js.map +1 -0
  46. package/dist-server/server/modules/projects/services/project-clone.service.js +219 -0
  47. package/dist-server/server/modules/projects/services/project-clone.service.js.map +1 -0
  48. package/dist-server/server/modules/projects/services/project-delete.service.js +65 -0
  49. package/dist-server/server/modules/projects/services/project-delete.service.js.map +1 -0
  50. package/dist-server/server/modules/projects/services/project-management.service.js +93 -0
  51. package/dist-server/server/modules/projects/services/project-management.service.js.map +1 -0
  52. package/dist-server/server/modules/projects/services/project-star.service.js +60 -0
  53. package/dist-server/server/modules/projects/services/project-star.service.js.map +1 -0
  54. package/dist-server/server/modules/projects/services/projects-has-taskmaster.service.js +167 -0
  55. package/dist-server/server/modules/projects/services/projects-has-taskmaster.service.js.map +1 -0
  56. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js +169 -0
  57. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js.map +1 -0
  58. package/dist-server/server/modules/projects/tests/project-clone.service.test.js +126 -0
  59. package/dist-server/server/modules/projects/tests/project-clone.service.test.js.map +1 -0
  60. package/dist-server/server/modules/projects/tests/project-management.service.test.js +85 -0
  61. package/dist-server/server/modules/projects/tests/project-management.service.test.js.map +1 -0
  62. package/dist-server/server/modules/projects/tests/project-star.service.test.js +95 -0
  63. package/dist-server/server/modules/projects/tests/project-star.service.test.js.map +1 -0
  64. package/dist-server/server/modules/projects/tests/projects-has-taskmaster.service.test.js +87 -0
  65. package/dist-server/server/modules/projects/tests/projects-has-taskmaster.service.test.js.map +1 -0
  66. package/dist-server/server/modules/providers/index.js +4 -0
  67. package/dist-server/server/modules/providers/index.js.map +1 -0
  68. package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js +63 -0
  69. package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js.map +1 -0
  70. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +144 -7
  71. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -1
  72. package/dist-server/server/modules/providers/list/claude/claude.provider.js +2 -0
  73. package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -1
  74. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +71 -0
  75. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -0
  76. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +225 -13
  77. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -1
  78. package/dist-server/server/modules/providers/list/codex/codex.provider.js +2 -0
  79. package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -1
  80. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js +127 -0
  81. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -0
  82. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js +2 -0
  83. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js.map +1 -1
  84. package/dist-server/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.js +296 -0
  85. package/dist-server/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.js.map +1 -0
  86. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js +277 -10
  87. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js.map +1 -1
  88. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js +2 -0
  89. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js.map +1 -1
  90. package/dist-server/server/modules/providers/provider.routes.js +172 -0
  91. package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
  92. package/dist-server/server/modules/providers/services/session-conversations-search.service.js +868 -0
  93. package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -0
  94. package/dist-server/server/modules/providers/services/session-synchronizer.service.js +56 -0
  95. package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -0
  96. package/dist-server/server/modules/providers/services/sessions-watcher.service.js +234 -0
  97. package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -0
  98. package/dist-server/server/modules/providers/services/sessions.service.js +78 -3
  99. package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
  100. package/dist-server/server/modules/providers/shared/base/abstract.provider.js.map +1 -1
  101. package/dist-server/server/modules/websocket/index.js +3 -0
  102. package/dist-server/server/modules/websocket/index.js.map +1 -0
  103. package/dist-server/server/modules/websocket/services/chat-websocket.service.js +188 -0
  104. package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -0
  105. package/dist-server/server/modules/websocket/services/plugin-websocket-proxy.service.js +52 -0
  106. package/dist-server/server/modules/websocket/services/plugin-websocket-proxy.service.js.map +1 -0
  107. package/dist-server/server/modules/websocket/services/shell-websocket.service.js +334 -0
  108. package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -0
  109. package/dist-server/server/modules/websocket/services/websocket-auth.service.js +32 -0
  110. package/dist-server/server/modules/websocket/services/websocket-auth.service.js.map +1 -0
  111. package/dist-server/server/modules/websocket/services/websocket-server.service.js +36 -0
  112. package/dist-server/server/modules/websocket/services/websocket-server.service.js.map +1 -0
  113. package/dist-server/server/modules/websocket/services/websocket-state.service.js +14 -0
  114. package/dist-server/server/modules/websocket/services/websocket-state.service.js.map +1 -0
  115. package/dist-server/server/modules/websocket/services/websocket-writer.service.js +32 -0
  116. package/dist-server/server/modules/websocket/services/websocket-writer.service.js.map +1 -0
  117. package/dist-server/server/routes/agent.js +10 -17
  118. package/dist-server/server/routes/agent.js.map +1 -1
  119. package/dist-server/server/routes/auth.js +3 -1
  120. package/dist-server/server/routes/auth.js.map +1 -1
  121. package/dist-server/server/routes/commands.js +1 -1
  122. package/dist-server/server/routes/commands.js.map +1 -1
  123. package/dist-server/server/routes/gemini.js +2 -2
  124. package/dist-server/server/routes/gemini.js.map +1 -1
  125. package/dist-server/server/routes/git.js +33 -29
  126. package/dist-server/server/routes/git.js.map +1 -1
  127. package/dist-server/server/routes/settings.js +1 -1
  128. package/dist-server/server/routes/settings.js.map +1 -1
  129. package/dist-server/server/routes/taskmaster.js +97 -110
  130. package/dist-server/server/routes/taskmaster.js.map +1 -1
  131. package/dist-server/server/routes/user.js +1 -1
  132. package/dist-server/server/routes/user.js.map +1 -1
  133. package/dist-server/server/services/notification-orchestrator.js +2 -2
  134. package/dist-server/server/services/notification-orchestrator.js.map +1 -1
  135. package/dist-server/server/services/vapid-keys.js +2 -1
  136. package/dist-server/server/services/vapid-keys.js.map +1 -1
  137. package/dist-server/server/shared/types.js +0 -1
  138. package/dist-server/server/shared/types.js.map +1 -1
  139. package/dist-server/server/shared/utils.js +408 -7
  140. package/dist-server/server/shared/utils.js.map +1 -1
  141. package/dist-server/server/utils/taskmaster-websocket.js +18 -12
  142. package/dist-server/server/utils/taskmaster-websocket.js.map +1 -1
  143. package/dist-server/shared/modelConstants.js +2 -1
  144. package/dist-server/shared/modelConstants.js.map +1 -1
  145. package/package.json +3 -1
  146. package/server/index.js +146 -1012
  147. package/server/middleware/auth.js +1 -1
  148. package/server/modules/database/connection.ts +143 -0
  149. package/server/modules/database/index.ts +12 -0
  150. package/server/modules/database/init-db.ts +17 -0
  151. package/server/modules/database/migrations.ts +442 -0
  152. package/server/modules/database/repositories/api-keys.ts +119 -0
  153. package/server/modules/database/repositories/app-config.ts +53 -0
  154. package/server/modules/database/repositories/credentials.ts +106 -0
  155. package/server/modules/database/repositories/github-tokens.ts +100 -0
  156. package/server/modules/database/repositories/notification-preferences.ts +103 -0
  157. package/server/modules/database/repositories/projects.db.integration.test.ts +72 -0
  158. package/server/modules/database/repositories/projects.db.ts +183 -0
  159. package/server/modules/database/repositories/push-subscriptions.ts +80 -0
  160. package/server/modules/database/repositories/scan-state.db.ts +42 -0
  161. package/server/modules/database/repositories/sessions.db.ts +174 -0
  162. package/server/modules/database/repositories/users.ts +140 -0
  163. package/server/modules/database/repositories/vapid-keys.ts +57 -0
  164. package/server/modules/database/schema.ts +152 -0
  165. package/server/modules/projects/index.ts +6 -0
  166. package/server/modules/projects/projects.routes.ts +247 -0
  167. package/server/modules/projects/services/project-clone.service.ts +321 -0
  168. package/server/modules/projects/services/project-delete.service.ts +75 -0
  169. package/server/modules/projects/services/project-management.service.ts +150 -0
  170. package/server/modules/projects/services/project-star.service.ts +78 -0
  171. package/server/modules/projects/services/projects-has-taskmaster.service.ts +248 -0
  172. package/server/modules/projects/services/projects-with-sessions-fetch.service.ts +285 -0
  173. package/server/modules/projects/tests/project-clone.service.test.ts +183 -0
  174. package/server/modules/projects/tests/project-management.service.test.ts +117 -0
  175. package/server/modules/projects/tests/project-star.service.test.ts +123 -0
  176. package/server/modules/projects/tests/projects-has-taskmaster.service.test.ts +105 -0
  177. package/server/modules/providers/index.ts +4 -0
  178. package/server/modules/providers/list/claude/claude-session-synchronizer.provider.ts +110 -0
  179. package/server/modules/providers/list/claude/claude-sessions.provider.ts +182 -13
  180. package/server/modules/providers/list/claude/claude.provider.ts +3 -1
  181. package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +119 -0
  182. package/server/modules/providers/list/codex/codex-sessions.provider.ts +262 -17
  183. package/server/modules/providers/list/codex/codex.provider.ts +3 -1
  184. package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +176 -0
  185. package/server/modules/providers/list/cursor/cursor.provider.ts +3 -1
  186. package/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.ts +401 -0
  187. package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +327 -13
  188. package/server/modules/providers/list/gemini/gemini.provider.ts +3 -1
  189. package/server/modules/providers/provider.routes.ts +220 -12
  190. package/server/modules/providers/services/session-conversations-search.service.ts +1167 -0
  191. package/server/modules/providers/services/session-synchronizer.service.ts +74 -0
  192. package/server/modules/providers/services/sessions-watcher.service.ts +283 -0
  193. package/server/modules/providers/services/sessions.service.ts +89 -4
  194. package/server/modules/providers/shared/base/abstract.provider.ts +8 -1
  195. package/server/modules/websocket/README.md +267 -0
  196. package/server/modules/websocket/index.ts +2 -0
  197. package/server/modules/websocket/services/chat-websocket.service.ts +271 -0
  198. package/server/modules/websocket/services/plugin-websocket-proxy.service.ts +65 -0
  199. package/server/modules/websocket/services/shell-websocket.service.ts +453 -0
  200. package/server/modules/websocket/services/websocket-auth.service.ts +54 -0
  201. package/server/modules/websocket/services/websocket-server.service.ts +58 -0
  202. package/server/modules/websocket/services/websocket-state.service.ts +16 -0
  203. package/server/modules/websocket/services/websocket-writer.service.ts +38 -0
  204. package/server/routes/agent.js +11 -16
  205. package/server/routes/auth.js +4 -2
  206. package/server/routes/commands.js +1 -1
  207. package/server/routes/gemini.js +3 -2
  208. package/server/routes/git.js +33 -28
  209. package/server/routes/settings.js +1 -1
  210. package/server/routes/taskmaster.js +108 -111
  211. package/server/routes/user.js +1 -1
  212. package/server/services/notification-orchestrator.js +3 -2
  213. package/server/services/vapid-keys.js +2 -1
  214. package/server/shared/interfaces.ts +39 -1
  215. package/server/shared/types.ts +185 -30
  216. package/server/shared/utils.ts +485 -9
  217. package/server/utils/taskmaster-websocket.js +19 -13
  218. package/shared/modelConstants.js +2 -1
  219. package/dist/assets/index-RX-W_g_Q.js +0 -1262
  220. package/dist-server/server/database/db.js +0 -535
  221. package/dist-server/server/database/db.js.map +0 -1
  222. package/dist-server/server/database/schema.js +0 -97
  223. package/dist-server/server/database/schema.js.map +0 -1
  224. package/dist-server/server/projects.js +0 -2325
  225. package/dist-server/server/projects.js.map +0 -1
  226. package/dist-server/server/routes/codex.js +0 -18
  227. package/dist-server/server/routes/codex.js.map +0 -1
  228. package/dist-server/server/routes/messages.js +0 -56
  229. package/dist-server/server/routes/messages.js.map +0 -1
  230. package/dist-server/server/routes/projects.js +0 -505
  231. package/dist-server/server/routes/projects.js.map +0 -1
  232. package/server/database/db.js +0 -593
  233. package/server/database/schema.js +0 -102
  234. package/server/projects.js +0 -2555
  235. package/server/routes/codex.js +0 -19
  236. package/server/routes/messages.js +0 -61
  237. package/server/routes/projects.js +0 -548
@@ -320,7 +320,7 @@ Custom commands can be created in:
320
320
  packageName,
321
321
  uptime: uptimeFormatted,
322
322
  uptimeSeconds: Math.floor(uptime),
323
- model: context?.model || 'claude-sonnet-4.5',
323
+ model: context?.model || CLAUDE_MODELS.DEFAULT,
324
324
  provider: context?.provider || 'claude',
325
325
  nodeVersion: process.version,
326
326
  platform: process.platform
@@ -1,6 +1,7 @@
1
1
  import express from 'express';
2
+
2
3
  import sessionManager from '../sessionManager.js';
3
- import { sessionNamesDb } from '../database/db.js';
4
+ import { sessionsDb } from '../modules/database/index.js';
4
5
 
5
6
  const router = express.Router();
6
7
 
@@ -13,7 +14,7 @@ router.delete('/sessions/:sessionId', async (req, res) => {
13
14
  }
14
15
 
15
16
  await sessionManager.deleteSession(sessionId);
16
- sessionNamesDb.deleteName(sessionId, 'gemini');
17
+ sessionsDb.deleteSessionById(sessionId);
17
18
  res.json({ success: true });
18
19
  } catch (error) {
19
20
  console.error(`Error deleting Gemini session ${req.params.sessionId}:`, error);
@@ -2,7 +2,7 @@ import express from 'express';
2
2
  import { spawn } from 'child_process';
3
3
  import path from 'path';
4
4
  import { promises as fs } from 'fs';
5
- import { extractProjectDirectory } from '../projects.js';
5
+ import { projectsDb } from '../modules/database/index.js';
6
6
  import { queryClaudeSDK } from '../claude-sdk.js';
7
7
  import { spawnCursor } from '../cursor-cli.js';
8
8
 
@@ -101,14 +101,19 @@ function validateProjectPath(projectPath) {
101
101
  return resolved;
102
102
  }
103
103
 
104
- // Helper function to get the actual project path from the encoded project name
105
- async function getActualProjectPath(projectName) {
106
- let projectPath;
107
- try {
108
- projectPath = await extractProjectDirectory(projectName);
109
- } catch (error) {
110
- console.error(`Error extracting project directory for ${projectName}:`, error);
111
- throw new Error(`Unable to resolve project path for "${projectName}"`);
104
+ /**
105
+ * Resolve the absolute project directory for a given DB `projectId`.
106
+ *
107
+ * After the projectName → projectId migration, every git endpoint receives
108
+ * the DB primary key (`project` query/body param). The legacy filesystem
109
+ * resolver that walked Claude's JSONL history is no longer used here; the
110
+ * path comes straight from the `projects` table and is then sanity-checked
111
+ * by `validateProjectPath` before any `git` command runs against it.
112
+ */
113
+ async function getActualProjectPath(projectId) {
114
+ const projectPath = await projectsDb.getProjectPathById(projectId);
115
+ if (!projectPath) {
116
+ throw new Error(`Unable to resolve project path for "${projectId}"`);
112
117
  }
113
118
  return validateProjectPath(projectPath);
114
119
  }
@@ -292,7 +297,7 @@ router.get('/status', async (req, res) => {
292
297
  const { project } = req.query;
293
298
 
294
299
  if (!project) {
295
- return res.status(400).json({ error: 'Project name is required' });
300
+ return res.status(400).json({ error: 'Project id is required' });
296
301
  }
297
302
 
298
303
  try {
@@ -355,7 +360,7 @@ router.get('/diff', async (req, res) => {
355
360
  const { project, file } = req.query;
356
361
 
357
362
  if (!project || !file) {
358
- return res.status(400).json({ error: 'Project name and file path are required' });
363
+ return res.status(400).json({ error: 'Project id and file path are required' });
359
364
  }
360
365
 
361
366
  try {
@@ -438,7 +443,7 @@ router.get('/file-with-diff', async (req, res) => {
438
443
  const { project, file } = req.query;
439
444
 
440
445
  if (!project || !file) {
441
- return res.status(400).json({ error: 'Project name and file path are required' });
446
+ return res.status(400).json({ error: 'Project id and file path are required' });
442
447
  }
443
448
 
444
449
  try {
@@ -518,7 +523,7 @@ router.post('/initial-commit', async (req, res) => {
518
523
  const { project } = req.body;
519
524
 
520
525
  if (!project) {
521
- return res.status(400).json({ error: 'Project name is required' });
526
+ return res.status(400).json({ error: 'Project id is required' });
522
527
  }
523
528
 
524
529
  try {
@@ -593,7 +598,7 @@ router.post('/revert-local-commit', async (req, res) => {
593
598
  const { project } = req.body;
594
599
 
595
600
  if (!project) {
596
- return res.status(400).json({ error: 'Project name is required' });
601
+ return res.status(400).json({ error: 'Project id is required' });
597
602
  }
598
603
 
599
604
  try {
@@ -640,7 +645,7 @@ router.get('/branches', async (req, res) => {
640
645
  const { project } = req.query;
641
646
 
642
647
  if (!project) {
643
- return res.status(400).json({ error: 'Project name is required' });
648
+ return res.status(400).json({ error: 'Project id is required' });
644
649
  }
645
650
 
646
651
  try {
@@ -684,7 +689,7 @@ router.post('/checkout', async (req, res) => {
684
689
  const { project, branch } = req.body;
685
690
 
686
691
  if (!project || !branch) {
687
- return res.status(400).json({ error: 'Project name and branch are required' });
692
+ return res.status(400).json({ error: 'Project id and branch are required' });
688
693
  }
689
694
 
690
695
  try {
@@ -706,7 +711,7 @@ router.post('/create-branch', async (req, res) => {
706
711
  const { project, branch } = req.body;
707
712
 
708
713
  if (!project || !branch) {
709
- return res.status(400).json({ error: 'Project name and branch name are required' });
714
+ return res.status(400).json({ error: 'Project id and branch name are required' });
710
715
  }
711
716
 
712
717
  try {
@@ -728,7 +733,7 @@ router.post('/delete-branch', async (req, res) => {
728
733
  const { project, branch } = req.body;
729
734
 
730
735
  if (!project || !branch) {
731
- return res.status(400).json({ error: 'Project name and branch name are required' });
736
+ return res.status(400).json({ error: 'Project id and branch name are required' });
732
737
  }
733
738
 
734
739
  try {
@@ -754,7 +759,7 @@ router.get('/commits', async (req, res) => {
754
759
  const { project, limit = 10 } = req.query;
755
760
 
756
761
  if (!project) {
757
- return res.status(400).json({ error: 'Project name is required' });
762
+ return res.status(400).json({ error: 'Project id is required' });
758
763
  }
759
764
 
760
765
  try {
@@ -811,7 +816,7 @@ router.get('/commit-diff', async (req, res) => {
811
816
  const { project, commit } = req.query;
812
817
 
813
818
  if (!project || !commit) {
814
- return res.status(400).json({ error: 'Project name and commit hash are required' });
819
+ return res.status(400).json({ error: 'Project id and commit hash are required' });
815
820
  }
816
821
 
817
822
  try {
@@ -843,7 +848,7 @@ router.post('/generate-commit-message', async (req, res) => {
843
848
  const { project, files, provider = 'claude' } = req.body;
844
849
 
845
850
  if (!project || !files || files.length === 0) {
846
- return res.status(400).json({ error: 'Project name and files are required' });
851
+ return res.status(400).json({ error: 'Project id and files are required' });
847
852
  }
848
853
 
849
854
  // Validate provider
@@ -1048,7 +1053,7 @@ router.get('/remote-status', async (req, res) => {
1048
1053
  const { project } = req.query;
1049
1054
 
1050
1055
  if (!project) {
1051
- return res.status(400).json({ error: 'Project name is required' });
1056
+ return res.status(400).json({ error: 'Project id is required' });
1052
1057
  }
1053
1058
 
1054
1059
  try {
@@ -1126,7 +1131,7 @@ router.post('/fetch', async (req, res) => {
1126
1131
  const { project } = req.body;
1127
1132
 
1128
1133
  if (!project) {
1129
- return res.status(400).json({ error: 'Project name is required' });
1134
+ return res.status(400).json({ error: 'Project id is required' });
1130
1135
  }
1131
1136
 
1132
1137
  try {
@@ -1167,7 +1172,7 @@ router.post('/pull', async (req, res) => {
1167
1172
  const { project } = req.body;
1168
1173
 
1169
1174
  if (!project) {
1170
- return res.status(400).json({ error: 'Project name is required' });
1175
+ return res.status(400).json({ error: 'Project id is required' });
1171
1176
  }
1172
1177
 
1173
1178
  try {
@@ -1235,7 +1240,7 @@ router.post('/push', async (req, res) => {
1235
1240
  const { project } = req.body;
1236
1241
 
1237
1242
  if (!project) {
1238
- return res.status(400).json({ error: 'Project name is required' });
1243
+ return res.status(400).json({ error: 'Project id is required' });
1239
1244
  }
1240
1245
 
1241
1246
  try {
@@ -1306,7 +1311,7 @@ router.post('/publish', async (req, res) => {
1306
1311
  const { project, branch } = req.body;
1307
1312
 
1308
1313
  if (!project || !branch) {
1309
- return res.status(400).json({ error: 'Project name and branch are required' });
1314
+ return res.status(400).json({ error: 'Project id and branch are required' });
1310
1315
  }
1311
1316
 
1312
1317
  try {
@@ -1385,7 +1390,7 @@ router.post('/discard', async (req, res) => {
1385
1390
  const { project, file } = req.body;
1386
1391
 
1387
1392
  if (!project || !file) {
1388
- return res.status(400).json({ error: 'Project name and file path are required' });
1393
+ return res.status(400).json({ error: 'Project id and file path are required' });
1389
1394
  }
1390
1395
 
1391
1396
  try {
@@ -1439,7 +1444,7 @@ router.post('/delete-untracked', async (req, res) => {
1439
1444
  const { project, file } = req.body;
1440
1445
 
1441
1446
  if (!project || !file) {
1442
- return res.status(400).json({ error: 'Project name and file path are required' });
1447
+ return res.status(400).json({ error: 'Project id and file path are required' });
1443
1448
  }
1444
1449
 
1445
1450
  try {
@@ -1,5 +1,5 @@
1
1
  import express from 'express';
2
- import { apiKeysDb, credentialsDb, notificationPreferencesDb, pushSubscriptionsDb } from '../database/db.js';
2
+ import { apiKeysDb, credentialsDb, notificationPreferencesDb, pushSubscriptionsDb } from '../modules/database/index.js';
3
3
  import { getPublicKey } from '../services/vapid-keys.js';
4
4
  import { createNotificationEvent, notifyUserIfEnabled } from '../services/notification-orchestrator.js';
5
5