@cloudcli-ai/cloudcli 1.29.2 → 1.29.4

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 (140) hide show
  1. package/dist/assets/{index-ByHZ8-LL.css → index-BBAE1OJ_.css} +1 -1
  2. package/dist/assets/{index-Ile1bTCU.js → index-Cyya3LhN.js} +229 -229
  3. package/dist/index.html +2 -2
  4. package/dist-server/server/claude-sdk.js +702 -0
  5. package/dist-server/server/claude-sdk.js.map +1 -0
  6. package/dist-server/server/cli.js +642 -0
  7. package/dist-server/server/cli.js.map +1 -0
  8. package/dist-server/server/constants/config.js +6 -0
  9. package/dist-server/server/constants/config.js.map +1 -0
  10. package/dist-server/server/cursor-cli.js +277 -0
  11. package/dist-server/server/cursor-cli.js.map +1 -0
  12. package/dist-server/server/database/db.js +535 -0
  13. package/dist-server/server/database/db.js.map +1 -0
  14. package/dist-server/server/database/schema.js +97 -0
  15. package/dist-server/server/database/schema.js.map +1 -0
  16. package/dist-server/server/gemini-cli.js +408 -0
  17. package/dist-server/server/gemini-cli.js.map +1 -0
  18. package/dist-server/server/gemini-response-handler.js +72 -0
  19. package/dist-server/server/gemini-response-handler.js.map +1 -0
  20. package/dist-server/server/index.js +2175 -0
  21. package/dist-server/server/index.js.map +1 -0
  22. package/dist-server/server/load-env.js +32 -0
  23. package/dist-server/server/load-env.js.map +1 -0
  24. package/dist-server/server/middleware/auth.js +111 -0
  25. package/dist-server/server/middleware/auth.js.map +1 -0
  26. package/dist-server/server/openai-codex.js +373 -0
  27. package/dist-server/server/openai-codex.js.map +1 -0
  28. package/dist-server/server/projects.js +2325 -0
  29. package/dist-server/server/projects.js.map +1 -0
  30. package/dist-server/server/providers/claude/adapter.js +266 -0
  31. package/dist-server/server/providers/claude/adapter.js.map +1 -0
  32. package/dist-server/server/providers/claude/status.js +121 -0
  33. package/dist-server/server/providers/claude/status.js.map +1 -0
  34. package/dist-server/server/providers/codex/adapter.js +232 -0
  35. package/dist-server/server/providers/codex/adapter.js.map +1 -0
  36. package/dist-server/server/providers/codex/status.js +70 -0
  37. package/dist-server/server/providers/codex/status.js.map +1 -0
  38. package/dist-server/server/providers/cursor/adapter.js +342 -0
  39. package/dist-server/server/providers/cursor/adapter.js.map +1 -0
  40. package/dist-server/server/providers/cursor/status.js +118 -0
  41. package/dist-server/server/providers/cursor/status.js.map +1 -0
  42. package/dist-server/server/providers/gemini/adapter.js +174 -0
  43. package/dist-server/server/providers/gemini/adapter.js.map +1 -0
  44. package/dist-server/server/providers/gemini/status.js +104 -0
  45. package/dist-server/server/providers/gemini/status.js.map +1 -0
  46. package/dist-server/server/providers/registry.js +58 -0
  47. package/dist-server/server/providers/registry.js.map +1 -0
  48. package/dist-server/server/providers/types.js +117 -0
  49. package/dist-server/server/providers/types.js.map +1 -0
  50. package/dist-server/server/providers/utils.js +28 -0
  51. package/dist-server/server/providers/utils.js.map +1 -0
  52. package/dist-server/server/routes/agent.js +1147 -0
  53. package/dist-server/server/routes/agent.js.map +1 -0
  54. package/dist-server/server/routes/auth.js +117 -0
  55. package/dist-server/server/routes/auth.js.map +1 -0
  56. package/dist-server/server/routes/cli-auth.js +25 -0
  57. package/dist-server/server/routes/cli-auth.js.map +1 -0
  58. package/dist-server/server/routes/codex.js +294 -0
  59. package/dist-server/server/routes/codex.js.map +1 -0
  60. package/dist-server/server/routes/commands.js +531 -0
  61. package/dist-server/server/routes/commands.js.map +1 -0
  62. package/dist-server/server/routes/cursor.js +529 -0
  63. package/dist-server/server/routes/cursor.js.map +1 -0
  64. package/dist-server/server/routes/gemini.js +21 -0
  65. package/dist-server/server/routes/gemini.js.map +1 -0
  66. package/dist-server/server/routes/git.js +1259 -0
  67. package/dist-server/server/routes/git.js.map +1 -0
  68. package/dist-server/server/routes/mcp-utils.js +46 -0
  69. package/dist-server/server/routes/mcp-utils.js.map +1 -0
  70. package/dist-server/server/routes/mcp.js +480 -0
  71. package/dist-server/server/routes/mcp.js.map +1 -0
  72. package/dist-server/server/routes/messages.js +56 -0
  73. package/dist-server/server/routes/messages.js.map +1 -0
  74. package/dist-server/server/routes/plugins.js +266 -0
  75. package/dist-server/server/routes/plugins.js.map +1 -0
  76. package/dist-server/server/routes/projects.js +505 -0
  77. package/dist-server/server/routes/projects.js.map +1 -0
  78. package/dist-server/server/routes/settings.js +249 -0
  79. package/dist-server/server/routes/settings.js.map +1 -0
  80. package/dist-server/server/routes/taskmaster.js +1832 -0
  81. package/dist-server/server/routes/taskmaster.js.map +1 -0
  82. package/dist-server/server/routes/user.js +115 -0
  83. package/dist-server/server/routes/user.js.map +1 -0
  84. package/dist-server/server/services/notification-orchestrator.js +177 -0
  85. package/dist-server/server/services/notification-orchestrator.js.map +1 -0
  86. package/dist-server/server/services/vapid-keys.js +26 -0
  87. package/dist-server/server/services/vapid-keys.js.map +1 -0
  88. package/dist-server/server/sessionManager.js +194 -0
  89. package/dist-server/server/sessionManager.js.map +1 -0
  90. package/dist-server/server/utils/colors.js +20 -0
  91. package/dist-server/server/utils/colors.js.map +1 -0
  92. package/dist-server/server/utils/commandParser.js +255 -0
  93. package/dist-server/server/utils/commandParser.js.map +1 -0
  94. package/dist-server/server/utils/frontmatter.js +16 -0
  95. package/dist-server/server/utils/frontmatter.js.map +1 -0
  96. package/dist-server/server/utils/gitConfig.js +36 -0
  97. package/dist-server/server/utils/gitConfig.js.map +1 -0
  98. package/dist-server/server/utils/mcp-detector.js +183 -0
  99. package/dist-server/server/utils/mcp-detector.js.map +1 -0
  100. package/dist-server/server/utils/plugin-loader.js +413 -0
  101. package/dist-server/server/utils/plugin-loader.js.map +1 -0
  102. package/dist-server/server/utils/plugin-process-manager.js +163 -0
  103. package/dist-server/server/utils/plugin-process-manager.js.map +1 -0
  104. package/dist-server/server/utils/runtime-paths.js +30 -0
  105. package/dist-server/server/utils/runtime-paths.js.map +1 -0
  106. package/dist-server/server/utils/taskmaster-websocket.js +118 -0
  107. package/dist-server/server/utils/taskmaster-websocket.js.map +1 -0
  108. package/dist-server/server/utils/url-detection.js +58 -0
  109. package/dist-server/server/utils/url-detection.js.map +1 -0
  110. package/dist-server/shared/modelConstants.js +87 -0
  111. package/dist-server/shared/modelConstants.js.map +1 -0
  112. package/dist-server/shared/networkHosts.js +20 -0
  113. package/dist-server/shared/networkHosts.js.map +1 -0
  114. package/package.json +23 -14
  115. package/server/claude-sdk.js +13 -4
  116. package/server/cli.js +13 -9
  117. package/server/cursor-cli.js +8 -1
  118. package/server/database/db.js +24 -61
  119. package/server/database/schema.js +102 -0
  120. package/server/gemini-cli.js +17 -1
  121. package/server/index.js +20 -96
  122. package/server/load-env.js +11 -6
  123. package/server/openai-codex.js +9 -1
  124. package/server/projects.js +38 -44
  125. package/server/providers/claude/status.js +136 -0
  126. package/server/providers/codex/status.js +78 -0
  127. package/server/providers/cursor/adapter.js +5 -10
  128. package/server/providers/cursor/status.js +128 -0
  129. package/server/providers/gemini/status.js +111 -0
  130. package/server/providers/registry.js +25 -2
  131. package/server/providers/types.js +13 -0
  132. package/server/routes/cli-auth.js +14 -421
  133. package/server/routes/commands.js +6 -4
  134. package/server/routes/cursor.js +6 -240
  135. package/server/tsconfig.json +33 -0
  136. package/server/utils/colors.js +21 -0
  137. package/server/utils/runtime-paths.js +37 -0
  138. package/server/utils/url-detection.js +71 -0
  139. package/shared/modelConstants.js +4 -2
  140. package/server/database/init.sql +0 -99
@@ -0,0 +1,373 @@
1
+ /**
2
+ * OpenAI Codex SDK Integration
3
+ * =============================
4
+ *
5
+ * This module provides integration with the OpenAI Codex SDK for non-interactive
6
+ * chat sessions. It mirrors the pattern used in claude-sdk.js for consistency.
7
+ *
8
+ * ## Usage
9
+ *
10
+ * - queryCodex(command, options, ws) - Execute a prompt with streaming via WebSocket
11
+ * - abortCodexSession(sessionId) - Cancel an active session
12
+ * - isCodexSessionActive(sessionId) - Check if a session is running
13
+ * - getActiveCodexSessions() - List all active sessions
14
+ */
15
+ import { Codex } from '@openai/codex-sdk';
16
+ import { notifyRunFailed, notifyRunStopped } from './services/notification-orchestrator.js';
17
+ import { codexAdapter } from './providers/codex/adapter.js';
18
+ import { createNormalizedMessage } from './providers/types.js';
19
+ import { getStatusChecker } from './providers/registry.js';
20
+ // Track active sessions
21
+ const activeCodexSessions = new Map();
22
+ /**
23
+ * Transform Codex SDK event to WebSocket message format
24
+ * @param {object} event - SDK event
25
+ * @returns {object} - Transformed event for WebSocket
26
+ */
27
+ function transformCodexEvent(event) {
28
+ // Map SDK event types to a consistent format
29
+ switch (event.type) {
30
+ case 'item.started':
31
+ case 'item.updated':
32
+ case 'item.completed':
33
+ const item = event.item;
34
+ if (!item) {
35
+ return { type: event.type, item: null };
36
+ }
37
+ // Transform based on item type
38
+ switch (item.type) {
39
+ case 'agent_message':
40
+ return {
41
+ type: 'item',
42
+ itemType: 'agent_message',
43
+ message: {
44
+ role: 'assistant',
45
+ content: item.text
46
+ }
47
+ };
48
+ case 'reasoning':
49
+ return {
50
+ type: 'item',
51
+ itemType: 'reasoning',
52
+ message: {
53
+ role: 'assistant',
54
+ content: item.text,
55
+ isReasoning: true
56
+ }
57
+ };
58
+ case 'command_execution':
59
+ return {
60
+ type: 'item',
61
+ itemType: 'command_execution',
62
+ command: item.command,
63
+ output: item.aggregated_output,
64
+ exitCode: item.exit_code,
65
+ status: item.status
66
+ };
67
+ case 'file_change':
68
+ return {
69
+ type: 'item',
70
+ itemType: 'file_change',
71
+ changes: item.changes,
72
+ status: item.status
73
+ };
74
+ case 'mcp_tool_call':
75
+ return {
76
+ type: 'item',
77
+ itemType: 'mcp_tool_call',
78
+ server: item.server,
79
+ tool: item.tool,
80
+ arguments: item.arguments,
81
+ result: item.result,
82
+ error: item.error,
83
+ status: item.status
84
+ };
85
+ case 'web_search':
86
+ return {
87
+ type: 'item',
88
+ itemType: 'web_search',
89
+ query: item.query
90
+ };
91
+ case 'todo_list':
92
+ return {
93
+ type: 'item',
94
+ itemType: 'todo_list',
95
+ items: item.items
96
+ };
97
+ case 'error':
98
+ return {
99
+ type: 'item',
100
+ itemType: 'error',
101
+ message: {
102
+ role: 'error',
103
+ content: item.message
104
+ }
105
+ };
106
+ default:
107
+ return {
108
+ type: 'item',
109
+ itemType: item.type,
110
+ item: item
111
+ };
112
+ }
113
+ case 'turn.started':
114
+ return {
115
+ type: 'turn_started'
116
+ };
117
+ case 'turn.completed':
118
+ return {
119
+ type: 'turn_complete',
120
+ usage: event.usage
121
+ };
122
+ case 'turn.failed':
123
+ return {
124
+ type: 'turn_failed',
125
+ error: event.error
126
+ };
127
+ case 'thread.started':
128
+ return {
129
+ type: 'thread_started',
130
+ threadId: event.id
131
+ };
132
+ case 'error':
133
+ return {
134
+ type: 'error',
135
+ message: event.message
136
+ };
137
+ default:
138
+ return {
139
+ type: event.type,
140
+ data: event
141
+ };
142
+ }
143
+ }
144
+ /**
145
+ * Map permission mode to Codex SDK options
146
+ * @param {string} permissionMode - 'default', 'acceptEdits', or 'bypassPermissions'
147
+ * @returns {object} - { sandboxMode, approvalPolicy }
148
+ */
149
+ function mapPermissionModeToCodexOptions(permissionMode) {
150
+ switch (permissionMode) {
151
+ case 'acceptEdits':
152
+ return {
153
+ sandboxMode: 'workspace-write',
154
+ approvalPolicy: 'never'
155
+ };
156
+ case 'bypassPermissions':
157
+ return {
158
+ sandboxMode: 'danger-full-access',
159
+ approvalPolicy: 'never'
160
+ };
161
+ case 'default':
162
+ default:
163
+ return {
164
+ sandboxMode: 'workspace-write',
165
+ approvalPolicy: 'untrusted'
166
+ };
167
+ }
168
+ }
169
+ /**
170
+ * Execute a Codex query with streaming
171
+ * @param {string} command - The prompt to send
172
+ * @param {object} options - Options including cwd, sessionId, model, permissionMode
173
+ * @param {WebSocket|object} ws - WebSocket connection or response writer
174
+ */
175
+ export async function queryCodex(command, options = {}, ws) {
176
+ const { sessionId, sessionSummary, cwd, projectPath, model, permissionMode = 'default' } = options;
177
+ const workingDirectory = cwd || projectPath || process.cwd();
178
+ const { sandboxMode, approvalPolicy } = mapPermissionModeToCodexOptions(permissionMode);
179
+ let codex;
180
+ let thread;
181
+ let currentSessionId = sessionId;
182
+ let terminalFailure = null;
183
+ const abortController = new AbortController();
184
+ try {
185
+ // Initialize Codex SDK
186
+ codex = new Codex();
187
+ // Thread options with sandbox and approval settings
188
+ const threadOptions = {
189
+ workingDirectory,
190
+ skipGitRepoCheck: true,
191
+ sandboxMode,
192
+ approvalPolicy,
193
+ model
194
+ };
195
+ // Start or resume thread
196
+ if (sessionId) {
197
+ thread = codex.resumeThread(sessionId, threadOptions);
198
+ }
199
+ else {
200
+ thread = codex.startThread(threadOptions);
201
+ }
202
+ // Get the thread ID
203
+ currentSessionId = thread.id || sessionId || `codex-${Date.now()}`;
204
+ // Track the session
205
+ activeCodexSessions.set(currentSessionId, {
206
+ thread,
207
+ codex,
208
+ status: 'running',
209
+ abortController,
210
+ startedAt: new Date().toISOString()
211
+ });
212
+ // Send session created event
213
+ sendMessage(ws, createNormalizedMessage({ kind: 'session_created', newSessionId: currentSessionId, sessionId: currentSessionId, provider: 'codex' }));
214
+ // Execute with streaming
215
+ const streamedTurn = await thread.runStreamed(command, {
216
+ signal: abortController.signal
217
+ });
218
+ for await (const event of streamedTurn.events) {
219
+ // Check if session was aborted
220
+ const session = activeCodexSessions.get(currentSessionId);
221
+ if (!session || session.status === 'aborted') {
222
+ break;
223
+ }
224
+ if (event.type === 'item.started' || event.type === 'item.updated') {
225
+ continue;
226
+ }
227
+ const transformed = transformCodexEvent(event);
228
+ // Normalize the transformed event into NormalizedMessage(s) via adapter
229
+ const normalizedMsgs = codexAdapter.normalizeMessage(transformed, currentSessionId);
230
+ for (const msg of normalizedMsgs) {
231
+ sendMessage(ws, msg);
232
+ }
233
+ if (event.type === 'turn.failed' && !terminalFailure) {
234
+ terminalFailure = event.error || new Error('Turn failed');
235
+ notifyRunFailed({
236
+ userId: ws?.userId || null,
237
+ provider: 'codex',
238
+ sessionId: currentSessionId,
239
+ sessionName: sessionSummary,
240
+ error: terminalFailure
241
+ });
242
+ }
243
+ // Extract and send token usage if available (normalized to match Claude format)
244
+ if (event.type === 'turn.completed' && event.usage) {
245
+ const totalTokens = (event.usage.input_tokens || 0) + (event.usage.output_tokens || 0);
246
+ sendMessage(ws, createNormalizedMessage({ kind: 'status', text: 'token_budget', tokenBudget: { used: totalTokens, total: 200000 }, sessionId: currentSessionId, provider: 'codex' }));
247
+ }
248
+ }
249
+ // Send completion event
250
+ if (!terminalFailure) {
251
+ sendMessage(ws, createNormalizedMessage({ kind: 'complete', actualSessionId: thread.id, sessionId: currentSessionId, provider: 'codex' }));
252
+ notifyRunStopped({
253
+ userId: ws?.userId || null,
254
+ provider: 'codex',
255
+ sessionId: currentSessionId,
256
+ sessionName: sessionSummary,
257
+ stopReason: 'completed'
258
+ });
259
+ }
260
+ }
261
+ catch (error) {
262
+ const session = currentSessionId ? activeCodexSessions.get(currentSessionId) : null;
263
+ const wasAborted = session?.status === 'aborted' ||
264
+ error?.name === 'AbortError' ||
265
+ String(error?.message || '').toLowerCase().includes('aborted');
266
+ if (!wasAborted) {
267
+ console.error('[Codex] Error:', error);
268
+ // Check if Codex SDK is available for a clearer error message
269
+ const installed = getStatusChecker('codex')?.checkInstalled() ?? true;
270
+ const errorContent = !installed
271
+ ? 'Codex CLI is not configured. Please set up authentication first.'
272
+ : error.message;
273
+ sendMessage(ws, createNormalizedMessage({ kind: 'error', content: errorContent, sessionId: currentSessionId, provider: 'codex' }));
274
+ if (!terminalFailure) {
275
+ notifyRunFailed({
276
+ userId: ws?.userId || null,
277
+ provider: 'codex',
278
+ sessionId: currentSessionId,
279
+ sessionName: sessionSummary,
280
+ error
281
+ });
282
+ }
283
+ }
284
+ }
285
+ finally {
286
+ // Update session status
287
+ if (currentSessionId) {
288
+ const session = activeCodexSessions.get(currentSessionId);
289
+ if (session) {
290
+ session.status = session.status === 'aborted' ? 'aborted' : 'completed';
291
+ }
292
+ }
293
+ }
294
+ }
295
+ /**
296
+ * Abort an active Codex session
297
+ * @param {string} sessionId - Session ID to abort
298
+ * @returns {boolean} - Whether abort was successful
299
+ */
300
+ export function abortCodexSession(sessionId) {
301
+ const session = activeCodexSessions.get(sessionId);
302
+ if (!session) {
303
+ return false;
304
+ }
305
+ session.status = 'aborted';
306
+ try {
307
+ session.abortController?.abort();
308
+ }
309
+ catch (error) {
310
+ console.warn(`[Codex] Failed to abort session ${sessionId}:`, error);
311
+ }
312
+ return true;
313
+ }
314
+ /**
315
+ * Check if a session is active
316
+ * @param {string} sessionId - Session ID to check
317
+ * @returns {boolean} - Whether session is active
318
+ */
319
+ export function isCodexSessionActive(sessionId) {
320
+ const session = activeCodexSessions.get(sessionId);
321
+ return session?.status === 'running';
322
+ }
323
+ /**
324
+ * Get all active sessions
325
+ * @returns {Array} - Array of active session info
326
+ */
327
+ export function getActiveCodexSessions() {
328
+ const sessions = [];
329
+ for (const [id, session] of activeCodexSessions.entries()) {
330
+ if (session.status === 'running') {
331
+ sessions.push({
332
+ id,
333
+ status: session.status,
334
+ startedAt: session.startedAt
335
+ });
336
+ }
337
+ }
338
+ return sessions;
339
+ }
340
+ /**
341
+ * Helper to send message via WebSocket or writer
342
+ * @param {WebSocket|object} ws - WebSocket or response writer
343
+ * @param {object} data - Data to send
344
+ */
345
+ function sendMessage(ws, data) {
346
+ try {
347
+ if (ws.isSSEStreamWriter || ws.isWebSocketWriter) {
348
+ // Writer handles stringification (SSEStreamWriter or WebSocketWriter)
349
+ ws.send(data);
350
+ }
351
+ else if (typeof ws.send === 'function') {
352
+ // Raw WebSocket - stringify here
353
+ ws.send(JSON.stringify(data));
354
+ }
355
+ }
356
+ catch (error) {
357
+ console.error('[Codex] Error sending message:', error);
358
+ }
359
+ }
360
+ // Clean up old completed sessions periodically
361
+ setInterval(() => {
362
+ const now = Date.now();
363
+ const maxAge = 30 * 60 * 1000; // 30 minutes
364
+ for (const [id, session] of activeCodexSessions.entries()) {
365
+ if (session.status !== 'running') {
366
+ const startedAt = new Date(session.startedAt).getTime();
367
+ if (now - startedAt > maxAge) {
368
+ activeCodexSessions.delete(id);
369
+ }
370
+ }
371
+ }
372
+ }, 5 * 60 * 1000); // Every 5 minutes
373
+ //# sourceMappingURL=openai-codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-codex.js","sourceRoot":"","sources":["../../server/openai-codex.js"],"names":[],"mappings":"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"}