@google/gemini-cli 0.55.0-preview.2 → 0.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/bundle/builtin/antigravity-support/SKILL.md +55 -18
  2. package/bundle/builtin/skill-creator/SKILL.md +221 -84
  3. package/bundle/{chunk-2ZWCUTMN.js → chunk-2M2ZIALC.js} +1 -1
  4. package/bundle/{chunk-A4YWS44A.js → chunk-32XQ54AJ.js} +41 -13
  5. package/bundle/{chunk-T36P7MFE.js → chunk-3PF5QBBI.js} +7 -7
  6. package/bundle/{chunk-XWGJPCDB.js → chunk-4PTN4HDB.js} +1 -1
  7. package/bundle/{chunk-57ZLFNIU.js → chunk-4VCYHMUV.js} +1 -1
  8. package/bundle/{chunk-KII3XXCP.js → chunk-54ARFWUQ.js} +3 -3
  9. package/bundle/{chunk-OC55SY62.js → chunk-5LKFYSMV.js} +7 -7
  10. package/bundle/{chunk-CYJHOZAD.js → chunk-7PUNXJV6.js} +1 -1
  11. package/bundle/{chunk-2NTEXQZI.js → chunk-AHQT54A5.js} +2 -2
  12. package/bundle/{chunk-LVOM4PEE.js → chunk-AICCA4O7.js} +2 -2
  13. package/bundle/{chunk-4SFKECJB.js → chunk-CBP73R2W.js} +1 -1
  14. package/bundle/{chunk-O5GQF2L7.js → chunk-DPETPWEN.js} +1 -1
  15. package/bundle/{chunk-3OPKUUXP.js → chunk-F6UH32RP.js} +1 -1
  16. package/bundle/{chunk-PTZIAOG5.js → chunk-FFNJNOPW.js} +3 -3
  17. package/bundle/{chunk-QPGTVRXP.js → chunk-IHBI4YWX.js} +7 -7
  18. package/bundle/{chunk-UXD5COS4.js → chunk-L72KYPGX.js} +7 -7
  19. package/bundle/{chunk-7IYUUE2H.js → chunk-MMGNXRKB.js} +1 -1
  20. package/bundle/{chunk-L6Q242KC.js → chunk-MVFWCC7A.js} +1 -1
  21. package/bundle/{chunk-CBX65YIB.js → chunk-MXXWTJ5T.js} +1 -1
  22. package/bundle/{chunk-SEHUSFSL.js → chunk-ODKPTNXF.js} +1 -1
  23. package/bundle/{chunk-J27NXCYL.js → chunk-PG6A7S3N.js} +1 -1
  24. package/bundle/{chunk-HZZM77SO.js → chunk-QCOIICKD.js} +41 -13
  25. package/bundle/{chunk-S3XRZJYO.js → chunk-QZIGFB5E.js} +1 -1
  26. package/bundle/{chunk-DBPSBJMI.js → chunk-RV6ZZ7XX.js} +1 -1
  27. package/bundle/{chunk-R3S5PP5S.js → chunk-TBDX7VEE.js} +41 -13
  28. package/bundle/{chunk-DSCF5EA6.js → chunk-TGIIS5S2.js} +3 -3
  29. package/bundle/{chunk-J6DC57TM.js → chunk-UE3CHSFT.js} +1 -1
  30. package/bundle/{chunk-DRN2VYCZ.js → chunk-UNIFGKZA.js} +2 -2
  31. package/bundle/{chunk-4C7ON4TD.js → chunk-WD5EVW3M.js} +1 -1
  32. package/bundle/{chunk-FH7GCVZY.js → chunk-XCA4ZL2J.js} +2 -2
  33. package/bundle/{chunk-IHR5TZ6N.js → chunk-YBQ5R3NL.js} +3 -3
  34. package/bundle/{chunk-MLTI5CK6.js → chunk-ZYL2LM3Y.js} +41 -13
  35. package/bundle/{cleanup-PYHN72B4.js → cleanup-B3QR2N4G.js} +2 -2
  36. package/bundle/{cleanup-QOIB4MC5.js → cleanup-H4OEYJO6.js} +2 -2
  37. package/bundle/{cleanup-X7SPIVY6.js → cleanup-MJ6IH5A4.js} +2 -2
  38. package/bundle/{cleanup-XHKLOUOX.js → cleanup-ZPX2BSHS.js} +2 -2
  39. package/bundle/{core-TM4S2KC6.js → core-IV4CNC54.js} +1 -1
  40. package/bundle/{devtoolsService-QXH36QMO.js → devtoolsService-53U6T2D7.js} +2 -2
  41. package/bundle/{devtoolsService-XNULR5OM.js → devtoolsService-HB7ZBXSQ.js} +2 -2
  42. package/bundle/{devtoolsService-XP7RODGG.js → devtoolsService-OPPX3TMY.js} +2 -2
  43. package/bundle/{devtoolsService-YBK5NQJR.js → devtoolsService-VRMTKDJD.js} +2 -2
  44. package/bundle/{dist-DUXHKH4A.js → dist-6SH22WAQ.js} +1 -1
  45. package/bundle/{dist-FCM7NH26.js → dist-DZLHUESI.js} +1 -1
  46. package/bundle/{dist-LH5DRLX7.js → dist-GGMH7TPR.js} +1 -1
  47. package/bundle/docs/behavioral-evals.md +185 -0
  48. package/bundle/docs/changelogs/index.md +18 -0
  49. package/bundle/docs/changelogs/latest.md +59 -31
  50. package/bundle/docs/changelogs/preview.md +45 -3
  51. package/bundle/docs/sidebar.json +4 -0
  52. package/bundle/{gemini-ZUILAPR6.js → gemini-3KUKFPRO.js} +14 -14
  53. package/bundle/{gemini-HDAYOIW2.js → gemini-63IMHOLI.js} +14 -14
  54. package/bundle/{gemini-ORTIIX7J.js → gemini-I57YPWDS.js} +14 -14
  55. package/bundle/{gemini-A7HOBIKY.js → gemini-LI2WNAGG.js} +14 -14
  56. package/bundle/gemini.js +7 -7
  57. package/bundle/{interactiveCli-H524RKEH.js → interactiveCli-2Z3Q3FYM.js} +67 -25
  58. package/bundle/{interactiveCli-KX3U7SFD.js → interactiveCli-4CVVH6KY.js} +67 -25
  59. package/bundle/{interactiveCli-O4YSZIKG.js → interactiveCli-OLXPGHKG.js} +67 -25
  60. package/bundle/{interactiveCli-YAAI2B6S.js → interactiveCli-YTTP3IVA.js} +67 -25
  61. package/bundle/{liteRtServerManager-FTW42YZF.js → liteRtServerManager-3I2T6MGB.js} +4 -4
  62. package/bundle/{liteRtServerManager-NW33H3DY.js → liteRtServerManager-F6V5YDCO.js} +4 -4
  63. package/bundle/{liteRtServerManager-PRXJGWUQ.js → liteRtServerManager-H6XTDF3Z.js} +4 -4
  64. package/bundle/{liteRtServerManager-RP2Z5PSZ.js → liteRtServerManager-I5WRPME4.js} +4 -4
  65. package/bundle/{oauth2-provider-JZQDXWRM.js → oauth2-provider-D5ATF6IJ.js} +1 -1
  66. package/bundle/{oauth2-provider-UKW3UFLQ.js → oauth2-provider-EO6C45X7.js} +1 -1
  67. package/bundle/{oauth2-provider-AXFTVNOH.js → oauth2-provider-QKZF52YW.js} +1 -1
  68. package/bundle/{oauth2-provider-X4GQTJLG.js → oauth2-provider-RA73ERNX.js} +1 -1
  69. package/bundle/{start-EIHA5TWI.js → start-A2X2P77M.js} +6 -6
  70. package/bundle/{start-ODF2OV65.js → start-IH2TDHK5.js} +6 -6
  71. package/bundle/{start-ONHNJJG7.js → start-J7S6DWJY.js} +6 -6
  72. package/bundle/{start-TSZCFX4W.js → start-VOAVWNRZ.js} +6 -6
  73. package/package.json +1 -1
@@ -3,7 +3,7 @@ import {
3
3
  CoreEvent,
4
4
  coreEvents,
5
5
  debugLogger
6
- } from "./chunk-R3S5PP5S.js";
6
+ } from "./chunk-ZYL2LM3Y.js";
7
7
  import "./chunk-664ZODQF.js";
8
8
  import "./chunk-IUUIT4SU.js";
9
9
  import "./chunk-TUDYL3X4.js";
@@ -4325,7 +4325,7 @@ async function toggleDevToolsPanel(config, isOpen, toggle, setOpen) {
4325
4325
  return;
4326
4326
  }
4327
4327
  try {
4328
- const { openBrowserSecurely, shouldLaunchBrowser } = await import("./dist-DUXHKH4A.js");
4328
+ const { openBrowserSecurely, shouldLaunchBrowser } = await import("./dist-6SH22WAQ.js");
4329
4329
  const url = await startDevToolsServer(config);
4330
4330
  if (shouldLaunchBrowser()) {
4331
4331
  try {
@@ -1079,7 +1079,7 @@ import {
1079
1079
  wrapUntrusted,
1080
1080
  writeToStderr,
1081
1081
  writeToStdout
1082
- } from "./chunk-R3S5PP5S.js";
1082
+ } from "./chunk-ZYL2LM3Y.js";
1083
1083
  import "./chunk-664ZODQF.js";
1084
1084
  import {
1085
1085
  SpanStatusCode,
@@ -1079,7 +1079,7 @@ import {
1079
1079
  wrapUntrusted,
1080
1080
  writeToStderr,
1081
1081
  writeToStdout
1082
- } from "./chunk-A4YWS44A.js";
1082
+ } from "./chunk-32XQ54AJ.js";
1083
1083
  import "./chunk-664ZODQF.js";
1084
1084
  import {
1085
1085
  SpanStatusCode,
@@ -1079,7 +1079,7 @@ import {
1079
1079
  wrapUntrusted,
1080
1080
  writeToStderr,
1081
1081
  writeToStdout
1082
- } from "./chunk-MLTI5CK6.js";
1082
+ } from "./chunk-TBDX7VEE.js";
1083
1083
  import "./chunk-664ZODQF.js";
1084
1084
  import {
1085
1085
  SpanStatusCode,
@@ -0,0 +1,185 @@
1
+ # Behavioral Evaluations & EDK Guide
2
+
3
+ This guide introduces the **Eval Development Kit (EDK)** and details how to
4
+ write, validate, run, and report on **behavioral evaluations** in the Gemini CLI
5
+ codebase.
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ Behavioral evaluations are automated tests designed to assert on the
12
+ **behavior** of the Gemini CLI agent (e.g., verifying which tools are called,
13
+ checking call ordering, or avoiding destructive commands) rather than checking
14
+ the final prose output.
15
+
16
+ Evaluating agent behavior is critical because:
17
+
18
+ 1. Model responses are non-deterministic, making exact prose matching highly
19
+ fragile.
20
+ 2. We must ensure the model utilizes the most efficient tools (e.g., batching
21
+ files via `read_many_files` instead of sequential `read_file` calls).
22
+ 3. We must enforce safety boundaries (e.g., preventing execution of raw shell
23
+ commands when safe alternatives exist).
24
+
25
+ All behavioral evaluations are stored under the `evals/` directory.
26
+
27
+ ---
28
+
29
+ ## EDK Developer Commands
30
+
31
+ The EDK provides CLI tools under `scripts/` to help contributors audit, check,
32
+ and monitor evals.
33
+
34
+ ### 1. `npm run eval:inventory`
35
+
36
+ Scans all eval files under `evals/`, statically parses them, and provides a
37
+ structured overview of what exists in the repository.
38
+
39
+ - **Usage:**
40
+ ```bash
41
+ npm run eval:inventory
42
+ ```
43
+ - **JSON Output:** For CI integration or inventory indexing, generate a
44
+ machine-readable JSON report:
45
+ ```bash
46
+ npm run eval:inventory -- --json
47
+ ```
48
+ - **Custom Root:** Run against another directory or repository:
49
+ ```bash
50
+ npm run eval:inventory -- --root /path/to/other/repo
51
+ ```
52
+
53
+ ---
54
+
55
+ ### 2. `npm run eval:validate`
56
+
57
+ A lint-like checker that validates eval source files against standard structural
58
+ guidelines and best practices.
59
+
60
+ - **Usage:**
61
+ ```bash
62
+ npm run eval:validate
63
+ ```
64
+ - **Custom Scopes:** Validate a specific file:
65
+ ```bash
66
+ npm run eval:validate -- evals/my-test.eval.ts
67
+ ```
68
+
69
+ #### Validation Rules & Severities
70
+
71
+ | Rule ID | Severity | Description |
72
+ | :------------------- | :---------- | :--------------------------------------------------------------------------------------------------------------------- |
73
+ | `file-naming` | **Error** | File must match `*.eval.ts` or `*.eval.tsx` naming conventions. |
74
+ | `valid-policy` | **Error** | Policy must be one of `ALWAYS_PASSES`, `USUALLY_PASSES`, or `USUALLY_FAILS`. |
75
+ | `suite-metadata` | **Error** | Both `suiteName` and `suiteType` must be present as static string literals. |
76
+ | `prompt-presence` | **Error** | Every eval case must have a non-empty `prompt` string. |
77
+ | `case-name-static` | **Error** | The case name must be a static string literal, not computed dynamically. |
78
+ | `invalid-tool-refs` | **Error** | All tools referenced in assertions must match known built-in or legacy tools. |
79
+ | `positive-assertion` | **Error** | Evaluation cases must assert on at least one tool call (e.g., check `waitForToolCall` has been invoked). |
80
+ | `workspace-setup` | **Error** | Workspace behaviors (like file-system edits/reads) must set up a `files` object. |
81
+ | `new-evals-policy` | **Warning** | New evals must not use `ALWAYS_PASSES` policy initially (they should be promoted after nightly data proves stability). |
82
+
83
+ Warnings (`new-evals-policy`) will be logged with `⚠` and will **not** cause
84
+ the CLI process to exit with status `1`. Errors (`✗`) will block CI builds and
85
+ return exit status `1`.
86
+
87
+ ---
88
+
89
+ ### 3. `npm run eval:report`
90
+
91
+ Aggregates local vitest `report.json` artifacts, maps them against inventory
92
+ policies, and summarizes the pass rates per model.
93
+
94
+ - **Usage:**
95
+ ```bash
96
+ npm run eval:report
97
+ ```
98
+ By default, it scans `evals/logs/` recursively for `report.json` files.
99
+ - **Specifying Directory:**
100
+ ```bash
101
+ npm run eval:report -- /path/to/logs
102
+ ```
103
+ - **JSON Output:**
104
+ ```bash
105
+ npm run eval:report -- --json
106
+ ```
107
+
108
+ ---
109
+
110
+ ## Contributor Workflow
111
+
112
+ When writing a new behavioral evaluation, adhere to this workflow to ensure
113
+ high-quality, non-flaky test runs.
114
+
115
+ ### Step-by-Step Guide
116
+
117
+ 1. **Identify the Target Behavior**: Determine which tool calls need
118
+ verification (e.g., `web_fetch` must be called).
119
+ 2. **Author the Eval File**: Create your file under `evals/<name>.eval.ts`
120
+ naming it properly.
121
+ 3. **Configure Workspace Files**: If the eval reads or edits files, define them
122
+ inside the `files` metadata field.
123
+ 4. **Assert Behavior, Not Prose**: Ensure the `assert` block checks tool
124
+ interactions using `rig.waitForToolCall` or similar. Do not check final
125
+ prose.
126
+ 5. **Run Locally**:
127
+ ```bash
128
+ RUN_EVALS=true npx vitest run evals/my-test.eval.ts
129
+ ```
130
+ 6. **Deflake**: Run your eval at least 3 times locally to verify it does not
131
+ fail due to model variance.
132
+ 7. **Run Validation**: Run `npm run eval:validate` to ensure no linting errors
133
+ are present.
134
+
135
+ ### Acceptance Criteria Checklist
136
+
137
+ - [ ] **Naming**: File ends with `.eval.ts` or `.eval.tsx`.
138
+ - [ ] **Policy**: New evals start as `USUALLY_PASSES`.
139
+ - [ ] **Metadata**: Static `suiteName` and `suiteType` (e.g. `'behavioral'`) are
140
+ specified.
141
+ - [ ] **Assertions**: Uses `rig.waitForToolCall` or asserts tool arguments
142
+ explicitly.
143
+ - [ ] **Clean workspace**: Does not write to files outside `rig.testDir`.
144
+
145
+ ### Common Anti-Patterns to Avoid
146
+
147
+ - **Restricting core tools**: Never override `settings.tools.core` to limit
148
+ tools. Evals must run against the default toolset.
149
+ - **Checking model prose**: Avoid `expect(result).toContain('something')` since
150
+ model wording is non-deterministic.
151
+ - **Integration-only testing**: Evals that only write files without checking
152
+ realistic model prompts are integration tests and belong under
153
+ `integration-tests/`.
154
+
155
+ ---
156
+
157
+ ## CI & Dashboard Integration
158
+
159
+ You can easily automate behavioral evaluations or compile dashboard data using
160
+ EDK's JSON reporters.
161
+
162
+ ### CI Validation Block
163
+
164
+ Add a step in your PR checks or GitHub workflows to automatically lint new evals
165
+ and block pull requests containing validation errors:
166
+
167
+ ```yaml
168
+ - name: Run Eval Validator
169
+ run: npm run eval:validate
170
+ ```
171
+
172
+ ### Publishing to a Dashboard
173
+
174
+ To record nightly performance metrics across multiple models:
175
+
176
+ 1. Configure your workflow to run evaluations with the JSON reporter:
177
+ ```bash
178
+ cross-env GEMINI_MODEL=gemini-2.5-pro npx vitest run --config evals/vitest.config.ts --reporter=json --outputFile="evals/logs/eval-logs-gemini-2.5-pro/report.json"
179
+ ```
180
+ 2. Aggregate all test runs using the reporting tool:
181
+ ```bash
182
+ npm run eval:report -- evals/logs --json > aggregated_report.json
183
+ ```
184
+ 3. Upload `aggregated_report.json` to your dashboard storage backend to
185
+ visualize pass rates over time.
@@ -18,6 +18,24 @@ 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.54.0 - 2026-08-06
22
+
23
+ - **PR Automation & Antigravity Agent:** Integrated the Antigravity agent runner
24
+ with dual-locking Firestore concurrency controls to secure the PR generator
25
+ ([#28434](https://github.com/google-gemini/gemini-cli/pull/28434),
26
+ [#28432](https://github.com/google-gemini/gemini-cli/pull/28432) by
27
+ @joneba-google).
28
+ - **Caretaker Triaging & Security:** Enhanced caretaker triage to post comments
29
+ prior to auto-closing issues and sanitized issue titles under untrusted
30
+ context ([#28411](https://github.com/google-gemini/gemini-cli/pull/28411),
31
+ [#28352](https://github.com/google-gemini/gemini-cli/pull/28352) by @chadd28).
32
+ - **Security and Session Robustness:** Prevented cleartext credential leakage by
33
+ enforcing HTTPS, rotated session IDs on model fallbacks, and skipped merged
34
+ function-response turns in active loops
35
+ ([#28517](https://github.com/google-gemini/gemini-cli/pull/28517) by
36
+ @amelidev, [#28565](https://github.com/google-gemini/gemini-cli/pull/28565) by
37
+ @adamfweidman).
38
+
21
39
  ## Announcements: v0.53.0 - 2026-07-28
22
40
 
23
41
  - **Caretaker Triage Orchestration:** Implemented an LLM triage orchestrator and
@@ -1,6 +1,6 @@
1
- # Latest stable release: v0.53.0
1
+ # Latest stable release: v0.54.0
2
2
 
3
- Released: July 28, 2026
3
+ Released: August 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,38 +11,66 @@ npm install -g @google/gemini-cli
11
11
 
12
12
  ## Highlights
13
13
 
14
- - **Caretaker Triage Orchestrator:** Implemented an LLM triage orchestrator and
15
- container build setup to manage automated caretakers.
16
- - **Eval Coverage Reporting:** Introduced a new command for generating
17
- evaluation coverage reports to track agent decision logic and testing.
18
- - **Security and Sandboxing:** Aligned macOS permissive Seatbelt profiles with
19
- the deny-default model, and enforced workspace trust with task isolation in
20
- the A2A server.
21
- - **Robust Conversation Loops:** Coalesced consecutive message roles and grouped
22
- cancelled tool responses to avoid Bad Request errors, and mitigated infinite
23
- ReAct loops and prompt injection vulnerabilities.
14
+ - **PR Generation & Antigravity Agent:** Implemented Firestore concurrency
15
+ dual-locking mechanisms in the database and introduced the Antigravity agent
16
+ runner with comprehensive prompt templates.
17
+ - **Caretaker Triaging & Issue Security:** Improved the caretaker triage loop to
18
+ post a descriptive comment prior to auto-closing issues, and sanitized issue
19
+ titles within an untrusted context to ensure secure processing.
20
+ - **Enhanced Authentication & Security:** Enforced strict HTTPS validation for
21
+ GoogleCredentialsAuthProvider to block cleartext leakage, and implemented tag
22
+ length validation for the file keychain system.
23
+ - **Model Fallback & History Filtering:** Resolved stateful API errors by
24
+ rotating session IDs on model fallback, optimized conversation history
25
+ retrieval by filtering out thought parts when context management is disabled,
26
+ and correctly skipped merged function responses when tracking active loops.
24
27
 
25
28
  ## What's Changed
26
29
 
27
- - fix(core,a2a): group cancelled tool responses and coalesce consecutive roles
28
- to prevent 400 Bad Request by @luisfelipe-alt in
29
- [#28407](https://github.com/google-gemini/gemini-cli/pull/28407)
30
- - feat(caretaker-triage): implement LLM triage orchestrator and container build
31
- by @chadd28 in
32
- [#28345](https://github.com/google-gemini/gemini-cli/pull/28345)
33
- - refactor(cli): align macOS permissive Seatbelt profiles with deny-default
34
- model by @ompatel-aiml in
35
- [#28424](https://github.com/google-gemini/gemini-cli/pull/28424)
36
- - fix(core): mitigate infinite ReAct loops and prompt injection loops by
37
- @amelidev in [#28429](https://github.com/google-gemini/gemini-cli/pull/28429)
38
- - fix(a2a-server): enforce workspace trust and task isolation to prevent RCE by
30
+ - Changelog for v0.53.0-preview.0 by @gemini-cli-robot in
31
+ [#28507](https://github.com/google-gemini/gemini-cli/pull/28507)
32
+ - Changelog for v0.52.0 by @gemini-cli-robot in
33
+ [#28508](https://github.com/google-gemini/gemini-cli/pull/28508)
34
+ - chore(release): bump version to 0.54.0-nightly.20260722.gf743ab579 by
35
+ @gemini-cli-robot in
36
+ [#28510](https://github.com/google-gemini/gemini-cli/pull/28510)
37
+ - fix(caretaker): sanitize and wrap issue title in untrusted_context by @chadd28
38
+ in [#28352](https://github.com/google-gemini/gemini-cli/pull/28352)
39
+ - chore(caretaker): update vitest to v3.2.4 and add package-lock.json files by
40
+ @chadd28 in [#28409](https://github.com/google-gemini/gemini-cli/pull/28409)
41
+ - fix(core): rotate session ID on model fallback to prevent stateful API errors
42
+ by @amelidev in
43
+ [#28469](https://github.com/google-gemini/gemini-cli/pull/28469)
44
+ - feat(caretaker-triage): post comment before auto-closing issues by @chadd28 in
45
+ [#28411](https://github.com/google-gemini/gemini-cli/pull/28411)
46
+ - fix(core): enforce HTTPS for GoogleCredentialsAuthProvider to prevent
47
+ cleartext leakage by @amelidev in
48
+ [#28517](https://github.com/google-gemini/gemini-cli/pull/28517)
49
+ - fix(core): filter out thought parts from getHistoryTurns when context
50
+ management is disabled by @DavidAPierce in
51
+ [#28509](https://github.com/google-gemini/gemini-cli/pull/28509)
52
+ - fix(a2a-server): normalize CRLF line endings to LF in getProposedContent by
39
53
  @luisfelipe-alt in
40
- [#28470](https://github.com/google-gemini/gemini-cli/pull/28470)
41
- - fix(core): sequentially verify cached credentials and restore
42
- GOOGLE_APPLICATION_CREDENTIALS fallback by @luisfelipe-alt in
43
- [#28472](https://github.com/google-gemini/gemini-cli/pull/28472)
44
- - feat(evals): add eval coverage report command by @ved015 in
45
- [#28169](https://github.com/google-gemini/gemini-cli/pull/28169)
54
+ [#28531](https://github.com/google-gemini/gemini-cli/pull/28531)
55
+ - fix(core): enforce explicit tag length and validation in file keychain by
56
+ @luisfelipe-alt in
57
+ [#28523](https://github.com/google-gemini/gemini-cli/pull/28523)
58
+ - chore/release: bump version to 0.54.0-nightly.20260728.gbef611950 by
59
+ @gemini-cli-robot in
60
+ [#28552](https://github.com/google-gemini/gemini-cli/pull/28552)
61
+ - feat(pr-generator-db): implement Firestore concurrency dual-locking and test
62
+ ingestion utilities by @joneba-google in
63
+ [#28432](https://github.com/google-gemini/gemini-cli/pull/28432)
64
+ - feat(pr-generator-agent): implement Antigravity agent runner and prompt
65
+ templates … by @joneba-google in
66
+ [#28434](https://github.com/google-gemini/gemini-cli/pull/28434)
67
+ - fix(core): skip merged function-response turns when finding the active loop by
68
+ @adamfweidman in
69
+ [#28565](https://github.com/google-gemini/gemini-cli/pull/28565)
70
+ - fix(patch): cherry-pick f47d6c6 to release/v0.54.0-preview.0-pr-28566 to patch
71
+ version v0.54.0-preview.0 and create version 0.54.0-preview.1 by
72
+ @gemini-cli-robot in
73
+ [#28609](https://github.com/google-gemini/gemini-cli/pull/28609)
46
74
 
47
75
  **Full Changelog**:
48
- https://github.com/google-gemini/gemini-cli/compare/v0.52.0...v0.53.0
76
+ https://github.com/google-gemini/gemini-cli/compare/v0.53.1...v0.54.0
@@ -1,6 +1,6 @@
1
- # Preview release: v0.54.0-preview.0
1
+ # Preview release: v0.55.0-preview.1
2
2
 
3
- Released: July 28, 2026
3
+ Released: August 06, 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).
@@ -26,6 +26,48 @@ npm install -g @google/gemini-cli@preview
26
26
 
27
27
  ## What's Changed
28
28
 
29
+ - chore(release): bump version to 0.55.0-nightly.20260728.gd29268d36 by
30
+ @gemini-cli-robot in
31
+ [#28569](https://github.com/google-gemini/gemini-cli/pull/28569)
32
+ - Changelog for v0.54.0-preview.0 by @gemini-cli-robot in
33
+ [#28567](https://github.com/google-gemini/gemini-cli/pull/28567)
34
+ - Changelog for v0.53.0 by @gemini-cli-robot in
35
+ [#28568](https://github.com/google-gemini/gemini-cli/pull/28568)
36
+ - chore/release: bump version to 0.55.0-nightly.20260729.g3499c84f7 by
37
+ @gemini-cli-robot in
38
+ [#28573](https://github.com/google-gemini/gemini-cli/pull/28573)
39
+ - fix(core): classify capacity exhaustion as terminal to prevent retry hangs by
40
+ @luisfelipe-alt in
41
+ [#28599](https://github.com/google-gemini/gemini-cli/pull/28599)
42
+ - fix(core,cli): propagate InvalidStreamError details to UI for specific empty
43
+ response guidance by @DavidAPierce in
44
+ [#28566](https://github.com/google-gemini/gemini-cli/pull/28566)
45
+ - fix(cli): fall back to embedded macOS seatbelt profiles if missing by
46
+ @amelidev in [#28551](https://github.com/google-gemini/gemini-cli/pull/28551)
47
+ - feat(pr-generator-core): add environment config parser, command executor,
48
+ GitHub R… by @joneba-google in
49
+ [#28435](https://github.com/google-gemini/gemini-cli/pull/28435)
50
+ - feat(pr-generator-orchestrator): implement iterative bug-fixing state machine
51
+ and container worker entrypoint by @joneba-google in
52
+ [#28433](https://github.com/google-gemini/gemini-cli/pull/28433)
53
+ - feat(pr-generator-infra): configure Cloud Run job, Workflows definition, and
54
+ Dockerfile by @joneba-google in
55
+ [#28431](https://github.com/google-gemini/gemini-cli/pull/28431)
56
+ - fix(release): handle npm dist-tag deletion failures on registries that forbid
57
+ it by @DavidAPierce in
58
+ [#28694](https://github.com/google-gemini/gemini-cli/pull/28694)
59
+ - fix(core): stop a new user message fusing into an unanswered tool response by
60
+ @adamfweidman in
61
+ [#28700](https://github.com/google-gemini/gemini-cli/pull/28700)
62
+ - fix(core,cli): repair /compress session reload and quota-fallback tool
63
+ response loss by @adamfweidman in
64
+ [#28672](https://github.com/google-gemini/gemini-cli/pull/28672)
65
+ - fix(core): preserve functionCall thoughtSignature when stripping thought parts
66
+ by @sarbojitrana in
67
+ [#28607](https://github.com/google-gemini/gemini-cli/pull/28607)
68
+ - fix(core): unwrap and parse nested gaxios streaming errors from cause message
69
+ by @luisfelipe-alt in
70
+ [#28689](https://github.com/google-gemini/gemini-cli/pull/28689)
29
71
  - Changelog for v0.53.0-preview.0 by @gemini-cli-robot in
30
72
  [#28507](https://github.com/google-gemini/gemini-cli/pull/28507)
31
73
  - Changelog for v0.52.0 by @gemini-cli-robot in
@@ -68,4 +110,4 @@ npm install -g @google/gemini-cli@preview
68
110
  [#28565](https://github.com/google-gemini/gemini-cli/pull/28565)
69
111
 
70
112
  **Full Changelog**:
71
- https://github.com/google-gemini/gemini-cli/compare/v0.53.0-preview.0...v0.54.0-preview.0
113
+ https://github.com/google-gemini/gemini-cli/compare/v0.53.0-preview.0...v0.55.0-preview.1
@@ -217,6 +217,10 @@
217
217
  {
218
218
  "label": "Development",
219
219
  "items": [
220
+ {
221
+ "label": "Behavioral evaluations",
222
+ "slug": "docs/behavioral-evals"
223
+ },
220
224
  { "label": "Contribution guide", "slug": "docs/contributing" },
221
225
  { "label": "Integration testing", "slug": "docs/integration-tests" },
222
226
  {
@@ -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-PTZIAOG5.js";
5
+ } from "./chunk-TGIIS5S2.js";
6
6
  import {
7
7
  BuiltinCommandLoader,
8
8
  CommandService,
@@ -45,11 +45,11 @@ import {
45
45
  updateAllUpdatableExtensions,
46
46
  updateExtension,
47
47
  validateAuthMethod
48
- } from "./chunk-T36P7MFE.js";
48
+ } from "./chunk-3PF5QBBI.js";
49
49
  import {
50
50
  exitCli,
51
51
  require_source
52
- } from "./chunk-CYJHOZAD.js";
52
+ } from "./chunk-4VCYHMUV.js";
53
53
  import {
54
54
  appEvents
55
55
  } from "./chunk-5PS3AYFU.js";
@@ -87,11 +87,11 @@ import {
87
87
  resolveGemmaConfig,
88
88
  saveModelChange,
89
89
  stripAnsi
90
- } from "./chunk-XWGJPCDB.js";
90
+ } from "./chunk-4PTN4HDB.js";
91
91
  import {
92
92
  RELAUNCH_EXIT_CODE
93
- } from "./chunk-FH7GCVZY.js";
94
- import "./chunk-2ZWCUTMN.js";
93
+ } from "./chunk-XCA4ZL2J.js";
94
+ import "./chunk-2M2ZIALC.js";
95
95
  import {
96
96
  cleanupCheckpoints,
97
97
  registerCleanup,
@@ -100,7 +100,7 @@ import {
100
100
  runExitCleanup,
101
101
  runSyncCleanup,
102
102
  setupSignalHandlers
103
- } from "./chunk-S3XRZJYO.js";
103
+ } from "./chunk-PG6A7S3N.js";
104
104
  import {
105
105
  ASK_USER_TOOL_NAME,
106
106
  AuthType,
@@ -237,7 +237,7 @@ import {
237
237
  updatePolicy,
238
238
  writeToStderr,
239
239
  writeToStdout
240
- } from "./chunk-HZZM77SO.js";
240
+ } from "./chunk-QCOIICKD.js";
241
241
  import "./chunk-664ZODQF.js";
242
242
  import "./chunk-IUUIT4SU.js";
243
243
  import "./chunk-TUDYL3X4.js";
@@ -7831,7 +7831,7 @@ async function loadSandboxConfig(settings, argv) {
7831
7831
  }
7832
7832
  const command2 = getSandboxCommand(sandboxValue);
7833
7833
  const packageJson = await getPackageJson(__dirname3);
7834
- const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.55.0-preview.1" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7834
+ const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.56.0-nightly.20260806.g761f604c1" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7835
7835
  const isNative = command2 === "windows-native" || command2 === "sandbox-exec" || command2 === "lxc";
7836
7836
  return command2 && (image || isNative) ? { enabled: true, allowedPaths, networkAccess, command: command2, image } : void 0;
7837
7837
  }
@@ -10836,7 +10836,7 @@ async function runNonInteractive({
10836
10836
  }
10837
10837
  });
10838
10838
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
10839
- const { setupInitialActivityLogger } = await import("./devtoolsService-XNULR5OM.js");
10839
+ const { setupInitialActivityLogger } = await import("./devtoolsService-HB7ZBXSQ.js");
10840
10840
  setupInitialActivityLogger(config);
10841
10841
  }
10842
10842
  const { stdout: workingStdout } = createWorkingStdio();
@@ -11346,7 +11346,7 @@ async function runNonInteractive2(params) {
11346
11346
  }
11347
11347
  });
11348
11348
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
11349
- const { setupInitialActivityLogger } = await import("./devtoolsService-XNULR5OM.js");
11349
+ const { setupInitialActivityLogger } = await import("./devtoolsService-HB7ZBXSQ.js");
11350
11350
  setupInitialActivityLogger(config);
11351
11351
  }
11352
11352
  const { stdout: workingStdout } = createWorkingStdio();
@@ -16556,7 +16556,7 @@ async function resolveSessionId(resumeArg, sessionIdArg, sessionFileArg) {
16556
16556
  }
16557
16557
  }
16558
16558
  async function startInteractiveUI(config, settings, startupWarnings, workspaceRoot = process.cwd(), resumedSessionData, initializationResult) {
16559
- const { startInteractiveUI: doStartUI } = await import("./interactiveCli-H524RKEH.js");
16559
+ const { startInteractiveUI: doStartUI } = await import("./interactiveCli-2Z3Q3FYM.js");
16560
16560
  await doStartUI(
16561
16561
  config,
16562
16562
  settings,
@@ -16765,7 +16765,7 @@ ${finalArgs[promptIndex + 1]}`;
16765
16765
  await config.storage.initialize();
16766
16766
  adminControlsListner.setConfig(config);
16767
16767
  if (config.isInteractive() && settings.merged.general.devtools) {
16768
- const { setupInitialActivityLogger } = await import("./devtoolsService-XNULR5OM.js");
16768
+ const { setupInitialActivityLogger } = await import("./devtoolsService-HB7ZBXSQ.js");
16769
16769
  setupInitialActivityLogger(config);
16770
16770
  }
16771
16771
  registerTelemetryConfig(config);
@@ -16824,7 +16824,7 @@ ${finalArgs[promptIndex + 1]}`;
16824
16824
  const initAppHandle = startupProfiler.start("initialize_app");
16825
16825
  const initializationResult = await initializeApp(config, settings);
16826
16826
  initAppHandle?.end();
16827
- import("./liteRtServerManager-FTW42YZF.js").then(({ LiteRtServerManager }) => {
16827
+ import("./liteRtServerManager-I5WRPME4.js").then(({ LiteRtServerManager }) => {
16828
16828
  const mergedGemma = settings.merged.experimental?.gemmaModelRouter;
16829
16829
  if (!mergedGemma) return;
16830
16830
  const userGemma = settings.forScope("User" /* User */).settings.experimental?.gemmaModelRouter;
@@ -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-IHR5TZ6N.js";
5
+ } from "./chunk-54ARFWUQ.js";
6
6
  import {
7
7
  BuiltinCommandLoader,
8
8
  CommandService,
@@ -45,11 +45,11 @@ import {
45
45
  updateAllUpdatableExtensions,
46
46
  updateExtension,
47
47
  validateAuthMethod
48
- } from "./chunk-OC55SY62.js";
48
+ } from "./chunk-5LKFYSMV.js";
49
49
  import {
50
50
  exitCli,
51
51
  require_source
52
- } from "./chunk-3OPKUUXP.js";
52
+ } from "./chunk-F6UH32RP.js";
53
53
  import {
54
54
  appEvents
55
55
  } from "./chunk-5PS3AYFU.js";
@@ -87,11 +87,11 @@ import {
87
87
  resolveGemmaConfig,
88
88
  saveModelChange,
89
89
  stripAnsi
90
- } from "./chunk-SEHUSFSL.js";
90
+ } from "./chunk-ODKPTNXF.js";
91
91
  import {
92
92
  RELAUNCH_EXIT_CODE
93
- } from "./chunk-DRN2VYCZ.js";
94
- import "./chunk-L6Q242KC.js";
93
+ } from "./chunk-AICCA4O7.js";
94
+ import "./chunk-MVFWCC7A.js";
95
95
  import {
96
96
  cleanupCheckpoints,
97
97
  registerCleanup,
@@ -100,7 +100,7 @@ import {
100
100
  runExitCleanup,
101
101
  runSyncCleanup,
102
102
  setupSignalHandlers
103
- } from "./chunk-CBX65YIB.js";
103
+ } from "./chunk-MMGNXRKB.js";
104
104
  import {
105
105
  ASK_USER_TOOL_NAME,
106
106
  ApprovalMode,
@@ -253,7 +253,7 @@ import {
253
253
  updatePolicy,
254
254
  writeToStderr,
255
255
  writeToStdout
256
- } from "./chunk-R3S5PP5S.js";
256
+ } from "./chunk-32XQ54AJ.js";
257
257
  import "./chunk-664ZODQF.js";
258
258
  import "./chunk-IUUIT4SU.js";
259
259
  import "./chunk-TUDYL3X4.js";
@@ -7847,7 +7847,7 @@ async function loadSandboxConfig(settings, argv) {
7847
7847
  }
7848
7848
  const command2 = getSandboxCommand(sandboxValue);
7849
7849
  const packageJson = await getPackageJson(__dirname3);
7850
- const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.55.0-preview.2" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7850
+ const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.55.1" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7851
7851
  const isNative = command2 === "windows-native" || command2 === "sandbox-exec" || command2 === "lxc";
7852
7852
  return command2 && (image || isNative) ? { enabled: true, allowedPaths, networkAccess, command: command2, image } : void 0;
7853
7853
  }
@@ -10852,7 +10852,7 @@ async function runNonInteractive({
10852
10852
  }
10853
10853
  });
10854
10854
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
10855
- const { setupInitialActivityLogger } = await import("./devtoolsService-YBK5NQJR.js");
10855
+ const { setupInitialActivityLogger } = await import("./devtoolsService-53U6T2D7.js");
10856
10856
  setupInitialActivityLogger(config);
10857
10857
  }
10858
10858
  const { stdout: workingStdout } = createWorkingStdio();
@@ -11362,7 +11362,7 @@ async function runNonInteractive2(params) {
11362
11362
  }
11363
11363
  });
11364
11364
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
11365
- const { setupInitialActivityLogger } = await import("./devtoolsService-YBK5NQJR.js");
11365
+ const { setupInitialActivityLogger } = await import("./devtoolsService-53U6T2D7.js");
11366
11366
  setupInitialActivityLogger(config);
11367
11367
  }
11368
11368
  const { stdout: workingStdout } = createWorkingStdio();
@@ -16572,7 +16572,7 @@ async function resolveSessionId(resumeArg, sessionIdArg, sessionFileArg) {
16572
16572
  }
16573
16573
  }
16574
16574
  async function startInteractiveUI(config, settings, startupWarnings, workspaceRoot = process.cwd(), resumedSessionData, initializationResult) {
16575
- const { startInteractiveUI: doStartUI } = await import("./interactiveCli-O4YSZIKG.js");
16575
+ const { startInteractiveUI: doStartUI } = await import("./interactiveCli-4CVVH6KY.js");
16576
16576
  await doStartUI(
16577
16577
  config,
16578
16578
  settings,
@@ -16781,7 +16781,7 @@ ${finalArgs[promptIndex + 1]}`;
16781
16781
  await config.storage.initialize();
16782
16782
  adminControlsListner.setConfig(config);
16783
16783
  if (config.isInteractive() && settings.merged.general.devtools) {
16784
- const { setupInitialActivityLogger } = await import("./devtoolsService-YBK5NQJR.js");
16784
+ const { setupInitialActivityLogger } = await import("./devtoolsService-53U6T2D7.js");
16785
16785
  setupInitialActivityLogger(config);
16786
16786
  }
16787
16787
  registerTelemetryConfig(config);
@@ -16840,7 +16840,7 @@ ${finalArgs[promptIndex + 1]}`;
16840
16840
  const initAppHandle = startupProfiler.start("initialize_app");
16841
16841
  const initializationResult = await initializeApp(config, settings);
16842
16842
  initAppHandle?.end();
16843
- import("./liteRtServerManager-NW33H3DY.js").then(({ LiteRtServerManager }) => {
16843
+ import("./liteRtServerManager-3I2T6MGB.js").then(({ LiteRtServerManager }) => {
16844
16844
  const mergedGemma = settings.merged.experimental?.gemmaModelRouter;
16845
16845
  if (!mergedGemma) return;
16846
16846
  const userGemma = settings.forScope("User" /* User */).settings.experimental?.gemmaModelRouter;