@google/gemini-cli 0.55.0-preview.3 → 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.
- package/bundle/builtin/antigravity-support/SKILL.md +55 -18
- package/bundle/builtin/skill-creator/SKILL.md +221 -84
- package/bundle/{chunk-OKM3M2PX.js → chunk-2M2ZIALC.js} +1 -1
- package/bundle/{chunk-D7NKQXI3.js → chunk-32XQ54AJ.js} +35 -11
- package/bundle/{chunk-BXJWVB6T.js → chunk-3PF5QBBI.js} +7 -7
- package/bundle/{chunk-XLLOEYE5.js → chunk-4PTN4HDB.js} +1 -1
- package/bundle/{chunk-2K3N3YWJ.js → chunk-4VCYHMUV.js} +1 -1
- package/bundle/{chunk-IKOQM4YN.js → chunk-54ARFWUQ.js} +3 -3
- package/bundle/{chunk-GJBRSFPM.js → chunk-5LKFYSMV.js} +7 -7
- package/bundle/{chunk-2YAEBNH4.js → chunk-7PUNXJV6.js} +1 -1
- package/bundle/{chunk-4MK4F3LQ.js → chunk-AHQT54A5.js} +2 -2
- package/bundle/{chunk-ETEDB3N6.js → chunk-AICCA4O7.js} +2 -2
- package/bundle/{chunk-DW2J2NTU.js → chunk-CBP73R2W.js} +1 -1
- package/bundle/{chunk-XNQ2USVV.js → chunk-DPETPWEN.js} +1 -1
- package/bundle/{chunk-3JEIIDY3.js → chunk-F6UH32RP.js} +1 -1
- package/bundle/{chunk-V6HSKTFR.js → chunk-FFNJNOPW.js} +3 -3
- package/bundle/{chunk-QJZS4YYR.js → chunk-IHBI4YWX.js} +7 -7
- package/bundle/{chunk-YOSR3LGH.js → chunk-L72KYPGX.js} +7 -7
- package/bundle/{chunk-4PVLKN7E.js → chunk-MMGNXRKB.js} +1 -1
- package/bundle/{chunk-6VBVRJ2T.js → chunk-MVFWCC7A.js} +1 -1
- package/bundle/{chunk-5C4IPSFG.js → chunk-MXXWTJ5T.js} +1 -1
- package/bundle/{chunk-3KVUW3GS.js → chunk-ODKPTNXF.js} +1 -1
- package/bundle/{chunk-FQNLDGXL.js → chunk-PG6A7S3N.js} +1 -1
- package/bundle/{chunk-VPMDE76T.js → chunk-QCOIICKD.js} +35 -11
- package/bundle/{chunk-MOTK2J3L.js → chunk-QZIGFB5E.js} +1 -1
- package/bundle/{chunk-DIJFIQU5.js → chunk-RV6ZZ7XX.js} +1 -1
- package/bundle/{chunk-QY6VB26P.js → chunk-TBDX7VEE.js} +35 -11
- package/bundle/{chunk-7U5FKJMS.js → chunk-TGIIS5S2.js} +3 -3
- package/bundle/{chunk-CF6HJK4T.js → chunk-UE3CHSFT.js} +1 -1
- package/bundle/{chunk-NQ7ACVH7.js → chunk-UNIFGKZA.js} +2 -2
- package/bundle/{chunk-ENEDM4X3.js → chunk-WD5EVW3M.js} +1 -1
- package/bundle/{chunk-S35HA76T.js → chunk-XCA4ZL2J.js} +2 -2
- package/bundle/{chunk-EBUEQDL4.js → chunk-YBQ5R3NL.js} +3 -3
- package/bundle/{chunk-WWUS7UCO.js → chunk-ZYL2LM3Y.js} +35 -11
- package/bundle/{cleanup-6PJC7KVH.js → cleanup-B3QR2N4G.js} +2 -2
- package/bundle/{cleanup-AA32XASX.js → cleanup-H4OEYJO6.js} +2 -2
- package/bundle/{cleanup-KJNT5CKE.js → cleanup-MJ6IH5A4.js} +2 -2
- package/bundle/{cleanup-W4XFBOYU.js → cleanup-ZPX2BSHS.js} +2 -2
- package/bundle/{core-PJ4GTWLE.js → core-IV4CNC54.js} +1 -1
- package/bundle/{devtoolsService-BPCHKSK6.js → devtoolsService-53U6T2D7.js} +2 -2
- package/bundle/{devtoolsService-DDIV43LO.js → devtoolsService-HB7ZBXSQ.js} +2 -2
- package/bundle/{devtoolsService-SFT4J3TP.js → devtoolsService-OPPX3TMY.js} +2 -2
- package/bundle/{devtoolsService-X4SBEWHU.js → devtoolsService-VRMTKDJD.js} +2 -2
- package/bundle/{dist-6SIQ6JNU.js → dist-6SH22WAQ.js} +1 -1
- package/bundle/{dist-UVDHLJPD.js → dist-DZLHUESI.js} +1 -1
- package/bundle/{dist-VQ3F4FS5.js → dist-GGMH7TPR.js} +1 -1
- package/bundle/docs/behavioral-evals.md +185 -0
- package/bundle/docs/changelogs/index.md +18 -0
- package/bundle/docs/changelogs/latest.md +59 -31
- package/bundle/docs/changelogs/preview.md +45 -3
- package/bundle/docs/sidebar.json +4 -0
- package/bundle/{gemini-MSC5T5EU.js → gemini-3KUKFPRO.js} +14 -14
- package/bundle/{gemini-PA23YMHK.js → gemini-63IMHOLI.js} +14 -14
- package/bundle/{gemini-BMC63EGW.js → gemini-I57YPWDS.js} +14 -14
- package/bundle/{gemini-EYTXXZKY.js → gemini-LI2WNAGG.js} +14 -14
- package/bundle/gemini.js +7 -7
- package/bundle/{interactiveCli-OUPTNZ47.js → interactiveCli-2Z3Q3FYM.js} +8 -8
- package/bundle/{interactiveCli-5Y6AY63C.js → interactiveCli-4CVVH6KY.js} +8 -8
- package/bundle/{interactiveCli-G6PWBLT5.js → interactiveCli-OLXPGHKG.js} +8 -8
- package/bundle/{interactiveCli-T32DVN2I.js → interactiveCli-YTTP3IVA.js} +8 -8
- package/bundle/{liteRtServerManager-3MCOW5QD.js → liteRtServerManager-3I2T6MGB.js} +4 -4
- package/bundle/{liteRtServerManager-7IWRFNTW.js → liteRtServerManager-F6V5YDCO.js} +4 -4
- package/bundle/{liteRtServerManager-IRFTOINI.js → liteRtServerManager-H6XTDF3Z.js} +4 -4
- package/bundle/{liteRtServerManager-LVW27XGD.js → liteRtServerManager-I5WRPME4.js} +4 -4
- package/bundle/{oauth2-provider-BPEC44QP.js → oauth2-provider-D5ATF6IJ.js} +1 -1
- package/bundle/{oauth2-provider-FSAA6HVA.js → oauth2-provider-EO6C45X7.js} +1 -1
- package/bundle/{oauth2-provider-IVUO6NTZ.js → oauth2-provider-QKZF52YW.js} +1 -1
- package/bundle/{oauth2-provider-PH6ZPS7W.js → oauth2-provider-RA73ERNX.js} +1 -1
- package/bundle/{start-3M54SR5N.js → start-A2X2P77M.js} +6 -6
- package/bundle/{start-EEVFRHCK.js → start-IH2TDHK5.js} +6 -6
- package/bundle/{start-FC7N6JMG.js → start-J7S6DWJY.js} +6 -6
- package/bundle/{start-N5PPVI4S.js → start-VOAVWNRZ.js} +6 -6
- package/package.json +1 -1
|
@@ -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.
|
|
1
|
+
# Latest stable release: v0.54.0
|
|
2
2
|
|
|
3
|
-
Released:
|
|
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
|
-
- **
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
[#
|
|
36
|
-
-
|
|
37
|
-
@
|
|
38
|
-
- fix(
|
|
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
|
-
[#
|
|
41
|
-
- fix(core):
|
|
42
|
-
|
|
43
|
-
[#
|
|
44
|
-
-
|
|
45
|
-
|
|
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.
|
|
76
|
+
https://github.com/google-gemini/gemini-cli/compare/v0.53.1...v0.54.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Preview release: v0.
|
|
1
|
+
# Preview release: v0.55.0-preview.1
|
|
2
2
|
|
|
3
|
-
Released:
|
|
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.
|
|
113
|
+
https://github.com/google-gemini/gemini-cli/compare/v0.53.0-preview.0...v0.55.0-preview.1
|
package/bundle/docs/sidebar.json
CHANGED
|
@@ -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-
|
|
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-
|
|
48
|
+
} from "./chunk-3PF5QBBI.js";
|
|
49
49
|
import {
|
|
50
50
|
exitCli,
|
|
51
51
|
require_source
|
|
52
|
-
} from "./chunk-
|
|
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-
|
|
90
|
+
} from "./chunk-4PTN4HDB.js";
|
|
91
91
|
import {
|
|
92
92
|
RELAUNCH_EXIT_CODE
|
|
93
|
-
} from "./chunk-
|
|
94
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
48
|
+
} from "./chunk-5LKFYSMV.js";
|
|
49
49
|
import {
|
|
50
50
|
exitCli,
|
|
51
51
|
require_source
|
|
52
|
-
} from "./chunk-
|
|
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-
|
|
90
|
+
} from "./chunk-ODKPTNXF.js";
|
|
91
91
|
import {
|
|
92
92
|
RELAUNCH_EXIT_CODE
|
|
93
|
-
} from "./chunk-
|
|
94
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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;
|