@cloudcli-ai/cloudcli 1.29.4 → 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 +6 -3
  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-Cyya3LhN.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,207 @@
1
+ import sessionManager from '../../../../sessionManager.js';
2
+ import { getGeminiCliSessionMessages } from '../../../../projects.js';
3
+ import { createNormalizedMessage, generateMessageId, readObjectRecord } from '../../../../shared/utils.js';
4
+ const PROVIDER = 'gemini';
5
+ export class GeminiSessionsProvider {
6
+ /**
7
+ * Normalizes live Gemini stream-json events into the shared message shape.
8
+ *
9
+ * Gemini history uses a different session file shape, so fetchHistory handles
10
+ * that separately after loading raw persisted messages.
11
+ */
12
+ normalizeMessage(rawMessage, sessionId) {
13
+ const raw = readObjectRecord(rawMessage);
14
+ if (!raw) {
15
+ return [];
16
+ }
17
+ const ts = raw.timestamp || new Date().toISOString();
18
+ const baseId = raw.uuid || generateMessageId('gemini');
19
+ if (raw.type === 'message' && raw.role === 'assistant') {
20
+ const content = raw.content || '';
21
+ const messages = [];
22
+ if (content) {
23
+ messages.push(createNormalizedMessage({
24
+ id: baseId,
25
+ sessionId,
26
+ timestamp: ts,
27
+ provider: PROVIDER,
28
+ kind: 'stream_delta',
29
+ content,
30
+ }));
31
+ }
32
+ if (raw.delta !== true) {
33
+ messages.push(createNormalizedMessage({
34
+ sessionId,
35
+ timestamp: ts,
36
+ provider: PROVIDER,
37
+ kind: 'stream_end',
38
+ }));
39
+ }
40
+ return messages;
41
+ }
42
+ if (raw.type === 'tool_use') {
43
+ return [createNormalizedMessage({
44
+ id: baseId,
45
+ sessionId,
46
+ timestamp: ts,
47
+ provider: PROVIDER,
48
+ kind: 'tool_use',
49
+ toolName: raw.tool_name,
50
+ toolInput: raw.parameters || {},
51
+ toolId: raw.tool_id || baseId,
52
+ })];
53
+ }
54
+ if (raw.type === 'tool_result') {
55
+ return [createNormalizedMessage({
56
+ id: baseId,
57
+ sessionId,
58
+ timestamp: ts,
59
+ provider: PROVIDER,
60
+ kind: 'tool_result',
61
+ toolId: raw.tool_id || '',
62
+ content: raw.output === undefined ? '' : String(raw.output),
63
+ isError: raw.status === 'error',
64
+ })];
65
+ }
66
+ if (raw.type === 'result') {
67
+ const messages = [createNormalizedMessage({
68
+ sessionId,
69
+ timestamp: ts,
70
+ provider: PROVIDER,
71
+ kind: 'stream_end',
72
+ })];
73
+ if (raw.stats?.total_tokens) {
74
+ messages.push(createNormalizedMessage({
75
+ sessionId,
76
+ timestamp: ts,
77
+ provider: PROVIDER,
78
+ kind: 'status',
79
+ text: 'Complete',
80
+ tokens: raw.stats.total_tokens,
81
+ canInterrupt: false,
82
+ }));
83
+ }
84
+ return messages;
85
+ }
86
+ if (raw.type === 'error') {
87
+ return [createNormalizedMessage({
88
+ id: baseId,
89
+ sessionId,
90
+ timestamp: ts,
91
+ provider: PROVIDER,
92
+ kind: 'error',
93
+ content: raw.error || raw.message || 'Unknown Gemini streaming error',
94
+ })];
95
+ }
96
+ return [];
97
+ }
98
+ /**
99
+ * Loads Gemini history from the in-memory session manager first, then falls
100
+ * back to Gemini CLI session files on disk.
101
+ */
102
+ async fetchHistory(sessionId, options = {}) {
103
+ const { limit = null, offset = 0 } = options;
104
+ let rawMessages;
105
+ try {
106
+ rawMessages = sessionManager.getSessionMessages(sessionId);
107
+ if (rawMessages.length === 0) {
108
+ rawMessages = await getGeminiCliSessionMessages(sessionId);
109
+ }
110
+ }
111
+ catch (error) {
112
+ const message = error instanceof Error ? error.message : String(error);
113
+ console.warn(`[GeminiProvider] Failed to load session ${sessionId}:`, message);
114
+ return { messages: [], total: 0, hasMore: false, offset: 0, limit: null };
115
+ }
116
+ const normalized = [];
117
+ for (let i = 0; i < rawMessages.length; i++) {
118
+ const raw = rawMessages[i];
119
+ const ts = raw.timestamp || new Date().toISOString();
120
+ const baseId = raw.uuid || generateMessageId('gemini');
121
+ const role = raw.message?.role || raw.role;
122
+ const content = raw.message?.content || raw.content;
123
+ if (!role || !content) {
124
+ continue;
125
+ }
126
+ const normalizedRole = role === 'user' ? 'user' : 'assistant';
127
+ if (Array.isArray(content)) {
128
+ for (let partIdx = 0; partIdx < content.length; partIdx++) {
129
+ const part = content[partIdx];
130
+ if (part.type === 'text' && part.text) {
131
+ normalized.push(createNormalizedMessage({
132
+ id: `${baseId}_${partIdx}`,
133
+ sessionId,
134
+ timestamp: ts,
135
+ provider: PROVIDER,
136
+ kind: 'text',
137
+ role: normalizedRole,
138
+ content: part.text,
139
+ }));
140
+ }
141
+ else if (part.type === 'tool_use') {
142
+ normalized.push(createNormalizedMessage({
143
+ id: `${baseId}_${partIdx}`,
144
+ sessionId,
145
+ timestamp: ts,
146
+ provider: PROVIDER,
147
+ kind: 'tool_use',
148
+ toolName: part.name,
149
+ toolInput: part.input,
150
+ toolId: part.id || generateMessageId('gemini_tool'),
151
+ }));
152
+ }
153
+ else if (part.type === 'tool_result') {
154
+ normalized.push(createNormalizedMessage({
155
+ id: `${baseId}_${partIdx}`,
156
+ sessionId,
157
+ timestamp: ts,
158
+ provider: PROVIDER,
159
+ kind: 'tool_result',
160
+ toolId: part.tool_use_id || '',
161
+ content: part.content === undefined ? '' : String(part.content),
162
+ isError: Boolean(part.is_error),
163
+ }));
164
+ }
165
+ }
166
+ }
167
+ else if (typeof content === 'string' && content.trim()) {
168
+ normalized.push(createNormalizedMessage({
169
+ id: baseId,
170
+ sessionId,
171
+ timestamp: ts,
172
+ provider: PROVIDER,
173
+ kind: 'text',
174
+ role: normalizedRole,
175
+ content,
176
+ }));
177
+ }
178
+ }
179
+ const toolResultMap = new Map();
180
+ for (const msg of normalized) {
181
+ if (msg.kind === 'tool_result' && msg.toolId) {
182
+ toolResultMap.set(msg.toolId, msg);
183
+ }
184
+ }
185
+ for (const msg of normalized) {
186
+ if (msg.kind === 'tool_use' && msg.toolId && toolResultMap.has(msg.toolId)) {
187
+ const toolResult = toolResultMap.get(msg.toolId);
188
+ if (toolResult) {
189
+ msg.toolResult = { content: toolResult.content, isError: toolResult.isError };
190
+ }
191
+ }
192
+ }
193
+ const start = Math.max(0, offset);
194
+ const pageLimit = limit === null ? null : Math.max(0, limit);
195
+ const messages = pageLimit === null
196
+ ? normalized.slice(start)
197
+ : normalized.slice(start, start + pageLimit);
198
+ return {
199
+ messages,
200
+ total: normalized.length,
201
+ hasMore: pageLimit === null ? false : start + pageLimit < normalized.length,
202
+ offset: start,
203
+ limit: pageLimit,
204
+ };
205
+ }
206
+ }
207
+ //# sourceMappingURL=gemini-sessions.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-sessions.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/gemini/gemini-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 { GeminiProviderAuth } from '../../../../modules/providers/list/gemini/gemini-auth.provider.js';
3
+ import { GeminiMcpProvider } from '../../../../modules/providers/list/gemini/gemini-mcp.provider.js';
4
+ import { GeminiSessionsProvider } from '../../../../modules/providers/list/gemini/gemini-sessions.provider.js';
5
+ export class GeminiProvider extends AbstractProvider {
6
+ mcp = new GeminiMcpProvider();
7
+ auth = new GeminiProviderAuth();
8
+ sessions = new GeminiSessionsProvider();
9
+ constructor() {
10
+ super('gemini');
11
+ }
12
+ }
13
+ //# sourceMappingURL=gemini.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/gemini/gemini.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,31 @@
1
+ import { ClaudeProvider } from '../../modules/providers/list/claude/claude.provider.js';
2
+ import { CodexProvider } from '../../modules/providers/list/codex/codex.provider.js';
3
+ import { CursorProvider } from '../../modules/providers/list/cursor/cursor.provider.js';
4
+ import { GeminiProvider } from '../../modules/providers/list/gemini/gemini.provider.js';
5
+ import { AppError } from '../../shared/utils.js';
6
+ const providers = {
7
+ claude: new ClaudeProvider(),
8
+ codex: new CodexProvider(),
9
+ cursor: new CursorProvider(),
10
+ gemini: new GeminiProvider(),
11
+ };
12
+ /**
13
+ * Central registry for resolving concrete provider implementations by id.
14
+ */
15
+ export const providerRegistry = {
16
+ listProviders() {
17
+ return Object.values(providers);
18
+ },
19
+ resolveProvider(provider) {
20
+ const key = provider;
21
+ const resolvedProvider = providers[key];
22
+ if (!resolvedProvider) {
23
+ throw new AppError(`Unsupported provider "${provider}".`, {
24
+ code: 'UNSUPPORTED_PROVIDER',
25
+ statusCode: 400,
26
+ });
27
+ }
28
+ return resolvedProvider;
29
+ },
30
+ };
31
+ //# sourceMappingURL=provider.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.registry.js","sourceRoot":"","sources":["../../../../server/modules/providers/provider.registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AAGpF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,SAAS,GAAmC;IAChD,MAAM,EAAE,IAAI,cAAc,EAAE;IAC5B,KAAK,EAAE,IAAI,aAAa,EAAE;IAC1B,MAAM,EAAE,IAAI,cAAc,EAAE;IAC5B,MAAM,EAAE,IAAI,cAAc,EAAE;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa;QACX,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,eAAe,CAAC,QAAgB;QAC9B,MAAM,GAAG,GAAG,QAAuB,CAAC;QACpC,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,QAAQ,CAAC,yBAAyB,QAAQ,IAAI,EAAE;gBACxD,IAAI,EAAE,sBAAsB;gBAC5B,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CACF,CAAC"}
@@ -0,0 +1,159 @@
1
+ import express from 'express';
2
+ import { providerAuthService } from '../../modules/providers/services/provider-auth.service.js';
3
+ import { providerMcpService } from '../../modules/providers/services/mcp.service.js';
4
+ import { AppError, asyncHandler, createApiSuccessResponse } from '../../shared/utils.js';
5
+ const router = express.Router();
6
+ const readPathParam = (value, name) => {
7
+ if (typeof value === 'string') {
8
+ return value;
9
+ }
10
+ if (Array.isArray(value) && typeof value[0] === 'string') {
11
+ return value[0];
12
+ }
13
+ throw new AppError(`${name} path parameter is invalid.`, {
14
+ code: 'INVALID_PATH_PARAMETER',
15
+ statusCode: 400,
16
+ });
17
+ };
18
+ const normalizeProviderParam = (value) => readPathParam(value, 'provider').trim().toLowerCase();
19
+ const readOptionalQueryString = (value) => {
20
+ if (typeof value !== 'string') {
21
+ return undefined;
22
+ }
23
+ const normalized = value.trim();
24
+ return normalized.length > 0 ? normalized : undefined;
25
+ };
26
+ const parseMcpScope = (value) => {
27
+ if (value === undefined) {
28
+ return undefined;
29
+ }
30
+ const normalized = readOptionalQueryString(value);
31
+ if (!normalized) {
32
+ return undefined;
33
+ }
34
+ if (normalized === 'user' || normalized === 'local' || normalized === 'project') {
35
+ return normalized;
36
+ }
37
+ throw new AppError(`Unsupported MCP scope "${normalized}".`, {
38
+ code: 'INVALID_MCP_SCOPE',
39
+ statusCode: 400,
40
+ });
41
+ };
42
+ const parseMcpTransport = (value) => {
43
+ const normalized = readOptionalQueryString(value);
44
+ if (!normalized) {
45
+ throw new AppError('transport is required.', {
46
+ code: 'MCP_TRANSPORT_REQUIRED',
47
+ statusCode: 400,
48
+ });
49
+ }
50
+ if (normalized === 'stdio' || normalized === 'http' || normalized === 'sse') {
51
+ return normalized;
52
+ }
53
+ throw new AppError(`Unsupported MCP transport "${normalized}".`, {
54
+ code: 'INVALID_MCP_TRANSPORT',
55
+ statusCode: 400,
56
+ });
57
+ };
58
+ const parseMcpUpsertPayload = (payload) => {
59
+ if (!payload || typeof payload !== 'object') {
60
+ throw new AppError('Request body must be an object.', {
61
+ code: 'INVALID_REQUEST_BODY',
62
+ statusCode: 400,
63
+ });
64
+ }
65
+ const body = payload;
66
+ const name = readOptionalQueryString(body.name);
67
+ if (!name) {
68
+ throw new AppError('name is required.', {
69
+ code: 'MCP_NAME_REQUIRED',
70
+ statusCode: 400,
71
+ });
72
+ }
73
+ const transport = parseMcpTransport(body.transport);
74
+ const scope = parseMcpScope(body.scope);
75
+ const workspacePath = readOptionalQueryString(body.workspacePath);
76
+ return {
77
+ name,
78
+ transport,
79
+ scope,
80
+ workspacePath,
81
+ command: readOptionalQueryString(body.command),
82
+ args: Array.isArray(body.args) ? body.args.filter((entry) => typeof entry === 'string') : undefined,
83
+ env: typeof body.env === 'object' && body.env !== null
84
+ ? Object.fromEntries(Object.entries(body.env).filter((entry) => typeof entry[1] === 'string'))
85
+ : undefined,
86
+ cwd: readOptionalQueryString(body.cwd),
87
+ url: readOptionalQueryString(body.url),
88
+ headers: typeof body.headers === 'object' && body.headers !== null
89
+ ? Object.fromEntries(Object.entries(body.headers).filter((entry) => typeof entry[1] === 'string'))
90
+ : undefined,
91
+ envVars: Array.isArray(body.envVars)
92
+ ? body.envVars.filter((entry) => typeof entry === 'string')
93
+ : undefined,
94
+ bearerTokenEnvVar: readOptionalQueryString(body.bearerTokenEnvVar),
95
+ envHttpHeaders: typeof body.envHttpHeaders === 'object' && body.envHttpHeaders !== null
96
+ ? Object.fromEntries(Object.entries(body.envHttpHeaders).filter((entry) => typeof entry[1] === 'string'))
97
+ : undefined,
98
+ };
99
+ };
100
+ const parseProvider = (value) => {
101
+ const normalized = normalizeProviderParam(value);
102
+ if (normalized === 'claude' || normalized === 'codex' || normalized === 'cursor' || normalized === 'gemini') {
103
+ return normalized;
104
+ }
105
+ throw new AppError(`Unsupported provider "${normalized}".`, {
106
+ code: 'UNSUPPORTED_PROVIDER',
107
+ statusCode: 400,
108
+ });
109
+ };
110
+ router.get('/:provider/auth/status', asyncHandler(async (req, res) => {
111
+ const provider = parseProvider(req.params.provider);
112
+ const status = await providerAuthService.getProviderAuthStatus(provider);
113
+ res.json(createApiSuccessResponse(status));
114
+ }));
115
+ router.get('/:provider/mcp/servers', asyncHandler(async (req, res) => {
116
+ const provider = parseProvider(req.params.provider);
117
+ const workspacePath = readOptionalQueryString(req.query.workspacePath);
118
+ const scope = parseMcpScope(req.query.scope);
119
+ if (scope) {
120
+ const servers = await providerMcpService.listProviderMcpServersForScope(provider, scope, { workspacePath });
121
+ res.json(createApiSuccessResponse({ provider, scope, servers }));
122
+ return;
123
+ }
124
+ const groupedServers = await providerMcpService.listProviderMcpServers(provider, { workspacePath });
125
+ res.json(createApiSuccessResponse({ provider, scopes: groupedServers }));
126
+ }));
127
+ router.post('/:provider/mcp/servers', asyncHandler(async (req, res) => {
128
+ const provider = parseProvider(req.params.provider);
129
+ const payload = parseMcpUpsertPayload(req.body);
130
+ const server = await providerMcpService.upsertProviderMcpServer(provider, payload);
131
+ res.status(201).json(createApiSuccessResponse({ server }));
132
+ }));
133
+ router.delete('/:provider/mcp/servers/:name', asyncHandler(async (req, res) => {
134
+ const provider = parseProvider(req.params.provider);
135
+ const scope = parseMcpScope(req.query.scope);
136
+ const workspacePath = readOptionalQueryString(req.query.workspacePath);
137
+ const result = await providerMcpService.removeProviderMcpServer(provider, {
138
+ name: readPathParam(req.params.name, 'name'),
139
+ scope,
140
+ workspacePath,
141
+ });
142
+ res.json(createApiSuccessResponse(result));
143
+ }));
144
+ router.post('/mcp/servers/global', asyncHandler(async (req, res) => {
145
+ const payload = parseMcpUpsertPayload(req.body);
146
+ if (payload.scope === 'local') {
147
+ throw new AppError('Global MCP add supports only "user" or "project" scopes.', {
148
+ code: 'INVALID_GLOBAL_MCP_SCOPE',
149
+ statusCode: 400,
150
+ });
151
+ }
152
+ const results = await providerMcpService.addMcpServerToAllProviders({
153
+ ...payload,
154
+ scope: payload.scope === 'user' ? 'user' : 'project',
155
+ });
156
+ res.status(201).json(createApiSuccessResponse({ results }));
157
+ }));
158
+ export default router;
159
+ //# sourceMappingURL=provider.routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.routes.js","sourceRoot":"","sources":["../../../../server/modules/providers/provider.routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import os from 'node:os';
2
+ import { providerRegistry } from '../../../modules/providers/provider.registry.js';
3
+ import { AppError } from '../../../shared/utils.js';
4
+ /** Cursor MCP is not supported on Windows hosts (no Cursor CLI integration). */
5
+ function includeProviderInGlobalMcp(providerId) {
6
+ if (providerId === 'cursor' && os.platform() === 'win32') {
7
+ return false;
8
+ }
9
+ return true;
10
+ }
11
+ export const providerMcpService = {
12
+ /**
13
+ * Lists MCP servers for one provider grouped by supported scopes.
14
+ */
15
+ async listProviderMcpServers(providerName, options) {
16
+ const provider = providerRegistry.resolveProvider(providerName);
17
+ return provider.mcp.listServers(options);
18
+ },
19
+ /**
20
+ * Lists MCP servers for one provider scope.
21
+ */
22
+ async listProviderMcpServersForScope(providerName, scope, options) {
23
+ const provider = providerRegistry.resolveProvider(providerName);
24
+ return provider.mcp.listServersForScope(scope, options);
25
+ },
26
+ /**
27
+ * Adds or updates one provider MCP server.
28
+ */
29
+ async upsertProviderMcpServer(providerName, input) {
30
+ const provider = providerRegistry.resolveProvider(providerName);
31
+ return provider.mcp.upsertServer(input);
32
+ },
33
+ /**
34
+ * Removes one provider MCP server.
35
+ */
36
+ async removeProviderMcpServer(providerName, input) {
37
+ const provider = providerRegistry.resolveProvider(providerName);
38
+ return provider.mcp.removeServer(input);
39
+ },
40
+ /**
41
+ * Adds one HTTP/stdio MCP server to every provider.
42
+ */
43
+ async addMcpServerToAllProviders(input) {
44
+ if (input.transport !== 'stdio' && input.transport !== 'http') {
45
+ throw new AppError('Global MCP add supports only "stdio" and "http".', {
46
+ code: 'INVALID_GLOBAL_MCP_TRANSPORT',
47
+ statusCode: 400,
48
+ });
49
+ }
50
+ const scope = input.scope ?? 'project';
51
+ const results = [];
52
+ const providers = providerRegistry.listProviders().filter((p) => includeProviderInGlobalMcp(p.id));
53
+ for (const provider of providers) {
54
+ try {
55
+ await provider.mcp.upsertServer({ ...input, scope });
56
+ results.push({ provider: provider.id, created: true });
57
+ }
58
+ catch (error) {
59
+ results.push({
60
+ provider: provider.id,
61
+ created: false,
62
+ error: error instanceof Error ? error.message : 'Unknown error',
63
+ });
64
+ }
65
+ }
66
+ return results;
67
+ },
68
+ };
69
+ //# sourceMappingURL=mcp.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.service.js","sourceRoot":"","sources":["../../../../../server/modules/providers/services/mcp.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { providerRegistry } from '../../../modules/providers/provider.registry.js';
2
+ export const providerAuthService = {
3
+ /**
4
+ * Resolves a provider and returns its installation/authentication status.
5
+ */
6
+ async getProviderAuthStatus(providerName) {
7
+ const provider = providerRegistry.resolveProvider(providerName);
8
+ return provider.auth.getStatus();
9
+ },
10
+ /**
11
+ * Returns whether a provider runtime appears installed.
12
+ * Falls back to true if status lookup itself fails so callers preserve the
13
+ * original runtime error instead of replacing it with a status-check failure.
14
+ */
15
+ async isProviderInstalled(providerName) {
16
+ try {
17
+ const status = await this.getProviderAuthStatus(providerName);
18
+ return status.installed;
19
+ }
20
+ catch {
21
+ return true;
22
+ }
23
+ },
24
+ };
25
+ //# sourceMappingURL=provider-auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-auth.service.js","sourceRoot":"","sources":["../../../../../server/modules/providers/services/provider-auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,YAAoB;QAC9C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CAAC,YAAyB;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC,SAAS,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { providerRegistry } from '../../../modules/providers/provider.registry.js';
2
+ /**
3
+ * Application service for provider-backed session message operations.
4
+ *
5
+ * Callers pass a provider id and this service resolves the concrete provider
6
+ * class, keeping normalization/history call sites decoupled from implementation
7
+ * file layout.
8
+ */
9
+ export const sessionsService = {
10
+ /**
11
+ * Lists provider ids that can load session history and normalize live messages.
12
+ */
13
+ listProviderIds() {
14
+ return providerRegistry.listProviders().map((provider) => provider.id);
15
+ },
16
+ /**
17
+ * Normalizes one provider-native event into frontend session message events.
18
+ */
19
+ normalizeMessage(providerName, raw, sessionId) {
20
+ return providerRegistry.resolveProvider(providerName).sessions.normalizeMessage(raw, sessionId);
21
+ },
22
+ /**
23
+ * Fetches normalized persisted session history for one provider/session pair.
24
+ */
25
+ fetchHistory(providerName, sessionId, options) {
26
+ return providerRegistry.resolveProvider(providerName).sessions.fetchHistory(sessionId, options);
27
+ },
28
+ };
29
+ //# sourceMappingURL=sessions.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.service.js","sourceRoot":"","sources":["../../../../../server/modules/providers/services/sessions.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAQ5E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;OAEG;IACH,eAAe;QACb,OAAO,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,gBAAgB,CACd,YAAoB,EACpB,GAAY,EACZ,SAAwB;QAExB,OAAO,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClG,CAAC;IAED;;OAEG;IACH,YAAY,CACV,YAAoB,EACpB,SAAiB,EACjB,OAA6B;QAE7B,OAAO,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClG,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared provider base.
3
+ *
4
+ * Concrete providers must expose auth/MCP handlers and implement message
5
+ * normalization/history loading because those behaviors depend on native
6
+ * SDK/CLI formats.
7
+ */
8
+ export class AbstractProvider {
9
+ id;
10
+ constructor(id) {
11
+ this.id = id;
12
+ }
13
+ }
14
+ //# sourceMappingURL=abstract.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/shared/base/abstract.provider.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,OAAgB,gBAAgB;IAC3B,EAAE,CAAc;IAKzB,YAAsB,EAAe;QACnC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;CACF"}