@cloudcli-ai/cloudcli 1.36.0 → 1.36.1

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 (217) hide show
  1. package/README.de.md +17 -18
  2. package/README.ja.md +16 -17
  3. package/README.ko.md +17 -18
  4. package/README.md +19 -20
  5. package/README.ru.md +17 -18
  6. package/README.tr.md +17 -18
  7. package/README.zh-CN.md +17 -18
  8. package/README.zh-TW.md +17 -18
  9. package/dist/api-docs.html +2 -3
  10. package/dist/assets/{index-S6cIy7hj.js → index-Bz9vXV2m.js} +264 -259
  11. package/dist/assets/index-DLmhQ15L.css +32 -0
  12. package/dist/assets/{vendor-xterm-CJZjLICi.js → vendor-xterm-CS4rQ5Mr.js} +12 -12
  13. package/dist/index.html +3 -3
  14. package/dist-server/server/claude-sdk.js +37 -90
  15. package/dist-server/server/claude-sdk.js.map +1 -1
  16. package/dist-server/server/cli.js +1 -4
  17. package/dist-server/server/cli.js.map +1 -1
  18. package/dist-server/server/cursor-cli.js +12 -11
  19. package/dist-server/server/cursor-cli.js.map +1 -1
  20. package/dist-server/server/index.js +10 -141
  21. package/dist-server/server/index.js.map +1 -1
  22. package/dist-server/server/modules/assets/assets.routes.js +89 -0
  23. package/dist-server/server/modules/assets/assets.routes.js.map +1 -0
  24. package/dist-server/server/modules/assets/index.js +4 -0
  25. package/dist-server/server/modules/assets/index.js.map +1 -0
  26. package/dist-server/server/modules/assets/services/image-assets.service.js +57 -0
  27. package/dist-server/server/modules/assets/services/image-assets.service.js.map +1 -0
  28. package/dist-server/server/modules/assets/tests/image-assets.service.test.js +36 -0
  29. package/dist-server/server/modules/assets/tests/image-assets.service.test.js.map +1 -0
  30. package/dist-server/server/modules/browser-use/browser-use.service.js +6 -3
  31. package/dist-server/server/modules/browser-use/browser-use.service.js.map +1 -1
  32. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +2 -2
  33. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js.map +1 -1
  34. package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js +0 -1
  35. package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js.map +1 -1
  36. package/dist-server/server/modules/projects/services/project-clone.service.js +2 -1
  37. package/dist-server/server/modules/projects/services/project-clone.service.js.map +1 -1
  38. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +28 -0
  39. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -1
  40. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +54 -1
  41. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -1
  42. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +36 -1
  43. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -1
  44. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +3 -17
  45. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js.map +1 -1
  46. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js +7 -1
  47. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -1
  48. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js +49 -13
  49. package/dist-server/server/modules/providers/list/cursor/cursor-sessions.provider.js.map +1 -1
  50. package/dist-server/server/modules/providers/list/opencode/opencode-auth.provider.js +0 -1
  51. package/dist-server/server/modules/providers/list/opencode/opencode-auth.provider.js.map +1 -1
  52. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +8 -14
  53. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
  54. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +24 -5
  55. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -1
  56. package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js +10 -21
  57. package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js.map +1 -1
  58. package/dist-server/server/modules/providers/provider.registry.js +0 -2
  59. package/dist-server/server/modules/providers/provider.registry.js.map +1 -1
  60. package/dist-server/server/modules/providers/provider.routes.js +0 -1
  61. package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
  62. package/dist-server/server/modules/providers/services/provider-capabilities.service.js +7 -14
  63. package/dist-server/server/modules/providers/services/provider-capabilities.service.js.map +1 -1
  64. package/dist-server/server/modules/providers/services/provider-models.service.js +1 -1
  65. package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
  66. package/dist-server/server/modules/providers/services/session-conversations-search.service.js +3 -77
  67. package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -1
  68. package/dist-server/server/modules/providers/services/session-synchronizer.service.js +0 -1
  69. package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -1
  70. package/dist-server/server/modules/providers/services/sessions-watcher.service.js +0 -13
  71. package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -1
  72. package/dist-server/server/modules/providers/tests/codex-sessions.test.js +96 -0
  73. package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -0
  74. package/dist-server/server/modules/providers/tests/mcp.test.js +3 -29
  75. package/dist-server/server/modules/providers/tests/mcp.test.js.map +1 -1
  76. package/dist-server/server/modules/providers/tests/opencode-models.test.js +7 -0
  77. package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -1
  78. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +117 -0
  79. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
  80. package/dist-server/server/modules/providers/tests/provider-image-history.test.js +147 -0
  81. package/dist-server/server/modules/providers/tests/provider-image-history.test.js.map +1 -0
  82. package/dist-server/server/modules/providers/tests/provider-models.service.test.js +8 -8
  83. package/dist-server/server/modules/providers/tests/skills.test.js +3 -26
  84. package/dist-server/server/modules/providers/tests/skills.test.js.map +1 -1
  85. package/dist-server/server/modules/websocket/services/chat-run-registry.service.js +14 -0
  86. package/dist-server/server/modules/websocket/services/chat-run-registry.service.js.map +1 -1
  87. package/dist-server/server/modules/websocket/services/chat-websocket.service.js +36 -2
  88. package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
  89. package/dist-server/server/modules/websocket/services/shell-websocket.service.js +3 -12
  90. package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
  91. package/dist-server/server/modules/websocket/tests/chat-image-filter.test.js +33 -0
  92. package/dist-server/server/modules/websocket/tests/chat-image-filter.test.js.map +1 -0
  93. package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js +37 -4
  94. package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js.map +1 -1
  95. package/dist-server/server/openai-codex.js +8 -2
  96. package/dist-server/server/openai-codex.js.map +1 -1
  97. package/dist-server/server/opencode-cli.js +43 -6
  98. package/dist-server/server/opencode-cli.js.map +1 -1
  99. package/dist-server/server/opencode-cli.test.js +103 -3
  100. package/dist-server/server/opencode-cli.test.js.map +1 -1
  101. package/dist-server/server/routes/agent.js +9 -19
  102. package/dist-server/server/routes/agent.js.map +1 -1
  103. package/dist-server/server/routes/commands.js +1 -2
  104. package/dist-server/server/routes/commands.js.map +1 -1
  105. package/dist-server/server/routes/git.js +179 -53
  106. package/dist-server/server/routes/git.js.map +1 -1
  107. package/dist-server/server/routes/git.test.js +80 -0
  108. package/dist-server/server/routes/git.test.js.map +1 -0
  109. package/dist-server/server/routes/taskmaster.js +3 -1
  110. package/dist-server/server/routes/taskmaster.js.map +1 -1
  111. package/dist-server/server/routes/user.js +2 -1
  112. package/dist-server/server/routes/user.js.map +1 -1
  113. package/dist-server/server/shared/image-attachments.js +270 -0
  114. package/dist-server/server/shared/image-attachments.js.map +1 -0
  115. package/dist-server/server/shared/tests/image-attachments.test.js +220 -0
  116. package/dist-server/server/shared/tests/image-attachments.test.js.map +1 -0
  117. package/dist-server/server/shared/utils.js +43 -0
  118. package/dist-server/server/shared/utils.js.map +1 -1
  119. package/dist-server/server/utils/gitConfig.js +2 -1
  120. package/dist-server/server/utils/gitConfig.js.map +1 -1
  121. package/dist-server/server/utils/plugin-process-manager.js +2 -1
  122. package/dist-server/server/utils/plugin-process-manager.js.map +1 -1
  123. package/electron/launcher/launcher.js +1 -1
  124. package/package.json +3 -3
  125. package/public/api-docs.html +2 -3
  126. package/server/claude-sdk.js +37 -105
  127. package/server/cli.js +1 -4
  128. package/server/cursor-cli.js +13 -12
  129. package/server/index.js +11 -159
  130. package/server/modules/assets/assets.routes.ts +103 -0
  131. package/server/modules/assets/index.ts +3 -0
  132. package/server/modules/assets/services/image-assets.service.ts +82 -0
  133. package/server/modules/assets/tests/image-assets.service.test.ts +46 -0
  134. package/server/modules/browser-use/browser-use.service.ts +7 -3
  135. package/server/modules/database/tests/sessions-provider-mapping.test.ts +2 -2
  136. package/server/modules/notifications/services/notification-orchestrator.service.js +0 -1
  137. package/server/modules/projects/services/project-clone.service.ts +3 -1
  138. package/server/modules/providers/README.md +1 -7
  139. package/server/modules/providers/list/claude/claude-sessions.provider.ts +30 -0
  140. package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +60 -1
  141. package/server/modules/providers/list/codex/codex-sessions.provider.ts +41 -1
  142. package/server/modules/providers/list/cursor/cursor-models.provider.ts +3 -17
  143. package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +7 -1
  144. package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +56 -15
  145. package/server/modules/providers/list/opencode/opencode-auth.provider.ts +0 -1
  146. package/server/modules/providers/list/opencode/opencode-models.provider.ts +15 -19
  147. package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +25 -4
  148. package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +10 -21
  149. package/server/modules/providers/provider.registry.ts +0 -2
  150. package/server/modules/providers/provider.routes.ts +0 -1
  151. package/server/modules/providers/services/provider-capabilities.service.ts +7 -14
  152. package/server/modules/providers/services/provider-models.service.ts +1 -1
  153. package/server/modules/providers/services/session-conversations-search.service.ts +3 -93
  154. package/server/modules/providers/services/session-synchronizer.service.ts +0 -1
  155. package/server/modules/providers/services/sessions-watcher.service.ts +0 -14
  156. package/server/modules/providers/tests/codex-sessions.test.ts +111 -0
  157. package/server/modules/providers/tests/mcp.test.ts +3 -34
  158. package/server/modules/providers/tests/opencode-models.test.ts +7 -0
  159. package/server/modules/providers/tests/opencode-sessions.test.ts +139 -0
  160. package/server/modules/providers/tests/provider-image-history.test.ts +180 -0
  161. package/server/modules/providers/tests/provider-models.service.test.ts +8 -8
  162. package/server/modules/providers/tests/skills.test.ts +3 -42
  163. package/server/modules/websocket/services/chat-run-registry.service.ts +16 -0
  164. package/server/modules/websocket/services/chat-websocket.service.ts +41 -2
  165. package/server/modules/websocket/services/shell-websocket.service.ts +1 -11
  166. package/server/modules/websocket/tests/chat-image-filter.test.ts +44 -0
  167. package/server/modules/websocket/tests/chat-run-registry.test.ts +42 -4
  168. package/server/openai-codex.js +9 -1
  169. package/server/opencode-cli.js +44 -6
  170. package/server/opencode-cli.test.js +112 -3
  171. package/server/routes/agent.js +9 -19
  172. package/server/routes/commands.js +1 -2
  173. package/server/routes/git.js +201 -60
  174. package/server/routes/git.test.js +106 -0
  175. package/server/routes/taskmaster.js +3 -1
  176. package/server/routes/user.js +2 -1
  177. package/server/shared/image-attachments.ts +341 -0
  178. package/server/shared/tests/image-attachments.test.ts +298 -0
  179. package/server/shared/types.ts +1 -1
  180. package/server/shared/utils.ts +45 -0
  181. package/server/utils/gitConfig.js +2 -1
  182. package/server/utils/plugin-process-manager.js +3 -1
  183. package/dist/assets/index-uLUE6Qt1.css +0 -32
  184. package/dist/icons/gemini-ai-icon.svg +0 -1
  185. package/dist-server/server/gemini-cli.js +0 -551
  186. package/dist-server/server/gemini-cli.js.map +0 -1
  187. package/dist-server/server/gemini-response-handler.js +0 -106
  188. package/dist-server/server/gemini-response-handler.js.map +0 -1
  189. package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js +0 -254
  190. package/dist-server/server/modules/providers/list/gemini/gemini-auth.provider.js.map +0 -1
  191. package/dist-server/server/modules/providers/list/gemini/gemini-mcp.provider.js +0 -82
  192. package/dist-server/server/modules/providers/list/gemini/gemini-mcp.provider.js.map +0 -1
  193. package/dist-server/server/modules/providers/list/gemini/gemini-models.provider.js +0 -24
  194. package/dist-server/server/modules/providers/list/gemini/gemini-models.provider.js.map +0 -1
  195. package/dist-server/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.js +0 -312
  196. package/dist-server/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.js.map +0 -1
  197. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js +0 -474
  198. package/dist-server/server/modules/providers/list/gemini/gemini-sessions.provider.js.map +0 -1
  199. package/dist-server/server/modules/providers/list/gemini/gemini-skills.provider.js +0 -40
  200. package/dist-server/server/modules/providers/list/gemini/gemini-skills.provider.js.map +0 -1
  201. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js +0 -19
  202. package/dist-server/server/modules/providers/list/gemini/gemini.provider.js.map +0 -1
  203. package/dist-server/server/routes/gemini.js +0 -21
  204. package/dist-server/server/routes/gemini.js.map +0 -1
  205. package/dist-server/server/sessionManager.js +0 -194
  206. package/dist-server/server/sessionManager.js.map +0 -1
  207. package/server/gemini-cli.js +0 -638
  208. package/server/gemini-response-handler.js +0 -117
  209. package/server/modules/providers/list/gemini/gemini-auth.provider.ts +0 -307
  210. package/server/modules/providers/list/gemini/gemini-mcp.provider.ts +0 -110
  211. package/server/modules/providers/list/gemini/gemini-models.provider.ts +0 -39
  212. package/server/modules/providers/list/gemini/gemini-session-synchronizer.provider.ts +0 -405
  213. package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +0 -540
  214. package/server/modules/providers/list/gemini/gemini-skills.provider.ts +0 -44
  215. package/server/modules/providers/list/gemini/gemini.provider.ts +0 -27
  216. package/server/routes/gemini.js +0 -25
  217. package/server/sessionManager.js +0 -226
@@ -1,106 +0,0 @@
1
- // Gemini Response Handler - JSON Stream processing
2
- import { sessionsService } from './modules/providers/services/sessions.service.js';
3
- import { createNormalizedMessage } from './shared/utils.js';
4
- function buildGeminiTokenBudget(tokens) {
5
- if (!tokens || typeof tokens !== 'object') {
6
- return null;
7
- }
8
- const parsedInputTokens = Number(tokens.input);
9
- const parsedOutputTokens = Number(tokens.output);
10
- const inputTokens = Number.isFinite(parsedInputTokens) ? parsedInputTokens : 0;
11
- const outputTokens = Number.isFinite(parsedOutputTokens) ? parsedOutputTokens : 0;
12
- const parsedUsed = Number(tokens.total);
13
- const used = Number.isFinite(parsedUsed) ? parsedUsed : inputTokens + outputTokens;
14
- if (!Number.isFinite(used) || used <= 0) {
15
- return null;
16
- }
17
- return {
18
- used,
19
- inputTokens,
20
- outputTokens,
21
- breakdown: {
22
- input: inputTokens,
23
- output: outputTokens,
24
- },
25
- };
26
- }
27
- class GeminiResponseHandler {
28
- constructor(ws, options = {}) {
29
- this.ws = ws;
30
- this.buffer = '';
31
- this.onContentFragment = options.onContentFragment || null;
32
- this.onInit = options.onInit || null;
33
- this.onToolUse = options.onToolUse || null;
34
- this.onToolResult = options.onToolResult || null;
35
- }
36
- // Process incoming raw data from Gemini stream-json
37
- processData(data) {
38
- this.buffer += data;
39
- // Split by newline
40
- const lines = this.buffer.split('\n');
41
- // Keep the last incomplete line in the buffer
42
- this.buffer = lines.pop() || '';
43
- for (const line of lines) {
44
- if (!line.trim())
45
- continue;
46
- try {
47
- const event = JSON.parse(line);
48
- this.handleEvent(event);
49
- }
50
- catch (err) {
51
- // Not a JSON line, probably debug output or CLI warnings
52
- }
53
- }
54
- }
55
- handleEvent(event) {
56
- const sid = typeof this.ws.getSessionId === 'function' ? this.ws.getSessionId() : null;
57
- if (event.type === 'init') {
58
- if (this.onInit) {
59
- this.onInit(event);
60
- }
61
- return;
62
- }
63
- // Invoke per-type callbacks for session tracking
64
- if (event.type === 'message' && event.role === 'assistant') {
65
- const content = event.content || '';
66
- if (this.onContentFragment && content) {
67
- this.onContentFragment(content);
68
- }
69
- }
70
- else if (event.type === 'tool_use' && this.onToolUse) {
71
- this.onToolUse(event);
72
- }
73
- else if (event.type === 'tool_result' && this.onToolResult) {
74
- this.onToolResult(event);
75
- }
76
- // Normalize via adapter and send all resulting messages
77
- const normalized = sessionsService.normalizeMessage('gemini', event, sid);
78
- for (const msg of normalized) {
79
- this.ws.send(msg);
80
- }
81
- const tokenBudget = buildGeminiTokenBudget(event.tokens);
82
- if (tokenBudget) {
83
- this.ws.send(createNormalizedMessage({
84
- kind: 'status',
85
- text: 'token_budget',
86
- tokenBudget,
87
- sessionId: sid,
88
- provider: 'gemini',
89
- }));
90
- }
91
- }
92
- forceFlush() {
93
- if (this.buffer.trim()) {
94
- try {
95
- const event = JSON.parse(this.buffer);
96
- this.handleEvent(event);
97
- }
98
- catch (err) { }
99
- }
100
- }
101
- destroy() {
102
- this.buffer = '';
103
- }
104
- }
105
- export default GeminiResponseHandler;
106
- //# sourceMappingURL=gemini-response-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-response-handler.js","sourceRoot":"","sources":["../../server/gemini-response-handler.js"],"names":[],"mappings":"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"}
@@ -1,254 +0,0 @@
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 GeminiProviderAuth {
7
- /**
8
- * Gemini CLI can override its home root via GEMINI_CLI_HOME.
9
- * Use the same resolution so status checks match runtime behavior.
10
- */
11
- getGeminiCliHome() {
12
- return process.env.GEMINI_CLI_HOME?.trim() || os.homedir();
13
- }
14
- /**
15
- * Checks whether the Gemini CLI is available on this host.
16
- */
17
- checkInstalled() {
18
- const cliPath = process.env.GEMINI_PATH || 'gemini';
19
- try {
20
- spawn.sync(cliPath, ['--version'], { stdio: 'ignore', timeout: 5000 });
21
- return true;
22
- }
23
- catch {
24
- return false;
25
- }
26
- }
27
- /**
28
- * Returns Gemini CLI installation and credential status.
29
- */
30
- async getStatus() {
31
- const installed = this.checkInstalled();
32
- if (!installed) {
33
- return {
34
- installed,
35
- provider: 'gemini',
36
- authenticated: false,
37
- email: null,
38
- method: null,
39
- error: 'Gemini CLI is not installed',
40
- };
41
- }
42
- const credentials = await this.checkCredentials();
43
- return {
44
- installed,
45
- provider: 'gemini',
46
- authenticated: credentials.authenticated,
47
- email: credentials.email,
48
- method: credentials.method,
49
- error: credentials.authenticated ? undefined : credentials.error || 'Not authenticated',
50
- };
51
- }
52
- /**
53
- * Parses dotenv-style key/value pairs.
54
- */
55
- parseEnvFile(content) {
56
- const parsed = {};
57
- for (const rawLine of content.split(/\r?\n/)) {
58
- const line = rawLine.trim();
59
- if (!line || line.startsWith('#')) {
60
- continue;
61
- }
62
- const normalizedLine = line.startsWith('export ')
63
- ? line.slice('export '.length).trim()
64
- : line;
65
- const separatorIndex = normalizedLine.indexOf('=');
66
- if (separatorIndex <= 0) {
67
- continue;
68
- }
69
- const key = normalizedLine.slice(0, separatorIndex).trim();
70
- if (!key) {
71
- continue;
72
- }
73
- let value = normalizedLine.slice(separatorIndex + 1).trim();
74
- const quoted = (value.startsWith('"') && value.endsWith('"')) || (value.startsWith('\'') && value.endsWith('\''));
75
- if (quoted) {
76
- value = value.slice(1, -1);
77
- }
78
- else {
79
- value = value.replace(/\s+#.*$/, '').trim();
80
- }
81
- parsed[key] = value;
82
- }
83
- return parsed;
84
- }
85
- /**
86
- * Loads user-level auth env in Gemini's "first file found" order.
87
- */
88
- async loadUserLevelAuthEnv() {
89
- const geminiCliHome = this.getGeminiCliHome();
90
- const envCandidates = [
91
- path.join(geminiCliHome, '.gemini', '.env'),
92
- path.join(geminiCliHome, '.env'),
93
- ];
94
- for (const envPath of envCandidates) {
95
- try {
96
- const content = await readFile(envPath, 'utf8');
97
- return this.parseEnvFile(content);
98
- }
99
- catch {
100
- // Continue to the next fallback.
101
- }
102
- }
103
- return {};
104
- }
105
- /**
106
- * Reads Gemini's selected auth type from settings.json when available.
107
- */
108
- async readSelectedAuthType() {
109
- try {
110
- const settingsPath = path.join(this.getGeminiCliHome(), '.gemini', 'settings.json');
111
- const content = await readFile(settingsPath, 'utf8');
112
- const settings = readObjectRecord(JSON.parse(content));
113
- const security = readObjectRecord(settings?.security);
114
- const auth = readObjectRecord(security?.auth);
115
- const selectedType = readOptionalString(auth?.selectedType);
116
- if (!selectedType) {
117
- return null;
118
- }
119
- return selectedType;
120
- }
121
- catch {
122
- return null;
123
- }
124
- }
125
- /**
126
- * Checks Gemini credentials from API key env vars or local OAuth credential files.
127
- */
128
- async checkCredentials() {
129
- if (process.env.GEMINI_API_KEY?.trim()) {
130
- return { authenticated: true, email: 'API Key Auth', method: 'api_key' };
131
- }
132
- const userEnv = await this.loadUserLevelAuthEnv();
133
- if (readOptionalString(userEnv.GEMINI_API_KEY)) {
134
- return { authenticated: true, email: 'API Key Auth', method: 'api_key' };
135
- }
136
- const selectedType = await this.readSelectedAuthType();
137
- if (selectedType === 'vertex-ai') {
138
- const hasGoogleApiKey = Boolean(process.env.GOOGLE_API_KEY?.trim()
139
- || readOptionalString(userEnv.GOOGLE_API_KEY));
140
- const hasProject = Boolean(process.env.GOOGLE_CLOUD_PROJECT?.trim()
141
- || process.env.GOOGLE_CLOUD_PROJECT_ID?.trim()
142
- || readOptionalString(userEnv.GOOGLE_CLOUD_PROJECT)
143
- || readOptionalString(userEnv.GOOGLE_CLOUD_PROJECT_ID));
144
- const hasLocation = Boolean(process.env.GOOGLE_CLOUD_LOCATION?.trim()
145
- || readOptionalString(userEnv.GOOGLE_CLOUD_LOCATION));
146
- const hasServiceAccount = Boolean(process.env.GOOGLE_APPLICATION_CREDENTIALS?.trim()
147
- || readOptionalString(userEnv.GOOGLE_APPLICATION_CREDENTIALS));
148
- if (hasGoogleApiKey || hasServiceAccount || (hasProject && hasLocation)) {
149
- return { authenticated: true, email: 'Vertex AI Auth', method: 'vertex_ai' };
150
- }
151
- return {
152
- authenticated: false,
153
- email: null,
154
- method: 'vertex_ai',
155
- error: 'Gemini is set to Vertex AI, but required env vars are missing',
156
- };
157
- }
158
- try {
159
- const credsPath = path.join(this.getGeminiCliHome(), '.gemini', 'oauth_creds.json');
160
- const content = await readFile(credsPath, 'utf8');
161
- const creds = readObjectRecord(JSON.parse(content)) ?? {};
162
- const accessToken = readOptionalString(creds.access_token);
163
- if (!accessToken) {
164
- return {
165
- authenticated: false,
166
- email: null,
167
- method: null,
168
- error: 'No valid tokens found in oauth_creds',
169
- };
170
- }
171
- const refreshToken = readOptionalString(creds.refresh_token);
172
- const tokenInfo = await this.getTokenInfoEmail(accessToken);
173
- if (tokenInfo.valid) {
174
- return {
175
- authenticated: true,
176
- email: tokenInfo.email || 'OAuth Session',
177
- method: 'credentials_file',
178
- };
179
- }
180
- if (!refreshToken) {
181
- return {
182
- authenticated: false,
183
- email: null,
184
- method: 'credentials_file',
185
- error: 'Access token invalid and no refresh token found',
186
- };
187
- }
188
- return {
189
- authenticated: true,
190
- email: await this.getActiveAccountEmail() || 'OAuth Session',
191
- method: 'credentials_file',
192
- };
193
- }
194
- catch {
195
- if (selectedType === 'gemini-api-key') {
196
- return {
197
- authenticated: false,
198
- email: null,
199
- method: 'api_key',
200
- error: 'Gemini is set to "Use Gemini API key", but GEMINI_API_KEY is unavailable',
201
- };
202
- }
203
- if (selectedType === 'oauth-personal') {
204
- return {
205
- authenticated: false,
206
- email: null,
207
- method: 'credentials_file',
208
- error: 'Gemini is set to Google sign-in, but no cached OAuth credentials were found',
209
- };
210
- }
211
- // If no explicit auth type was selected, surface the generic "not configured" error.
212
- return {
213
- authenticated: false,
214
- email: null,
215
- method: null,
216
- error: 'Gemini CLI not configured',
217
- };
218
- }
219
- }
220
- /**
221
- * Validates a Gemini OAuth access token and returns an email when Google reports one.
222
- */
223
- async getTokenInfoEmail(accessToken) {
224
- try {
225
- const tokenRes = await fetch(`https://oauth2.googleapis.com/tokeninfo?access_token=${accessToken}`);
226
- if (!tokenRes.ok) {
227
- return { valid: false, email: null };
228
- }
229
- const tokenInfo = readObjectRecord(await tokenRes.json());
230
- return {
231
- valid: true,
232
- email: readOptionalString(tokenInfo?.email) ?? null,
233
- };
234
- }
235
- catch {
236
- return { valid: false, email: null };
237
- }
238
- }
239
- /**
240
- * Reads Gemini's active local Google account as an offline fallback for display.
241
- */
242
- async getActiveAccountEmail() {
243
- try {
244
- const accPath = path.join(this.getGeminiCliHome(), '.gemini', 'google_accounts.json');
245
- const accContent = await readFile(accPath, 'utf8');
246
- const accounts = readObjectRecord(JSON.parse(accContent));
247
- return readOptionalString(accounts?.active) ?? null;
248
- }
249
- catch {
250
- return null;
251
- }
252
- }
253
- }
254
- //# sourceMappingURL=gemini-auth.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-auth.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/gemini/gemini-auth.provider.ts"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- import os from 'node:os';
2
- import path from 'node:path';
3
- import { McpProvider } from '../../../../modules/providers/shared/mcp/mcp.provider.js';
4
- import { AppError, readJsonConfig, readObjectRecord, readOptionalString, readStringArray, readStringRecord, writeJsonConfig, } from '../../../../shared/utils.js';
5
- export class GeminiMcpProvider extends McpProvider {
6
- constructor() {
7
- super('gemini', ['user', 'project'], ['stdio', 'http', 'sse']);
8
- }
9
- async readScopedServers(scope, workspacePath) {
10
- const filePath = scope === 'user'
11
- ? path.join(os.homedir(), '.gemini', 'settings.json')
12
- : path.join(workspacePath, '.gemini', 'settings.json');
13
- const config = await readJsonConfig(filePath);
14
- return readObjectRecord(config.mcpServers) ?? {};
15
- }
16
- async writeScopedServers(scope, workspacePath, servers) {
17
- const filePath = scope === 'user'
18
- ? path.join(os.homedir(), '.gemini', 'settings.json')
19
- : path.join(workspacePath, '.gemini', 'settings.json');
20
- const config = await readJsonConfig(filePath);
21
- config.mcpServers = servers;
22
- await writeJsonConfig(filePath, config);
23
- }
24
- buildServerConfig(input) {
25
- if (input.transport === 'stdio') {
26
- if (!input.command?.trim()) {
27
- throw new AppError('command is required for stdio MCP servers.', {
28
- code: 'MCP_COMMAND_REQUIRED',
29
- statusCode: 400,
30
- });
31
- }
32
- return {
33
- command: input.command,
34
- args: input.args ?? [],
35
- env: input.env ?? {},
36
- cwd: input.cwd,
37
- };
38
- }
39
- if (!input.url?.trim()) {
40
- throw new AppError('url is required for http/sse MCP servers.', {
41
- code: 'MCP_URL_REQUIRED',
42
- statusCode: 400,
43
- });
44
- }
45
- return {
46
- type: input.transport,
47
- url: input.url,
48
- headers: input.headers ?? {},
49
- };
50
- }
51
- normalizeServerConfig(scope, name, rawConfig) {
52
- if (!rawConfig || typeof rawConfig !== 'object') {
53
- return null;
54
- }
55
- const config = rawConfig;
56
- if (typeof config.command === 'string') {
57
- return {
58
- provider: 'gemini',
59
- name,
60
- scope,
61
- transport: 'stdio',
62
- command: config.command,
63
- args: readStringArray(config.args),
64
- env: readStringRecord(config.env),
65
- cwd: readOptionalString(config.cwd),
66
- };
67
- }
68
- if (typeof config.url === 'string') {
69
- const transport = readOptionalString(config.type) === 'sse' ? 'sse' : 'http';
70
- return {
71
- provider: 'gemini',
72
- name,
73
- scope,
74
- transport,
75
- url: config.url,
76
- headers: readStringRecord(config.headers),
77
- };
78
- }
79
- return null;
80
- }
81
- }
82
- //# sourceMappingURL=gemini-mcp.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-mcp.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/gemini/gemini-mcp.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AAE7E,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAChD;QACE,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACjE,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,SAAS,EAAE,eAAe,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACnD,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,SAAS,EAAE,eAAe,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;QAC5B,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,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,2CAA2C,EAAE;gBAC9D,IAAI,EAAE,kBAAkB;gBACxB,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,SAAS;YACrB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;SAC7B,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,QAAQ;gBAClB,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;aACpC,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7E,OAAO;gBACL,QAAQ,EAAE,QAAQ;gBAClB,IAAI;gBACJ,KAAK;gBACL,SAAS;gBACT,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;aAC1C,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,24 +0,0 @@
1
- import { buildDefaultProviderCurrentActiveModel, writeProviderSessionActiveModelChange, } from '../../../../shared/utils.js';
2
- export const GEMINI_FALLBACK_MODELS = {
3
- OPTIONS: [
4
- { value: 'gemini-3-flash-preview', label: 'Gemini 3 Flash Preview' },
5
- { value: 'gemini-3.1-flash-lite-preview', label: 'Gemini 3.1 Flash Lite Preview' },
6
- { value: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash' },
7
- { value: 'gemini-2.5-flash-lite', label: 'Gemini 2.5 Flash Lite' },
8
- { value: 'gemma-4-31b-it', label: 'Gemma 4 31B IT' },
9
- { value: 'gemma-4-26b-a4b-it', label: 'Gemma 4 26B A4B IT' },
10
- ],
11
- DEFAULT: 'gemini-3-flash-preview',
12
- };
13
- export class GeminiProviderModels {
14
- async getSupportedModels() {
15
- return GEMINI_FALLBACK_MODELS;
16
- }
17
- async getCurrentActiveModel() {
18
- return buildDefaultProviderCurrentActiveModel(GEMINI_FALLBACK_MODELS);
19
- }
20
- async changeActiveModel(input) {
21
- return writeProviderSessionActiveModelChange('gemini', input);
22
- }
23
- }
24
- //# sourceMappingURL=gemini-models.provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini-models.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/gemini/gemini-models.provider.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sCAAsC,EACtC,qCAAqC,GACtC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,sBAAsB,GAA6B;IAC9D,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,wBAAwB,EAAE;QACpE,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,+BAA+B,EAAE;QAClF,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE;QACxD,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,uBAAuB,EAAE;QAClE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;QACpD,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;KAC7D;IACD,OAAO,EAAE,wBAAwB;CAClC,CAAC;AAEF,MAAM,OAAO,oBAAoB;IAC/B,KAAK,CAAC,kBAAkB;QACtB,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,OAAO,sCAAsC,CAAC,sBAAsB,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,KAAqC;QAErC,OAAO,qCAAqC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACF"}