@google/gemini-cli-core 0.64.0-preview.0 → 0.65.0-nightly.20261008.g44d764ee5
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.
- package/dist/docs/changelogs/index.md +14 -0
- package/dist/docs/changelogs/latest.md +55 -34
- package/dist/docs/changelogs/preview.md +59 -54
- package/dist/docs/cli/telemetry.md +1 -0
- package/dist/docs/reference/configuration.md +7 -0
- package/dist/docs/tools/mcp-server.md +41 -12
- package/dist/google-gemini-cli-core-0.65.0-nightly.20261006.gfb972b2f8.tgz +0 -0
- package/dist/src/agents/auth-provider/oauth2-provider.d.ts +11 -2
- package/dist/src/agents/auth-provider/oauth2-provider.js +54 -11
- package/dist/src/agents/auth-provider/oauth2-provider.js.map +1 -1
- package/dist/src/agents/auth-provider/oauth2-provider.test.js +72 -0
- package/dist/src/agents/auth-provider/oauth2-provider.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +6 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +18 -0
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/config/config.d.ts +2 -0
- package/dist/src/config/config.js +4 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +23 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/client.d.ts +6 -0
- package/dist/src/core/client.js +15 -0
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +31 -0
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +49 -0
- package/dist/src/core/geminiChat.js +209 -31
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +677 -1
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/mcp/oauth-callback-iss-handling.test.d.ts +6 -0
- package/dist/src/mcp/oauth-callback-iss-handling.test.js +251 -0
- package/dist/src/mcp/oauth-callback-iss-handling.test.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +1 -0
- package/dist/src/mcp/oauth-provider.js +10 -1
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +112 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +6 -0
- package/dist/src/mcp/oauth-utils.js +6 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +32 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +6 -1
- package/dist/src/services/chatRecordingService.js +86 -22
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +176 -15
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +7 -0
- package/dist/src/telemetry/config.js +194 -11
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/config.test.js +167 -1
- package/dist/src/telemetry/config.test.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -1
- package/dist/src/telemetry/index.js +1 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/sdk.js +26 -0
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +63 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/tools/mcp-client.js +5 -0
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +49 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.js +6 -1
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/historyHardening.js +4 -0
- package/dist/src/utils/historyHardening.js.map +1 -1
- package/dist/src/utils/historyHardening.test.js +39 -0
- package/dist/src/utils/historyHardening.test.js.map +1 -1
- package/dist/src/utils/oauth-flow.d.ts +3 -1
- package/dist/src/utils/oauth-flow.js +33 -8
- package/dist/src/utils/oauth-flow.js.map +1 -1
- package/dist/src/utils/oauth-flow.test.js +51 -2
- package/dist/src/utils/oauth-flow.test.js.map +1 -1
- package/dist/src/utils/retry.js +6 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +29 -1
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/sessionUtils.d.ts +11 -0
- package/dist/src/utils/sessionUtils.js +99 -13
- package/dist/src/utils/sessionUtils.js.map +1 -1
- package/dist/src/utils/sessionUtils.test.js +405 -7
- package/dist/src/utils/sessionUtils.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -18,6 +18,20 @@ on GitHub.
|
|
|
18
18
|
| [Preview](preview.md) | Experimental features ready for early feedback. |
|
|
19
19
|
| [Stable](latest.md) | Stable, recommended for general use. |
|
|
20
20
|
|
|
21
|
+
## Announcements: v0.63.0 - 2026-10-06
|
|
22
|
+
|
|
23
|
+
- **Autonomous Plan Execution:** Enabled autonomous plan execution in
|
|
24
|
+
non-interactive mode to support unattended agent workflows
|
|
25
|
+
([#29539](https://github.com/google-gemini/gemini-cli/pull/29539) by
|
|
26
|
+
@urielefrenvirtusa).
|
|
27
|
+
- **Core Stability and Memory Lifecycle:** Bounded tool output sizes and
|
|
28
|
+
optimized memory management in long-running agent loops while preventing
|
|
29
|
+
infinite authentication loops across headless and supervisor environments
|
|
30
|
+
([#29451](https://github.com/google-gemini/gemini-cli/pull/29451) by
|
|
31
|
+
@diegogodinezr,
|
|
32
|
+
[#29448](https://github.com/google-gemini/gemini-cli/pull/29448) by
|
|
33
|
+
@villahernandez-coder).
|
|
34
|
+
|
|
21
35
|
## Announcements: v0.61.0 - 2026-09-23
|
|
22
36
|
|
|
23
37
|
- **Core Security Hardening:** Prevented indirect prompt injection
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Latest stable release: v0.
|
|
1
|
+
# Latest stable release: v0.63.0
|
|
2
2
|
|
|
3
|
-
Released:
|
|
3
|
+
Released: October 6, 2026
|
|
4
4
|
|
|
5
5
|
For most users, our latest stable release is the recommended release. Install
|
|
6
6
|
the latest stable version with:
|
|
@@ -11,41 +11,62 @@ npm install -g @google/gemini-cli
|
|
|
11
11
|
|
|
12
12
|
## Highlights
|
|
13
13
|
|
|
14
|
-
- **
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- **
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
- **Autonomous Plan Execution:** Enabled autonomous plan execution in
|
|
15
|
+
non-interactive mode, allowing automated agent workflows to run multi-step
|
|
16
|
+
plans without requiring interactive user confirmation.
|
|
17
|
+
- **Memory Lifecycle & Output Bounding:** Bounded tool output sizes and
|
|
18
|
+
optimized the memory lifecycle in long-running agent loops to prevent memory
|
|
19
|
+
exhaustion, while formatting full output when truncation is disabled.
|
|
20
|
+
- **Authentication Resilience:** Prevented infinite authentication loops caused
|
|
21
|
+
by file contention, headless keyring environments, and supervisor state drops,
|
|
22
|
+
ensuring reliable credential handling across environments.
|
|
23
|
+
- **CLI & Connection Recovery UX:** Displayed a retry progress indicator during
|
|
24
|
+
connection recovery, restored paused stdin after capability detection, and
|
|
25
|
+
ensured automatic temporary directory cleanup upon background shell execution
|
|
26
|
+
exit.
|
|
24
27
|
|
|
25
28
|
## What's Changed
|
|
26
29
|
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
- fix(cli): display retry progress indicator during connection recovery (#28340)
|
|
31
|
+
by @amelidev in
|
|
32
|
+
[#29468](https://github.com/google-gemini/gemini-cli/pull/29468)
|
|
33
|
+
- Changelog for v0.61.0-preview.1 by @gemini-cli-robot in
|
|
34
|
+
[#29469](https://github.com/google-gemini/gemini-cli/pull/29469)
|
|
35
|
+
- Changelog for v0.61.0 by @gemini-cli-robot in
|
|
36
|
+
[#29472](https://github.com/google-gemini/gemini-cli/pull/29472)
|
|
37
|
+
- fix(cli): distinguish missing MCP enablement config from malformed JSON by
|
|
38
|
+
@jesussamuel-byte in
|
|
39
|
+
[#29446](https://github.com/google-gemini/gemini-cli/pull/29446)
|
|
40
|
+
- fix(cli): restore paused stdin after capability detection by @ugorla-dev in
|
|
41
|
+
[#29487](https://github.com/google-gemini/gemini-cli/pull/29487)
|
|
42
|
+
- fix(core): bound tool output size and optimize memory lifecycle in
|
|
43
|
+
long-running agent loops by @diegogodinezr in
|
|
44
|
+
[#29451](https://github.com/google-gemini/gemini-cli/pull/29451)
|
|
45
|
+
- fix(core): remove invalid diff.external override by @urielefrenvirtusa in
|
|
46
|
+
[#29467](https://github.com/google-gemini/gemini-cli/pull/29467)
|
|
47
|
+
- chore(release): bump version to 0.63.0-nightly.20260923.gf50ba8608 by
|
|
30
48
|
@gemini-cli-robot in
|
|
31
|
-
[#
|
|
32
|
-
- Changelog for v0.
|
|
33
|
-
[#
|
|
34
|
-
- fix(core):
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@
|
|
48
|
-
[#
|
|
49
|
+
[#29471](https://github.com/google-gemini/gemini-cli/pull/29471)
|
|
50
|
+
- Changelog for v0.62.0-preview.0 by @gemini-cli-robot in
|
|
51
|
+
[#29470](https://github.com/google-gemini/gemini-cli/pull/29470)
|
|
52
|
+
- fix(core): clean up temporary directory when background shell execution exits
|
|
53
|
+
by @jesussamuel-byte in
|
|
54
|
+
[#29437](https://github.com/google-gemini/gemini-cli/pull/29437)
|
|
55
|
+
- fix(acp): resolve session before config initialization and avoid same-minute
|
|
56
|
+
filename collisions by @jesussamuel-byte in
|
|
57
|
+
[#29463](https://github.com/google-gemini/gemini-cli/pull/29463)
|
|
58
|
+
- fix(core): align policy redirection gates, path validation, and workflow
|
|
59
|
+
parsing by @DavidAPierce in
|
|
60
|
+
[#29506](https://github.com/google-gemini/gemini-cli/pull/29506)
|
|
61
|
+
- fix(auth): prevent infinite auth loop from file contention, headless keyring,
|
|
62
|
+
and supervisor state drops (#28341) by @villahernandez-coder in
|
|
63
|
+
[#29448](https://github.com/google-gemini/gemini-cli/pull/29448)
|
|
64
|
+
- fix(core): enable autonomous plan execution in non-interactive mode by
|
|
65
|
+
@urielefrenvirtusa in
|
|
66
|
+
[#29539](https://github.com/google-gemini/gemini-cli/pull/29539)
|
|
67
|
+
- fix(core): disable truncation when maxChars <= 0 in formatTruncatedToolOutput
|
|
68
|
+
by @diegogodinezr in
|
|
69
|
+
[#29542](https://github.com/google-gemini/gemini-cli/pull/29542)
|
|
49
70
|
|
|
50
71
|
**Full Changelog**:
|
|
51
|
-
https://github.com/google-gemini/gemini-cli/compare/v0.
|
|
72
|
+
https://github.com/google-gemini/gemini-cli/compare/v0.62.0...v0.63.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Preview release: v0.
|
|
1
|
+
# Preview release: v0.64.0-preview.0
|
|
2
2
|
|
|
3
|
-
Released:
|
|
3
|
+
Released: October 6, 2026
|
|
4
4
|
|
|
5
5
|
Our preview release includes the latest, new, and experimental features. This
|
|
6
6
|
release may not be as stable as our [latest weekly release](latest.md).
|
|
@@ -13,62 +13,67 @@ npm install -g @google/gemini-cli@preview
|
|
|
13
13
|
|
|
14
14
|
## Highlights
|
|
15
15
|
|
|
16
|
-
- **
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- **
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- **
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- **
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
exit.
|
|
16
|
+
- **Atomic File Operations & State Recovery**: Serialized file tool operations
|
|
17
|
+
with atomic writes and introduced atomic CLI state persistence with automatic
|
|
18
|
+
recovery from backup on corruption.
|
|
19
|
+
- **Chat Recording Optimization**: Implemented append-only delta patching and
|
|
20
|
+
bounded history windowing in ChatRecordingService to optimize memory and disk
|
|
21
|
+
efficiency during long-running sessions.
|
|
22
|
+
- **CLI Input & Reference Resolution**: Added support for resolving `@file:line`
|
|
23
|
+
references, resolved CPU hangs and quote swallowing on `@` symbols within code
|
|
24
|
+
blocks, and prevented ghost text wrap hangs.
|
|
25
|
+
- **Terminal UI & Interaction Stability**: Ensured Ctrl+C emergency aborts reach
|
|
26
|
+
active cancellation handlers, made selection list confirmation with Enter and
|
|
27
|
+
Spacebar reliable, and fixed Windows ConPTY IME cursor forwarding.
|
|
29
28
|
|
|
30
29
|
## What's Changed
|
|
31
30
|
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
[#
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
[#
|
|
42
|
-
-
|
|
43
|
-
[#29487](https://github.com/google-gemini/gemini-cli/pull/29487)
|
|
44
|
-
- fix(core): bound tool output size and optimize memory lifecycle in
|
|
45
|
-
long-running agent loops by @diegogodinezr in
|
|
46
|
-
[#29451](https://github.com/google-gemini/gemini-cli/pull/29451)
|
|
47
|
-
- fix(core): remove invalid diff.external override by @urielefrenvirtusa in
|
|
48
|
-
[#29467](https://github.com/google-gemini/gemini-cli/pull/29467)
|
|
49
|
-
- chore(release): bump version to 0.63.0-nightly.20260923.gf50ba8608 by
|
|
31
|
+
- refactor(a2a-server): implement V1 to V2 settings migration logic by
|
|
32
|
+
@jvargassanchez-dot in
|
|
33
|
+
[#29450](https://github.com/google-gemini/gemini-cli/pull/29450)
|
|
34
|
+
- fix(acp): bridge PromptResponse.usage and emit usage_update notifications
|
|
35
|
+
(#29389) by @elberthc-byte in
|
|
36
|
+
[#29549](https://github.com/google-gemini/gemini-cli/pull/29549)
|
|
37
|
+
- Changelog for v0.63.0-preview.0 by @gemini-cli-robot in
|
|
38
|
+
[#29565](https://github.com/google-gemini/gemini-cli/pull/29565)
|
|
39
|
+
- fix(cli): propagate resolved folder trust state in headless mode (#29031) by
|
|
40
|
+
@amelidev in [#29528](https://github.com/google-gemini/gemini-cli/pull/29528)
|
|
41
|
+
- chore(release): bump version to 0.64.0-nightly.20260929.gd75234cae by
|
|
50
42
|
@gemini-cli-robot in
|
|
51
|
-
[#
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
-
|
|
61
|
-
|
|
62
|
-
[#29506](https://github.com/google-gemini/gemini-cli/pull/29506)
|
|
63
|
-
- fix(auth): prevent infinite auth loop from file contention, headless keyring,
|
|
64
|
-
and supervisor state drops (#28341) by @villahernandez-coder in
|
|
65
|
-
[#29448](https://github.com/google-gemini/gemini-cli/pull/29448)
|
|
66
|
-
- fix(core): enable autonomous plan execution in non-interactive mode by
|
|
43
|
+
[#29567](https://github.com/google-gemini/gemini-cli/pull/29567)
|
|
44
|
+
- fix(cli): prevent CPU hang and quote swallowing on @ within code (#29434) by
|
|
45
|
+
@elberthc-byte in
|
|
46
|
+
[#29557](https://github.com/google-gemini/gemini-cli/pull/29557)
|
|
47
|
+
- fix(core): serialize file tool operations and make writes atomic (#29078) by
|
|
48
|
+
@elberthc-byte in
|
|
49
|
+
[#29499](https://github.com/google-gemini/gemini-cli/pull/29499)
|
|
50
|
+
- fix(core): implement append-only delta patching and bounded history windowing
|
|
51
|
+
in ChatRecordingService by @jvargassanchez-dot in
|
|
52
|
+
[#29568](https://github.com/google-gemini/gemini-cli/pull/29568)
|
|
53
|
+
- fix(cli): persist state atomically and recover from backup on corruption by
|
|
67
54
|
@urielefrenvirtusa in
|
|
68
|
-
[#
|
|
69
|
-
- fix(
|
|
70
|
-
by @
|
|
71
|
-
[#
|
|
55
|
+
[#29558](https://github.com/google-gemini/gemini-cli/pull/29558)
|
|
56
|
+
- fix(cli): ensure Ctrl+C emergency abort reaches cancellation handler during
|
|
57
|
+
active operations by @urielefrenvirtusa in
|
|
58
|
+
[#29586](https://github.com/google-gemini/gemini-cli/pull/29586)
|
|
59
|
+
- fix(cli): resolve @file:line references and prevent ghost text wrap hang by
|
|
60
|
+
@jesussamuel-byte in
|
|
61
|
+
[#29581](https://github.com/google-gemini/gemini-cli/pull/29581)
|
|
62
|
+
- fix(ui): ensure Windows ConPTY forwards IME cursor position by
|
|
63
|
+
@jesussamuel-byte in
|
|
64
|
+
[#29560](https://github.com/google-gemini/gemini-cli/pull/29560)
|
|
65
|
+
- fix(cli): retry directory removal on Windows locking errors during extension
|
|
66
|
+
updates by @jesussamuel-byte in
|
|
67
|
+
[#29540](https://github.com/google-gemini/gemini-cli/pull/29540)
|
|
68
|
+
- fix(acp): resolve session by exact id and handle listener cleanup on session
|
|
69
|
+
failure by @diegogodinezr in
|
|
70
|
+
[#29580](https://github.com/google-gemini/gemini-cli/pull/29580)
|
|
71
|
+
- fix(cli): preserve scroll position and partition pending height budget by
|
|
72
|
+
@luisfelipe-alt in
|
|
73
|
+
[#29520](https://github.com/google-gemini/gemini-cli/pull/29520)
|
|
74
|
+
- fix(cli): ensure Enter and Spacebar reliably confirm selection list options by
|
|
75
|
+
@ugorla-dev in
|
|
76
|
+
[#29502](https://github.com/google-gemini/gemini-cli/pull/29502)
|
|
72
77
|
|
|
73
78
|
**Full Changelog**:
|
|
74
|
-
https://github.com/google-gemini/gemini-cli/compare/v0.
|
|
79
|
+
https://github.com/google-gemini/gemini-cli/compare/v0.63.0-preview.0...v0.64.0-preview.0
|
|
@@ -42,6 +42,7 @@ Environment variables can override these settings.
|
|
|
42
42
|
| `target` | `GEMINI_TELEMETRY_TARGET` | Where to send telemetry data | `"gcp"`/`"local"` | `"local"` |
|
|
43
43
|
| `otlpEndpoint` | `GEMINI_TELEMETRY_OTLP_ENDPOINT` | OTLP collector endpoint | URL string | `http://localhost:4317` |
|
|
44
44
|
| `otlpProtocol` | `GEMINI_TELEMETRY_OTLP_PROTOCOL` | OTLP transport protocol | `"grpc"`/`"http"` | `"grpc"` |
|
|
45
|
+
| `otlpHeaders` | `GEMINI_TELEMETRY_OTLP_HEADERS` | Custom headers for OTLP exporter requests | JSON/`key=value` | - |
|
|
45
46
|
| `outfile` | `GEMINI_TELEMETRY_OUTFILE` | Save telemetry to file (overrides `otlpEndpoint`) | file path | - |
|
|
46
47
|
| `logPrompts` | `GEMINI_TELEMETRY_LOG_PROMPTS` | Include prompts in telemetry logs | `true`/`false` | `true` |
|
|
47
48
|
| `useCollector` | `GEMINI_TELEMETRY_USE_COLLECTOR` | Use external OTLP collector (advanced) | `true`/`false` | `false` |
|
|
@@ -2550,6 +2550,8 @@ see [Telemetry](../cli/telemetry.md).
|
|
|
2550
2550
|
- **`otlpEndpoint`** (string): The endpoint for the OTLP Exporter.
|
|
2551
2551
|
- **`otlpProtocol`** (string): The protocol for the OTLP Exporter (`grpc` or
|
|
2552
2552
|
`http`).
|
|
2553
|
+
- **`otlpHeaders`** (object): Custom headers to send with OTLP Exporter
|
|
2554
|
+
requests.
|
|
2553
2555
|
- **`logPrompts`** (boolean): Whether or not to include the content of user
|
|
2554
2556
|
prompts in the logs.
|
|
2555
2557
|
- **`outfile`** (string): The file to write telemetry to when `target` is
|
|
@@ -2766,6 +2768,11 @@ the `advanced.excludedEnvVars` setting in your `settings.json` file.
|
|
|
2766
2768
|
- **`GEMINI_TELEMETRY_OTLP_PROTOCOL`**:
|
|
2767
2769
|
- Sets the OTLP protocol (`grpc` or `http`).
|
|
2768
2770
|
- Overrides the `telemetry.otlpProtocol` setting.
|
|
2771
|
+
- **`GEMINI_TELEMETRY_OTLP_HEADERS`**:
|
|
2772
|
+
- Sets custom headers for OTLP exporter requests (as a JSON object string or
|
|
2773
|
+
comma-separated `key=value` pairs; also falls back to
|
|
2774
|
+
`OTEL_EXPORTER_OTLP_HEADERS`).
|
|
2775
|
+
- Merges with and overrides headers in the `telemetry.otlpHeaders` setting.
|
|
2769
2776
|
- **`GEMINI_TELEMETRY_LOG_PROMPTS`**:
|
|
2770
2777
|
- Set to `true` or `1` to enable or disable logging of user prompts. Any other
|
|
2771
2778
|
value is treated as disabling it.
|
|
@@ -326,17 +326,31 @@ This feature will not work in:
|
|
|
326
326
|
|
|
327
327
|
<!-- prettier-ignore -->
|
|
328
328
|
> [!IMPORTANT]
|
|
329
|
-
>
|
|
330
|
-
>
|
|
331
|
-
>
|
|
332
|
-
>
|
|
333
|
-
>
|
|
334
|
-
> `
|
|
329
|
+
> Gemini CLI validates the `iss` (issuer) parameter in OAuth authorization
|
|
330
|
+
> responses per [RFC 9207](https://www.rfc-editor.org/rfc/rfc9207) and the MCP
|
|
331
|
+
> specification:
|
|
332
|
+
>
|
|
333
|
+
> - Whenever the `iss` parameter is present in the callback redirect and an
|
|
334
|
+
> expected `issuer` is discovered or configured, `iss` **must** match the
|
|
335
|
+
> expected issuer URL.
|
|
336
|
+
> - When the authorization server metadata sets
|
|
337
|
+
> `authorization_response_iss_parameter_supported: true`, the callback
|
|
338
|
+
> redirect **must** include the `iss` parameter.
|
|
339
|
+
> - When the discovered authorization server metadata omits
|
|
340
|
+
> `authorization_response_iss_parameter_supported` or sets it to `false` (for
|
|
341
|
+
> example, providers that do not declare RFC 9207 support), callbacks without
|
|
342
|
+
> `iss` are accepted.
|
|
343
|
+
> - When you configure `issuer` explicitly in `settings.json` and Gemini CLI
|
|
344
|
+
> doesn't discover authorization server metadata, the callback redirect
|
|
345
|
+
> **must** include the `iss` parameter. To accept callbacks without `iss` for
|
|
346
|
+
> such a server, set `authorizationResponseIssParameterSupported` to `false`
|
|
347
|
+
> in the `oauth` configuration.
|
|
335
348
|
|
|
336
349
|
##### Expected authorization callback example
|
|
337
350
|
|
|
338
|
-
When the authorization server
|
|
339
|
-
redirect URI must
|
|
351
|
+
When the authorization server declares
|
|
352
|
+
`authorization_response_iss_parameter_supported: true`, the redirect URI must
|
|
353
|
+
include the `iss` parameter:
|
|
340
354
|
|
|
341
355
|
```http
|
|
342
356
|
HTTP/1.1 302 Found
|
|
@@ -344,10 +358,14 @@ Location: http://localhost:<port>/oauth/callback?code=AUTH_CODE&state=STATE&iss=
|
|
|
344
358
|
```
|
|
345
359
|
|
|
346
360
|
- **Valid response (accepted):** `iss` matches the configured or discovered
|
|
347
|
-
issuer (`https://auth.example.com`)
|
|
348
|
-
|
|
349
|
-
`
|
|
350
|
-
|
|
361
|
+
issuer (`https://auth.example.com`), or `iss` is omitted when the discovered
|
|
362
|
+
metadata doesn't set `authorization_response_iss_parameter_supported` to
|
|
363
|
+
`true`.
|
|
364
|
+
- **Missing `iss` when required (rejected):**
|
|
365
|
+
`http://localhost:<port>/oauth/callback?code=AUTH_CODE&state=STATE` when
|
|
366
|
+
`authorization_response_iss_parameter_supported` is `true`, or when `issuer`
|
|
367
|
+
is configured explicitly without discovered metadata (fails with HTTP 400:
|
|
368
|
+
`Missing issuer parameter in response`).
|
|
351
369
|
- **Mismatched `iss` (rejected):** `iss` points to a different domain or
|
|
352
370
|
includes userinfo (fails with HTTP 400: `Issuer mismatch`).
|
|
353
371
|
|
|
@@ -373,6 +391,12 @@ If your remote MCP server uses an authorization server with a known issuer URL:
|
|
|
373
391
|
}
|
|
374
392
|
```
|
|
375
393
|
|
|
394
|
+
With this configuration, Gemini CLI requires the `iss` parameter in the
|
|
395
|
+
authorization callback. If the authorization server doesn't return `iss` in its
|
|
396
|
+
redirects, add `"authorizationResponseIssParameterSupported": false` to the
|
|
397
|
+
`oauth` block. Gemini CLI then accepts callbacks without `iss` while still
|
|
398
|
+
rejecting any `iss` value that doesn't match the configured `issuer`.
|
|
399
|
+
|
|
376
400
|
#### Managing OAuth authentication
|
|
377
401
|
|
|
378
402
|
Use the `/mcp auth` command to manage OAuth authentication:
|
|
@@ -398,6 +422,11 @@ Use the `/mcp auth` command to manage OAuth authentication:
|
|
|
398
422
|
if omitted)
|
|
399
423
|
- **`issuer`** (string): Authorization server issuer URL (auto-discovered if
|
|
400
424
|
omitted; validated per RFC 9207)
|
|
425
|
+
- **`authorizationResponseIssParameterSupported`** (boolean): Whether the
|
|
426
|
+
authorization server returns the `iss` parameter in authorization responses
|
|
427
|
+
(RFC 9207). Auto-discovered from the authorization server metadata; defaults
|
|
428
|
+
to `true` when `issuer` is configured explicitly without discovered metadata.
|
|
429
|
+
Set to `false` to accept callbacks without `iss` for such a server.
|
|
401
430
|
- **`tokenUrl`** (string): OAuth token endpoint (auto-discovered if omitted)
|
|
402
431
|
- **`scopes`** (string[]): Required OAuth scopes
|
|
403
432
|
- **`redirectUri`** (string): Custom redirect URI (defaults to an OS-assigned
|
|
@@ -21,6 +21,7 @@ export declare class OAuth2AuthProvider extends BaseA2AAuthProvider {
|
|
|
21
21
|
readonly type = "oauth2";
|
|
22
22
|
private readonly tokenStorage;
|
|
23
23
|
private cachedToken;
|
|
24
|
+
private pendingAuthPromise;
|
|
24
25
|
/** Resolved OAuth URLs — may come from config or agent card. */
|
|
25
26
|
private authorizationUrl;
|
|
26
27
|
private tokenUrl;
|
|
@@ -33,13 +34,21 @@ export declare class OAuth2AuthProvider extends BaseA2AAuthProvider {
|
|
|
33
34
|
initialize(): Promise<void>;
|
|
34
35
|
/**
|
|
35
36
|
* Return an Authorization header with a valid Bearer token.
|
|
36
|
-
* Refreshes or triggers interactive auth as needed.
|
|
37
|
+
* Refreshes or triggers interactive auth as needed, deduplicating concurrent requests.
|
|
37
38
|
*/
|
|
38
39
|
headers(): Promise<HttpHeaders>;
|
|
40
|
+
/**
|
|
41
|
+
* Refresh an expired token or run interactive browser-based authentication.
|
|
42
|
+
*/
|
|
43
|
+
private acquireToken;
|
|
44
|
+
/**
|
|
45
|
+
* Return the maximum number of consecutive authentication retries allowed.
|
|
46
|
+
*/
|
|
47
|
+
protected getMaxAuthRetries(): number;
|
|
39
48
|
/**
|
|
40
49
|
* On 401/403, clear the cached token and re-authenticate (up to MAX_AUTH_RETRIES).
|
|
41
50
|
*/
|
|
42
|
-
shouldRetryWithHeaders(
|
|
51
|
+
shouldRetryWithHeaders(req: RequestInit, res: Response): Promise<HttpHeaders | undefined>;
|
|
43
52
|
/**
|
|
44
53
|
* Merge authorization_url, token_url, and scopes from the agent card's
|
|
45
54
|
* `securitySchemes` when not already provided via user config.
|
|
@@ -27,6 +27,7 @@ export class OAuth2AuthProvider extends BaseA2AAuthProvider {
|
|
|
27
27
|
type = 'oauth2';
|
|
28
28
|
tokenStorage;
|
|
29
29
|
cachedToken = null;
|
|
30
|
+
pendingAuthPromise = null;
|
|
30
31
|
/** Resolved OAuth URLs — may come from config or agent card. */
|
|
31
32
|
authorizationUrl;
|
|
32
33
|
tokenUrl;
|
|
@@ -61,15 +62,30 @@ export class OAuth2AuthProvider extends BaseA2AAuthProvider {
|
|
|
61
62
|
}
|
|
62
63
|
/**
|
|
63
64
|
* Return an Authorization header with a valid Bearer token.
|
|
64
|
-
* Refreshes or triggers interactive auth as needed.
|
|
65
|
+
* Refreshes or triggers interactive auth as needed, deduplicating concurrent requests.
|
|
65
66
|
*/
|
|
66
67
|
async headers() {
|
|
67
|
-
// 1. Valid cached token → return immediately.
|
|
68
|
+
// 1. Valid cached token → return immediately and reset retry counter.
|
|
68
69
|
if (this.cachedToken &&
|
|
69
70
|
!this.tokenStorage.isTokenExpired(this.cachedToken)) {
|
|
71
|
+
this.authRetryCount = 0;
|
|
70
72
|
return { Authorization: `Bearer ${this.cachedToken.accessToken}` };
|
|
71
73
|
}
|
|
72
|
-
// 2.
|
|
74
|
+
// 2. Coalesce concurrent token refresh / interactive auth requests.
|
|
75
|
+
if (!this.pendingAuthPromise) {
|
|
76
|
+
this.pendingAuthPromise = this.acquireToken().finally(() => {
|
|
77
|
+
this.pendingAuthPromise = null;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const token = await this.pendingAuthPromise;
|
|
81
|
+
this.authRetryCount = 0;
|
|
82
|
+
return { Authorization: `Bearer ${token.accessToken}` };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Refresh an expired token or run interactive browser-based authentication.
|
|
86
|
+
*/
|
|
87
|
+
async acquireToken() {
|
|
88
|
+
// 1. Expired but has refresh token → attempt silent refresh.
|
|
73
89
|
if (this.cachedToken?.refreshToken &&
|
|
74
90
|
this.tokenUrl &&
|
|
75
91
|
this.config.client_id) {
|
|
@@ -81,34 +97,58 @@ export class OAuth2AuthProvider extends BaseA2AAuthProvider {
|
|
|
81
97
|
}, this.cachedToken.refreshToken, this.tokenUrl);
|
|
82
98
|
this.cachedToken = this.toOAuthToken(refreshed, this.cachedToken.refreshToken);
|
|
83
99
|
await this.persistToken();
|
|
84
|
-
return
|
|
100
|
+
return this.cachedToken;
|
|
85
101
|
}
|
|
86
102
|
catch (error) {
|
|
87
103
|
debugLogger.debug(`[OAuth2AuthProvider] Refresh failed, falling back to interactive flow: ${getErrorMessage(error)}`);
|
|
88
104
|
// Clear stale credentials and fall through to interactive flow.
|
|
105
|
+
this.cachedToken = null;
|
|
89
106
|
await this.tokenStorage.deleteCredentials(this.agentName);
|
|
90
107
|
}
|
|
91
108
|
}
|
|
92
|
-
//
|
|
109
|
+
// 2. No valid token → interactive browser-based auth.
|
|
93
110
|
this.cachedToken = await this.authenticateInteractively();
|
|
94
|
-
return
|
|
111
|
+
return this.cachedToken;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Return the maximum number of consecutive authentication retries allowed.
|
|
115
|
+
*/
|
|
116
|
+
getMaxAuthRetries() {
|
|
117
|
+
return BaseA2AAuthProvider.MAX_AUTH_RETRIES;
|
|
95
118
|
}
|
|
96
119
|
/**
|
|
97
120
|
* On 401/403, clear the cached token and re-authenticate (up to MAX_AUTH_RETRIES).
|
|
98
121
|
*/
|
|
99
|
-
async shouldRetryWithHeaders(
|
|
122
|
+
async shouldRetryWithHeaders(req, res) {
|
|
100
123
|
if (res.status !== 401 && res.status !== 403) {
|
|
101
124
|
this.authRetryCount = 0;
|
|
102
125
|
return undefined;
|
|
103
126
|
}
|
|
104
|
-
|
|
127
|
+
const reqHeaders = new Headers(req.headers);
|
|
128
|
+
const reqToken = reqHeaders.get('Authorization')?.split(' ')[1];
|
|
129
|
+
// If the token used in the request is already different from our current cached token
|
|
130
|
+
// (or if the cached token has already been cleared), another concurrent request has
|
|
131
|
+
// already initiated the re-authentication flow. We can safely retry with the new
|
|
132
|
+
// token without incrementing the retry count or clearing credentials again.
|
|
133
|
+
if (reqToken &&
|
|
134
|
+
(!this.cachedToken || reqToken !== this.cachedToken.accessToken)) {
|
|
135
|
+
debugLogger.debug('[OAuth2AuthProvider] Token already cleared or updated by another request, retrying with new token');
|
|
136
|
+
const retryCount = this.authRetryCount;
|
|
137
|
+
const headers = await this.headers();
|
|
138
|
+
this.authRetryCount = Math.max(this.authRetryCount, retryCount);
|
|
139
|
+
return headers;
|
|
140
|
+
}
|
|
141
|
+
if (this.authRetryCount >= this.getMaxAuthRetries()) {
|
|
105
142
|
return undefined;
|
|
106
143
|
}
|
|
107
|
-
this.authRetryCount
|
|
144
|
+
const nextRetryCount = this.authRetryCount + 1;
|
|
145
|
+
this.authRetryCount = nextRetryCount;
|
|
108
146
|
debugLogger.debug('[OAuth2AuthProvider] Auth failure, clearing token and re-authenticating');
|
|
109
147
|
this.cachedToken = null;
|
|
110
148
|
await this.tokenStorage.deleteCredentials(this.agentName);
|
|
111
|
-
|
|
149
|
+
const headers = await this.headers();
|
|
150
|
+
this.authRetryCount = nextRetryCount;
|
|
151
|
+
return headers;
|
|
112
152
|
}
|
|
113
153
|
// ---------------------------------------------------------------------------
|
|
114
154
|
// Private helpers
|
|
@@ -174,7 +214,10 @@ export class OAuth2AuthProvider extends BaseA2AAuthProvider {
|
|
|
174
214
|
/* resource= */ undefined);
|
|
175
215
|
const consent = await getConsentForOauth(`Authentication required for A2A agent: '${this.agentName}'.`);
|
|
176
216
|
if (!consent) {
|
|
177
|
-
|
|
217
|
+
const cancelError = new FatalCancellationError('Authentication cancelled by user.');
|
|
218
|
+
callbackServer.response.catch(() => { });
|
|
219
|
+
callbackServer.cancel?.(cancelError);
|
|
220
|
+
throw cancelError;
|
|
178
221
|
}
|
|
179
222
|
coreEvents.emitFeedback('info', `→ Opening your browser for OAuth sign-in...
|
|
180
223
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth2-provider.js","sourceRoot":"","sources":["../../../../src/agents/auth-provider/oauth2-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAoB,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;
|
|
1
|
+
{"version":3,"file":"oauth2-provider.js","sourceRoot":"","sources":["../../../../src/agents/auth-provider/oauth2-provider.ts"],"names":[],"mappings":"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"}
|