@google/gemini-cli-core 0.1.20 → 0.1.22

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 (260) hide show
  1. package/README.md +27 -29
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/code_assist/converter.d.ts +1 -0
  6. package/dist/src/code_assist/converter.js +1 -0
  7. package/dist/src/code_assist/converter.js.map +1 -1
  8. package/dist/src/code_assist/oauth2.d.ts +1 -0
  9. package/dist/src/code_assist/oauth2.js +37 -20
  10. package/dist/src/code_assist/oauth2.js.map +1 -1
  11. package/dist/src/code_assist/oauth2.test.js +51 -8
  12. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  13. package/dist/src/code_assist/server.js +1 -1
  14. package/dist/src/code_assist/server.js.map +1 -1
  15. package/dist/src/code_assist/setup.js +47 -16
  16. package/dist/src/code_assist/setup.js.map +1 -1
  17. package/dist/src/code_assist/setup.test.js +114 -8
  18. package/dist/src/code_assist/setup.test.js.map +1 -1
  19. package/dist/src/config/config.d.ts +8 -3
  20. package/dist/src/config/config.js +25 -12
  21. package/dist/src/config/config.js.map +1 -1
  22. package/dist/src/config/config.test.js +83 -1
  23. package/dist/src/config/config.test.js.map +1 -1
  24. package/dist/src/core/client.d.ts +7 -12
  25. package/dist/src/core/client.js +67 -30
  26. package/dist/src/core/client.js.map +1 -1
  27. package/dist/src/core/client.test.js +354 -0
  28. package/dist/src/core/client.test.js.map +1 -1
  29. package/dist/src/core/contentGenerator.js +19 -11
  30. package/dist/src/core/contentGenerator.js.map +1 -1
  31. package/dist/src/core/contentGenerator.test.js +39 -15
  32. package/dist/src/core/contentGenerator.test.js.map +1 -1
  33. package/dist/src/core/coreToolScheduler.js +6 -2
  34. package/dist/src/core/coreToolScheduler.js.map +1 -1
  35. package/dist/src/core/coreToolScheduler.test.js +46 -65
  36. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  37. package/dist/src/core/logger.d.ts +22 -1
  38. package/dist/src/core/logger.js +103 -17
  39. package/dist/src/core/logger.js.map +1 -1
  40. package/dist/src/core/logger.test.js +86 -20
  41. package/dist/src/core/logger.test.js.map +1 -1
  42. package/dist/src/core/nonInteractiveToolExecutor.js +1 -1
  43. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  44. package/dist/src/core/nonInteractiveToolExecutor.test.js +79 -36
  45. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  46. package/dist/src/core/prompts.js +4 -4
  47. package/dist/src/core/prompts.js.map +1 -1
  48. package/dist/src/generated/git-commit.d.ts +7 -0
  49. package/dist/src/generated/git-commit.js +10 -0
  50. package/dist/src/generated/git-commit.js.map +1 -0
  51. package/dist/src/ide/constants.d.ts +6 -0
  52. package/dist/src/ide/constants.js +7 -0
  53. package/dist/src/ide/constants.js.map +1 -0
  54. package/dist/src/ide/detect-ide.d.ts +2 -0
  55. package/dist/src/ide/detect-ide.js +22 -6
  56. package/dist/src/ide/detect-ide.js.map +1 -1
  57. package/dist/src/ide/detect-ide.test.d.ts +6 -0
  58. package/dist/src/ide/detect-ide.test.js +65 -0
  59. package/dist/src/ide/detect-ide.test.js.map +1 -0
  60. package/dist/src/ide/ide-client.d.ts +5 -1
  61. package/dist/src/ide/ide-client.js +57 -21
  62. package/dist/src/ide/ide-client.js.map +1 -1
  63. package/dist/src/ide/ide-client.test.d.ts +6 -0
  64. package/dist/src/ide/ide-client.test.js +43 -0
  65. package/dist/src/ide/ide-client.test.js.map +1 -0
  66. package/dist/src/ide/ide-installer.js +5 -4
  67. package/dist/src/ide/ide-installer.js.map +1 -1
  68. package/dist/src/ide/process-utils.d.ts +14 -0
  69. package/dist/src/ide/process-utils.js +57 -0
  70. package/dist/src/ide/process-utils.js.map +1 -0
  71. package/dist/src/index.d.ts +2 -0
  72. package/dist/src/index.js +2 -0
  73. package/dist/src/index.js.map +1 -1
  74. package/dist/src/mcp/oauth-provider.d.ts +0 -1
  75. package/dist/src/mcp/oauth-provider.js +176 -59
  76. package/dist/src/mcp/oauth-provider.js.map +1 -1
  77. package/dist/src/mcp/oauth-provider.test.js +132 -62
  78. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  79. package/dist/src/mcp/oauth-utils.d.ts +3 -1
  80. package/dist/src/mcp/oauth-utils.js +50 -12
  81. package/dist/src/mcp/oauth-utils.js.map +1 -1
  82. package/dist/src/mcp/oauth-utils.test.js +17 -2
  83. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  84. package/dist/src/services/loopDetectionService.js +5 -5
  85. package/dist/src/services/loopDetectionService.js.map +1 -1
  86. package/dist/src/services/shellExecutionService.test.js +13 -3
  87. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  88. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +23 -4
  89. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +84 -33
  90. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  91. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +11 -0
  92. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +143 -29
  93. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  94. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +8 -2
  95. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +17 -9
  96. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  97. package/dist/src/telemetry/constants.d.ts +1 -0
  98. package/dist/src/telemetry/constants.js +1 -0
  99. package/dist/src/telemetry/constants.js.map +1 -1
  100. package/dist/src/telemetry/index.d.ts +2 -2
  101. package/dist/src/telemetry/index.js +2 -2
  102. package/dist/src/telemetry/index.js.map +1 -1
  103. package/dist/src/telemetry/integration.test.circular.js +1 -0
  104. package/dist/src/telemetry/integration.test.circular.js.map +1 -1
  105. package/dist/src/telemetry/loggers.d.ts +3 -1
  106. package/dist/src/telemetry/loggers.js +37 -4
  107. package/dist/src/telemetry/loggers.js.map +1 -1
  108. package/dist/src/telemetry/loggers.test.js +27 -2
  109. package/dist/src/telemetry/loggers.test.js.map +1 -1
  110. package/dist/src/telemetry/metrics.d.ts +4 -0
  111. package/dist/src/telemetry/metrics.js +21 -8
  112. package/dist/src/telemetry/metrics.js.map +1 -1
  113. package/dist/src/telemetry/metrics.test.js +31 -1
  114. package/dist/src/telemetry/metrics.test.js.map +1 -1
  115. package/dist/src/telemetry/sdk.js +64 -36
  116. package/dist/src/telemetry/sdk.js.map +1 -1
  117. package/dist/src/telemetry/sdk.test.d.ts +6 -0
  118. package/dist/src/telemetry/sdk.test.js +82 -0
  119. package/dist/src/telemetry/sdk.test.js.map +1 -0
  120. package/dist/src/telemetry/types.d.ts +40 -14
  121. package/dist/src/telemetry/types.js +46 -23
  122. package/dist/src/telemetry/types.js.map +1 -1
  123. package/dist/src/test-utils/tools.d.ts +21 -6
  124. package/dist/src/test-utils/tools.js +78 -13
  125. package/dist/src/test-utils/tools.js.map +1 -1
  126. package/dist/src/tools/edit.js +2 -2
  127. package/dist/src/tools/edit.js.map +1 -1
  128. package/dist/src/tools/glob.js +2 -2
  129. package/dist/src/tools/glob.js.map +1 -1
  130. package/dist/src/tools/grep.js +2 -2
  131. package/dist/src/tools/grep.js.map +1 -1
  132. package/dist/src/tools/ls.d.ts +3 -22
  133. package/dist/src/tools/ls.js +81 -77
  134. package/dist/src/tools/ls.js.map +1 -1
  135. package/dist/src/tools/ls.test.js +62 -34
  136. package/dist/src/tools/ls.test.js.map +1 -1
  137. package/dist/src/tools/mcp-client.js +40 -10
  138. package/dist/src/tools/mcp-client.js.map +1 -1
  139. package/dist/src/tools/mcp-client.test.js +31 -1
  140. package/dist/src/tools/mcp-client.test.js.map +1 -1
  141. package/dist/src/tools/mcp-tool.d.ts +3 -5
  142. package/dist/src/tools/mcp-tool.js +62 -21
  143. package/dist/src/tools/mcp-tool.js.map +1 -1
  144. package/dist/src/tools/mcp-tool.test.js +110 -51
  145. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  146. package/dist/src/tools/memoryTool.d.ts +9 -13
  147. package/dist/src/tools/memoryTool.js +124 -117
  148. package/dist/src/tools/memoryTool.js.map +1 -1
  149. package/dist/src/tools/memoryTool.test.js +28 -17
  150. package/dist/src/tools/memoryTool.test.js.map +1 -1
  151. package/dist/src/tools/read-file.js +2 -2
  152. package/dist/src/tools/read-file.js.map +1 -1
  153. package/dist/src/tools/read-many-files.d.ts +4 -5
  154. package/dist/src/tools/read-many-files.js +112 -100
  155. package/dist/src/tools/read-many-files.js.map +1 -1
  156. package/dist/src/tools/read-many-files.test.js +60 -37
  157. package/dist/src/tools/read-many-files.test.js.map +1 -1
  158. package/dist/src/tools/shell.d.ts +4 -6
  159. package/dist/src/tools/shell.js +116 -105
  160. package/dist/src/tools/shell.js.map +1 -1
  161. package/dist/src/tools/shell.test.js +52 -46
  162. package/dist/src/tools/shell.test.js.map +1 -1
  163. package/dist/src/tools/tool-error.d.ts +1 -0
  164. package/dist/src/tools/tool-error.js +1 -0
  165. package/dist/src/tools/tool-error.js.map +1 -1
  166. package/dist/src/tools/tool-registry.d.ts +8 -3
  167. package/dist/src/tools/tool-registry.js +56 -30
  168. package/dist/src/tools/tool-registry.js.map +1 -1
  169. package/dist/src/tools/tools.d.ts +28 -86
  170. package/dist/src/tools/tools.js +67 -122
  171. package/dist/src/tools/tools.js.map +1 -1
  172. package/dist/src/tools/tools.test.js +91 -2
  173. package/dist/src/tools/tools.test.js.map +1 -1
  174. package/dist/src/tools/web-fetch.d.ts +4 -7
  175. package/dist/src/tools/web-fetch.js +62 -62
  176. package/dist/src/tools/web-fetch.js.map +1 -1
  177. package/dist/src/tools/web-fetch.test.js +8 -4
  178. package/dist/src/tools/web-fetch.test.js.map +1 -1
  179. package/dist/src/tools/web-search.d.ts +4 -5
  180. package/dist/src/tools/web-search.js +51 -50
  181. package/dist/src/tools/web-search.js.map +1 -1
  182. package/dist/src/tools/web-search.test.d.ts +6 -0
  183. package/dist/src/tools/web-search.test.js +139 -0
  184. package/dist/src/tools/web-search.test.js.map +1 -0
  185. package/dist/src/tools/write-file.d.ts +15 -10
  186. package/dist/src/tools/write-file.js +133 -141
  187. package/dist/src/tools/write-file.js.map +1 -1
  188. package/dist/src/tools/write-file.test.js +57 -88
  189. package/dist/src/tools/write-file.test.js.map +1 -1
  190. package/dist/src/utils/browser.js +4 -3
  191. package/dist/src/utils/browser.js.map +1 -1
  192. package/dist/src/utils/editCorrector.js +13 -13
  193. package/dist/src/utils/editCorrector.js.map +1 -1
  194. package/dist/src/utils/editor.js +1 -1
  195. package/dist/src/utils/editor.js.map +1 -1
  196. package/dist/src/utils/editor.test.js +10 -10
  197. package/dist/src/utils/editor.test.js.map +1 -1
  198. package/dist/src/utils/errorParsing.d.ts +8 -0
  199. package/dist/src/utils/errorParsing.js +93 -0
  200. package/dist/src/utils/errorParsing.js.map +1 -0
  201. package/dist/src/utils/errorParsing.test.d.ts +6 -0
  202. package/dist/src/utils/errorParsing.test.js +172 -0
  203. package/dist/src/utils/errorParsing.test.js.map +1 -0
  204. package/dist/src/utils/filesearch/crawler.d.ts +15 -0
  205. package/dist/src/utils/filesearch/crawler.js +50 -0
  206. package/dist/src/utils/filesearch/crawler.js.map +1 -0
  207. package/dist/src/utils/filesearch/crawler.test.d.ts +6 -0
  208. package/dist/src/utils/filesearch/crawler.test.js +468 -0
  209. package/dist/src/utils/filesearch/crawler.test.js.map +1 -0
  210. package/dist/src/utils/filesearch/fileSearch.d.ts +9 -53
  211. package/dist/src/utils/filesearch/fileSearch.js +63 -118
  212. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  213. package/dist/src/utils/filesearch/fileSearch.test.js +95 -197
  214. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  215. package/dist/src/utils/filesearch/ignore.d.ts +7 -0
  216. package/dist/src/utils/filesearch/ignore.js +25 -0
  217. package/dist/src/utils/filesearch/ignore.js.map +1 -1
  218. package/dist/src/utils/filesearch/ignore.test.js +89 -2
  219. package/dist/src/utils/filesearch/ignore.test.js.map +1 -1
  220. package/dist/src/utils/filesearch/result-cache.d.ts +1 -2
  221. package/dist/src/utils/filesearch/result-cache.js +1 -3
  222. package/dist/src/utils/filesearch/result-cache.js.map +1 -1
  223. package/dist/src/utils/filesearch/result-cache.test.js +3 -4
  224. package/dist/src/utils/filesearch/result-cache.test.js.map +1 -1
  225. package/dist/src/utils/memoryDiscovery.js +3 -3
  226. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  227. package/dist/src/utils/memoryDiscovery.test.js +3 -2
  228. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  229. package/dist/src/utils/memoryImportProcessor.js +3 -7
  230. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  231. package/dist/src/utils/memoryImportProcessor.test.js +17 -20
  232. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  233. package/dist/src/utils/paths.d.ts +7 -0
  234. package/dist/src/utils/paths.js +15 -0
  235. package/dist/src/utils/paths.js.map +1 -1
  236. package/dist/src/utils/paths.test.js +74 -2
  237. package/dist/src/utils/paths.test.js.map +1 -1
  238. package/dist/src/utils/quotaErrorDetection.d.ts +1 -5
  239. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  240. package/dist/src/utils/secure-browser-launcher.js +4 -3
  241. package/dist/src/utils/secure-browser-launcher.js.map +1 -1
  242. package/dist/src/utils/shell-utils.d.ts +39 -0
  243. package/dist/src/utils/shell-utils.js +72 -2
  244. package/dist/src/utils/shell-utils.js.map +1 -1
  245. package/dist/src/utils/shell-utils.test.js +132 -4
  246. package/dist/src/utils/shell-utils.test.js.map +1 -1
  247. package/dist/src/utils/systemEncoding.js +1 -1
  248. package/dist/src/utils/systemEncoding.js.map +1 -1
  249. package/dist/src/utils/systemEncoding.test.js +23 -23
  250. package/dist/src/utils/systemEncoding.test.js.map +1 -1
  251. package/dist/src/utils/workspaceContext.d.ts +22 -7
  252. package/dist/src/utils/workspaceContext.js +81 -55
  253. package/dist/src/utils/workspaceContext.js.map +1 -1
  254. package/dist/src/utils/workspaceContext.test.js +221 -137
  255. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  256. package/dist/tsconfig.tsbuildinfo +1 -1
  257. package/package.json +5 -2
  258. package/dist/src/core/modelCheck.d.ts +0 -14
  259. package/dist/src/core/modelCheck.js +0 -62
  260. package/dist/src/core/modelCheck.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ide-client.js","sourceRoot":"","sources":["../../../src/ide/ide-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ide-client.js","sourceRoot":"","sources":["../../../src/ide/ide-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import * as path from 'path';
8
+ import { IdeClient } from './ide-client.js';
9
+ describe('IdeClient.validateWorkspacePath', () => {
10
+ it('should return valid if cwd is a subpath of the IDE workspace path', () => {
11
+ const result = IdeClient.validateWorkspacePath('/Users/person/gemini-cli', 'VS Code', '/Users/person/gemini-cli/sub-dir');
12
+ expect(result.isValid).toBe(true);
13
+ });
14
+ it('should return invalid if GEMINI_CLI_IDE_WORKSPACE_PATH is undefined', () => {
15
+ const result = IdeClient.validateWorkspacePath(undefined, 'VS Code', '/Users/person/gemini-cli/sub-dir');
16
+ expect(result.isValid).toBe(false);
17
+ expect(result.error).toContain('Failed to connect');
18
+ });
19
+ it('should return invalid if GEMINI_CLI_IDE_WORKSPACE_PATH is empty', () => {
20
+ const result = IdeClient.validateWorkspacePath('', 'VS Code', '/Users/person/gemini-cli/sub-dir');
21
+ expect(result.isValid).toBe(false);
22
+ expect(result.error).toContain('please open a workspace folder');
23
+ });
24
+ it('should return invalid if cwd is not within the IDE workspace path', () => {
25
+ const result = IdeClient.validateWorkspacePath('/some/other/path', 'VS Code', '/Users/person/gemini-cli/sub-dir');
26
+ expect(result.isValid).toBe(false);
27
+ expect(result.error).toContain('Directory mismatch');
28
+ });
29
+ it('should handle multiple workspace paths and return valid', () => {
30
+ const result = IdeClient.validateWorkspacePath(['/some/other/path', '/Users/person/gemini-cli'].join(path.delimiter), 'VS Code', '/Users/person/gemini-cli/sub-dir');
31
+ expect(result.isValid).toBe(true);
32
+ });
33
+ it('should return invalid if cwd is not in any of the multiple workspace paths', () => {
34
+ const result = IdeClient.validateWorkspacePath(['/some/other/path', '/another/path'].join(path.delimiter), 'VS Code', '/Users/person/gemini-cli/sub-dir');
35
+ expect(result.isValid).toBe(false);
36
+ expect(result.error).toContain('Directory mismatch');
37
+ });
38
+ it.skipIf(process.platform !== 'win32')('should handle windows paths', () => {
39
+ const result = IdeClient.validateWorkspacePath('c:/some/other/path;d:/Users/person/gemini-cli', 'VS Code', 'd:/Users/person/gemini-cli/sub-dir');
40
+ expect(result.isValid).toBe(true);
41
+ });
42
+ });
43
+ //# sourceMappingURL=ide-client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ide-client.test.js","sourceRoot":"","sources":["../../../src/ide/ide-client.test.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import * as path from 'path';
9
9
  import * as fs from 'fs';
10
10
  import * as os from 'os';
11
11
  import { DetectedIde } from './detect-ide.js';
12
+ import { GEMINI_CLI_COMPANION_EXTENSION_NAME } from './constants.js';
12
13
  const VSCODE_COMMAND = process.platform === 'win32' ? 'code.cmd' : 'code';
13
14
  async function findVsCodeCommand() {
14
15
  // 1. Check PATH first.
@@ -35,7 +36,7 @@ async function findVsCodeCommand() {
35
36
  }
36
37
  else if (platform === 'win32') {
37
38
  // Windows
38
- locations.push(path.join(process.env.ProgramFiles || 'C:\\Program Files', 'Microsoft VS Code', 'bin', 'code.cmd'), path.join(homeDir, 'AppData', 'Local', 'Programs', 'Microsoft VS Code', 'bin', 'code.cmd'));
39
+ locations.push(path.join(process.env['ProgramFiles'] || 'C:\\Program Files', 'Microsoft VS Code', 'bin', 'code.cmd'), path.join(homeDir, 'AppData', 'Local', 'Programs', 'Microsoft VS Code', 'bin', 'code.cmd'));
39
40
  }
40
41
  for (const location of locations) {
41
42
  if (fs.existsSync(location)) {
@@ -54,7 +55,7 @@ class VsCodeInstaller {
54
55
  if (!commandPath) {
55
56
  return {
56
57
  success: false,
57
- message: `VS Code CLI not found. Please ensure 'code' is in your system's PATH. For help, see https://code.visualstudio.com/docs/configure/command-line#_code-is-not-recognized-as-an-internal-or-external-command. You can also install the companion extension manually from the VS Code marketplace.`,
58
+ message: `VS Code CLI not found. Please ensure 'code' is in your system's PATH. For help, see https://code.visualstudio.com/docs/configure/command-line#_code-is-not-recognized-as-an-internal-or-external-command. You can also install the '${GEMINI_CLI_COMPANION_EXTENSION_NAME}' extension manually from the VS Code marketplace.`,
58
59
  };
59
60
  }
60
61
  const command = `"${commandPath}" --install-extension google.gemini-cli-vscode-ide-companion --force`;
@@ -62,13 +63,13 @@ class VsCodeInstaller {
62
63
  child_process.execSync(command, { stdio: 'pipe' });
63
64
  return {
64
65
  success: true,
65
- message: 'VS Code companion extension was installed successfully. Please restart your terminal to complete the setup.',
66
+ message: 'VS Code companion extension was installed successfully.',
66
67
  };
67
68
  }
68
69
  catch (_error) {
69
70
  return {
70
71
  success: false,
71
- message: `Failed to install VS Code companion extension. Please try installing it manually from the VS Code marketplace.`,
72
+ message: `Failed to install VS Code companion extension. Please try installing '${GEMINI_CLI_COMPANION_EXTENSION_NAME}' manually from the VS Code extension marketplace.`,
72
73
  };
73
74
  }
74
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ide-installer.js","sourceRoot":"","sources":["../../../src/ide/ide-installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AAW1E,KAAK,UAAU,iBAAiB;IAC9B,uBAAuB;IACvB,IAAI,CAAC;QACH,aAAa,CAAC,QAAQ,CACpB,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC1B,CAAC,CAAC,aAAa,cAAc,EAAE;YAC/B,CAAC,CAAC,cAAc,cAAc,EAAE,EAClC,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;QACF,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IAED,0CAA0C;IAC1C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE7B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,QAAQ;QACR,SAAS,CAAC,IAAI,CACZ,sEAAsE,EACtE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,2CAA2C,CAAC,CAChE,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,QAAQ;QACR,SAAS,CAAC,IAAI,CACZ,0BAA0B,EAC1B,gBAAgB,EAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,4BAA4B,CAAC,CACjD,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,UAAU;QACV,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,IAAI,CACP,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,mBAAmB,EAC/C,mBAAmB,EACnB,KAAK,EACL,UAAU,CACX,EACD,IAAI,CAAC,IAAI,CACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,KAAK,EACL,UAAU,CACX,CACF,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,eAAe;IACX,aAAa,CAAyB;IAE9C;QACE,IAAI,CAAC,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,+RAA+R;aACzS,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,WAAW,sEAAsE,CAAC;QACtG,IAAI,CAAC;YACH,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EACL,6GAA6G;aAChH,CAAC;QACJ,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,gHAAgH;aAC1H,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,GAAgB;IAC9C,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,IAAI,eAAe,EAAE,CAAC;QAC/B;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ide-installer.js","sourceRoot":"","sources":["../../../src/ide/ide-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Traverses up the process tree from the current process to find the top-level ancestor process ID.
8
+ * This is useful for identifying the main application process that spawned the current script,
9
+ * such as the main VS Code window process.
10
+ *
11
+ * @returns A promise that resolves to the numeric PID of the top-level process.
12
+ * @throws Will throw an error if the underlying shell commands fail unexpectedly.
13
+ */
14
+ export declare function getIdeProcessId(): Promise<number>;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { exec } from 'child_process';
7
+ import { promisify } from 'util';
8
+ import os from 'os';
9
+ const execAsync = promisify(exec);
10
+ /**
11
+ * Traverses up the process tree from the current process to find the top-level ancestor process ID.
12
+ * This is useful for identifying the main application process that spawned the current script,
13
+ * such as the main VS Code window process.
14
+ *
15
+ * @returns A promise that resolves to the numeric PID of the top-level process.
16
+ * @throws Will throw an error if the underlying shell commands fail unexpectedly.
17
+ */
18
+ export async function getIdeProcessId() {
19
+ const platform = os.platform();
20
+ let currentPid = process.pid;
21
+ // Loop upwards through the process tree, with a depth limit to prevent infinite loops.
22
+ const MAX_TRAVERSAL_DEPTH = 32;
23
+ for (let i = 0; i < MAX_TRAVERSAL_DEPTH; i++) {
24
+ let parentPid;
25
+ try {
26
+ // Use wmic for Windows
27
+ if (platform === 'win32') {
28
+ const command = `wmic process where "ProcessId=${currentPid}" get ParentProcessId /value`;
29
+ const { stdout } = await execAsync(command);
30
+ const match = stdout.match(/ParentProcessId=(\d+)/);
31
+ parentPid = match ? parseInt(match[1], 10) : 0; // Top of the tree is 0
32
+ }
33
+ // Use ps for macOS, Linux, and other Unix-like systems
34
+ else {
35
+ const command = `ps -o ppid= -p ${currentPid}`;
36
+ const { stdout } = await execAsync(command);
37
+ const ppid = parseInt(stdout.trim(), 10);
38
+ parentPid = isNaN(ppid) ? 1 : ppid; // Top of the tree is 1
39
+ }
40
+ }
41
+ catch (_) {
42
+ // This can happen if a process in the chain dies during execution.
43
+ // We'll break the loop and return the last valid PID we found.
44
+ break;
45
+ }
46
+ // Define the root PID for the current OS
47
+ const rootPid = platform === 'win32' ? 0 : 1;
48
+ // If the parent is the root process or invalid, we've found our target.
49
+ if (parentPid === rootPid || parentPid <= 0) {
50
+ break;
51
+ }
52
+ // Move one level up the tree for the next iteration.
53
+ currentPid = parentPid;
54
+ }
55
+ return currentPid;
56
+ }
57
+ //# sourceMappingURL=process-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.js","sourceRoot":"","sources":["../../../src/ide/process-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAE7B,uFAAuF;IACvF,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,IAAI,SAAiB,CAAC;QAEtB,IAAI,CAAC;YACH,uBAAuB;YACvB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,iCAAiC,UAAU,8BAA8B,CAAC;gBAC1F,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACpD,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;YACzE,CAAC;YACD,uDAAuD;iBAClD,CAAC;gBACJ,MAAM,OAAO,GAAG,kBAAkB,UAAU,EAAE,CAAC;gBAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,mEAAmE;YACnE,+DAA+D;YAC/D,MAAM;QACR,CAAC;QAED,yCAAyC;QACzC,MAAM,OAAO,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,wEAAwE;QACxE,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM;QACR,CAAC;QACD,qDAAqD;QACrD,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -34,12 +34,14 @@ export * from './utils/systemEncoding.js';
34
34
  export * from './utils/textUtils.js';
35
35
  export * from './utils/formatters.js';
36
36
  export * from './utils/filesearch/fileSearch.js';
37
+ export * from './utils/errorParsing.js';
37
38
  export * from './services/fileDiscoveryService.js';
38
39
  export * from './services/gitService.js';
39
40
  export * from './ide/ide-client.js';
40
41
  export * from './ide/ideContext.js';
41
42
  export * from './ide/ide-installer.js';
42
43
  export { getIdeInfo, DetectedIde, IdeInfo } from './ide/detect-ide.js';
44
+ export * from './ide/constants.js';
43
45
  export * from './services/shellExecutionService.js';
44
46
  export * from './tools/tools.js';
45
47
  export * from './tools/tool-error.js';
package/dist/src/index.js CHANGED
@@ -37,6 +37,7 @@ export * from './utils/systemEncoding.js';
37
37
  export * from './utils/textUtils.js';
38
38
  export * from './utils/formatters.js';
39
39
  export * from './utils/filesearch/fileSearch.js';
40
+ export * from './utils/errorParsing.js';
40
41
  // Export services
41
42
  export * from './services/fileDiscoveryService.js';
42
43
  export * from './services/gitService.js';
@@ -45,6 +46,7 @@ export * from './ide/ide-client.js';
45
46
  export * from './ide/ideContext.js';
46
47
  export * from './ide/ide-installer.js';
47
48
  export { getIdeInfo, DetectedIde } from './ide/detect-ide.js';
49
+ export * from './ide/constants.js';
48
50
  // Export Shell Execution Service
49
51
  export * from './services/shellExecutionService.js';
50
52
  // Export base tool definitions
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AAEnC,oBAAoB;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AAErD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AAEvC,mBAAmB;AACnB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AAEjD,kBAAkB;AAClB,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AAEzC,4BAA4B;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAW,MAAM,qBAAqB,CAAC;AAEvE,iCAAiC;AACjC,cAAc,qCAAqC,CAAC;AAEpD,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AAEzC,sBAAsB;AACtB,cAAc,0BAA0B,CAAC;AAEzC,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAEpC,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,cAAc,oBAAoB,CAAC;AAEnC,oBAAoB;AACpB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AAErD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AAEvC,mBAAmB;AACnB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AAExC,kBAAkB;AAClB,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AAEzC,4BAA4B;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAW,MAAM,qBAAqB,CAAC;AACvE,cAAc,oBAAoB,CAAC;AAEnC,iCAAiC;AACjC,cAAc,qCAAqC,CAAC;AAEpD,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AAEzC,sBAAsB;AACtB,cAAc,0BAA0B,CAAC;AAEzC,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAEpC,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,6BAA6B;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,oBAAoB,CAAC"}
@@ -69,7 +69,6 @@ export declare class MCPOAuthProvider {
69
69
  private static readonly REDIRECT_PORT;
70
70
  private static readonly REDIRECT_PATH;
71
71
  private static readonly HTTP_OK;
72
- private static readonly HTTP_REDIRECT;
73
72
  /**
74
73
  * Register a client dynamically with the OAuth server.
75
74
  *
@@ -17,7 +17,6 @@ export class MCPOAuthProvider {
17
17
  static REDIRECT_PORT = 7777;
18
18
  static REDIRECT_PATH = '/oauth/callback';
19
19
  static HTTP_OK = 200;
20
- static HTTP_REDIRECT = 302;
21
20
  /**
22
21
  * Register a client dynamically with the OAuth server.
23
22
  *
@@ -57,8 +56,8 @@ export class MCPOAuthProvider {
57
56
  * @returns OAuth configuration if discovered, null otherwise
58
57
  */
59
58
  static async discoverOAuthFromMCPServer(mcpServerUrl) {
60
- const baseUrl = OAuthUtils.extractBaseUrl(mcpServerUrl);
61
- return OAuthUtils.discoverOAuthConfig(baseUrl);
59
+ // Use the full URL with path preserved for OAuth discovery
60
+ return OAuthUtils.discoverOAuthConfig(mcpServerUrl);
62
61
  }
63
62
  /**
64
63
  * Generate PKCE parameters for OAuth flow.
@@ -180,13 +179,14 @@ export class MCPOAuthProvider {
180
179
  params.append('audience', config.audiences.join(' '));
181
180
  }
182
181
  // Add resource parameter for MCP OAuth spec compliance
183
- // Use the MCP server URL if provided, otherwise fall back to authorization URL
184
- const resourceUrl = mcpServerUrl || config.authorizationUrl;
185
- try {
186
- params.append('resource', OAuthUtils.buildResourceParameter(resourceUrl));
187
- }
188
- catch (error) {
189
- throw new Error(`Invalid resource URL: "${resourceUrl}". ${getErrorMessage(error)}`);
182
+ // Only add if we have an MCP server URL (indicates MCP OAuth flow, not standard OAuth)
183
+ if (mcpServerUrl) {
184
+ try {
185
+ params.append('resource', OAuthUtils.buildResourceParameter(mcpServerUrl));
186
+ }
187
+ catch (error) {
188
+ console.warn(`Could not add resource parameter: ${getErrorMessage(error)}`);
189
+ }
190
190
  }
191
191
  const url = new URL(config.authorizationUrl);
192
192
  params.forEach((value, key) => {
@@ -220,26 +220,76 @@ export class MCPOAuthProvider {
220
220
  params.append('audience', config.audiences.join(' '));
221
221
  }
222
222
  // Add resource parameter for MCP OAuth spec compliance
223
- // Use the MCP server URL if provided, otherwise fall back to token URL
224
- const resourceUrl = mcpServerUrl || config.tokenUrl;
225
- try {
226
- params.append('resource', OAuthUtils.buildResourceParameter(resourceUrl));
227
- }
228
- catch (error) {
229
- throw new Error(`Invalid resource URL: "${resourceUrl}". ${getErrorMessage(error)}`);
223
+ // Only add if we have an MCP server URL (indicates MCP OAuth flow, not standard OAuth)
224
+ if (mcpServerUrl) {
225
+ const resourceUrl = mcpServerUrl;
226
+ try {
227
+ params.append('resource', OAuthUtils.buildResourceParameter(resourceUrl));
228
+ }
229
+ catch (error) {
230
+ console.warn(`Could not add resource parameter: ${getErrorMessage(error)}`);
231
+ }
230
232
  }
231
233
  const response = await fetch(config.tokenUrl, {
232
234
  method: 'POST',
233
235
  headers: {
234
236
  'Content-Type': 'application/x-www-form-urlencoded',
237
+ Accept: 'application/json, application/x-www-form-urlencoded',
235
238
  },
236
239
  body: params.toString(),
237
240
  });
241
+ const responseText = await response.text();
242
+ const contentType = response.headers.get('content-type') || '';
238
243
  if (!response.ok) {
239
- const errorText = await response.text();
240
- throw new Error(`Token exchange failed: ${response.status} - ${errorText}`);
244
+ // Try to parse error from form-urlencoded response
245
+ let errorMessage = null;
246
+ try {
247
+ const errorParams = new URLSearchParams(responseText);
248
+ const error = errorParams.get('error');
249
+ const errorDescription = errorParams.get('error_description');
250
+ if (error) {
251
+ errorMessage = `Token exchange failed: ${error} - ${errorDescription || 'No description'}`;
252
+ }
253
+ }
254
+ catch {
255
+ // Fall back to raw error
256
+ }
257
+ throw new Error(errorMessage ||
258
+ `Token exchange failed: ${response.status} - ${responseText}`);
259
+ }
260
+ // Log unexpected content types for debugging
261
+ if (!contentType.includes('application/json') &&
262
+ !contentType.includes('application/x-www-form-urlencoded')) {
263
+ console.warn(`Token endpoint returned unexpected content-type: ${contentType}. ` +
264
+ `Expected application/json or application/x-www-form-urlencoded. ` +
265
+ `Will attempt to parse response.`);
266
+ }
267
+ // Try to parse as JSON first, fall back to form-urlencoded
268
+ try {
269
+ return JSON.parse(responseText);
270
+ }
271
+ catch {
272
+ // Parse form-urlencoded response
273
+ const tokenParams = new URLSearchParams(responseText);
274
+ const accessToken = tokenParams.get('access_token');
275
+ const tokenType = tokenParams.get('token_type') || 'Bearer';
276
+ const expiresIn = tokenParams.get('expires_in');
277
+ const refreshToken = tokenParams.get('refresh_token');
278
+ const scope = tokenParams.get('scope');
279
+ if (!accessToken) {
280
+ // Check for error in response
281
+ const error = tokenParams.get('error');
282
+ const errorDescription = tokenParams.get('error_description');
283
+ throw new Error(`Token exchange failed: ${error || 'no_access_token'} - ${errorDescription || responseText}`);
284
+ }
285
+ return {
286
+ access_token: accessToken,
287
+ token_type: tokenType,
288
+ expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined,
289
+ refresh_token: refreshToken || undefined,
290
+ scope: scope || undefined,
291
+ };
241
292
  }
242
- return (await response.json());
243
293
  }
244
294
  /**
245
295
  * Refresh an access token using a refresh token.
@@ -266,26 +316,75 @@ export class MCPOAuthProvider {
266
316
  params.append('audience', config.audiences.join(' '));
267
317
  }
268
318
  // Add resource parameter for MCP OAuth spec compliance
269
- // Use the MCP server URL if provided, otherwise fall back to token URL
270
- const resourceUrl = mcpServerUrl || tokenUrl;
271
- try {
272
- params.append('resource', OAuthUtils.buildResourceParameter(resourceUrl));
273
- }
274
- catch (error) {
275
- throw new Error(`Invalid resource URL: "${resourceUrl}". ${getErrorMessage(error)}`);
319
+ // Only add if we have an MCP server URL (indicates MCP OAuth flow, not standard OAuth)
320
+ if (mcpServerUrl) {
321
+ try {
322
+ params.append('resource', OAuthUtils.buildResourceParameter(mcpServerUrl));
323
+ }
324
+ catch (error) {
325
+ console.warn(`Could not add resource parameter: ${getErrorMessage(error)}`);
326
+ }
276
327
  }
277
328
  const response = await fetch(tokenUrl, {
278
329
  method: 'POST',
279
330
  headers: {
280
331
  'Content-Type': 'application/x-www-form-urlencoded',
332
+ Accept: 'application/json, application/x-www-form-urlencoded',
281
333
  },
282
334
  body: params.toString(),
283
335
  });
336
+ const responseText = await response.text();
337
+ const contentType = response.headers.get('content-type') || '';
284
338
  if (!response.ok) {
285
- const errorText = await response.text();
286
- throw new Error(`Token refresh failed: ${response.status} - ${errorText}`);
339
+ // Try to parse error from form-urlencoded response
340
+ let errorMessage = null;
341
+ try {
342
+ const errorParams = new URLSearchParams(responseText);
343
+ const error = errorParams.get('error');
344
+ const errorDescription = errorParams.get('error_description');
345
+ if (error) {
346
+ errorMessage = `Token refresh failed: ${error} - ${errorDescription || 'No description'}`;
347
+ }
348
+ }
349
+ catch {
350
+ // Fall back to raw error
351
+ }
352
+ throw new Error(errorMessage ||
353
+ `Token refresh failed: ${response.status} - ${responseText}`);
354
+ }
355
+ // Log unexpected content types for debugging
356
+ if (!contentType.includes('application/json') &&
357
+ !contentType.includes('application/x-www-form-urlencoded')) {
358
+ console.warn(`Token refresh endpoint returned unexpected content-type: ${contentType}. ` +
359
+ `Expected application/json or application/x-www-form-urlencoded. ` +
360
+ `Will attempt to parse response.`);
361
+ }
362
+ // Try to parse as JSON first, fall back to form-urlencoded
363
+ try {
364
+ return JSON.parse(responseText);
365
+ }
366
+ catch {
367
+ // Parse form-urlencoded response
368
+ const tokenParams = new URLSearchParams(responseText);
369
+ const accessToken = tokenParams.get('access_token');
370
+ const tokenType = tokenParams.get('token_type') || 'Bearer';
371
+ const expiresIn = tokenParams.get('expires_in');
372
+ const refreshToken = tokenParams.get('refresh_token');
373
+ const scope = tokenParams.get('scope');
374
+ if (!accessToken) {
375
+ // Check for error in response
376
+ const error = tokenParams.get('error');
377
+ const errorDescription = tokenParams.get('error_description');
378
+ throw new Error(`Token refresh failed: ${error || 'unknown_error'} - ${errorDescription || responseText}`);
379
+ }
380
+ return {
381
+ access_token: accessToken,
382
+ token_type: tokenType,
383
+ expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined,
384
+ refresh_token: refreshToken || undefined,
385
+ scope: scope || undefined,
386
+ };
287
387
  }
288
- return (await response.json());
289
388
  }
290
389
  /**
291
390
  * Perform the full OAuth authorization code flow with PKCE.
@@ -299,39 +398,51 @@ export class MCPOAuthProvider {
299
398
  // If no authorization URL is provided, try to discover OAuth configuration
300
399
  if (!config.authorizationUrl && mcpServerUrl) {
301
400
  console.log('No authorization URL provided, attempting OAuth discovery...');
302
- // For SSE URLs, first check if authentication is required
303
- if (OAuthUtils.isSSEEndpoint(mcpServerUrl)) {
304
- try {
305
- const response = await fetch(mcpServerUrl, {
306
- method: 'HEAD',
307
- headers: {
308
- Accept: 'text/event-stream',
309
- },
310
- });
311
- if (response.status === 401 || response.status === 307) {
312
- const wwwAuthenticate = response.headers.get('www-authenticate');
313
- if (wwwAuthenticate) {
314
- const discoveredConfig = await OAuthUtils.discoverOAuthFromWWWAuthenticate(wwwAuthenticate);
315
- if (discoveredConfig) {
316
- config = {
317
- ...config,
318
- ...discoveredConfig,
319
- scopes: discoveredConfig.scopes || config.scopes || [],
320
- };
321
- }
401
+ // First check if the server requires authentication via WWW-Authenticate header
402
+ try {
403
+ const headers = OAuthUtils.isSSEEndpoint(mcpServerUrl)
404
+ ? { Accept: 'text/event-stream' }
405
+ : { Accept: 'application/json' };
406
+ const response = await fetch(mcpServerUrl, {
407
+ method: 'HEAD',
408
+ headers,
409
+ });
410
+ if (response.status === 401 || response.status === 307) {
411
+ const wwwAuthenticate = response.headers.get('www-authenticate');
412
+ if (wwwAuthenticate) {
413
+ const discoveredConfig = await OAuthUtils.discoverOAuthFromWWWAuthenticate(wwwAuthenticate);
414
+ if (discoveredConfig) {
415
+ // Merge discovered config with existing config, preserving clientId and clientSecret
416
+ config = {
417
+ ...config,
418
+ authorizationUrl: discoveredConfig.authorizationUrl,
419
+ tokenUrl: discoveredConfig.tokenUrl,
420
+ scopes: discoveredConfig.scopes || config.scopes || [],
421
+ // Preserve existing client credentials
422
+ clientId: config.clientId,
423
+ clientSecret: config.clientSecret,
424
+ };
322
425
  }
323
426
  }
324
427
  }
325
- catch (error) {
326
- console.debug(`Failed to check SSE endpoint for authentication requirements: ${getErrorMessage(error)}`);
327
- }
428
+ }
429
+ catch (error) {
430
+ console.debug(`Failed to check endpoint for authentication requirements: ${getErrorMessage(error)}`);
328
431
  }
329
432
  // If we still don't have OAuth config, try the standard discovery
330
433
  if (!config.authorizationUrl) {
331
434
  const discoveredConfig = await this.discoverOAuthFromMCPServer(mcpServerUrl);
332
435
  if (discoveredConfig) {
333
- config = { ...config, ...discoveredConfig };
334
- console.log('OAuth configuration discovered successfully');
436
+ // Merge discovered config with existing config, preserving clientId and clientSecret
437
+ config = {
438
+ ...config,
439
+ authorizationUrl: discoveredConfig.authorizationUrl,
440
+ tokenUrl: discoveredConfig.tokenUrl,
441
+ scopes: discoveredConfig.scopes || config.scopes || [],
442
+ // Preserve existing client credentials
443
+ clientId: config.clientId,
444
+ clientSecret: config.clientSecret,
445
+ };
335
446
  }
336
447
  else {
337
448
  throw new Error('Failed to discover OAuth configuration from MCP server');
@@ -405,9 +516,12 @@ export class MCPOAuthProvider {
405
516
  // Exchange code for tokens
406
517
  const tokenResponse = await this.exchangeCodeForToken(config, code, pkceParams.codeVerifier, mcpServerUrl);
407
518
  // Convert to our token format
519
+ if (!tokenResponse.access_token) {
520
+ throw new Error('No access token received from token endpoint');
521
+ }
408
522
  const token = {
409
523
  accessToken: tokenResponse.access_token,
410
- tokenType: tokenResponse.token_type,
524
+ tokenType: tokenResponse.token_type || 'Bearer',
411
525
  refreshToken: tokenResponse.refresh_token,
412
526
  scope: tokenResponse.scope,
413
527
  };
@@ -420,11 +534,14 @@ export class MCPOAuthProvider {
420
534
  console.log('Authentication successful! Token saved.');
421
535
  // Verify token was saved
422
536
  const savedToken = await MCPOAuthTokenStorage.getToken(serverName);
423
- if (savedToken) {
424
- console.log(`Token verification successful: ${savedToken.token.accessToken.substring(0, 20)}...`);
537
+ if (savedToken && savedToken.token && savedToken.token.accessToken) {
538
+ const tokenPreview = savedToken.token.accessToken.length > 20
539
+ ? `${savedToken.token.accessToken.substring(0, 20)}...`
540
+ : '[token]';
541
+ console.log(`Token verification successful: ${tokenPreview}`);
425
542
  }
426
543
  else {
427
- console.error('Token verification failed: token not found after save');
544
+ console.error('Token verification failed: token not found or invalid after save');
428
545
  }
429
546
  }
430
547
  catch (saveError) {