@cloudcli-ai/cloudcli 1.29.5 → 1.30.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 (179) 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-DI22MZMb.css +32 -0
  9. package/dist/assets/index-RX-W_g_Q.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 +27 -25
  20. package/dist-server/server/index.js.map +1 -1
  21. package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js +103 -0
  22. package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js.map +1 -0
  23. package/dist-server/server/modules/providers/list/claude/claude-mcp.provider.js +103 -0
  24. package/dist-server/server/modules/providers/list/claude/claude-mcp.provider.js.map +1 -0
  25. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +266 -0
  26. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -0
  27. package/dist-server/server/modules/providers/list/claude/claude.provider.js +13 -0
  28. package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -0
  29. package/dist-server/server/modules/providers/list/codex/codex-auth.provider.js +84 -0
  30. package/dist-server/server/modules/providers/list/codex/codex-auth.provider.js.map +1 -0
  31. package/dist-server/server/modules/providers/list/codex/codex-mcp.provider.js +107 -0
  32. package/dist-server/server/modules/providers/list/codex/codex-mcp.provider.js.map +1 -0
  33. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +282 -0
  34. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -0
  35. package/dist-server/server/modules/providers/list/codex/codex.provider.js +13 -0
  36. package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -0
  37. package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js +118 -0
  38. package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js.map +1 -0
  39. package/dist-server/server/modules/providers/list/cursor/cursor-mcp.provider.js +80 -0
  40. package/dist-server/server/modules/providers/list/cursor/cursor-mcp.provider.js.map +1 -0
  41. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js +369 -0
  42. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js.map +1 -0
  43. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js +13 -0
  44. package/dist-server/server/modules/providers/list/cursor/cursor.provider.js.map +1 -0
  45. package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js +131 -0
  46. package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js.map +1 -0
  47. package/dist-server/server/modules/providers/list/gemini/gemini-mcp.provider.js +82 -0
  48. package/dist-server/server/modules/providers/list/gemini/gemini-mcp.provider.js.map +1 -0
  49. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js +207 -0
  50. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js.map +1 -0
  51. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js +13 -0
  52. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js.map +1 -0
  53. package/dist-server/server/modules/providers/provider.registry.js +31 -0
  54. package/dist-server/server/modules/providers/provider.registry.js.map +1 -0
  55. package/dist-server/server/modules/providers/provider.routes.js +159 -0
  56. package/dist-server/server/modules/providers/provider.routes.js.map +1 -0
  57. package/dist-server/server/modules/providers/services/mcp.service.js +69 -0
  58. package/dist-server/server/modules/providers/services/mcp.service.js.map +1 -0
  59. package/dist-server/server/modules/providers/services/provider-auth.service.js +25 -0
  60. package/dist-server/server/modules/providers/services/provider-auth.service.js.map +1 -0
  61. package/dist-server/server/modules/providers/services/sessions.service.js +29 -0
  62. package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -0
  63. package/dist-server/server/modules/providers/shared/base/abstract.provider.js +14 -0
  64. package/dist-server/server/modules/providers/shared/base/abstract.provider.js.map +1 -0
  65. package/dist-server/server/modules/providers/shared/mcp/mcp.provider.js +102 -0
  66. package/dist-server/server/modules/providers/shared/mcp/mcp.provider.js.map +1 -0
  67. package/dist-server/server/modules/providers/tests/mcp.test.js +250 -0
  68. package/dist-server/server/modules/providers/tests/mcp.test.js.map +1 -0
  69. package/dist-server/server/openai-codex.js +5 -5
  70. package/dist-server/server/openai-codex.js.map +1 -1
  71. package/dist-server/server/routes/codex.js +2 -278
  72. package/dist-server/server/routes/codex.js.map +1 -1
  73. package/dist-server/server/routes/commands.js +0 -44
  74. package/dist-server/server/routes/commands.js.map +1 -1
  75. package/dist-server/server/routes/cursor.js +9 -489
  76. package/dist-server/server/routes/cursor.js.map +1 -1
  77. package/dist-server/server/routes/mcp-utils.js +1 -18
  78. package/dist-server/server/routes/mcp-utils.js.map +1 -1
  79. package/dist-server/server/routes/messages.js +6 -6
  80. package/dist-server/server/routes/messages.js.map +1 -1
  81. package/dist-server/server/routes/settings.js +10 -0
  82. package/dist-server/server/routes/settings.js.map +1 -1
  83. package/dist-server/server/routes/taskmaster.js +0 -459
  84. package/dist-server/server/routes/taskmaster.js.map +1 -1
  85. package/dist-server/server/shared/interfaces.js +2 -0
  86. package/dist-server/server/shared/interfaces.js.map +1 -0
  87. package/dist-server/server/shared/types.js +3 -0
  88. package/dist-server/server/shared/types.js.map +1 -0
  89. package/dist-server/server/shared/utils.js +150 -0
  90. package/dist-server/server/shared/utils.js.map +1 -0
  91. package/dist-server/server/utils/mcp-detector.js +0 -49
  92. package/dist-server/server/utils/mcp-detector.js.map +1 -1
  93. package/dist-server/shared/modelConstants.js +1 -0
  94. package/dist-server/shared/modelConstants.js.map +1 -1
  95. package/package.json +5 -2
  96. package/server/claude-sdk.js +14 -8
  97. package/server/cursor-cli.js +7 -7
  98. package/server/gemini-cli.js +5 -5
  99. package/server/gemini-response-handler.js +2 -2
  100. package/server/index.js +33 -29
  101. package/server/modules/providers/list/claude/claude-auth.provider.ts +123 -0
  102. package/server/modules/providers/list/claude/claude-mcp.provider.ts +135 -0
  103. package/server/modules/providers/list/claude/claude-sessions.provider.ts +306 -0
  104. package/server/modules/providers/list/claude/claude.provider.ts +15 -0
  105. package/server/modules/providers/list/codex/codex-auth.provider.ts +100 -0
  106. package/server/modules/providers/list/codex/codex-mcp.provider.ts +135 -0
  107. package/server/modules/providers/list/codex/codex-sessions.provider.ts +319 -0
  108. package/server/modules/providers/list/codex/codex.provider.ts +15 -0
  109. package/server/modules/providers/list/cursor/cursor-auth.provider.ts +143 -0
  110. package/server/modules/providers/list/cursor/cursor-mcp.provider.ts +108 -0
  111. package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +421 -0
  112. package/server/modules/providers/list/cursor/cursor.provider.ts +15 -0
  113. package/server/modules/providers/list/gemini/gemini-auth.provider.ts +151 -0
  114. package/server/modules/providers/list/gemini/gemini-mcp.provider.ts +110 -0
  115. package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +227 -0
  116. package/server/modules/providers/list/gemini/gemini.provider.ts +15 -0
  117. package/server/modules/providers/provider.registry.ts +36 -0
  118. package/server/modules/providers/provider.routes.ts +217 -0
  119. package/server/modules/providers/services/mcp.service.ts +94 -0
  120. package/server/modules/providers/services/provider-auth.service.ts +26 -0
  121. package/server/modules/providers/services/sessions.service.ts +45 -0
  122. package/server/modules/providers/shared/base/abstract.provider.ts +20 -0
  123. package/server/modules/providers/shared/mcp/mcp.provider.ts +151 -0
  124. package/server/modules/providers/tests/mcp.test.ts +293 -0
  125. package/server/openai-codex.js +5 -5
  126. package/server/routes/codex.js +2 -312
  127. package/server/routes/commands.js +0 -49
  128. package/server/routes/cursor.js +15 -527
  129. package/server/routes/mcp-utils.js +2 -19
  130. package/server/routes/messages.js +6 -6
  131. package/server/routes/settings.js +10 -0
  132. package/server/routes/taskmaster.js +0 -492
  133. package/server/shared/interfaces.ts +54 -0
  134. package/server/shared/types.ts +172 -0
  135. package/server/shared/utils.ts +193 -0
  136. package/server/tsconfig.json +6 -3
  137. package/server/utils/mcp-detector.js +0 -51
  138. package/shared/modelConstants.js +1 -0
  139. package/dist/assets/index-BBAE1OJ_.css +0 -32
  140. package/dist/assets/index-Ci1GOyV7.js +0 -1262
  141. package/dist-server/server/providers/claude/adapter.js +0 -266
  142. package/dist-server/server/providers/claude/adapter.js.map +0 -1
  143. package/dist-server/server/providers/claude/status.js +0 -121
  144. package/dist-server/server/providers/claude/status.js.map +0 -1
  145. package/dist-server/server/providers/codex/adapter.js +0 -232
  146. package/dist-server/server/providers/codex/adapter.js.map +0 -1
  147. package/dist-server/server/providers/codex/status.js +0 -70
  148. package/dist-server/server/providers/codex/status.js.map +0 -1
  149. package/dist-server/server/providers/cursor/adapter.js +0 -342
  150. package/dist-server/server/providers/cursor/adapter.js.map +0 -1
  151. package/dist-server/server/providers/cursor/status.js +0 -118
  152. package/dist-server/server/providers/cursor/status.js.map +0 -1
  153. package/dist-server/server/providers/gemini/adapter.js +0 -174
  154. package/dist-server/server/providers/gemini/adapter.js.map +0 -1
  155. package/dist-server/server/providers/gemini/status.js +0 -104
  156. package/dist-server/server/providers/gemini/status.js.map +0 -1
  157. package/dist-server/server/providers/registry.js +0 -58
  158. package/dist-server/server/providers/registry.js.map +0 -1
  159. package/dist-server/server/providers/types.js +0 -117
  160. package/dist-server/server/providers/types.js.map +0 -1
  161. package/dist-server/server/providers/utils.js +0 -28
  162. package/dist-server/server/providers/utils.js.map +0 -1
  163. package/dist-server/server/routes/cli-auth.js +0 -25
  164. package/dist-server/server/routes/cli-auth.js.map +0 -1
  165. package/dist-server/server/routes/mcp.js +0 -480
  166. package/dist-server/server/routes/mcp.js.map +0 -1
  167. package/server/providers/claude/adapter.js +0 -278
  168. package/server/providers/claude/status.js +0 -136
  169. package/server/providers/codex/adapter.js +0 -248
  170. package/server/providers/codex/status.js +0 -78
  171. package/server/providers/cursor/adapter.js +0 -348
  172. package/server/providers/cursor/status.js +0 -128
  173. package/server/providers/gemini/adapter.js +0 -186
  174. package/server/providers/gemini/status.js +0 -111
  175. package/server/providers/registry.js +0 -67
  176. package/server/providers/types.js +0 -132
  177. package/server/providers/utils.js +0 -29
  178. package/server/routes/cli-auth.js +0 -27
  179. package/server/routes/mcp.js +0 -552
@@ -0,0 +1,266 @@
1
+ import { getSessionMessages } from '../../../../projects.js';
2
+ import { createNormalizedMessage, generateMessageId, readObjectRecord } from '../../../../shared/utils.js';
3
+ const PROVIDER = 'claude';
4
+ const loadClaudeSessionMessages = getSessionMessages;
5
+ /**
6
+ * Claude writes internal command and system reminder entries into history.
7
+ * Those are useful for the CLI but should not appear in the user-facing chat.
8
+ */
9
+ const INTERNAL_CONTENT_PREFIXES = [
10
+ '<command-name>',
11
+ '<command-message>',
12
+ '<command-args>',
13
+ '<local-command-stdout>',
14
+ '<system-reminder>',
15
+ 'Caveat:',
16
+ 'This session is being continued from a previous',
17
+ '[Request interrupted',
18
+ ];
19
+ function isInternalContent(content) {
20
+ return INTERNAL_CONTENT_PREFIXES.some((prefix) => content.startsWith(prefix));
21
+ }
22
+ export class ClaudeSessionsProvider {
23
+ /**
24
+ * Normalizes one Claude JSONL entry or live SDK stream event into the shared
25
+ * message shape consumed by REST and WebSocket clients.
26
+ */
27
+ normalizeMessage(rawMessage, sessionId) {
28
+ const raw = readObjectRecord(rawMessage);
29
+ if (!raw) {
30
+ return [];
31
+ }
32
+ if (raw.type === 'content_block_delta' && raw.delta?.text) {
33
+ return [createNormalizedMessage({ kind: 'stream_delta', content: raw.delta.text, sessionId, provider: PROVIDER })];
34
+ }
35
+ if (raw.type === 'content_block_stop') {
36
+ return [createNormalizedMessage({ kind: 'stream_end', sessionId, provider: PROVIDER })];
37
+ }
38
+ const messages = [];
39
+ const ts = raw.timestamp || new Date().toISOString();
40
+ const baseId = raw.uuid || generateMessageId('claude');
41
+ if (raw.message?.role === 'user' && raw.message?.content) {
42
+ if (Array.isArray(raw.message.content)) {
43
+ for (let partIndex = 0; partIndex < raw.message.content.length; partIndex++) {
44
+ const part = raw.message.content[partIndex];
45
+ if (part.type === 'tool_result') {
46
+ messages.push(createNormalizedMessage({
47
+ id: `${baseId}_tr_${part.tool_use_id}`,
48
+ sessionId,
49
+ timestamp: ts,
50
+ provider: PROVIDER,
51
+ kind: 'tool_result',
52
+ toolId: part.tool_use_id,
53
+ content: typeof part.content === 'string' ? part.content : JSON.stringify(part.content),
54
+ isError: Boolean(part.is_error),
55
+ subagentTools: raw.subagentTools,
56
+ toolUseResult: raw.toolUseResult,
57
+ }));
58
+ }
59
+ else if (part.type === 'text') {
60
+ const text = part.text || '';
61
+ if (text && !isInternalContent(text)) {
62
+ messages.push(createNormalizedMessage({
63
+ id: `${baseId}_text_${partIndex}`,
64
+ sessionId,
65
+ timestamp: ts,
66
+ provider: PROVIDER,
67
+ kind: 'text',
68
+ role: 'user',
69
+ content: text,
70
+ }));
71
+ }
72
+ }
73
+ }
74
+ if (messages.length === 0) {
75
+ const textParts = raw.message.content
76
+ .filter((part) => part.type === 'text')
77
+ .map((part) => part.text)
78
+ .filter(Boolean)
79
+ .join('\n');
80
+ if (textParts && !isInternalContent(textParts)) {
81
+ messages.push(createNormalizedMessage({
82
+ id: `${baseId}_text`,
83
+ sessionId,
84
+ timestamp: ts,
85
+ provider: PROVIDER,
86
+ kind: 'text',
87
+ role: 'user',
88
+ content: textParts,
89
+ }));
90
+ }
91
+ }
92
+ }
93
+ else if (typeof raw.message.content === 'string') {
94
+ const text = raw.message.content;
95
+ if (text && !isInternalContent(text)) {
96
+ messages.push(createNormalizedMessage({
97
+ id: baseId,
98
+ sessionId,
99
+ timestamp: ts,
100
+ provider: PROVIDER,
101
+ kind: 'text',
102
+ role: 'user',
103
+ content: text,
104
+ }));
105
+ }
106
+ }
107
+ return messages;
108
+ }
109
+ if (raw.type === 'thinking' && raw.message?.content) {
110
+ messages.push(createNormalizedMessage({
111
+ id: baseId,
112
+ sessionId,
113
+ timestamp: ts,
114
+ provider: PROVIDER,
115
+ kind: 'thinking',
116
+ content: raw.message.content,
117
+ }));
118
+ return messages;
119
+ }
120
+ if (raw.type === 'tool_use' && raw.toolName) {
121
+ messages.push(createNormalizedMessage({
122
+ id: baseId,
123
+ sessionId,
124
+ timestamp: ts,
125
+ provider: PROVIDER,
126
+ kind: 'tool_use',
127
+ toolName: raw.toolName,
128
+ toolInput: raw.toolInput,
129
+ toolId: raw.toolCallId || baseId,
130
+ }));
131
+ return messages;
132
+ }
133
+ if (raw.type === 'tool_result') {
134
+ messages.push(createNormalizedMessage({
135
+ id: baseId,
136
+ sessionId,
137
+ timestamp: ts,
138
+ provider: PROVIDER,
139
+ kind: 'tool_result',
140
+ toolId: raw.toolCallId || '',
141
+ content: raw.output || '',
142
+ isError: false,
143
+ }));
144
+ return messages;
145
+ }
146
+ if (raw.message?.role === 'assistant' && raw.message?.content) {
147
+ if (Array.isArray(raw.message.content)) {
148
+ let partIndex = 0;
149
+ for (const part of raw.message.content) {
150
+ if (part.type === 'text' && part.text) {
151
+ messages.push(createNormalizedMessage({
152
+ id: `${baseId}_${partIndex}`,
153
+ sessionId,
154
+ timestamp: ts,
155
+ provider: PROVIDER,
156
+ kind: 'text',
157
+ role: 'assistant',
158
+ content: part.text,
159
+ }));
160
+ }
161
+ else if (part.type === 'tool_use') {
162
+ messages.push(createNormalizedMessage({
163
+ id: `${baseId}_${partIndex}`,
164
+ sessionId,
165
+ timestamp: ts,
166
+ provider: PROVIDER,
167
+ kind: 'tool_use',
168
+ toolName: part.name,
169
+ toolInput: part.input,
170
+ toolId: part.id,
171
+ }));
172
+ }
173
+ else if (part.type === 'thinking' && part.thinking) {
174
+ messages.push(createNormalizedMessage({
175
+ id: `${baseId}_${partIndex}`,
176
+ sessionId,
177
+ timestamp: ts,
178
+ provider: PROVIDER,
179
+ kind: 'thinking',
180
+ content: part.thinking,
181
+ }));
182
+ }
183
+ partIndex++;
184
+ }
185
+ }
186
+ else if (typeof raw.message.content === 'string') {
187
+ messages.push(createNormalizedMessage({
188
+ id: baseId,
189
+ sessionId,
190
+ timestamp: ts,
191
+ provider: PROVIDER,
192
+ kind: 'text',
193
+ role: 'assistant',
194
+ content: raw.message.content,
195
+ }));
196
+ }
197
+ return messages;
198
+ }
199
+ return messages;
200
+ }
201
+ /**
202
+ * Loads Claude JSONL history for a project/session and returns normalized
203
+ * messages, preserving the existing pagination behavior from projects.js.
204
+ */
205
+ async fetchHistory(sessionId, options = {}) {
206
+ const { projectName, limit = null, offset = 0 } = options;
207
+ if (!projectName) {
208
+ return { messages: [], total: 0, hasMore: false, offset: 0, limit: null };
209
+ }
210
+ let result;
211
+ try {
212
+ result = await loadClaudeSessionMessages(projectName, sessionId, limit, offset);
213
+ }
214
+ catch (error) {
215
+ const message = error instanceof Error ? error.message : String(error);
216
+ console.warn(`[ClaudeProvider] Failed to load session ${sessionId}:`, message);
217
+ return { messages: [], total: 0, hasMore: false, offset: 0, limit: null };
218
+ }
219
+ const rawMessages = Array.isArray(result) ? result : (result.messages || []);
220
+ const total = Array.isArray(result) ? rawMessages.length : (result.total || 0);
221
+ const hasMore = Array.isArray(result) ? false : Boolean(result.hasMore);
222
+ const toolResultMap = new Map();
223
+ for (const raw of rawMessages) {
224
+ if (raw.message?.role === 'user' && Array.isArray(raw.message?.content)) {
225
+ for (const part of raw.message.content) {
226
+ if (part.type === 'tool_result' && part.tool_use_id) {
227
+ toolResultMap.set(part.tool_use_id, {
228
+ content: part.content,
229
+ isError: Boolean(part.is_error),
230
+ subagentTools: raw.subagentTools,
231
+ toolUseResult: raw.toolUseResult,
232
+ });
233
+ }
234
+ }
235
+ }
236
+ }
237
+ const normalized = [];
238
+ for (const raw of rawMessages) {
239
+ normalized.push(...this.normalizeMessage(raw, sessionId));
240
+ }
241
+ for (const msg of normalized) {
242
+ if (msg.kind === 'tool_use' && msg.toolId && toolResultMap.has(msg.toolId)) {
243
+ const toolResult = toolResultMap.get(msg.toolId);
244
+ if (!toolResult) {
245
+ continue;
246
+ }
247
+ msg.toolResult = {
248
+ content: typeof toolResult.content === 'string'
249
+ ? toolResult.content
250
+ : JSON.stringify(toolResult.content),
251
+ isError: toolResult.isError,
252
+ toolUseResult: toolResult.toolUseResult,
253
+ };
254
+ msg.subagentTools = toolResult.subagentTools;
255
+ }
256
+ }
257
+ return {
258
+ messages: normalized,
259
+ total,
260
+ hasMore,
261
+ offset,
262
+ limit,
263
+ };
264
+ }
265
+ }
266
+ //# sourceMappingURL=claude-sessions.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-sessions.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude-sessions.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AbstractProvider } from '../../../../modules/providers/shared/base/abstract.provider.js';
2
+ import { ClaudeProviderAuth } from '../../../../modules/providers/list/claude/claude-auth.provider.js';
3
+ import { ClaudeMcpProvider } from '../../../../modules/providers/list/claude/claude-mcp.provider.js';
4
+ import { ClaudeSessionsProvider } from '../../../../modules/providers/list/claude/claude-sessions.provider.js';
5
+ export class ClaudeProvider extends AbstractProvider {
6
+ mcp = new ClaudeMcpProvider();
7
+ auth = new ClaudeProviderAuth();
8
+ sessions = new ClaudeSessionsProvider();
9
+ constructor() {
10
+ super('claude');
11
+ }
12
+ }
13
+ //# sourceMappingURL=claude.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AAGrG,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IACzC,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC9B,IAAI,GAAkB,IAAI,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,GAAsB,IAAI,sBAAsB,EAAE,CAAC;IAEpE;QACE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,84 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import spawn from 'cross-spawn';
5
+ import { readObjectRecord, readOptionalString } from '../../../../shared/utils.js';
6
+ export class CodexProviderAuth {
7
+ /**
8
+ * Checks whether Codex is available to the server runtime.
9
+ */
10
+ checkInstalled() {
11
+ try {
12
+ spawn.sync('codex', ['--version'], { stdio: 'ignore', timeout: 5000 });
13
+ return true;
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ /**
20
+ * Returns Codex SDK availability and credential status.
21
+ */
22
+ async getStatus() {
23
+ const installed = this.checkInstalled();
24
+ const credentials = await this.checkCredentials();
25
+ return {
26
+ installed,
27
+ provider: 'codex',
28
+ authenticated: credentials.authenticated,
29
+ email: credentials.email,
30
+ method: credentials.method,
31
+ error: credentials.authenticated ? undefined : credentials.error || 'Not authenticated',
32
+ };
33
+ }
34
+ /**
35
+ * Reads Codex auth.json and checks OAuth tokens or an API key fallback.
36
+ */
37
+ async checkCredentials() {
38
+ try {
39
+ const authPath = path.join(os.homedir(), '.codex', 'auth.json');
40
+ const content = await readFile(authPath, 'utf8');
41
+ const auth = readObjectRecord(JSON.parse(content)) ?? {};
42
+ const tokens = readObjectRecord(auth.tokens) ?? {};
43
+ const idToken = readOptionalString(tokens.id_token);
44
+ const accessToken = readOptionalString(tokens.access_token);
45
+ if (idToken || accessToken) {
46
+ return {
47
+ authenticated: true,
48
+ email: idToken ? this.readEmailFromIdToken(idToken) : 'Authenticated',
49
+ method: 'credentials_file',
50
+ };
51
+ }
52
+ if (readOptionalString(auth.OPENAI_API_KEY)) {
53
+ return { authenticated: true, email: 'API Key Auth', method: 'api_key' };
54
+ }
55
+ return { authenticated: false, email: null, method: null, error: 'No valid tokens found' };
56
+ }
57
+ catch (error) {
58
+ const code = error.code;
59
+ return {
60
+ authenticated: false,
61
+ email: null,
62
+ method: null,
63
+ error: code === 'ENOENT' ? 'Codex not configured' : error instanceof Error ? error.message : 'Failed to read Codex auth',
64
+ };
65
+ }
66
+ }
67
+ /**
68
+ * Extracts the user email from a Codex id_token when a readable JWT payload exists.
69
+ */
70
+ readEmailFromIdToken(idToken) {
71
+ try {
72
+ const parts = idToken.split('.');
73
+ if (parts.length >= 2) {
74
+ const payload = readObjectRecord(JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8')));
75
+ return readOptionalString(payload?.email) ?? readOptionalString(payload?.user) ?? 'Authenticated';
76
+ }
77
+ }
78
+ catch {
79
+ // Fall back to a generic authenticated marker if the token payload is not readable.
80
+ }
81
+ return 'Authenticated';
82
+ }
83
+ }
84
+ //# sourceMappingURL=codex-auth.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-auth.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-auth.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import TOML from '@iarna/toml';
5
+ import { McpProvider } from '../../../../modules/providers/shared/mcp/mcp.provider.js';
6
+ import { AppError, readObjectRecord, readOptionalString, readStringArray, readStringRecord, } from '../../../../shared/utils.js';
7
+ const readTomlConfig = async (filePath) => {
8
+ try {
9
+ const content = await readFile(filePath, 'utf8');
10
+ const parsed = TOML.parse(content);
11
+ return readObjectRecord(parsed) ?? {};
12
+ }
13
+ catch (error) {
14
+ const code = error.code;
15
+ if (code === 'ENOENT') {
16
+ return {};
17
+ }
18
+ throw error;
19
+ }
20
+ };
21
+ const writeTomlConfig = async (filePath, data) => {
22
+ await mkdir(path.dirname(filePath), { recursive: true });
23
+ const toml = TOML.stringify(data);
24
+ await writeFile(filePath, toml, 'utf8');
25
+ };
26
+ export class CodexMcpProvider extends McpProvider {
27
+ constructor() {
28
+ super('codex', ['user', 'project'], ['stdio', 'http']);
29
+ }
30
+ async readScopedServers(scope, workspacePath) {
31
+ const filePath = scope === 'user'
32
+ ? path.join(os.homedir(), '.codex', 'config.toml')
33
+ : path.join(workspacePath, '.codex', 'config.toml');
34
+ const config = await readTomlConfig(filePath);
35
+ return readObjectRecord(config.mcp_servers) ?? {};
36
+ }
37
+ async writeScopedServers(scope, workspacePath, servers) {
38
+ const filePath = scope === 'user'
39
+ ? path.join(os.homedir(), '.codex', 'config.toml')
40
+ : path.join(workspacePath, '.codex', 'config.toml');
41
+ const config = await readTomlConfig(filePath);
42
+ config.mcp_servers = servers;
43
+ await writeTomlConfig(filePath, config);
44
+ }
45
+ buildServerConfig(input) {
46
+ if (input.transport === 'stdio') {
47
+ if (!input.command?.trim()) {
48
+ throw new AppError('command is required for stdio MCP servers.', {
49
+ code: 'MCP_COMMAND_REQUIRED',
50
+ statusCode: 400,
51
+ });
52
+ }
53
+ return {
54
+ command: input.command,
55
+ args: input.args ?? [],
56
+ env: input.env ?? {},
57
+ env_vars: input.envVars ?? [],
58
+ cwd: input.cwd,
59
+ };
60
+ }
61
+ if (!input.url?.trim()) {
62
+ throw new AppError('url is required for http MCP servers.', {
63
+ code: 'MCP_URL_REQUIRED',
64
+ statusCode: 400,
65
+ });
66
+ }
67
+ return {
68
+ url: input.url,
69
+ bearer_token_env_var: input.bearerTokenEnvVar,
70
+ http_headers: input.headers ?? {},
71
+ env_http_headers: input.envHttpHeaders ?? {},
72
+ };
73
+ }
74
+ normalizeServerConfig(scope, name, rawConfig) {
75
+ if (!rawConfig || typeof rawConfig !== 'object') {
76
+ return null;
77
+ }
78
+ const config = rawConfig;
79
+ if (typeof config.command === 'string') {
80
+ return {
81
+ provider: 'codex',
82
+ name,
83
+ scope,
84
+ transport: 'stdio',
85
+ command: config.command,
86
+ args: readStringArray(config.args),
87
+ env: readStringRecord(config.env),
88
+ cwd: readOptionalString(config.cwd),
89
+ envVars: readStringArray(config.env_vars),
90
+ };
91
+ }
92
+ if (typeof config.url === 'string') {
93
+ return {
94
+ provider: 'codex',
95
+ name,
96
+ scope,
97
+ transport: 'http',
98
+ url: config.url,
99
+ headers: readStringRecord(config.http_headers),
100
+ bearerTokenEnvVar: readOptionalString(config.bearer_token_env_var),
101
+ envHttpHeaders: readStringRecord(config.env_http_headers),
102
+ };
103
+ }
104
+ return null;
105
+ }
106
+ }
107
+ //# sourceMappingURL=codex-mcp.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-mcp.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-mcp.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,IAAI,MAAM,aAAa,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAE7E,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,cAAc,GAAG,KAAK,EAAE,QAAgB,EAAoC,EAAE;IAClF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC9D,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,QAAgB,EAAE,IAA6B,EAAiB,EAAE;IAC/F,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAa,CAAC,CAAC;IAC3C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAC/C;QACE,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,KAAe,EAAE,aAAqB;QACtE,MAAM,QAAQ,GAAG,KAAK,KAAK,MAAM;YAC/B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC;YAClD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAES,KAAK,CAAC,kBAAkB,CAChC,KAAe,EACf,aAAqB,EACrB,OAAgC;QAEhC,MAAM,QAAQ,GAAG,KAAK,KAAK,MAAM;YAC/B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC;YAClD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC;QAC7B,MAAM,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAES,iBAAiB,CAAC,KAAmC;QAC7D,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC3B,MAAM,IAAI,QAAQ,CAAC,4CAA4C,EAAE;oBAC/D,IAAI,EAAE,sBAAsB;oBAC5B,UAAU,EAAE,GAAG;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;gBACtB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;gBACpB,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;gBAC7B,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,QAAQ,CAAC,uCAAuC,EAAE;gBAC1D,IAAI,EAAE,kBAAkB;gBACxB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,oBAAoB,EAAE,KAAK,CAAC,iBAAiB;YAC7C,YAAY,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;YACjC,gBAAgB,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;SAC7C,CAAC;IACJ,CAAC;IAES,qBAAqB,CAC7B,KAAe,EACf,IAAY,EACZ,SAAkB;QAElB,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,SAAoC,CAAC;QACpD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,IAAI;gBACJ,KAAK;gBACL,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;gBAClC,GAAG,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;gBACjC,GAAG,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC;gBACnC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;aAC1C,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,IAAI;gBACJ,KAAK;gBACL,SAAS,EAAE,MAAM;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC9C,iBAAiB,EAAE,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC;gBAClE,cAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC;aAC1D,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}