@google/gemini-cli 0.65.0-preview.0 → 0.66.0-nightly.20261017.ged96faedf

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 (75) hide show
  1. package/README.md +21 -56
  2. package/bundle/{chunk-NL7ZHGCH.js → chunk-464WBVYM.js} +1 -1
  3. package/bundle/{chunk-QJK54DSE.js → chunk-5VQUE3OF.js} +1 -1
  4. package/bundle/{chunk-VF5WQSOE.js → chunk-7ARQMEMX.js} +1 -1
  5. package/bundle/{chunk-2WVLIJA5.js → chunk-BUG4N6U5.js} +145 -77
  6. package/bundle/{chunk-F6AJM4WN.js → chunk-DPV3ZEOC.js} +3 -3
  7. package/bundle/{chunk-GSQEBEGC.js → chunk-ERBSM2HU.js} +3 -3
  8. package/bundle/{chunk-WTRK3NVX.js → chunk-GEUFOF2X.js} +106 -1500
  9. package/bundle/{chunk-V2R74WAG.js → chunk-H4U2CWBQ.js} +151 -81
  10. package/bundle/chunk-HDP6V6JI.js +1956 -0
  11. package/bundle/{chunk-RPHDSDL6.js → chunk-IDCWFZU3.js} +1 -1
  12. package/bundle/{chunk-SN7QZKXC.js → chunk-IGOTAEJY.js} +170 -1551
  13. package/bundle/chunk-J5QPCO3J.js +101859 -0
  14. package/bundle/{chunk-H2CZXS7F.js → chunk-JY3DYBJT.js} +1 -1
  15. package/bundle/{chunk-HLOOE7YN.js → chunk-LDGJJCVW.js} +9 -8
  16. package/bundle/chunk-MH4KAY5W.js +512 -0
  17. package/bundle/{chunk-LLE5Z636.js → chunk-NAPT3FAL.js} +106 -1500
  18. package/bundle/chunk-NOSWGXRT.js +1956 -0
  19. package/bundle/{chunk-43EXRO7A.js → chunk-NU74STQ5.js} +145 -77
  20. package/bundle/{chunk-K7NOVQ6G.js → chunk-QCWGLPCO.js} +376 -231
  21. package/bundle/{chunk-WGL5FJOS.js → chunk-QF3ALSJN.js} +3 -3
  22. package/bundle/{chunk-K4G5D5ZZ.js → chunk-R4KPURFC.js} +1 -1
  23. package/bundle/chunk-R6XDLHLP.js +1956 -0
  24. package/bundle/chunk-R7UPATQC.js +1956 -0
  25. package/bundle/chunk-RACMC24X.js +118 -0
  26. package/bundle/{chunk-4JGVVJGK.js → chunk-RE4V6I3G.js} +1 -1
  27. package/bundle/{chunk-S7BCRBI4.js → chunk-UTTFPWGQ.js} +1 -1
  28. package/bundle/chunk-VXYA6LA4.js +1571 -0
  29. package/bundle/chunk-XY2QSBID.js +17603 -0
  30. package/bundle/{chunk-K7AA35SP.js → chunk-YOI4DS3V.js} +365 -230
  31. package/bundle/chunk-YP27UYI4.js +154 -0
  32. package/bundle/{chunk-TP236FKO.js → chunk-YPLMNSM4.js} +8243 -15166
  33. package/bundle/chunk-ZFQ347ZN.js +402181 -0
  34. package/bundle/{cleanup-HPADDONA.js → cleanup-6FAZDCL3.js} +2 -2
  35. package/bundle/{cleanup-JOMSXKMP.js → cleanup-GNZLZG55.js} +2 -2
  36. package/bundle/{cleanup-LYRJHMMO.js → cleanup-RX3AC5ET.js} +2 -2
  37. package/bundle/cleanup-WAU2KYGS.js +32 -0
  38. package/bundle/{core-NCJTYARO.js → core-AGGXDQOT.js} +13 -1
  39. package/bundle/{devtoolsService-WP2OPVPB.js → devtoolsService-6XOCGTLC.js} +2 -2
  40. package/bundle/{devtoolsService-JFJBTZ4B.js → devtoolsService-FBTSVQ57.js} +4 -3
  41. package/bundle/{devtoolsService-HIZA3JGR.js → devtoolsService-UO6ZB72B.js} +2 -2
  42. package/bundle/devtoolsService-W5QGZ3SW.js +4359 -0
  43. package/bundle/{dist-GQKLLBDW.js → dist-2ELAEESC.js} +13 -1
  44. package/bundle/{core-IVQAI4S6.js → dist-2R7C2WHA.js} +13 -1
  45. package/bundle/dist-PALH7PJS.js +2280 -0
  46. package/bundle/docs/changelogs/index.md +22 -0
  47. package/bundle/docs/changelogs/latest.md +64 -54
  48. package/bundle/docs/changelogs/preview.md +91 -55
  49. package/bundle/docs/reference/configuration.md +8 -3
  50. package/bundle/docs/reference/keyboard-shortcuts.md +18 -4
  51. package/bundle/{gemini-5TUKZVGS.js → gemini-6MH55Y7F.js} +37 -18
  52. package/bundle/{gemini-7CHJYSHM.js → gemini-DOXUDJDY.js} +37 -18
  53. package/bundle/{gemini-546WMAHG.js → gemini-OHYXI52N.js} +237 -202
  54. package/bundle/gemini-OUEDCH4P.js +17970 -0
  55. package/bundle/gemini.js +14 -15
  56. package/bundle/{interactiveCli-E3PUPYMZ.js → interactiveCli-7LIKGDTJ.js} +1061 -989
  57. package/bundle/{interactiveCli-5XIAIY74.js → interactiveCli-EGQYN3KR.js} +1371 -1280
  58. package/bundle/{interactiveCli-L4PK7YY3.js → interactiveCli-TG7PGV4V.js} +1061 -989
  59. package/bundle/interactiveCli-YEXCUIFZ.js +35601 -0
  60. package/bundle/{liteRtServerManager-JCTYJBV5.js → liteRtServerManager-KAPXZ3EU.js} +4 -4
  61. package/bundle/{liteRtServerManager-JERG6KYC.js → liteRtServerManager-MSJIWMWP.js} +4 -4
  62. package/bundle/{liteRtServerManager-22ISMNN2.js → liteRtServerManager-PD2N3GLD.js} +4 -4
  63. package/bundle/liteRtServerManager-X5SCFYXM.js +65 -0
  64. package/bundle/{oauth2-provider-XRUER2XR.js → oauth2-provider-IUN6Z4IO.js} +1 -1
  65. package/bundle/{oauth2-provider-477UJQX6.js → oauth2-provider-MKJIQNWP.js} +41 -79
  66. package/bundle/{oauth2-provider-MKWWBW4K.js → oauth2-provider-RMF7U2UN.js} +1 -1
  67. package/bundle/oauth2-provider-ZM5GWCNX.js +273 -0
  68. package/bundle/{start-MVIPJNQ5.js → start-5GIUIER3.js} +6 -6
  69. package/bundle/{start-RZWSVT55.js → start-APIVGXZ3.js} +6 -6
  70. package/bundle/{start-AGMBPY3O.js → start-GJ4TH4KZ.js} +6 -6
  71. package/bundle/start-WDS52ZNE.js +18 -0
  72. package/package.json +1 -1
  73. package/bundle/chunk-4DCA4L53.js +0 -425
  74. package/bundle/chunk-BFIV7GTA.js +0 -425
  75. package/bundle/chunk-V72FRESD.js +0 -425
@@ -18,6 +18,28 @@ 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.64.0 - 2026-10-13
22
+
23
+ - **Atomic Operations & State Persistence:** Serialized file tool operations
24
+ with atomic writes and introduced atomic CLI state persistence with automatic
25
+ recovery from backup on corruption
26
+ ([#29499](https://github.com/google-gemini/gemini-cli/pull/29499) by
27
+ @elberthc-byte,
28
+ [#29558](https://github.com/google-gemini/gemini-cli/pull/29558) by
29
+ @urielefrenvirtusa).
30
+ - **Chat Recording Optimization:** Implemented append-only delta patching and
31
+ bounded history windowing in ChatRecordingService to optimize memory and disk
32
+ efficiency during long-running sessions
33
+ ([#29568](https://github.com/google-gemini/gemini-cli/pull/29568) by
34
+ @jvargassanchez-dot).
35
+ - **CLI Interaction & Input Robustness:** Resolved `@file:line` references,
36
+ prevented CPU hangs on `@` in code blocks, and ensured Ctrl+C emergency aborts
37
+ reliably reach cancellation handlers
38
+ ([#29581](https://github.com/google-gemini/gemini-cli/pull/29581) by
39
+ @jesussamuel-byte,
40
+ [#29586](https://github.com/google-gemini/gemini-cli/pull/29586) by
41
+ @urielefrenvirtusa).
42
+
21
43
  ## Announcements: v0.63.0 - 2026-10-06
22
44
 
23
45
  - **Autonomous Plan Execution:** Enabled autonomous plan execution in
@@ -1,6 +1,6 @@
1
- # Latest stable release: v0.63.0
1
+ # Latest stable release: v0.64.0
2
2
 
3
- Released: October 6, 2026
3
+ Released: October 13, 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,62 +11,72 @@ npm install -g @google/gemini-cli
11
11
 
12
12
  ## Highlights
13
13
 
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.
14
+ - **Atomic File Operations & State Recovery:** Serialized file tool operations
15
+ with atomic writes and introduced atomic CLI state persistence with automatic
16
+ recovery from backup on corruption.
17
+ - **Chat Recording Optimization:** Implemented append-only delta patching and
18
+ bounded history windowing in ChatRecordingService to optimize memory and disk
19
+ efficiency during long-running sessions.
20
+ - **CLI Input & Reference Resolution:** Added support for resolving `@file:line`
21
+ references, resolved CPU hangs and quote swallowing on `@` symbols within code
22
+ blocks, and prevented ghost text wrap hangs.
23
+ - **Terminal UI & Interaction Stability:** Ensured Ctrl+C emergency aborts
24
+ reliably reach active cancellation handlers, made selection list confirmation
25
+ with Enter and Spacebar dependable, preserved scroll positions, and fixed
26
+ Windows ConPTY IME cursor forwarding.
27
27
 
28
28
  ## What's Changed
29
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
+ - refactor(a2a-server): implement V1 to V2 settings migration logic by
31
+ @jvargassanchez-dot in
32
+ [#29450](https://github.com/google-gemini/gemini-cli/pull/29450)
33
+ - fix(acp): bridge PromptResponse.usage and emit usage_update notifications
34
+ (#29389) by @elberthc-byte in
35
+ [#29549](https://github.com/google-gemini/gemini-cli/pull/29549)
36
+ - Changelog for v0.63.0-preview.0 by @gemini-cli-robot in
37
+ [#29565](https://github.com/google-gemini/gemini-cli/pull/29565)
38
+ - fix(cli): propagate resolved folder trust state in headless mode (#29031) by
39
+ @amelidev in [#29528](https://github.com/google-gemini/gemini-cli/pull/29528)
40
+ - chore(release): bump version to 0.64.0-nightly.20260929.gd75234cae by
48
41
  @gemini-cli-robot in
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
42
+ [#29567](https://github.com/google-gemini/gemini-cli/pull/29567)
43
+ - fix(cli): prevent CPU hang and quote swallowing on @ within code (#29434) by
44
+ @elberthc-byte in
45
+ [#29557](https://github.com/google-gemini/gemini-cli/pull/29557)
46
+ - fix(core): serialize file tool operations and make writes atomic (#29078) by
47
+ @elberthc-byte in
48
+ [#29499](https://github.com/google-gemini/gemini-cli/pull/29499)
49
+ - fix(core): implement append-only delta patching and bounded history windowing
50
+ in ChatRecordingService by @jvargassanchez-dot in
51
+ [#29568](https://github.com/google-gemini/gemini-cli/pull/29568)
52
+ - fix(cli): persist state atomically and recover from backup on corruption by
65
53
  @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)
54
+ [#29558](https://github.com/google-gemini/gemini-cli/pull/29558)
55
+ - fix(cli): ensure Ctrl+C emergency abort reaches cancellation handler during
56
+ active operations by @urielefrenvirtusa in
57
+ [#29586](https://github.com/google-gemini/gemini-cli/pull/29586)
58
+ - fix(cli): resolve @file:line references and prevent ghost text wrap hang by
59
+ @jesussamuel-byte in
60
+ [#29581](https://github.com/google-gemini/gemini-cli/pull/29581)
61
+ - fix(ui): ensure Windows ConPTY forwards IME cursor position by
62
+ @jesussamuel-byte in
63
+ [#29560](https://github.com/google-gemini/gemini-cli/pull/29560)
64
+ - fix(cli): retry directory removal on Windows locking errors during extension
65
+ updates by @jesussamuel-byte in
66
+ [#29540](https://github.com/google-gemini/gemini-cli/pull/29540)
67
+ - fix(acp): resolve session by exact id and handle listener cleanup on session
68
+ failure by @diegogodinezr in
69
+ [#29580](https://github.com/google-gemini/gemini-cli/pull/29580)
70
+ - fix(cli): preserve scroll position and partition pending height budget by
71
+ @luisfelipe-alt in
72
+ [#29520](https://github.com/google-gemini/gemini-cli/pull/29520)
73
+ - fix(cli): ensure Enter and Spacebar reliably confirm selection list options by
74
+ @ugorla-dev in
75
+ [#29502](https://github.com/google-gemini/gemini-cli/pull/29502)
76
+ - fix(patch): cherry-pick 2ce1a69 to release/v0.64.0-preview.0-pr-29672 to patch
77
+ version v0.64.0-preview.0 and create version 0.64.0-preview.1 by
78
+ @gemini-cli-robot in
79
+ [#29696](https://github.com/google-gemini/gemini-cli/pull/29696)
70
80
 
71
81
  **Full Changelog**:
72
- https://github.com/google-gemini/gemini-cli/compare/v0.62.0...v0.63.0
82
+ https://github.com/google-gemini/gemini-cli/compare/v0.63.0...v0.64.0
@@ -1,6 +1,6 @@
1
- # Preview release: v0.64.0-preview.0
1
+ # Preview release: v0.65.0-preview.0
2
2
 
3
- Released: October 6, 2026
3
+ Released: October 13, 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,67 +13,103 @@ npm install -g @google/gemini-cli@preview
13
13
 
14
14
  ## Highlights
15
15
 
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.
16
+ - **Custom Telemetry Headers**: Added support for configuring custom OTLP
17
+ headers in telemetry settings, enabling authentication and header
18
+ customization for OpenTelemetry collectors.
19
+ - **File System Performance & Traversal**: Optimized ignore pattern filtering
20
+ with subtree pruning to accelerate directory scanning, deferred recursive file
21
+ reads for `@<directory>` references, and improved empty file handling across
22
+ multi-byte encodings.
23
+ - **Session Resilience & State Integrity**: Prevented session poisoning during
24
+ rapid Ctrl+C interruptions, preserved resumed session history on quick exits,
25
+ and eliminated duplicate tool response turns upon resuming sessions.
26
+ - **Authentication & Workspace Security**: Enforced read-only workspace settings
27
+ in untrusted directories, aligned OAuth callback parameter validation with RFC
28
+ 9207 metadata, and resolved infinite authentication retry loops.
29
+ - **Terminal UI & Interactive Stability**: Resolved interactive mode hangs on
30
+ Enter keypresses, prevented unnecessary terminal clears and scroll resets when
31
+ expanding output with Ctrl+O, and restored debounced static UI refreshes on
32
+ terminal width changes.
28
33
 
29
34
  ## What's Changed
30
35
 
31
- - refactor(a2a-server): implement V1 to V2 settings migration logic by
36
+ - fix(cli): enforce read-only workspace settings in untrusted folders by
32
37
  @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
38
+ [#29583](https://github.com/google-gemini/gemini-cli/pull/29583)
39
+ - fix(core): avoid duplicate tool response turns when resuming sessions by
40
+ @diegogodinezr in
41
+ [#29618](https://github.com/google-gemini/gemini-cli/pull/29618)
42
+ - fix(core): prevent deletion of resumed session history on quick exit (#29198)
43
+ by @villahernandez-coder in
44
+ [#29584](https://github.com/google-gemini/gemini-cli/pull/29584)
45
+ - Changelog for v0.64.0-preview.0 by @gemini-cli-robot in
46
+ [#29656](https://github.com/google-gemini/gemini-cli/pull/29656)
47
+ - Changelog for v0.63.0 by @gemini-cli-robot in
48
+ [#29659](https://github.com/google-gemini/gemini-cli/pull/29659)
49
+ - fix(core): align OAuth callback iss parameter validation with RFC 9207
50
+ metadata by @luisfelipe-alt in
51
+ [#29616](https://github.com/google-gemini/gemini-cli/pull/29616)
52
+ - fix(cli): prevent unnecessary terminal clears and scroll resets when expanding
53
+ with Ctrl+O by @jesussamuel-byte in
54
+ [#29640](https://github.com/google-gemini/gemini-cli/pull/29640)
55
+ - chore(release): bump version to 0.65.0-nightly.20261006.gfb972b2f8 by
42
56
  @gemini-cli-robot in
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
57
+ [#29657](https://github.com/google-gemini/gemini-cli/pull/29657)
58
+ - fix(ci): add missing loop in unassign-inactive-assignees workflow by
59
+ @ugorla-dev in
60
+ [#29609](https://github.com/google-gemini/gemini-cli/pull/29609)
61
+ - fix(core): enforce terminal user turn invariant and normalize request contents
62
+ by @luisfelipe-alt in
63
+ [#29612](https://github.com/google-gemini/gemini-cli/pull/29612)
64
+ - `feat(telemetry): support custom OTLP headers in telemetry configuration` by
65
+ @jesussamuel-byte in
66
+ [#29641](https://github.com/google-gemini/gemini-cli/pull/29641)
67
+ - fix(auth): prevent infinite verification and OAuth retry loops by
68
+ @villahernandez-coder in
69
+ [#29655](https://github.com/google-gemini/gemini-cli/pull/29655)
70
+ - fix(cli): handle JSON parse and response stream errors in fetchJson by
71
+ @jesussamuel-byte in
72
+ [#29658](https://github.com/google-gemini/gemini-cli/pull/29658)
73
+ - fix(core): preserve line terminators in truncateString by @diegogodinezr in
74
+ [#29673](https://github.com/google-gemini/gemini-cli/pull/29673)
75
+ - fix(vscode-ide-companion): make IdeServer.stop() resolve while MCP sessions
76
+ are open by @elberthc-byte in
77
+ [#29674](https://github.com/google-gemini/gemini-cli/pull/29674)
78
+ - fix(core): retain ask_user question text in the tool result display by
48
79
  @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
80
+ [#29677](https://github.com/google-gemini/gemini-cli/pull/29677)
81
+ - fix(core): eliminate false positives on untrusted command flags and compound
82
+ loops by @DavidAPierce in
83
+ [#29672](https://github.com/google-gemini/gemini-cli/pull/29672)
84
+ - fix(cli): clear cached credentials when re-selecting Google login by
54
85
  @urielefrenvirtusa in
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
86
+ [#29643](https://github.com/google-gemini/gemini-cli/pull/29643)
87
+ - fix(cli): resolve hang on Enter keypress in interactive mode (#23297) by
88
+ @elberthc-byte in
89
+ [#29476](https://github.com/google-gemini/gemini-cli/pull/29476)
90
+ - perf(core): optimize ignore filtering and enable subtree pruning (#29077) by
91
+ @amelidev in [#29582](https://github.com/google-gemini/gemini-cli/pull/29582)
92
+ - fix(a2a-server): isolate tool rejection to active call in sequential batches
93
+ by @jvargassanchez-dot in
94
+ [#29683](https://github.com/google-gemini/gemini-cli/pull/29683)
95
+ - fix(cli): skip eager recursive file reading for @<directory> references by
96
+ @jvargassanchez-dot in
97
+ [#29617](https://github.com/google-gemini/gemini-cli/pull/29617)
98
+ - fix(cli): keep loading other extensions when one fails the allowlist check by
60
99
  @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
100
+ [#29720](https://github.com/google-gemini/gemini-cli/pull/29720)
101
+ - fix(cli): correct reverse search highlight index for expanding unicode
102
+ characters by @diegogodinezr in
103
+ [#29699](https://github.com/google-gemini/gemini-cli/pull/29699)
104
+ - fix(core): treat whitespace-only UTF-16 and UTF-32 files as empty by
63
105
  @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)
106
+ [#29722](https://github.com/google-gemini/gemini-cli/pull/29722)
107
+ - fix(cli): restore debounced static UI refresh on terminal width changes by
108
+ @jvargassanchez-dot in
109
+ [#29644](https://github.com/google-gemini/gemini-cli/pull/29644)
110
+ - fix(cli): prevent session poisoning on rapid Ctrl-C interruption by
111
+ @villahernandez-coder in
112
+ [#29728](https://github.com/google-gemini/gemini-cli/pull/29728)
77
113
 
78
114
  **Full Changelog**:
79
- https://github.com/google-gemini/gemini-cli/compare/v0.63.0-preview.0...v0.64.0-preview.0
115
+ https://github.com/google-gemini/gemini-cli/compare/v0.64.0-preview.1...v0.65.0-preview.0
@@ -66,9 +66,14 @@ variables using `$VAR_NAME`, `${VAR_NAME}`, or `${VAR_NAME:-DEFAULT_VALUE}`
66
66
  syntax. These variables will be automatically resolved when the settings are
67
67
  loaded. For example, if you have an environment variable `MY_API_TOKEN`, you
68
68
  could use it in `settings.json` like this: `"apiKey": "$MY_API_TOKEN"`. If you
69
- want to provide a fallback value, use `${MY_API_TOKEN:-default-token}`.
70
- Additionally, each extension can have its own `.env` file in its directory,
71
- which will be loaded automatically.
69
+ want to provide a fallback value, use `${MY_API_TOKEN:-default-token}`. You can
70
+ reference variables from your shell environment as well as variables loaded from
71
+ [`.env` files](#environment-variables-and-env-files). The settings that control
72
+ how `.env` files are loaded, such as `security.folderTrust.enabled`,
73
+ `advanced.ignoreLocalEnv`, `advanced.excludedEnvVars`, and `tools.sandbox`, are
74
+ evaluated before any `.env` file is loaded, so they can only reference variables
75
+ from your shell environment. Additionally, each extension can have its own
76
+ `.env` file in its directory, which will be loaded automatically.
72
77
 
73
78
  **Note for Enterprise Users:** For guidance on deploying and managing Gemini CLI
74
79
  in a corporate environment, see the
@@ -152,7 +152,7 @@ You can add alternative keybindings or remove default keybindings by creating a
152
152
 
153
153
  The configuration uses a JSON array of objects, similar to VS Code's keybinding
154
154
  schema. Each object must specify a `command` from the reference tables above and
155
- a `key` combination.
155
+ a `key` combination or an array of `keys`.
156
156
 
157
157
  ```json
158
158
  [
@@ -165,6 +165,16 @@ a `key` combination.
165
165
  "command": "-app.toggleYolo",
166
166
  "key": "ctrl+y"
167
167
  },
168
+ {
169
+ // unbind multiple keys in a single entry
170
+ "command": "-input.newline",
171
+ "keys": ["alt+enter", "ctrl+enter", "shift+enter", "ctrl+j"]
172
+ },
173
+ {
174
+ // bind multiple keys in a single entry
175
+ "command": "input.newline",
176
+ "keys": ["enter", "shift+enter"]
177
+ },
168
178
  {
169
179
  "command": "input.submit",
170
180
  "key": "ctrl+y"
@@ -187,9 +197,13 @@ a `key` combination.
187
197
  ]
188
198
  ```
189
199
 
190
- - **Unbinding** To remove an existing or default keybinding, prefix a minus sign
191
- (`-`) to the `command` name.
192
- - **No Auto-unbinding** The same key can be bound to multiple commands in
200
+ - **Unbinding**: To remove an existing or default keybinding, prefix a minus
201
+ sign (`-`) to the `command` name. You can unbind multiple keys in a single
202
+ entry using `keys`.
203
+ - **Multiple Keys**: You can provide an array of key combinations using `keys`
204
+ instead of (or in addition to) `key`. The first key in `keys` acts as the
205
+ primary shortcut displayed in the UI.
206
+ - **No Auto-unbinding**: The same key can be bound to multiple commands in
193
207
  different contexts at the same time. Therefore, creating a binding does not
194
208
  automatically unbind the key from other commands.
195
209
  - **Explicit Modifiers**: Key matching is explicit. For example, a binding for
@@ -2,7 +2,7 @@ const require = (await import('node:module')).createRequire(import.meta.url); co
2
2
  import {
3
3
  startCommand,
4
4
  startServer
5
- } from "./chunk-F6AJM4WN.js";
5
+ } from "./chunk-DPV3ZEOC.js";
6
6
  import {
7
7
  BuiltinCommandLoader,
8
8
  CommandService,
@@ -35,7 +35,6 @@ import {
35
35
  promptForSetting,
36
36
  renderSkillActionFeedback,
37
37
  requestConsentNonInteractive,
38
- require_semver,
39
38
  skillsConsentString,
40
39
  startAutoMemoryIfEnabled,
41
40
  statusCommand,
@@ -46,11 +45,11 @@ import {
46
45
  updateExtension,
47
46
  validateAuthMethod,
48
47
  validateContextFilePath
49
- } from "./chunk-WTRK3NVX.js";
48
+ } from "./chunk-IGOTAEJY.js";
50
49
  import {
51
50
  exitCli,
52
51
  require_source
53
- } from "./chunk-H2CZXS7F.js";
52
+ } from "./chunk-R4KPURFC.js";
54
53
  import {
55
54
  appEvents
56
55
  } from "./chunk-5PS3AYFU.js";
@@ -89,11 +88,12 @@ import {
89
88
  resolveGemmaConfig,
90
89
  saveModelChange,
91
90
  stripAnsi
92
- } from "./chunk-2WVLIJA5.js";
91
+ } from "./chunk-H4U2CWBQ.js";
93
92
  import {
94
- RELAUNCH_EXIT_CODE
95
- } from "./chunk-4DCA4L53.js";
96
- import "./chunk-NL7ZHGCH.js";
93
+ RELAUNCH_EXIT_CODE,
94
+ require_semver
95
+ } from "./chunk-R6XDLHLP.js";
96
+ import "./chunk-MH4KAY5W.js";
97
97
  import {
98
98
  cleanupCheckpoints,
99
99
  registerCleanup,
@@ -102,7 +102,7 @@ import {
102
102
  runExitCleanup,
103
103
  runSyncCleanup,
104
104
  setupSignalHandlers
105
- } from "./chunk-RPHDSDL6.js";
105
+ } from "./chunk-UTTFPWGQ.js";
106
106
  import {
107
107
  ASK_USER_TOOL_NAME,
108
108
  ApprovalMode,
@@ -257,7 +257,7 @@ import {
257
257
  updatePolicy,
258
258
  writeToStderr,
259
259
  writeToStdout
260
- } from "./chunk-K7AA35SP.js";
260
+ } from "./chunk-YPLMNSM4.js";
261
261
  import "./chunk-664ZODQF.js";
262
262
  import "./chunk-IUUIT4SU.js";
263
263
  import "./chunk-L6PII3GR.js";
@@ -7876,7 +7876,7 @@ async function loadSandboxConfig(settings, argv) {
7876
7876
  }
7877
7877
  const command2 = getSandboxCommand(sandboxValue);
7878
7878
  const packageJson = await getPackageJson(__dirname3);
7879
- const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.65.0-preview.0" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7879
+ const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.66.0-nightly.20261017.ged96faedf" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7880
7880
  const isNative = command2 === "windows-native" || command2 === "sandbox-exec" || command2 === "lxc";
7881
7881
  return command2 && (image || isNative) ? { enabled: true, allowedPaths, networkAccess, command: command2, image } : void 0;
7882
7882
  }
@@ -11547,7 +11547,7 @@ async function runNonInteractive({
11547
11547
  }
11548
11548
  });
11549
11549
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
11550
- const { setupInitialActivityLogger } = await import("./devtoolsService-WP2OPVPB.js");
11550
+ const { setupInitialActivityLogger } = await import("./devtoolsService-6XOCGTLC.js");
11551
11551
  setupInitialActivityLogger(config);
11552
11552
  }
11553
11553
  const { stdout: workingStdout } = createWorkingStdio();
@@ -12057,7 +12057,7 @@ async function runNonInteractive2(params) {
12057
12057
  }
12058
12058
  });
12059
12059
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
12060
- const { setupInitialActivityLogger } = await import("./devtoolsService-WP2OPVPB.js");
12060
+ const { setupInitialActivityLogger } = await import("./devtoolsService-6XOCGTLC.js");
12061
12061
  setupInitialActivityLogger(config);
12062
12062
  }
12063
12063
  const { stdout: workingStdout } = createWorkingStdio();
@@ -17084,11 +17084,27 @@ var SlashCommandConflictHandler = class {
17084
17084
  clearTimeout(this.flushTimeout);
17085
17085
  this.flushTimeout = null;
17086
17086
  }
17087
+ this.pendingConflicts = [];
17088
+ this.notifiedConflicts.clear();
17089
+ }
17090
+ getConflictKey(c) {
17091
+ const sourceId = c.loserExtensionName || c.loserMcpServerName || c.loserKind;
17092
+ return `${c.name}:${sourceId}:${c.renamedTo}`;
17087
17093
  }
17088
17094
  handleConflicts(payload) {
17095
+ const currentConflictKeys = new Set(
17096
+ payload.conflicts.map((c) => this.getConflictKey(c))
17097
+ );
17098
+ for (const key of this.notifiedConflicts) {
17099
+ if (!currentConflictKeys.has(key)) {
17100
+ this.notifiedConflicts.delete(key);
17101
+ }
17102
+ }
17103
+ this.pendingConflicts = this.pendingConflicts.filter(
17104
+ (c) => currentConflictKeys.has(this.getConflictKey(c))
17105
+ );
17089
17106
  const newConflicts = payload.conflicts.filter((c) => {
17090
- const sourceId = c.loserExtensionName || c.loserMcpServerName || c.loserKind;
17091
- const key = `${c.name}:${sourceId}:${c.renamedTo}`;
17107
+ const key = this.getConflictKey(c);
17092
17108
  if (this.notifiedConflicts.has(key)) {
17093
17109
  return false;
17094
17110
  }
@@ -17098,6 +17114,9 @@ var SlashCommandConflictHandler = class {
17098
17114
  if (newConflicts.length > 0) {
17099
17115
  this.pendingConflicts.push(...newConflicts);
17100
17116
  this.scheduleFlush();
17117
+ } else if (this.pendingConflicts.length === 0 && this.flushTimeout) {
17118
+ clearTimeout(this.flushTimeout);
17119
+ this.flushTimeout = null;
17101
17120
  }
17102
17121
  }
17103
17122
  scheduleFlush() {
@@ -17435,7 +17454,7 @@ async function resolveSessionId(resumeArg, sessionIdArg, sessionFileArg) {
17435
17454
  }
17436
17455
  }
17437
17456
  async function startInteractiveUI(config, settings, startupWarnings, workspaceRoot = process.cwd(), resumedSessionData, initializationResult) {
17438
- const { startInteractiveUI: doStartUI } = await import("./interactiveCli-E3PUPYMZ.js");
17457
+ const { startInteractiveUI: doStartUI } = await import("./interactiveCli-YEXCUIFZ.js");
17439
17458
  await doStartUI(
17440
17459
  config,
17441
17460
  settings,
@@ -17644,7 +17663,7 @@ ${finalArgs[promptIndex + 1]}`;
17644
17663
  await config.storage.initialize();
17645
17664
  adminControlsListner.setConfig(config);
17646
17665
  if (config.isInteractive() && settings.merged.general.devtools) {
17647
- const { setupInitialActivityLogger } = await import("./devtoolsService-WP2OPVPB.js");
17666
+ const { setupInitialActivityLogger } = await import("./devtoolsService-6XOCGTLC.js");
17648
17667
  setupInitialActivityLogger(config);
17649
17668
  }
17650
17669
  registerTelemetryConfig(config);
@@ -17703,7 +17722,7 @@ ${finalArgs[promptIndex + 1]}`;
17703
17722
  const initAppHandle = startupProfiler.start("initialize_app");
17704
17723
  const initializationResult = await initializeApp(config, settings);
17705
17724
  initAppHandle?.end();
17706
- import("./liteRtServerManager-JCTYJBV5.js").then(({ LiteRtServerManager }) => {
17725
+ import("./liteRtServerManager-PD2N3GLD.js").then(({ LiteRtServerManager }) => {
17707
17726
  const mergedGemma = settings.merged.experimental?.gemmaModelRouter;
17708
17727
  if (!mergedGemma) return;
17709
17728
  const userGemma = settings.forScope("User" /* User */).settings.experimental?.gemmaModelRouter;