Compare commits

...

3977 Commits

Author SHA1 Message Date
gemini-cli[bot] 1e6bdb8c11 🤖 Gemini Bot Maintenance Update 2026-05-15 23:49:43 +00:00
gemini-cli[bot] f534f3f17a fix(core): route personal OAuth users to stable models and fix test regressions
This PR resolves multiple issues:
1.  **Auth-Aware Model Routing**: Implements routing to stable models for users using personal OAuth (`oauth-personal`) to prevent 404/400 errors for unavailable preview models.
2.  **Config Class Stability**: Fixes a crash in `Config.getAuthType` by adding optional chaining for `contentGeneratorConfig`, which could be uninitialized in some test scenarios.
3.  **Test Environment Isolation**: Fixes widespread test failures in both `core` and `cli` packages by stubbing `GEMINI_CLI_HOME` in global test setups. This prevents CI-specific environment variables from interfering with home directory resolution in tests.
4.  **Lint Fix**: Resolves a lint error in `models_auth.test.ts` caused by using the spread operator on a class-cast object.

Fixes: #26857

cc @NTaylorMullen
2026-05-15 23:09:23 +00:00
gemini-cli[bot] f146618b6b fix(core): route personal OAuth users to stable models for auto aliases
This PR implements auth-aware model routing to prevent 404/400 errors for users using personal OAuth (`oauth-personal`).

### Problem
When using the `auto-gemini-3` model alias with personal OAuth, the CLI occasionally resolves it to `gemini-3-pro-preview`. However, many personal accounts do not have access to this specific preview model, leading to API errors (404/400). Currently, the CLI only falls back to stable models if the user has NO access to ANY preview models, which is too broad if they have access to older preview models but not the latest ones.

### Solution
- Added `authType` to the `ModelResolutionContext` and `ModelCapabilityContext`.
- Updated `ModelConfigService` to support conditions based on `authType`.
- Modified `DEFAULT_MODEL_CONFIGS` and `settings.schema.json` to explicitly route `oauth-personal` users to stable models (e.g., `gemini-2.5-pro`) for `auto` and `pro` aliases.
- Updated `resolveModel` to pass the current `authType` to the resolution engine.

These changes ensure that personal OAuth users always get a working stable model by default, while API key and Vertex AI users can still access the latest previews.

Fixes: #26857

cc @NTaylorMullen
2026-05-15 21:42:45 +00:00
David Pierce 77e65c0db5 fix(core): use hasAccessToPreview for auto model resolution and fix disappearing models (#27112) 2026-05-15 17:26:59 +00:00
Anish Sabharwal b36788eb2a fix(core): add aliases and thinking config for gemini-3.1 models (#27007) 2026-05-15 16:29:15 +00:00
PROTHAM d32c9b77df Fix/web fetch ctrl c abort (#24320)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-15 16:26:03 +00:00
Tommaso Sciortino b213fd68ec security: update dependencies to fix critical and high vulnerabilities (#27077) 2026-05-15 02:01:38 +00:00
sotokisehiro 928a311fb0 fix(core): externalize https-proxy-agent to fix proxy support (#26361) 2026-05-14 22:34:36 +00:00
7. Sun f6494f3862 docs: update sandbox image command (#26774) 2026-05-14 22:08:15 +00:00
Coco Sheng b7f2067dd7 fix(cli): explicitly clear entrypoint when spawning sandbox container (#27059) 2026-05-14 21:50:29 +00:00
Dev Randalpura 7a5a8183bf fix(ui): add ENAMETOOLONG and ENOTDIR to exceptions for file parsing errors (#27069) 2026-05-14 21:23:42 +00:00
Gal Zahavi 0c0d88d90b docs(extensions): clarify env var sanitization policy for MCP and ext… (#22854)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: Jenna Inouye <jinouye@google.com>
2026-05-14 21:23:38 +00:00
PROTHAM 2151653133 fix(core): resolve EISDIR errors during file processing (#21527) (#27041) 2026-05-14 21:21:57 +00:00
Tommaso Sciortino a6ed2cc5e3 fix(deps): update vulnerable dependencies (#27062) 2026-05-14 21:19:27 +00:00
David Pierce 5159b081bd fix(core): ensure stable admin settings comparison across IPC to prevent restart loop (#27066) 2026-05-14 19:44:03 +00:00
Gal Zahavi 918d6b6085 fix(core): ensure Vertex AI sets hasAccessToPreviewModels and remove aggressive 404 fallback revocation (#27067) 2026-05-14 19:42:09 +00:00
Dev Randalpura 6fee663ddc fix(ui): preserve new line at the end of edit window (#27057) 2026-05-14 18:33:41 +00:00
Coco Sheng 456d1aec74 fix(cli): resolve permission denied in sandbox on NixOS and other distros (#27004) 2026-05-14 17:15:12 +00:00
Coco Sheng e3f2d3e1ef fix(core): respect NO_PROXY for network-based MCP servers (#27012) 2026-05-14 17:11:17 +00:00
Sri Pasumarthi b705505dae fix(acp/auth): prevent conflicting credentials on enterprise gateways and support optional API keys natively (#27021) 2026-05-14 15:38:01 +00:00
Spencer 488d71b8c9 feat(core): expose RAG snippets to local log file for debugging (#27016) 2026-05-14 02:34:12 +00:00
Gal Zahavi 77078b3e8a fix(core): ensure stable fallback for restricted preview models (#26999) 2026-05-13 21:46:41 +00:00
ifitisit 1814c7f358 fix(cli): don't crash when an @-mention captures a non-path blob (#25980) 2026-05-13 21:43:08 +00:00
EMERSON BUSSON 724981baf8 fix(core): throttle shell text output and bound live UI buffer (#26955) 2026-05-13 21:34:32 +00:00
Sandy Tao 7504259d72 chore: clean up launched memory features (#26941)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2026-05-13 21:22:56 +00:00
Coco Sheng 0750b01fe4 fix: add system PATH fallback for ripgrep resolution (#26777) (#26868) 2026-05-13 21:05:37 +00:00
Dev Randalpura 41599ce29f fix(core): made context files append instead of replace (#26950)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-13 19:45:30 +00:00
Tommaso Sciortino 74e9079e5b chore: add execution permission to scripts/review.sh (#27009) 2026-05-13 12:22:00 -07:00
AK 9da30b8831 fix(core): isolate subagent thread context (#26449) 2026-05-13 18:55:17 +00:00
Dev Randalpura 71a2c0264e fix(ui): clamped table column widths (#26991)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-13 18:43:49 +00:00
Sahil Kirad fd01cc03bf fix(core): refresh MCP OAuth token usage after re-auth (#26312)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-13 12:01:27 -07:00
Coco Sheng fc4054446f ci: suppress bot comments during standard triage maintenance (#27006) 2026-05-13 18:43:07 +00:00
Coco Sheng 08abe4542d fix(cli): auto-approve shell redirections in AUTO_EDIT mode (#27003) 2026-05-13 18:28:30 +00:00
Coco Sheng 63b4bbfb5d fix(core): handle EISDIR on virtual drives in memory discovery (#26985) 2026-05-13 17:41:49 +00:00
Coco Sheng 1e7063bb0b fix(cli): allow keychain auth for --list-sessions and non-interactive mode (#26921) 2026-05-13 17:35:21 +00:00
Coco Sheng 297d3a3067 fix(core): preserve OAuth refresh tokens during rotation and retrieval (#26924) 2026-05-13 17:19:05 +00:00
David Pierce 749657cbf9 feat(cli): merge Auto modes into a single Auto mode (#26714) 2026-05-13 16:55:43 +00:00
Adam Weidman 8cda688fe2 feat(core): change agent registration to first-wins and prioritize project (#26953) 2026-05-13 01:33:12 +00:00
gemini-cli-robot 5ee05c775e Changelog for v0.43.0-preview.0 (#26959)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-05-13 00:01:24 +00:00
mahadevan 31d5947d37 Refactor: Eliminate no-unsafe-return suppressions via strict type validation (#20668)
Signed-off-by: M-DEV-1 <mahadevankizhakkedathu@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-12 23:45:58 +00:00
gemini-cli-robot 8f03aa320e Changelog for v0.42.0 (#26958)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-05-12 22:54:14 +00:00
gemini-cli-robot 583839ba46 chore(release): bump version to 0.44.0-nightly.20260512.g022e8baef (#26957) 2026-05-12 22:44:04 +00:00
Tommaso Sciortino 022e8baefc fix(ci): configure git remote with token for authentication (#26949) 2026-05-12 15:15:16 -07:00
Coco Sheng 120dfc724d fix(core): update read_file schema for v1 compatibility (#22183) (#26922) 2026-05-12 21:41:49 +00:00
Dev Randalpura c37b9113d7 fix(ui): fixed line wrap padding for selection lists (#26944) 2026-05-12 21:24:40 +00:00
Christian Gunderman 2334e9b1c4 Incremental refactor repo agent towards skills-based composition (#26717)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-12 20:37:09 +00:00
Tommaso Sciortino f901a4e6b7 fix(ci): replace brittle --no-tag with explicit staging-tmp tag (#26940) 2026-05-12 13:39:54 -07:00
Adam Weidman c987b99394 refactor(core): introduce SubagentState enum for progress (#26934) 2026-05-12 18:58:25 +00:00
Coco Sheng c4973d01da ci: actively triage missing priority labels and intelligently clean up conflicting labels (#26865) 2026-05-12 18:33:55 +00:00
kevinjwang1 27a39b04b0 Enable NumericalRouter when using dynamic model configs (#26929) 2026-05-12 18:06:21 +00:00
Sandy Tao ebe15553a9 Exclude extension context from skill extraction agent (#26879) 2026-05-12 10:45:19 -07:00
Yulong Wu bc730b2c0f fix (telemetry): inject quota_project_id to prevent fallback to default oauth client (#26698)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-12 17:02:15 +00:00
Gal Zahavi 9fe8643552 chore: update checkout action configuration in workflows (#26897) 2026-05-12 16:58:37 +00:00
joshualitt 07792f98cd feat(context): Introduce adaptive token calculator to more accurately calculate content sizes. (#26888) 2026-05-12 15:51:20 +00:00
Coco Sheng 7a9ed4c20a fix: respect explicit model selection after Flash quota exhaustion (#26759) (#26872) 2026-05-12 14:26:50 +00:00
Kuroda Kayn 11a9edc808 fix(cli): restore resume for legacy sessions (#26577)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-12 00:28:47 +00:00
Adam Weidman 24b98ade86 fix(cli): enable adk non-interactive session (#26895) 2026-05-11 23:38:23 +00:00
Eswar809 9f759f97a2 fix(core): ignore .pak and .rpa game archive formats by default (#26884)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-11 21:58:08 +00:00
Franco Pieri 9ff7304391 Allow Enter to select session while in search mode in /resume (#21523)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-11 21:46:00 +00:00
Neil Nair 84fc5cd533 Fix/vscode run current file ts (#22894)
Co-authored-by: Spencer <spencertang@google.com>
2026-05-11 21:21:42 +00:00
Daniel Weis e1b3ce5b36 revert 6b9b778d82 (#26893) 2026-05-11 21:07:54 +00:00
Suhaan Raqeeb Khavas 8e58df72c6 fix: prevent EISDIR crash when customIgnoreFilePaths contains directories (#19868) (#19898)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-11 20:46:08 +00:00
Dev Randalpura c0d5ab1f1e fix(ui): added a gutter width to the input prompt width calculation (#26882) 2026-05-11 20:26:48 +00:00
Coco Sheng 1340c96071 fix(core): handle malformed projects.json in ProjectRegistry (#26885) 2026-05-11 20:19:01 +00:00
Daniel Weis f8198a25d8 fix(routing): Refactor tool turn handling for the conversation history in NumericalClassifierStrategy to prevent 400 Bad Request (#26761) 2026-05-11 20:09:38 +00:00
Coco Sheng 36a7fa089c fix(cli): use static tool name in confirmation prompt to avoid parsing errors (#26866) 2026-05-11 17:45:58 +00:00
Sri Pasumarthi 4739495e39 fix(cli/acp): prevent infinite thought loop in ACP mode by disablig nextSpeakerCheck (#26874) 2026-05-11 17:38:20 +00:00
Aryan Singh ecfaac2dc7 fix(cli): prevent duplicate SessionStart systemMessage render (#25827)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-05-11 16:44:04 +00:00
Daniel Finimundi 7cd228f5af fix(cli): allow installing extensions from ssh repo (#26274)
Signed-off-by: Daniel Finimundi <danielrf@motorola.com>
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
2026-05-11 15:57:52 +00:00
joshualitt 8a3fde4c33 fix(context): Change snapshotter model config. (#26745) 2026-05-11 15:06:55 +00:00
joshualitt 1a894c18ea feat(context): Improvements to the snapshotter. (#26655) 2026-05-08 23:54:44 +00:00
Adam Weidman 54f1e8c6d7 feat(core): add RemoteSubagentProtocol behind AgentProtocol (#25303) 2026-05-08 22:48:17 +00:00
krishdef7 f51391a0f2 fix(mcp): treat GET 404 as 405 in StreamableHTTPClientTransport (#24847)
Co-authored-by: Coco Sheng <cocosheng@google.com>
Co-authored-by: Spencer <spencertang@google.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-08 22:16:08 +00:00
Sri Pasumarthi 1238dcfe91 feat(acp/core): prefix tool call IDs with tool names to support tool rendering in ACP compliant IDEs. (#26676) 2026-05-08 21:21:54 +00:00
Coco Sheng 90e7155971 ci: implement codebase-aware effort level triage (#26666) 2026-05-08 20:48:54 +00:00
JAYADITYA 9d0860bd0f fix(cli): remove noisy theme registration logs from terminal (#25858)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-05-08 19:59:33 +00:00
Adam Weidman 014bfeb89b feat(core): add LocalSubagentProtocol behind AgentProtocol (#25302) 2026-05-08 19:28:16 +00:00
Aishanee Shah 5890f50496 fix(core): resolve parallel tool call streaming ID collision (#26646) 2026-05-08 19:14:23 +00:00
Daniel Weis 6b9b778d82 fix: resolve "function response turn must come immediately after function call" error (#26691)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-08 19:01:24 +00:00
Aishanee Shah f86e0ee418 fix(core): throw explicit error on dropped tool responses (#26668) 2026-05-08 18:36:39 +00:00
joshualitt 01635ddb83 fix(context): implement loose boundary policy for gc backstop. (#26594) 2026-05-08 17:36:57 +00:00
Adam Weidman 12c8469b34 refactor(core): agent session protocol changes (#26661) 2026-05-08 17:12:54 +00:00
gemini-cli-robot 43dda31549 Changelog for v0.41.0 (#26670)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
2026-05-08 17:00:48 +00:00
Dev Randalpura dfec94869b fix(ui): added quotes around session id in resume tip (#26669) 2026-05-08 16:55:51 +00:00
Christian Gunderman f42d4e3c16 fix(ci): fix maintainer identification in lifecycle manager (#26706) 2026-05-08 16:48:31 +00:00
ruomeng 838f6f8c18 docs(extensions): refactor releasing guide and add update mechanisms (#26595) 2026-05-08 16:20:22 +00:00
mahadevan 2cad5db770 Feat: Add Machine Hostname to CLI interface (#25637)
Signed-off-by: M-DEV-1 <mahadevankizhakkedathu@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-08 16:12:35 +00:00
Coco Sheng 3805640530 feat: export session to file and import via flag (#26514) 2026-05-08 15:53:52 +00:00
Tommaso Sciortino 2d10691acb skip broken test (#26705) 2026-05-08 15:47:08 +00:00
gemini-cli-robot 38a9dd18d3 Changelog for v0.42.0-preview.2 (#26597)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-05-08 00:53:59 +00:00
AK ebeea7570d fix(core): cache model routing decision in LocalAgentExecutor (#26548) 2026-05-08 00:18:22 +00:00
Br1an c52acebaa2 fix: prevent false command conflicts when launching from home directory (#23069)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-07 22:41:12 +00:00
Sandy Tao 16e345831b fix(cli): hide /memory add subcommand when memoryV2 is enabled (#26605) 2026-05-07 20:48:12 +00:00
Coco Sheng 3a0b19d900 ci: fix json parsing in scheduled triage workflow (#26656) 2026-05-07 20:35:20 +00:00
Dev Randalpura 451bf32c82 fix(ux): fixed issue with transcribed text not showing after releasing space (#26609) 2026-05-07 19:39:03 +00:00
Christopher Thomas 4fd411afe3 docs: add vi mode shortcuts and clarify MCP/custom sandbox setup (#23853)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-05-07 19:37:51 +00:00
Daniel Weis ac31e80984 fix(routing): fix resolveClassifierModel argument mismatch in ApprovalModeStrategy (#26658)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-07 19:34:14 +00:00
Coco Sheng 49456e4e15 fix(core): preserve system PATH in Git environment to fix ENOENT (#25034) (#26587) 2026-05-07 18:24:49 +00:00
Tommaso Sciortino a809bc7c51 don't wrap args unnecessarily (#26599) 2026-05-06 23:20:47 +00:00
Michael Bleigh 90304b279c refactor(cli): migrate core tools to native ToolDisplay property and fix UI rendering (#25186) 2026-05-06 21:23:26 +00:00
Coco Sheng 4a10751b49 ci: fix Argument list too long in triage workflows (#26603) 2026-05-06 21:10:01 +00:00
gemini-cli-robot 20b5a4cf46 Changelog for v0.42.0-preview.0 (#26537)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-05-06 20:31:17 +00:00
Rhys Sullivan bb4224fdff fix(core): prevent silent hang during OAuth auth on headless Linux (#26571)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-05-06 19:47:30 +00:00
Adib234 a38f393af7 fix(cli): improve mcp list UX in untrusted folders (#26457)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-06 19:35:35 +00:00
ruomeng feae856d6e fix(ci): preserve executable bit for mac binaries (#26600) 2026-05-06 19:23:30 +00:00
Christian Van e4242edf61 fix(cli): hide read-only settings scopes (#26249) 2026-05-06 19:03:48 +00:00
Sandy Tao 7fb5146c6b Tighten private Auto Memory patch allowlist (#26535) 2026-05-06 17:32:15 +00:00
joshualitt 897a4d7f83 fix(core): Fix hysteresis in async context management pipelines. (#26452) 2026-05-06 16:37:08 +00:00
Kartik 5155221bbe fix(cli): randomize sandbox container names (#26014) 2026-05-06 16:33:24 +00:00
Keith Schaab 02995ba939 fix(a2a-server): Resolve race condition in tool completion waiting (#26568) 2026-05-06 16:20:22 +00:00
Sri Pasumarthi 97a2bd7507 fix(acp): move tool explanation from thought stream to tool call content (#26554) 2026-05-06 15:42:01 +00:00
cynthialong0-0 80e091a8e1 fix(core): handle invalid custom plans directory gracefully (#26560) 2026-05-06 13:37:59 +00:00
AK 82f6ea5b61 feat(evals): add shell command safety evals (#26528) 2026-05-06 03:31:16 +00:00
cynthialong0-0 469092a72c fix(cli): provide JSON output for AgentExecutionStopped in non-interactive mode (#26504)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-06 00:33:31 +00:00
joshualitt 80d2690540 fix(core): Fix chat corruption bug in context manager. (#26534) 2026-05-05 22:50:01 +00:00
ruomeng e039fcdf2a ci(release): build and attach unsigned macOS binaries to releases (#26462) 2026-05-05 21:59:54 +00:00
Gal Zahavi 3627f4777f fix(core): allow redirection in YOLO and AUTO_EDIT modes without sandboxing (#26542) 2026-05-05 21:26:16 +00:00
Himanshu Kumar d8f2a89865 fix(core): remove unsafe type assertion suppressions in error utils (#19881)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-05-05 19:52:29 +00:00
Abhijit Balaji f29eb9a569 fix(core): reject numeric project IDs in GOOGLE_CLOUD_PROJECT (#24695) (#26532) 2026-05-05 19:50:36 +00:00
Sandy Tao f17cfb2a71 docs: clarify Auto Memory proposes memory updates and skills (#26527) 2026-05-05 19:39:32 +00:00
Aishanee Shah 0218817fe3 feat(core): steer model to use edit tool for surgical edits, fix a typo (#26480) 2026-05-05 19:35:04 +00:00
joshualitt 0803007c8f fix(core): Minor fixes for generalist profile. (#26357) 2026-05-05 19:32:13 +00:00
Coco Sheng f5c0977e96 fix(core): retry on ERR_STREAM_PREMATURE_CLOSE errors (#26519) 2026-05-05 19:19:50 +00:00
Coco Sheng e80d7cc083 feat: allow queuing messages during compression (#24071) (#26506) 2026-05-05 17:52:08 +00:00
Jack Wotherspoon 7cc19c2a1b fix(cli): prevent settings dialog border clipping using maxHeight (#26507) 2026-05-05 16:22:58 +00:00
Keith Schaab 1d72a120fb fix(a2a-server): resolve tool approval race condition and improve status reporting (#26479)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-05 02:47:26 +00:00
Tirth Naik 8f0edcd64f fix(cli): use os.homedir() for home directory warning check (#25890) 2026-05-04 23:24:49 +00:00
Christian Gunderman 04e875c5c8 fix(ci): respect exempt labels when closing stale items (#26475) 2026-05-04 23:00:14 +00:00
gemini-cli-robot a79da4f3a9 Robust Scale-Safe Lifecycle Consolidation (#26355)
Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
Co-authored-by: Christian Gunderman <gundermanc@google.com>
2026-05-04 22:07:47 +00:00
Sandy Tao 56809d7069 fix(cli): make SkillInboxDialog fit and scroll in alternate buffer (#26455) 2026-05-04 21:54:13 +00:00
Anjaligarhwal 5dfbb739e5 feat(cli): add /bug-memory command and auto-capture heap snapshot in /bug (#25639) 2026-05-04 21:17:36 +00:00
Christian Gunderman f87072f4e3 feat(bot): add actions spend metric script (#26463) 2026-05-04 21:01:39 +00:00
Adib234 6a3175e973 fix(core): properly format markdown in AskUser tool by unescaping newlines (#26349)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-04 20:59:11 +00:00
Aishanee Shah 4d1ca92a19 fix(core): filter unsupported multimodal types from tool responses (#26352) 2026-05-04 20:31:20 +00:00
Horizon_Architect_07 b6fc583b0c Fix: make Dockerfile self-contained with multi-stage build (#24277)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-05-04 19:51:06 +00:00
Coco Sheng 0d6bd29752 feat(cli): improve /agents refresh logging (#26442) 2026-05-04 19:40:48 +00:00
ANDI FAUZAN HEDIANTORO 78877942ec docs(sdk): add JSDoc to all exported interfaces and types (#26277) 2026-05-04 19:32:47 +00:00
Coco Sheng 493b555646 feat: add ignoreLocalEnv setting and --ignore-env flag (#2493) (#26445) 2026-05-04 19:14:33 +00:00
Adib234 75a8de83fc test(cleanup): fix temporary directory leaks in test suites (#26217) 2026-05-04 19:08:02 +00:00
Sandy Tao a7beb890d0 feat(memory): add Auto Memory inbox flow with canonical-patch contract (#26338) 2026-05-04 19:07:13 +00:00
Coco Sheng 60a6a47d56 feat(voice): add privacy and compliance UX warning for Gemini Live backend (#26454) 2026-05-04 18:32:15 +00:00
Aryan Kumar d313cd7dde fix(core): use close event instead of exit in child_process fallback (#25695)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-04 18:12:21 +00:00
Aryan Singh 77f4be1f3d fix(cli): render LaTeX-style output as Unicode in the TUI (#25802)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-05-04 18:05:06 +00:00
Manav Sharma 0da1a2026a fix(cli)#21297: clear skills consent dialog before reload (#26431)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-05-04 17:53:03 +00:00
Coco Sheng 37edd1d4df fix(cli): allow early stdout when config is undefined (#26453) 2026-05-04 17:48:24 +00:00
Sandy Tao 165efa8a38 fix(hooks): preserve non-text parts in fromHookLLMRequest (#26275) 2026-05-04 17:45:52 +00:00
Coco Sheng 790f2cf815 feat: add minimal V8 heap snapshot utility for memory diagnostics (#26440) 2026-05-04 17:42:42 +00:00
Adib234 704be5a418 fix(cli): ensure branch indicator updates in sub-directories and worktrees (#26330) 2026-05-04 17:35:13 +00:00
Sense_wang 9de8c8aadb docs: fix GitHub capitalization in releases guide (#26379) 2026-05-04 17:29:04 +00:00
Dev Randalpura 0657d315fb refactor(UI): created constants file for ThemeDialog (#26446) 2026-05-04 17:28:33 +00:00
Tommaso Sciortino 88bdadc9c6 revert: fix(ci): robust version checking in release verification (#26337) (#26450) 2026-05-04 17:03:22 +00:00
Pyush Sinha 30c324dec7 Enhance React guidelines (#22667)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-05-04 17:01:11 +00:00
AK 40aa7397b6 feat(core): reinforce Inquiry constraints to prevent unauthorized changes (#26310) 2026-05-04 16:37:39 +00:00
Coco Sheng ab48aad213 perf: skip redundant GEMINI.md loading in partialConfig (#26443) 2026-05-04 16:05:24 +00:00
Coco Sheng 4fa2c95c59 docs(sdk): add JSDoc to exported interfaces in packages/sdk/src/types.ts (#26441) 2026-05-04 15:47:14 +00:00
Sri Pasumarthi 4e175527a2 fix(acp): resolve agent mode disconnect and improve mode awareness (#26332) 2026-05-01 23:00:10 +00:00
AK 40b384de2c fix(core): make subagents aware of active approval modes (#23608) 2026-05-01 22:21:38 +00:00
joshualitt de8fdcfa16 Fix bulk of remaining issues with generalist profile (#26073) 2026-05-01 22:04:39 +00:00
Coco Sheng 408afd3c5a fix(core): reset session-scoped state on resumption (#26342) 2026-05-01 21:20:06 +00:00
Aarchi Kumari a93d2a1d1c fix(cli): resolve Ghostty/raw-mode False Cancellation in oauth flow (#25026)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-05-01 21:08:56 +00:00
Harsh Pujari dc5b3114c0 docs(policy-engine): add tool argument keys reference and shell policy cross-links (#25292)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-05-01 20:33:48 +00:00
Sandy Tao 9380e13f6d fix(core): remove "System: Please continue." injection on InvalidStream events (#26340) 2026-05-01 19:45:31 +00:00
gemini-cli[bot] 363854172f Metrics updates (#26348)
Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
2026-05-01 19:20:02 +00:00
Adib234 7dea5b47a1 fix(cli): undeprecate --prompt and correct positional query docs (#26329)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-01 19:19:01 +00:00
Coco Sheng 997f461cad fix(cli): prevent Escape from clearing input buffer (#17083) (#26339) 2026-05-01 18:58:55 +00:00
Dev Randalpura b14a29efa2 feat(ui): added wave animation for voice mode (#26284) 2026-05-01 17:56:05 +00:00
AK f496354884 fix(core): discourage unprompted git add . in prompt snippets (#26220) 2026-05-01 17:54:30 +00:00
ruomeng 76d1a73606 fix(cli): enable daemon relaunch in binary and bundle keytar (#26333) 2026-05-01 17:53:56 +00:00
Tommaso Sciortino 8fb1b5aa01 fix(ci): robust version checking in release verification (#26337) 2026-05-01 17:01:46 +00:00
David Pierce 9cb48020e1 fix(cli): respect .env override for GOOGLE_CLOUD_PROJECT (#26288) 2026-05-01 16:49:45 +00:00
Christian Gunderman 8943640a71 fix(ui): fix issue with box edges (#26148) 2026-05-01 16:46:16 +00:00
Zheyuan Lin 7213822e84 fix(cli): insert voice transcription at cursor position instead of ap… (#26287)
Co-authored-by: Zheyuan <zlin252@emory.edu>
2026-05-01 16:41:17 +00:00
Abhijit Balaji d9f273e440 feat(config): enable Gemma 4 models by default via Gemini API (#26307) 2026-05-01 04:14:57 +00:00
AK b3e6c28933 test(evals): add behavioral eval for file creation and write_file tool selection (#26292) 2026-05-01 03:45:56 +00:00
Bryan Morgan 4e81f48646 Remove Star History section from README (#26309) 2026-04-30 21:59:34 -04:00
Bryan Morgan 2e3090b6d9 Add Star History section to README (#26308) 2026-04-30 21:58:45 -04:00
Bryan Morgan c427bd442f Add Star History section to README (#26290) 2026-05-01 01:30:21 +00:00
gemini-cli[bot] caa0466416 # Metrics Integrity & Standardized Reporting (BT-01) (#26240)
Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
Co-authored-by: Christian Gunderman <gundermanc@google.com>
2026-04-30 23:11:39 +00:00
Adib234 f497240f7e fix(cli): use resolved sandbox state for auto-update check (#26285) 2026-04-30 22:06:01 +00:00
Christian Gunderman 892c8a720d fix(ci): checkout PR branch instead of main in bot workflow (#26289) 2026-04-30 21:59:06 +00:00
Martin 80e3bb9689 fix(core): silently skip GEMINI.md paths that are directories (EISDIR) (#25662)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-30 21:06:56 +00:00
Martin d494195602 feat(extensions): add 'delete' as an alias for /extensions uninstall (#25660)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-30 20:50:06 +00:00
Coco Sheng 2f0c7518ad fix: report AgentExecutionBlocked in non-interactive programmatic modes (#26262) 2026-04-30 20:41:35 +00:00
Sahil Kirad a03ec92436 test(acp): add missing coverage for extensions command error paths (#25313)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-30 20:31:59 +00:00
gemini-cli-robot e67631132d Changelog for v0.40.0 (#26245)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-30 20:29:16 +00:00
Jenna Inouye 778da08ee1 Docs: Update Agent Skills documentation (#22388)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-30 20:25:28 +00:00
Coco Sheng 7125d2cd65 fix(core): ensure tool output cleanup on session deletion for legacy files (#26263) 2026-04-30 20:11:38 +00:00
JunYoung Ka 84616626f5 feat(cli): Add 'list' subcommand to '/commands' (#22324)
Co-authored-by: Coco Sheng <cocosheng@google.com>
Co-authored-by: Spencer <spencertang@google.com>
2026-04-30 19:54:17 +00:00
Dev Randalpura ef040eb392 feat(ui): added microphone and updated placeholder for voice mode (#26270)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-30 19:21:54 +00:00
Coco Sheng 8c1e255ac0 fix(cli): prevent informational logs from polluting json output (#26264) 2026-04-30 18:34:25 +00:00
Christian Gunderman 0af13141b2 Fix posting invalid response to a comment (#26266) 2026-04-30 18:22:59 +00:00
Aashir Javed 90895efb29 docs(policy-engine): link to tools reference for tool names and args (#22081)
Co-authored-by: Aashir Javed <Aaxhirrr@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-30 18:02:18 +00:00
Paolo Menichetti 84875ce911 docs(cli): add skill discovery troubleshooting checklist to tutorial (#26018) 2026-04-30 18:01:41 +00:00
Jack Wotherspoon c94edcd862 fix(cli): do not override GOOGLE_CLOUD_PROJECT in Cloud Shell when using Vertex AI (#24455)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-04-30 17:52:18 +00:00
ruomeng 0f1077076e Skip binary CLI relaunch (#26261) 2026-04-30 17:48:23 +00:00
gemini-cli-robot 9a98b0e56c Changelog for v0.41.0-preview.0 (#26244)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-30 17:31:56 +00:00
Dev Randalpura 071e2923bb fix(ui): made shell tool header wrap on Ctrl+O (#26229) 2026-04-30 17:01:47 +00:00
Adib234 487fb219cc fix(cli): use byte length instead of string length for readStdin size limits (#26224) 2026-04-30 14:12:44 +00:00
Coco Sheng d743c6fae6 fix: suppress duplicate extension warnings during startup (#26208) 2026-04-30 14:11:06 +00:00
Coco Sheng a15568e013 fix(cli): refine platform-specific undo/redo and smart bubbling for WSL (#26202) 2026-04-30 14:10:54 +00:00
Sri Pasumarthi 0ccc5ce58f refactor(acp): delegate prompt turn processing logic to GeminiClient (#26222) 2026-04-29 23:58:16 +00:00
Christian Gunderman 1834ad0298 fix(bot): productivity and backlog optimizations (#26236) 2026-04-29 23:18:22 +00:00
Stephen Eckels a2d10b7b99 Allow non-https proxy urls to support container environments (#26234)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-29 23:12:03 +00:00
Samee Zahid 8cec567064 docs(core): add automated gemma setup guide (#26233)
Co-authored-by: Samee Zahid <sameez@google.com>
2026-04-29 23:08:54 +00:00
gemini-cli[bot] fa1a7c10bd # Fix: Inconsistent Case-Sensitivity in GrepTool (#26235)
Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
2026-04-29 22:59:58 +00:00
Abhijit Balaji 49988fc05c fix(agent): prevent exit_plan_mode from being called via shell (#26230) 2026-04-29 22:22:21 +00:00
Martin d6ce310901 fix: correct API key validation logic in handleApiKeySubmit (#25453)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-04-29 22:06:14 +00:00
lp-peg 2194da2b02 Respect logPrompts flag for logging sensitive fields (#26153)
Co-authored-by: David Pierce <davidapierce@google.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-04-29 21:43:34 +00:00
Christian Gunderman dce13019b9 ci(github-actions): switch to github app token and fix bot self-trigger (#26223) 2026-04-29 20:45:16 +00:00
Adam Weidman 88626f37e3 fix(cli): handle InvalidStream event gracefully without throwing (#26218) 2026-04-29 20:27:53 +00:00
Adam Weidman 3aedbbc067 fix(core): distinguish fallback chains and fix maxAttempts for auto vs explicit model selection (#26163) 2026-04-29 20:23:37 +00:00
Adib234 99235fc59d fix(core): reduce default API timeout to 60s and enable retries for undici timeouts (#26191) 2026-04-29 20:05:45 +00:00
AK 25f422d0e4 test(evals): add EvalMetadata JSDoc annotations to older tests (#26147) 2026-04-29 19:11:51 +00:00
Christian Gunderman 6dec6720de Add the ability to @ mention the gemini robot. (#26207)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-29 18:46:33 +00:00
Adib234 3bc56d0ef5 test(core): add regression test for issue for ToolConfirmationResponse (#26194) 2026-04-29 17:51:09 +00:00
Abdul Tawab 011c0f9bc0 feat(cli): add --delete flag to /exit command for session deletion (#19332)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-04-29 17:20:57 +00:00
Adam Weidman 2cf0c75a04 fix(core): add explicit empty log guard in A2A pushMessage (#26198) 2026-04-29 17:06:18 +00:00
Adam Weidman 7ab932c8bf test: fix failures due to antigravity environment leakage (#26162) 2026-04-29 14:51:43 +00:00
Sri Pasumarthi c2e5b28e94 refactor(acp): modularize monolithic acpClient into specialized files (#26143) 2026-04-29 14:51:01 +00:00
Sam Roberts c7d5fcff95 Update documentation workflows with workspace trust (#26150) 2026-04-29 01:00:57 +00:00
Coco Sheng 6d99113936 fix(core): disconnect extension-backed MCP clients in stopExtension (#26136) 2026-04-28 22:46:17 +00:00
Abhi fbd8aaad57 fix(core): add missing oauth fields support in subagent parsing (#26141) 2026-04-28 21:57:30 +00:00
ifitisit 9e7c924f7b docs(cli): point plan-mode session retention to actual /settings labels (#25978)
Co-authored-by: Spencer <spencertang@google.com>
2026-04-28 21:27:42 +00:00
Anas Khalid 4edd7c745c fix(cli): handle DECKPAM keypad Enter sequences in terminal (#26092)
Co-authored-by: Gitanaskhan26 <Gitanaskhan26@users.noreply.github.com>
Co-authored-by: Spencer <spencertang@google.com>
2026-04-28 21:17:31 +00:00
Coco Sheng 12a77da45c fix(cli): pass node arguments via NODE_OPTIONS during relaunch to support SEA (#26130) 2026-04-28 21:15:23 +00:00
gemini-cli-robot 8cfebb9e31 chore(release): bump version to 0.42.0-nightly.20260428.g59b2dea0e (#26142) 2026-04-28 13:28:48 -07:00
Adib234 f8603e990b fix(cli): prevent automatic updates from switching to less stable channels (#26132) 2026-04-28 18:03:08 +00:00
Adib234 59b2dea0e5 fix(cli): preserve Request headers in DevTools activity logger (#26078) 2026-04-28 17:34:45 +00:00
Coco Sheng c841070582 feat(cli): support boolean and number casting for env vars in settings.json (#26118) 2026-04-28 17:32:51 +00:00
Coco Sheng 4b8d5e7624 fix(cli): prevent ACP stdout pollution from SessionEnd hooks (#26125) 2026-04-28 17:29:49 +00:00
gemini-cli-robot 7a3f7c383e Changelog for v0.40.0-preview.3 (#25904)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-28 17:23:04 +00:00
Dev Randalpura 8e1cecac06 fix(ux): added error message for ENOTDIR (#26128) 2026-04-28 17:12:51 +00:00
Adib234 b0ffa3b51e fix(core): handle non-string model flags in resolution (#26069)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-28 17:11:15 +00:00
Christian Gunderman 58a57b72ae Implement bot that performs time-series metric analysis and suggests repo management improvements (#25945) 2026-04-28 16:49:53 +00:00
David Pierce 54b7586106 Update policy so transient errors are not marked terminal (#26066) 2026-04-28 16:01:27 +00:00
anj-s c17400b830 fix(core): enforce parallel task tracker updates (#24477)
Co-authored-by: anj-s <anjalisridhar@google.com>
2026-04-27 23:17:26 +00:00
Sam Roberts 47bca39eeb (docs) update sandboxing documentation (#25930) 2026-04-27 22:39:22 +00:00
gemini-cli-robot 07506dcd0d Changelog for v0.40.0-preview.2 (#25846)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-27 22:11:42 +00:00
Coco Sheng 6cc0b1b136 feat(cli): provide manual session UUID via command line arg (#26060) 2026-04-27 21:05:27 +00:00
Dev Randalpura 820a4e3c92 fix(core): better error message for failed cloudshell-gca auth (#26079) 2026-04-27 21:05:08 +00:00
Coco Sheng 7d08f84305 fix(cli): make MCP ping optional in list command and use configured timeout (#26068) 2026-04-27 20:36:50 +00:00
Adib234 31337b9269 fix(cli): correct alternate buffer warning logic for JetBrains (#26067) 2026-04-27 20:00:01 +00:00
Emily Hedlund b1a50a58af fix(cli): ensure sandbox proxy cleanup and remove handler leaks (#26065) 2026-04-27 19:35:41 +00:00
joshualitt 71f313b51a feat(core): wire up the new ContextManager and AgentChatHistory (#25409) 2026-04-27 18:50:00 +00:00
Dev Randalpura 98aca28985 fix(ui): better error messages for ECONNRESET and ETIMEDOUT (#26059) 2026-04-27 17:17:04 +00:00
Coco Sheng 2de81902c3 test(cli): add unit tests for restore ACP command (#23402) (#26053) 2026-04-27 17:07:14 +00:00
Coco Sheng 1cdfeb6633 fix(cli): provide manual update command when automatic update fails (#26052) 2026-04-27 16:15:04 +00:00
Gaurav Dubey 743518e1b8 fix(cli): add missing response key to custom theme text schema (#25822)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
2026-04-27 15:01:30 +00:00
Sandy Tao 42587de733 feat(memory): persist auto-memory scratchpad for skill extraction (#25873) 2026-04-24 17:21:12 -07:00
gemini-cli-robot a5b030b424 Changelog for v0.39.0 (#25848)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-24 22:02:00 +00:00
Abhijit Balaji 2e0641c83b feat(voice): implement real-time voice mode with cloud and local backends (#24174) 2026-04-24 21:29:38 +00:00
Tommaso Sciortino 048bf6e514 fix(cli-ui): revert backspace handling to fix Windows regression (#25941) 2026-04-24 20:30:00 +00:00
Emily Hedlund ed469e492b fix(core): fail closed in YOLO mode when shell parsing fails for restricted rules (#25935) 2026-04-24 19:26:59 +00:00
Spencer cfd7541ad4 fix(cli): allow output redirection for cli commands (#25894) 2026-04-24 18:31:43 +00:00
Christian Gunderman c4b38a5aef feat(repo): add gemini-cli-bot metrics and workflows (#25888) 2026-04-24 17:16:20 +00:00
JAYADITYA 3dc8e7e13c docs: add Gemini CLI course link to README (#25925) 2026-04-24 17:01:16 +00:00
Emily Hedlund 571ca5a555 update FatalUntrustedWorkspaceError message to include doc link (#25874) 2026-04-23 23:26:29 +00:00
Abhijit Balaji d4c5333dcf feat(core,cli): add support for Gemma 4 models (experimental) (#25604) 2026-04-23 23:02:17 +00:00
Spencer 1f73ec70c5 perf(core): fix slow boot by fetching experiments and quota asynchronously (#25758)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: David Pierce <davidapierce@google.com>
Co-authored-by: Keith Schaab <keithsc@google.com>
Co-authored-by: Keith Schaab <keith.schaab@gmail.com>
Co-authored-by: Emily Hedlund <ehedlund@google.com>
2026-04-23 21:52:58 +00:00
Dev Randalpura 69150e87b2 fix(ui): corrected background color check in user message components (#25880) 2026-04-23 21:29:11 +00:00
Gal Zahavi 27927c55e5 feat(core): enhance shell command validation and add core tools allowlist (#25720)
Co-authored-by: David Pierce <davidapierce@google.com>
Co-authored-by: Keith Schaab <keithsc@google.com>
Co-authored-by: Keith Schaab <keith.schaab@gmail.com>
Co-authored-by: Emily Hedlund <ehedlund@google.com>
2026-04-23 20:26:01 +00:00
Emily Hedlund c024064f47 update package-lock.json (#25876) 2026-04-23 19:05:12 +00:00
hsm207 ff28d55100 fix: fatal hard-crash on loop detection via unhandled AbortError (#20108)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-23 16:51:21 +00:00
Emily Hedlund dba9b9a0ff feat(cli): secure .env loading and enforce workspace trust in headless mode (#25814)
Co-authored-by: galz10 <galzahavi@google.com>
Co-authored-by: davidapierce <davidapierce@google.com>
2026-04-23 16:09:14 +00:00
cynthialong0-0 a007f64d20 fix(core): only show list suggestion if the partial input is empty (#25821) 2026-04-23 14:07:06 +00:00
gemini-cli-robot d1c91f5267 chore(release): bump version to 0.41.0-nightly.20260423.gaa05b4583 (#25847) 2026-04-23 04:28:26 +00:00
Sandy Tao aa05b4583d fix(release): exclude ripgrep binaries from npm tarballs (#25841) 2026-04-22 21:01:45 -07:00
Sandy Tao 5318610c1d fix(core): support jsonl session logs in memory and summary services (#25816) 2026-04-22 23:07:39 +00:00
Sandy Tao 9c0a6864da fix(devtools): reduce memory usage and defer connection (#24496) 2026-04-22 15:21:58 -07:00
Dev Randalpura 2e12c34009 fix(ui): removed background color for input (#25339) 2026-04-22 20:27:09 +00:00
Horizon_Architect_07 2a52611e71 Fix/command injection shell (#24170)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-04-22 20:00:44 +00:00
xoma-zver 1c43deee07 fix(core): handle line endings in ignore file parsing (#23895)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-04-22 18:09:36 +00:00
Kishan Patel 0758a5eb28 fix(core): use dynamic CLI version for IDE client instead of hardcoded '1.0.0' (#24414)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-04-22 16:43:48 +00:00
mini2s 607180bfb2 fix(cli): fix "/clear (new)" command (#25801) 2026-04-22 15:20:22 +00:00
Sandy Tao 6edfba481f refactor(memory): replace MemoryManagerAgent with prompt-driven memory editing across four tiers (#25716) 2026-04-22 01:21:55 +00:00
Sandy Tao ffb28c772b test(e2e): default integration tests to Flash Preview (#25753) 2026-04-21 22:21:52 +00:00
Adam Weidman d6f88f8720 fix(core): remove duplicate initialize call on agents refreshed (#25670) 2026-04-21 20:17:21 +00:00
Jason Matthew Suhari 194c779f9b fix(cli): start auto memory in ACP sessions (#25626) 2026-04-21 20:06:30 +00:00
Vedant Mahajan 189c0ac0a0 feat: add /new as alias for /clear and refine command description (#17865) 2026-04-21 20:04:40 +00:00
euxaristia c47233a474 fix(core): disable detached mode in Bun to prevent immediate SIGHUP of child processes (#22620) 2026-04-21 20:01:28 +00:00
JAYADITYA 8999a885f0 fix(cli): ensure theme dialog labels are rendered for all themes (#24599)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-04-21 19:57:15 +00:00
Coco Sheng 93a8d9001c fix(cli): use newline in shell command wrapping to avoid breaking heredocs (#25537) 2026-04-21 19:12:50 +00:00
PRAS Samin cdc5cccc13 feat: detect new files in @ recommendations with watcher based updates (#25256) 2026-04-21 18:35:14 +00:00
Mahima Shanware a4e98c0a4c fix(core): resolve nested plan directory duplication and relative path policies (#25138) 2026-04-21 18:20:57 +00:00
Spencer c260550146 feat(telemetry): add flag for enabling traces specifically (#25343) 2026-04-21 18:07:32 +00:00
Danyel Cabello 7f8f3309a6 Allow dots on GEMINI_API_KEY (#25497) 2026-04-21 11:43:39 -07:00
Muhammad Ahsan Farooq ebebbbfc20 Fix/allow for session persistence (#25176) 2026-04-21 11:20:07 -07:00
Gordon Hui 27344833cb feat(vertex): add settings for Vertex AI request routing (#25513) 2026-04-21 17:48:30 +00:00
cynthialong0-0 aee2cde1a3 feat(test): refactor the memory usage test to use metrics from CLI process instead of test runner (#25708) 2026-04-21 17:06:22 +00:00
Mundur 2c14954010 Fix: Disallow overriding IDE stdio via workspace .env (RCE) (#25022)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-21 10:31:10 -07:00
gemini-cli-robot a38e2f0048 Changelog for v0.38.2 (#25593)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-21 00:39:10 +00:00
Samee Zahid 1d383a4a8e feat(cli): add streamlined gemini gemma local model setup (#25498)
Co-authored-by: Abhijit Balaji <abhijitbalaji@google.com>
Co-authored-by: Samee Zahid <sameez@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-20 23:57:56 +00:00
Timo 6afc47f81c docs(cli): fix inconsistent system.md casing in system prompt docs (#25414)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-04-20 23:03:36 +00:00
anj-s 4b2091d402 docs(tracker): introduce experimental task tracker feature (#24556) 2026-04-20 19:33:37 +00:00
Tommaso Sciortino c627d09326 fix(cli): round slow render latency to avoid opentelemetry float warning (#25709) 2026-04-20 17:42:37 +00:00
Sehoon Shon 0e5c5b6f49 fix(core): allow Cloud Shell users to use PRO_MODEL_NO_ACCESS experiment (#25702) 2026-04-20 17:29:58 +00:00
Sandy Tao 8573650253 feat(config): split memoryManager flag into autoMemory (#25601) 2026-04-18 00:08:02 +00:00
Sam Roberts 220888ac2d docs: migrate installation and authentication to mdx with tabbed layouts (#25155) 2026-04-17 18:07:07 +00:00
Christian Gunderman b2f775921d feat(core): enable topic update narration by default and promote to general (#25586)
Co-authored-by: JAYADITYA <96861162+JayadityaGit@users.noreply.github.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-04-17 17:49:32 +00:00
Christian Gunderman f7b2632939 feat(core): Disable topic updates for subagents (#25567) 2026-04-17 17:35:17 +00:00
Mahima Shanware 8379099e85 fix(core): fix ShellExecutionConfig spread and add ProjectRegistry save backoff (#25382) 2026-04-17 16:49:44 +00:00
JAYADITYA 3061555d28 fix(ui): revert preview theme on dialog unmount (#22542)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-04-17 14:56:50 +00:00
Christian Gunderman 22fb83320e Reduce blank lines. (#25563) 2026-04-16 23:54:57 +00:00
Matt Van Horn 63e4bb985b feat(sandbox): resolve custom seatbelt profiles from $HOME/.gemini first (#25427)
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-04-16 22:21:24 +00:00
Gal Zahavi fe890429a4 fix(core): allow explicit write permissions to override governance file protections in sandboxes (#25338) 2026-04-16 21:18:09 +00:00
Nicolas Ouellet-Payeur 655165cde4 docs(policy): mention that workspace policies are broken (#24367)
Co-authored-by: Nicolas Ouellet-Payeur <nicolaso@chromium.org>
2026-04-16 21:04:46 +00:00
Sam Roberts 17557b1aeb feat(core): add .mdx support to get-internal-docs tool (#25090) 2026-04-16 20:58:34 +00:00
Jason Matthew Suhari 9600da2c8f fix(cli): reset plan session state on /clear (#25515) 2026-04-16 19:20:36 +00:00
Abhi 2b6dab6136 fix(extensions): fix bundling for examples (#25542) 2026-04-16 19:11:03 +00:00
jackyliuxx ac9025e9fc Use OSC 777 for terminal notifications (#25300) 2026-04-16 18:45:54 +00:00
Sandy Tao fafe3e35d2 fix(evals): add typecheck coverage for evals, integration-tests, and memory-tests (#25480) 2026-04-16 18:20:27 +00:00
ruomeng f16f1cced3 feat(core): add tools to list and read MCP resources (#25395) 2026-04-16 17:57:43 +00:00
ruomeng 963631a3d4 feat(cli): provide default post-submit prompt for skill command (#25327) 2026-04-16 17:56:20 +00:00
Sandy Tao 6d7974f1ef feat(core): integrate skill-creator into skill extraction agent (#25421) 2026-04-16 01:38:59 +00:00
gemini-cli-robot 34a9d6e421 Changelog for v0.38.1 (#25476)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-16 00:06:43 +00:00
Sandy Tao 00b7781c3c fix(evals): update eval tests for invoke_agent telemetry and project-scoped memory (#25502) 2026-04-15 23:14:12 +00:00
gemini-cli-robot e827cfdf83 Changelog for v0.38.0 (#25470)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-15 20:02:53 +00:00
Jason Matthew Suhari cb35ee6710 fix(cli): clean up slash command IDE listeners (#24397)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-15 19:41:50 +00:00
Christopher Thomas cb289e0724 fix(core): honor GOOGLE_GEMINI_BASE_URL and GOOGLE_VERTEX_BASE_URL (#25357) 2026-04-15 19:38:38 +00:00
Z1xus c5ad0abb5d feat: add github colorblind themes (#15504)
Co-authored-by: Coco Sheng <cocosheng@google.com>
2026-04-15 19:23:50 +00:00
anj-s e664cc20fe test(evals): add subagent delegation evaluation tests (#24619) 2026-04-15 19:07:29 +00:00
Sandy Tao 485f3d92d8 improve(core): require recurrence evidence before extracting skills (#25147) 2026-04-15 18:45:31 +00:00
cynthialong0-0 5333e5ab20 feat(test): add large conversation scenario for performance test (#25331) 2026-04-15 18:08:43 +00:00
gemini-cli-robot 166845d933 Changelog for v0.39.0-preview.0 (#25417)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-15 17:28:39 +00:00
Tommaso Sciortino 55620235c0 feat: bundle ripgrep binaries into SEA for offline support (#25342) 2026-04-15 06:28:06 +00:00
Gal Zahavi 366f9e4766 fix(core): prevent YOLO mode from being downgraded (#25341) 2026-04-15 06:27:36 +00:00
Rob Clevenger 06e7621b26 Fix(core): retry additional OpenSSL 3.x SSL errors during streaming (#16075) (#25187) 2026-04-15 02:50:22 +00:00
gemini-cli-robot 8d05bdbe49 chore(release): bump version to 0.40.0-nightly.20260414.g5b1f7375a (#25420) 2026-04-15 00:06:35 +00:00
gemini-cli-robot 5b1f7375a3 Changelog for v0.37.2 (#25336)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-14 21:44:49 +00:00
Tommaso Sciortino d613dd05db use macos-latest-large runner where applicable. (#25413) 2026-04-14 14:05:25 -07:00
Adam Weidman a6d43cba2d ci: add agent session drift check workflow (#25389) 2026-04-14 19:31:48 +00:00
Clay 161ba28966 fix(core): detect kmscon terminal as supporting true color (#25282)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-14 19:08:51 +00:00
Adib234 05aa1465fe feat(cli): enable mouse clicking for cursor positioning in AskUser multi-line answers (#24630) 2026-04-14 19:07:00 +00:00
cynthialong0-0 8f6edc50c1 feat(test): add a performance test in asian language (#25392) 2026-04-14 18:43:36 +00:00
Emily Hedlund 88ddcab616 fix(core): use debug level for keychain fallback logging (#25398) 2026-04-14 18:33:01 +00:00
ruomeng 02792264ed feat(plan): update plan mode prompt to allow showing plan content (#25058) 2026-04-14 17:36:37 +00:00
Emily Hedlund 059d9175eb test(core): improve sandbox integration test coverage and fix OS-specific failures (#25307)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-04-14 17:33:07 +00:00
Jack Wotherspoon 212edf31ed chore(mcp): check MCP error code over brittle string match (#25381) 2026-04-14 17:24:21 +00:00
Abhi 1bb41262b0 docs(core): update generalist agent documentation (#25325) 2026-04-14 01:29:19 +00:00
joshualitt daf5006237 feat(core): introduce decoupled ContextManager and Sidecar architecture (#24752) 2026-04-13 22:02:22 +00:00
Christian Gunderman 706d4d4707 fix(core): prevent secondary crash in ModelRouterService finally block (#25333) 2026-04-13 20:57:01 +00:00
Kevin Zhao 24f9ec51d2 fix: correct redirect count increment in fetchJson (#24896)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-13 20:45:52 +00:00
Jerop Kipruto 050c30330e feat(core): implement silent fallback for Plan Mode model routing (#25317) 2026-04-13 19:59:24 +00:00
Tanmay Vartak a172b328e2 feat: support auth block in MCP servers config in agents (#24770) 2026-04-13 19:41:40 +00:00
Adib234 a4318f22ec fix(core): expose GEMINI_PLANS_DIR to hook environment (#25296)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-13 19:26:52 +00:00
Jacob Richman 82e8d67a78 Stop showing scrollbar unless we are in terminalBuffer mode (#25320) 2026-04-13 19:26:45 +00:00
Michael Bleigh 95944ec5af feat(agent): implement tool-controlled display protocol (Steps 2-3) (#25134) 2026-04-13 19:09:02 +00:00
Anjaligarhwal ea36ccb567 fix(core): replace custom binary detection with isbinaryfile to correctly handle UTF-8 (U+FFFD) (#25297) 2026-04-13 18:58:18 +00:00
Dev Randalpura a05c5ed56a feat(ui): added enhancements to scroll momentum (#24447) 2026-04-13 18:48:55 +00:00
Emily Hedlund 0d6d5d90b9 refactor(core): extract and centralize sandbox path utilities (#25305)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-04-13 18:43:13 +00:00
Adib234 b91d177bde feat(cli): extract QuotaContext and resolve infinite render loop (#24959) 2026-04-13 18:32:18 +00:00
Sandy Tao 36dca862cc fix(release): prefix git hash in nightly versions to prevent semver normalization (#25304) 2026-04-13 17:55:11 +00:00
Christian Gunderman a5f7b453ca Stop suppressing thoughts and text in model response (#25073) 2026-04-13 17:47:48 +00:00
Sandy Tao 26f04c9d9a feat(core): add skill patching support with /memory inbox integration (#25148) 2026-04-13 17:44:52 +00:00
Jesse Rosenstock 5d8bd41937 docs(contributing): clarify self-assignment policy for issues (#23087) 2026-04-13 17:15:54 +00:00
Jack Wotherspoon 6b6ea56437 fix(core): fix quota footer for non-auto models and improve display (#25121) 2026-04-13 17:03:41 +00:00
Mark Griffith 0179726222 Memory fix for trace's streamWrapper. (#25089) 2026-04-11 05:26:07 +00:00
Abhijit Balaji 0957f7d3e2 fix(cli): exclude update_topic from confirmation queue count (#24945) 2026-04-10 23:04:59 +00:00
Coco Sheng 773567c6ca docs: correct documentation for enforced authentication type (#25142) 2026-04-10 22:43:54 +00:00
Sam Roberts 58901207bd docs: Update docs-audit to include changes in PR body (#25153) 2026-04-10 22:29:04 +00:00
M Junaid Shaukat 21e1c60922 fix: improve audio MIME normalization and validation in file reads (#21636)
Co-authored-by: Coco Sheng <cocosheng@google.com>
2026-04-10 21:46:24 +00:00
Coco Sheng 35907057ad chore: switch from keytar to @github/keytar (#25143) 2026-04-10 21:20:26 +00:00
Emily Hedlund e2a5231e30 perf(sandbox): optimize Windows sandbox initialization via native ACL application (#25077) 2026-04-10 20:50:21 +00:00
Tommaso Sciortino db6943fbee chore(deps): update vulnerable dependencies via npm audit fix (#25140) 2026-04-10 14:40:41 -07:00
Spencer 128e3567cb fix(core): resolve PTY exhaustion and orphan MCP subprocess leaks (#25079) 2026-04-10 18:57:09 +00:00
cynthialong0-0 a74bb603c0 feat(core): add large memory regression test (#25059) 2026-04-10 18:47:23 +00:00
euxaristia 565eafc1ec fix(cli): resolve text sanitization data loss due to C1 control characters (#22624) 2026-04-10 18:44:28 +00:00
Jason Matthew Suhari 7bba7f437c fix(cli): pass session id to interactive shell executions (#25114) 2026-04-10 18:38:35 +00:00
Christopher Thomas b499562921 docs: add vi shortcuts and clarify MCP sandbox setup (#21679)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2026-04-10 18:00:25 +00:00
Jason Matthew Suhari 86f5a198bd fix(core): preserve shell execution config fields on update (#25113) 2026-04-10 17:55:40 +00:00
Aishanee Shah 31069329bb feat(core): add Strategic Re-evaluation guidance to system prompt (#25062) 2026-04-10 17:15:41 +00:00
Michael Bleigh 3b7c17a22c refactor(core): consolidate execute() arguments into ExecuteOptions (#25101) 2026-04-10 17:11:17 +00:00
Abhi 1d36309f5f chore(core): increase codebase investigator turn limits to 50 (#25125) 2026-04-10 16:56:07 +00:00
Abhi 7d1de3bccc feat(core): persist subagent agentId in tool call records (#25092) 2026-04-10 16:47:25 +00:00
Spencer f6c08a114b fix(core): remove buffer slice to prevent OOM on large output streams (#25094) 2026-04-10 16:33:36 +00:00
Jacob Richman c1fd6027e2 fix(cli): mark /settings as unsafe to run concurrently (#25061) 2026-04-10 16:31:37 +00:00
JAYADITYA 0fd0851e1a docs(cli): updates f12 description to be more precise (#15816) 2026-04-10 15:53:17 +00:00
Spencer 5fc8fea8d7 fix: resolve lifecycle memory leaks by cleaning up listeners and root closures (#25049) 2026-04-10 04:21:14 +00:00
Jacob Richman 43b93e9e1b debugging(ui): add optional debugRainbow setting (#25088) 2026-04-10 02:42:21 +00:00
Sam Roberts e09410b6e5 Automated documentation audit results (#22755) 2026-04-10 02:07:00 +00:00
June 69bf2d75ef fix: decode Uint8Array and multi-byte UTF-8 in API error messages (#23341)
Co-authored-by: Coco Sheng <cocosheng@google.com>
2026-04-10 01:06:54 +00:00
gemini-cli-robot 96cc8a0dad Changelog for v0.37.1 (#25055)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-09 23:30:26 +00:00
Tommaso Sciortino 55db77bb91 fix(core): silently handle EPERM when listing dir structure (#25066) 2026-04-09 22:25:23 +00:00
Sri Pasumarthi de628b04fc feat(test): add high-volume shell test and refine perf harness (#24983) 2026-04-09 22:23:00 +00:00
Emily Hedlund 451edb3ea6 fix(sandbox): centralize async git worktree resolution and enforce read-only security (#25040) 2026-04-09 22:04:16 +00:00
Spencer 0f7f7be4ef fix(core): clear 5-minute timeouts in oauth flow to prevent memory leaks (#24968) 2026-04-09 21:14:07 +00:00
Spencer f744913584 feat(core): migrate chat recording to JSONL streaming (#23749) 2026-04-09 21:13:55 +00:00
Michael Bleigh 45100f7c0e feat(cli): wire up useAgentStream in AppContainer (#24297)
Co-authored-by: Adam Weidman <adamfweidman@gmail.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-04-09 20:40:00 +00:00
Abhi a7a091360e fix(core): remediate subagent memory leaks using AbortSignal in MessageBus (#25048) 2026-04-09 20:22:26 +00:00
Yuna Seol 20113ee595 fix(core): honor retryDelay in RetryInfo for 503 errors (#25057) 2026-04-09 20:16:36 +00:00
ruomeng 2a5f798863 refactor(plan) Clean default plan toml (#25037) 2026-04-09 20:04:20 +00:00
Abhi 570f0235f8 refactor(core): remove legacy subagent wrapping tools (#25053) 2026-04-09 19:51:36 +00:00
Michael Bleigh e406856343 feat(cli): implement useAgentStream hook (#24292)
Co-authored-by: Adam Weidman <adamfweidman@gmail.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-04-09 19:06:27 +00:00
Sam Roberts f387e456be Automated documentation audit (#24567) 2026-04-09 18:45:24 +00:00
euxaristia a9b5c693ca fix(cli): suppress unhandled AbortError logs during request cancellation (#22621) 2026-04-09 18:27:08 +00:00
chernistry 0690192d45 fix: respect hideContextPercentage when FooterConfigDialog is closed without changes (#24773)
Co-authored-by: Coco Sheng <cocosheng@google.com>
2026-04-09 18:17:00 +00:00
MD. MOHIBUR RAHMAN 5bcb6b619d fix(core): add explicit git identity env vars to prevent sandbox checkpointing error (#19775)
Co-authored-by: David Pierce <davidapierce@google.com>
2026-04-09 17:24:04 +00:00
Abhi b238a453e3 feat(core): refactor subagent tool to unified invoke_subagent tool (#24489) 2026-04-09 16:48:24 +00:00
Jacob Richman 6686c8ee4c Support ctrl+shift+g (#25035) 2026-04-09 16:23:04 +00:00
Emily Hedlund 5724d6be0f refactor(core): use centralized path resolution for Linux sandbox (#24985) 2026-04-09 15:28:58 +00:00
Sandy Tao 615e078341 fix(sdk): skip broken sendStream tests to unblock nightly (#25000) 2026-04-09 03:39:36 +00:00
Jarrod Whelan faa7a9da30 feat(cli): refine tool output formatting for compact mode (#24677) 2026-04-09 03:30:52 +00:00
Emily Hedlund 5d589946ad refactor(sandbox): use centralized sandbox paths in macOS Seatbelt implementation (#24984) 2026-04-09 01:29:38 +00:00
Sehoon Shon 464bac270c fix(cli): optimize startup with lightweight parent process (#24667) 2026-04-09 00:17:32 +00:00
Christian Gunderman f1bb2af6de Generalize evals infra to support more types of evals, organization and queuing of named suites (#24941) 2026-04-08 23:57:26 +00:00
Jarrod Whelan bc3ed61adb feat(core): refine shell tool description display logic (#24903) 2026-04-08 23:40:43 +00:00
Jacob Richman 9c4e17b7ce Update ink version to 6.6.9 (#24980) 2026-04-08 23:36:19 +00:00
Tommaso Sciortino d06dba3538 fix(core): dynamic session ID injection to resolve resume bugs (#24972) 2026-04-08 23:27:24 +00:00
dogukanozen 80764c8bb5 fix(cli-ui): enable Ctrl+Backspace for word deletion in Windows Terminal (#21447) 2026-04-08 22:25:29 +00:00
Jarrod Whelan 14b2f35677 fix(cli): restore file path display in edit and write tool confirmations (#24974) 2026-04-08 22:19:25 +00:00
Adamya Singh 1023c5b7a6 test(sdk): add unit tests for GeminiCliSession (#21897) 2026-04-08 22:05:57 +00:00
Emily Hedlund af3638640c fix(core): resolve windows symlink bypass and stabilize sandbox integration tests (#24834) 2026-04-08 22:00:50 +00:00
Sri Pasumarthi c7b920717f feat(test-utils): add CPU performance integration test harness (#24951) 2026-04-08 21:50:29 +00:00
ruomeng 15f7b24312 feat(plan): require user confirmation for activate_skill in Plan Mode (#24946) 2026-04-08 21:44:53 +00:00
gemini-cli-robot 18cb7fd46c Changelog for v0.37.0 (#24940)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-08 21:41:55 +00:00
JAYADITYA 8b01d78512 chore: ignore conductor directory (#22128)
Co-authored-by: Coco Sheng <cocosheng@google.com>
2026-04-08 20:56:02 +00:00
gemini-cli-robot 56c2397e78 Changelog for v0.38.0-preview.0 (#24938)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
2026-04-08 20:45:59 +00:00
Jacob Richman d1a062bcc4 chore: update ink version to 6.6.8 (#24934) 2026-04-08 20:02:03 +00:00
Emily Hedlund a39461718c fix(core): ensure robust sandbox cleanup in all process execution paths (#24763)
Co-authored-by: Spencer <spencertang@google.com>
2026-04-08 19:03:36 +00:00
gemini-cli-robot 3df99d8bcb chore(release): bump version to 0.39.0-nightly.20260408.e77b22e63 (#24939) 2026-04-08 18:10:28 +00:00
Sandy Tao a837b39f8d feat(memory): add /memory inbox command for reviewing extracted skills (#24544) 2026-04-08 18:08:49 +00:00
Sri Pasumarthi 4ebc43bc66 feat(test-utils): add memory usage integration test harness (#24876) 2026-04-08 17:42:18 +00:00
ruomeng 34b4f1c6e4 refactor(plan): simplify policy priorities and consolidate read-only rules (#24849) 2026-04-08 15:58:29 +00:00
Gaurav e77b22e638 fix: isolate concurrent browser agent instances (#24794) 2026-04-08 14:31:10 +00:00
Adam Weidman 1b3e7d674f docs: update MCP server OAuth redirect port documentation (#24844) 2026-04-08 14:06:30 +00:00
Gaurav Ghosh e7f8d9cf1a Revert "feat: Introduce an AI-driven interactive shell mode with new"
This reverts commit 651ad63ed6.
2026-04-08 07:31:17 -07:00
Gaurav Ghosh 651ad63ed6 feat: Introduce an AI-driven interactive shell mode with new
`read-shell` and `write-to-shell` tools and a configurable mode setting.
2026-04-08 07:27:28 -07:00
Jacob Richman cbacdc67d0 feat(cli): switch to ctrl+g from ctrl-x (#24861) 2026-04-08 06:22:45 +00:00
Jacob Richman 7e1938c1bc fix(cli): switch default back to terminalBuffer=false and fix regressions introduced for that mode (#24873) 2026-04-08 05:47:54 +00:00
Anjaligarhwal b9f1d832c8 fix(core): dispose Scheduler to prevent McpProgress listener leak (#24870) 2026-04-08 03:05:53 +00:00
Dev Randalpura 47c5d25d93 Added flag for ept size and increased default size (#24859) 2026-04-08 03:03:36 +00:00
Jacob Richman 28efab483f fix(cli): always show shell command description or actual command (#24774) 2026-04-08 01:52:33 +00:00
gemini-cli-robot 9fd92c0eea Changelog for v0.37.0-preview.2 (#24848)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-08 00:13:06 +00:00
Michael Bleigh 16768c08f2 refactor(core): make LegacyAgentSession dependencies optional (#24287)
Co-authored-by: Adam Weidman <adamfweidman@gmail.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-04-07 23:45:22 +00:00
JAYADITYA 1aa798dd18 refactor(cli): remove duplication in interactive shell awaiting input hint (#24801) 2026-04-07 23:36:44 +00:00
Christian Gunderman f96d5f98fe Revert "fix(ui): improve narration suppression and reduce flicker (#2… (#24857) 2026-04-07 22:45:40 +00:00
Yuna Seol 3c5b5db034 feat(core): use experiment flags for default fetch timeouts (#24261) 2026-04-07 22:35:04 +00:00
Michael Bleigh 986293bd38 feat(core): add agent protocol UI types and experimental flag (#24275)
Co-authored-by: Adam Weidman <adamfweidman@gmail.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-04-07 21:45:18 +00:00
David Pierce adf7b3b717 Improve sandbox error matching and caching (#24550) 2026-04-07 21:08:18 +00:00
Jack Wotherspoon 9637fb3990 fix(core): remove tmux alternate buffer warning (#24852) 2026-04-07 21:01:14 +00:00
Sri Pasumarthi 06fcdc231c feat(acp): add /help command (#24839) 2026-04-07 20:01:44 +00:00
Sehoon Shon d29da15427 fix(cli): prevent multiple banner increments on remount (#24843) 2026-04-07 19:44:09 +00:00
Enjoy Kumawat ab3075feb9 fix: use directory junctions on Windows for skill linking (#24823) 2026-04-07 19:28:43 +00:00
Abhi 5588000e93 chore: fix formatting for behavioral eval skill reference file (#24846) 2026-04-07 19:26:53 +00:00
krishdef7 68fef8745e fix(core): propagate BeforeModel hook model override end-to-end (#24784)
Signed-off-by: krishdef7 <gargkrish06@gmail.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2026-04-07 17:49:26 +00:00
Michael Bleigh e432f7c009 feat(hooks): display hook system messages in UI (#24616) 2026-04-07 17:42:39 +00:00
Alisa 846051f716 Alisa/approve button (#24645) 2026-04-07 16:44:07 +00:00
Tommaso Sciortino 1c22c5b37b Remove flakey test (#24837) 2026-04-07 09:39:15 -07:00
Emily Hedlund 1762c9c509 temporarily disable sandbox integration test on windows (#24786) 2026-04-07 15:33:40 +00:00
Abhijit Balaji 0025978d76 feat(cli): support selective topic expansion and click-to-expand (#24793) 2026-04-07 15:00:40 +00:00
Gaurav 4c5e887732 feat(telemetry): add browser agent clearcut metrics (#24688) 2026-04-07 07:48:38 +00:00
Abhi 83096c68b0 fix(policy): allow complete_task in plan mode (#24771) 2026-04-07 03:43:42 +00:00
Christian Gunderman d2b775f9a7 Add an eval for and fix unsafe cloning behavior. (#24457) 2026-04-07 03:17:44 +00:00
Spencer 0a8da988ed fix(cli): ensure skills list outputs to stdout in non-interactive environments (#24566) 2026-04-07 02:40:23 +00:00
David Pierce 984f02c180 relax tool sandboxing overrides for plan mode to match defaults. (#24762) 2026-04-06 22:18:10 +00:00
Tommaso Sciortino df67f973ed fix(cli): respect global environment variable allowlist (#24767) 2026-04-06 22:17:55 +00:00
Christian Gunderman 7872d6d7fe fix(ui): improve narration suppression and reduce flicker (#24635) 2026-04-06 21:18:59 +00:00
Gaurav e116aa34f4 fix(browser): remove premature browser cleanup after subagent invocation (#24753) 2026-04-06 21:17:31 +00:00
Abhijit Balaji ad98294352 Revert "feat(core,cli): prioritize summary for topics (#24608)" (#24777) 2026-04-06 20:33:18 +00:00
Dev Randalpura 2353a6d253 fix(ui): fixed auth race condition causing logo to flicker (#24652) 2026-04-06 20:17:05 +00:00
krishdef7 8ac560d2c9 fix(core): handle partial llm_request in BeforeModel hook override (#22326) 2026-04-06 20:11:38 +00:00
Tommaso Sciortino c6a9d3de13 fix(cli): remove -S from shebang to fix Windows and BSD execution (#24756) 2026-04-06 19:06:56 +00:00
Christian Gunderman 8f131ffef7 Fix issue where topic headers can be posted back to back (#24759) 2026-04-06 18:36:22 +00:00
Jacob Richman 70f6d6a992 split context (#24623) 2026-04-06 17:20:38 +00:00
cynthialong0-0 c96cb09e09 feat(cli): add role specific metrics to /stats (#24659) 2026-04-06 16:20:48 +00:00
Sri Pasumarthi 15298b28c2 feat(acp): add support for /about command (#24649) 2026-04-04 07:42:27 +00:00
Gal Zahavi 7311e242ec feat(cli): enhance tool confirmation UI and selection layout (#24376) 2026-04-04 01:32:35 +00:00
Gal Zahavi 21a3925f99 docs: update sandboxing documentation and toolSandboxing settings (#24655) 2026-04-04 01:26:41 +00:00
Jacob Richman ec35ebbe57 fix(core): detect uninitialized lines (#24646) 2026-04-04 00:51:29 +00:00
Gal Zahavi 65024d4538 fix(core): ensure global temp directory is always in sandbox allowed paths (#24638)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-04 00:23:27 +00:00
Samee Zahid 4fb3790051 feat(core): discourage update topic tool for simple tasks (#24640)
Co-authored-by: Samee Zahid <sameez@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-03 23:52:24 +00:00
Christian Gunderman 4a040931ef Fix restoration of topic headers. (#24650) 2026-04-03 23:50:38 +00:00
Alisa e74efc5c0b Do not run pr-eval workflow when no steering changes detected (#24621) 2026-04-03 22:54:05 +00:00
Jacob Richman d5a5995281 feat(cli) Scrollbar for input prompt (#21992) 2026-04-03 22:10:04 +00:00
Gal Zahavi 893ae4d29a fix(core): ensure sandbox approvals are correctly persisted and matched for proactive expansions (#24577) 2026-04-03 21:48:18 +00:00
Emily Hedlund 370c45de67 fix(core): improve windows sandbox reliability and fix integration tests (#24480) 2026-04-03 20:54:48 +00:00
Abhi a93a1ebd65 fix(core): inject skill system instructions into subagent prompts if activated (#24620) 2026-04-03 18:45:11 +00:00
Jarrod Whelan 3f12c1d7c7 feat(cli): enable compact tool output by default (#24509) (#24510) 2026-04-03 17:59:12 +00:00
Jacob Richman 61719a3926 show color (#24613) 2026-04-03 16:53:34 +00:00
Abhijit Balaji beaa2a968b feat(core,cli): prioritize summary for topics (#24608) (#24609) 2026-04-03 16:26:38 +00:00
Emily Hedlund ca0e6f9bd9 test: fix Windows CI execution and resolve exposed platform failures (#24476) 2026-04-03 15:50:29 +00:00
Aditya Bijalwan 7a70ab9a5d Feat/browser agent metrics (#24210)
Co-authored-by: Gaurav Ghosh <gaghosh@google.com>
2026-04-03 08:21:09 +00:00
Gal Zahavi e54eecca51 feat(cli): minimalist sandbox status labels (#24582) 2026-04-03 05:22:21 +00:00
Jacob Richman 7de3e4dcf9 Add instructions for how to start react in prod and force react to prod mode (#24590) 2026-04-03 04:42:32 +00:00
Tommaso Sciortino 8c215c7a88 fix(core): remove broken PowerShell translation and fix native __write in Windows sandbox (#24571) 2026-04-03 02:50:44 +00:00
Tommaso Sciortino fe4fcf89d9 docs: clarify release coordination (#24575) 2026-04-03 01:37:35 +00:00
Jacob Richman 1f5d7014c6 feat(ui): enable "TerminalBuffer" mode to solve flicker (#24512) 2026-04-03 00:39:49 +00:00
Gal Zahavi 1ae0499e5d fix(core): pass includeDirectories to sandbox configuration (#24573) 2026-04-02 23:34:12 +00:00
Dev Randalpura 9d741abdba fix(ui): fixed table styling (#24565) 2026-04-02 22:52:25 +00:00
Ishaan Arora f54bccfe03 docs: add missing .md extensions to internal doc links (#24145) 2026-04-02 21:52:18 +00:00
gemini-cli-robot 1db169bc66 Changelog for v0.37.0-preview.1 (#24568)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-02 21:31:11 +00:00
gemini-cli-robot b9b7bba48d Changelog for v0.36.0 (#24558)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-02 21:10:48 +00:00
Dan Zaharia 29caa52bb7 fix(ui): hide model quota in /stats and refactor quota display (#24206) 2026-04-02 20:49:14 +00:00
Saurav Sharma e5adeaca80 fix(core): unsafe type assertions in Core File System #19712 (#19739)
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
2026-04-02 20:44:22 +00:00
Adam Weidman 6fb58bd31f feat(cli): migrate nonInteractiveCli to LegacyAgentSession (#22987) 2026-04-02 20:21:40 +00:00
Jack Wotherspoon 7c3469713d docs: move agent disabling instructions and update remote agent status (#24559) 2026-04-02 20:16:01 +00:00
Jerop Kipruto 64c928fce7 feat(core): implement context-aware persistent policy approvals (#23257) 2026-04-02 20:01:33 +00:00
gemini-cli-robot 61b21e3d63 Changelog for v0.37.0-preview.0 (#24464)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-04-02 19:52:14 +00:00
Aashir Javed 77027dff82 fix(cli): clear stale retry/loading state after cancellation (#21096) (#21960)
Co-authored-by: Aashir Javed <Aaxhirrr@users.noreply.github.com>
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
2026-04-02 19:44:39 +00:00
ruomeng c0dfa1aec3 Enable 'Other' option for yesno question type (#24545) 2026-04-02 19:42:53 +00:00
Sandy Tao 06173c0885 fix(core): move project memory dir under tmp directory (#24542) 2026-04-02 17:50:43 +00:00
Jyo 08b926796c Fix crash when vim editor is not found in PATH on Windows (#22423)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-04-02 17:40:19 +00:00
Sri Pasumarthi b80234aa3e fix(acp): handle all InvalidStreamError types gracefully in prompt (#24540) 2026-04-02 17:16:36 +00:00
Jacob Richman efbddcbf98 Update ink version to 6.6.7 (#24514) 2026-04-02 16:42:52 +00:00
Sandy Tao 63cc363606 feat(core): scope subagent workspace directories via AsyncLocalStorage (#24445) 2026-04-02 16:33:08 +00:00
joshualitt e0044f2868 feat(core): Land ContextCompressionService (#24483) 2026-04-02 16:22:04 +00:00
Gaurav beff8c91aa fix(browser): handle computer-use model detection for analyze_screenshot (#24502) 2026-04-02 15:05:21 +00:00
Coco Sheng f510394721 Implement background process monitoring and inspection tools (#23799) 2026-04-02 15:01:00 +00:00
Gaurav 811a383d50 fix: enable browser_agent in integration tests and add localhost fixture tests (#24523) 2026-04-02 14:54:38 +00:00
Gaurav 8d171e0200 docs(browser-agent): update stale browser agent documentation (#24463)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-02 14:52:30 +00:00
ruomeng 7b6ab50138 feat(cli): support default values for environment variables (#24469) 2026-04-02 14:38:45 +00:00
Sehoon Shon 44c8b43328 fix(cli): prevent crash in AnsiOutputText when handling non-array data (#24498) 2026-04-02 11:48:17 +00:00
Sehoon Shon 242afd49a1 revert(cli): bring back input box and footer visibility in copy mode (#24504) 2026-04-02 06:54:51 +00:00
Jarrod Whelan 66c07d7296 fix(ui): resolve unwanted vertical spacing around various tool output treatments (#24449) 2026-04-02 06:29:56 +00:00
Jacob Richman 40b73c9447 Fix shell output display (#24490) 2026-04-02 05:53:46 +00:00
Alisa 973092df50 feat: implement high-signal PR regression check for evaluations (#23937) 2026-04-02 05:14:43 +00:00
Sandy Tao e446733b53 feat(core): add background memory service for skill extraction (#24274) 2026-04-02 05:05:31 +00:00
Alisa 3344f6849c Unused error variables in catch block are not allowed (#24487) 2026-04-02 04:33:07 +00:00
Jacob Richman 84936dc85d Auto configure memory. (#24474) 2026-04-02 03:15:27 +00:00
Jacob Richman 18cdbbf81a Terminal Serializer Optimization (#24485) 2026-04-02 02:56:52 +00:00
Gal Zahavi 13ccc16457 fix(core): enhance sandbox usability and fix build error (#24460)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-01 23:51:06 +00:00
N. Taylor Mullen ca78a0f177 fix(cli): ensure agent stops when all declinable tools are cancelled (#24479) 2026-04-01 23:16:34 +00:00
Keith Guerin cb7f7d6c72 feat(cli): change default loadingPhrases to 'off' to hide tips (#24342) 2026-04-01 23:04:43 +00:00
gemini-cli-robot 0d7e778e08 Changelog for v0.36.0-preview.8 (#24453)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-01 20:47:06 +00:00
Adam Weidman b5f568fefe feat(config): add experimental.adk.agentSessionNoninteractiveEnabled setting (#24439) 2026-04-01 20:41:38 +00:00
Emily Hedlund d00b43733c fix(core): refactor linux sandbox to fix ARG_MAX crashes (#24286) 2026-04-01 20:17:10 +00:00
Adib234 55f5d3923c feat(policy): explicitly allow web_fetch in plan mode with ask_user (#24456)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-04-01 19:57:56 +00:00
Abhi 2d432c1489 fix(core): ensure complete_task tool calls are recorded in chat history (#24437) 2026-04-01 19:53:46 +00:00
Sam Roberts 597778e55f Update README.md for links. (#22759) 2026-04-01 19:15:44 +00:00
N. Taylor Mullen 4e21e5b8a3 fix(cli): refresh slash command list after /skills reload (#24454) 2026-04-01 19:15:27 +00:00
AK d9d51ba15b docs(core): add subagent tool isolation draft doc (#23275)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2026-04-01 18:45:21 +00:00
Gaurav aed85725b6 feat(browser): supersede stale snapshots to reclaim context-window tokens (#24440) 2026-04-01 18:41:39 +00:00
anj-s 43cf63e189 fix: update task tracker storage location in system prompt (#24034) 2026-04-01 18:29:09 +00:00
gemini-cli-robot bda4491616 Changelog for v0.36.0-preview.7 (#24346)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-04-01 18:23:28 +00:00
Sri Pasumarthi 6b303a13eb fix(acp) refactor(core,cli): centralize model discovery logic in ModelConfigService (#24392) 2026-04-01 18:03:30 +00:00
cynthialong0-0 16468a855d feat(core): update browser agent prompt to check open pages first when bringing up (#24431) 2026-04-01 17:52:18 +00:00
joshualitt 377e834e03 refactor(core): Unified context management settings schema (#24391) 2026-04-01 17:24:45 +00:00
anj-s 3a32d9723e feat(core): enhance tracker task schemas for detailed titles and descriptions (#23902) 2026-04-01 17:19:47 +00:00
Gaurav bf3ac20da0 feat(browser): add sandbox-aware browser agent initialization (#24419) 2026-04-01 17:18:17 +00:00
Gaurav a3ef87e6e2 fix(build): wire bundle:browser-mcp into bundle pipeline (#24424) 2026-04-01 17:09:58 +00:00
Dev Randalpura 4c4d8bc411 fix(ui): removed additional vertical padding for tables (#24381) 2026-04-01 16:46:38 +00:00
Sehoon Shon f938a3f51d fix(build): upload full bundle directory archive to GitHub releases (#24403) 2026-04-01 16:39:44 +00:00
cynthialong0-0 c61506bbc1 fix(core): ensure blue border overlay and input blocker to act correctly depending on browser agent activities (#24385) 2026-04-01 16:35:44 +00:00
Emily Hedlund 6a8a0d4faa feat(core): populate sandbox forbidden paths with project ignore file contents (#24038) 2026-04-01 16:27:55 +00:00
Dev Randalpura 066da2a1d1 fix(ui): add accelerated scrolling on alternate buffer mode (#23940)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-04-01 16:23:40 +00:00
PROTHAM 7d1848d578 fix(cli): cap shell output at 10 MB to prevent RangeError crash (#24168) 2026-04-01 16:09:30 +00:00
ruomeng eb95e99b3d feat(plan): conditionally add enter/exit plan mode tools based on current mode (#24378) 2026-04-01 15:56:10 +00:00
Jerop Kipruto ca43f8c291 feat(core): prioritize discussion before formal plan approval (#24423) 2026-04-01 15:55:47 +00:00
Abhi dcf5afafda fix(core): resolve subagent chat recording gaps and directory inheritance (#24368) 2026-04-01 15:29:38 +00:00
Jacob Richman 9f76f34049 ink 6.6.3 (#24372)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2026-04-01 04:50:12 +00:00
matt korwel 7c5cd693ce Set memoryManager to false in settings.json (#24393) 2026-04-01 03:38:50 +00:00
matt korwel c9ed5e41b1 fix(cli): refactor test config loading and mock debugLogger in test-setup (#24389) 2026-03-31 20:11:02 -07:00
Daniel R. Neal 8ae5b56b5b feat(ui): add Tokyo Night theme (#24054)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-04-01 01:08:28 +00:00
Sri Pasumarthi 1b265f343f fix(core): pin AuthType.GATEWAY to use Gemini 3.1 Pro/Flash Lite by default (#24375) 2026-04-01 00:25:59 +00:00
joshualitt fd5c103f99 refactor(core): Centralize context management logic into src/context (#24380) 2026-04-01 00:01:46 +00:00
Jarrod Whelan cdc602edd7 fix(ui): wrap topic and intent fields in TopicMessage (#24386) 2026-04-01 00:00:48 +00:00
Gaurav 782bb4e4bd fix(core): fix browser agent UX issues and improve E2E test reliability (#24312) 2026-03-31 23:00:16 +00:00
David Pierce 94f9480a3a fix(core): resolve Plan Mode deadlock during plan file creation due to sandbox restrictions (#24047) 2026-03-31 22:06:50 +00:00
Abhi 9364dd8a49 feat(core): infrastructure for event-driven subagent history (#23914) 2026-03-31 21:54:22 +00:00
Tirth Panchal 6d48a12efe docs: fix broken GEMINI.md link in CONTRIBUTING.md (#24182)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-31 21:44:00 +00:00
Abhi beab7cc053 docs(policy): remove unsupported mcpName wildcard edge case (#24133) 2026-03-31 21:11:29 +00:00
Gal Zahavi 6cade3eaec test(sandbox): add integration test for dynamic permission expansion (#24359) 2026-03-31 20:59:44 +00:00
Sandy Tao c8d18eb2ac fix(config): disable JIT context loading by default (#24364) 2026-03-31 20:31:22 +00:00
Tommaso Sciortino 91400c5b0b don't try to remove tags in dry run (#24356) 2026-03-31 12:54:53 -07:00
Gal Zahavi 554a5a36a3 fix(core): implement __read and __write commands in sandbox managers (#24283) 2026-03-31 19:39:51 +00:00
Abhi 7e117ac0ac docs: update subagents docs to not be experimental (#24343) 2026-03-31 18:58:41 +00:00
Jerop Kipruto 6f053dd8b9 Revert "Add security settings for tool sandboxing" (#24357) 2026-03-31 18:39:28 +00:00
Sehoon Shon 25af91e4df chore(release): allow bundling for all builds, including stable (#24305) 2026-03-31 18:37:14 +00:00
Emily Hedlund 1edc542b55 ci: install bubblewrap on Linux for release workflows (#24347) 2026-03-31 18:19:48 +00:00
Sehoon Shon 119dff3b73 perf(build): optimize build scripts for parallel execution and remove redundant checks (#24307) 2026-03-31 17:46:36 +00:00
cynthialong0-0 7c4b497a84 fix(core): fix race condition between browser agent and main closing process (#24340) 2026-03-31 17:43:37 +00:00
Emily Hedlund 65ee6171e7 fix(core): batch macOS seatbelt rules into a profile file to prevent ARG_MAX errors (#24255) 2026-03-31 17:35:13 +00:00
Yifan Ruan 9cb09ccf8e docs: Add 'plan' option to approval mode in CLI reference (#24134) 2026-03-31 17:34:59 +00:00
cynthialong0-0 a79f2f81ae Fix(browser): terminate immediately for "browser is already running" error (#24233)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2026-03-31 17:07:58 +00:00
ruomeng 140c2b9914 feat(cli): add UI to update extensions (#23682) 2026-03-31 17:05:08 +00:00
Gaurav 6805e818f7 fix(browser): terminate subagent immediately on domain restriction violations (#24313) 2026-03-31 16:51:27 +00:00
ruomeng 07e2053e12 feat(plan): promote planning feature to stable (#24282) 2026-03-31 16:10:13 +00:00
Sehoon Shon f9a93a1337 feat(cli): add auth info to footer (#24042) 2026-03-31 16:10:13 +00:00
cynthialong0-0 3982a252bb fix(browser): reset action counter for each agent session and let it ignore internal actions (#24228) 2026-03-31 15:23:19 +00:00
gemini-cli-robot e293424bb4 Changelog for v0.35.3 (#24083)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-31 06:35:30 +00:00
gemini-cli-robot 21ad42f677 Changelog for v0.36.0-preview.6 (#24082)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-31 06:35:26 +00:00
Sehoon Shon 561418c554 fix(core): enable mid-stream retries for all models and re-enable compression test (#24302) 2026-03-31 06:25:21 +00:00
Adib234 d0d3639e16 feat(plan): support Plan mode in untrusted folders (#17586) 2026-03-31 03:33:55 +00:00
Sehoon Shon 2f7f967189 test(integration): fix plan mode write denial test false positive (#24299) 2026-03-31 03:17:36 +00:00
Sandy Tao 46d6b119b6 feat(core): add project-level memory scope to save_memory tool (#24161) 2026-03-31 01:32:15 +00:00
Abhijit Balaji 80929c48c5 feat(core): enable topic update narration for legacy models (#24241)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-31 00:57:46 +00:00
Sehoon Shon 35efdfc409 chore(test-utils): switch integration tests to use PREVIEW_GEMINI_MODEL (#24276)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-03-31 00:31:04 +00:00
Gal Zahavi bea57a2f3d Add security settings for tool sandboxing (#23923) 2026-03-30 23:49:53 +00:00
Jarrod Whelan 1df5c98b33 feat(cli): implement compact tool output (#20974) 2026-03-30 23:43:29 +00:00
Sehoon Shon 3e95b8ec59 feat(cli): show Flash Lite Preview model regardless of user tier (#23904) 2026-03-30 23:30:33 +00:00
Abhi 5b5f87abc7 fix(core): ensure default agents provide tools and use model-specific schemas (#24268) 2026-03-30 23:10:57 +00:00
Christian Gunderman 991dca4c40 Default enable narration for the team. (#24224) 2026-03-30 22:30:55 +00:00
joshualitt dfba0e91e2 feat(core): Unified Context Management and Tool Distillation. (#24157) 2026-03-30 22:29:59 +00:00
Christian Gunderman 117a2d3844 fix(evals): add update_topic behavioral eval (#24223) 2026-03-30 22:02:53 +00:00
Tommaso Sciortino 4b20d93e1d fix broken tests (#24279) 2026-03-30 15:25:56 -07:00
Tommaso Sciortino 44cdb3e376 fix(cli): resolve missing F12 logs via global console store (#24235) 2026-03-30 13:15:10 -07:00
Alex Stephen 9cf410478c Text can be added after /plan command (#22833) 2026-03-30 14:31:20 +00:00
Spencer a255529c6b fix(a2a-server): prioritize ADC before evaluating headless constraints for auth initialization (#23614) 2026-03-30 12:26:15 +00:00
Abhi d9d2ce36f2 test(evals): add comprehensive subagent delegation evaluations (#24132) 2026-03-29 23:13:50 +00:00
Tommaso Sciortino da8c841ef4 fix: shellcheck warnings in scripts (#24035) 2026-03-29 02:47:05 +00:00
Christian Gunderman b7c86b5497 UX for topic narration tool (#24079) 2026-03-28 21:33:38 +00:00
Adam Weidman 3eebb75b7a feat(core): agnostic background task UI with CompletionBehavior (#22740)
Co-authored-by: mkorwel <matt.korwel@gmail.com>
2026-03-28 21:27:51 +00:00
Christian Gunderman 07ab16dbbe feat(cli): support 'tab to queue' for messages while generating (#24052) 2026-03-28 01:31:11 +00:00
Abhijit Balaji afc1d50c20 feat(core): implement tool-based topic grouping (Chapters) (#23150)
Co-authored-by: Christian Gunderman <gundermanc@google.com>
2026-03-28 01:28:25 +00:00
Gal Zahavi ae123c547c fix(sandbox): implement Windows Mandatory Integrity Control for GeminiSandbox (#24057) 2026-03-28 00:14:35 +00:00
Keith Guerin c2705e8332 fix(cli): resolve layout contention and flashing loop in StatusRow (#24065) 2026-03-28 00:06:07 +00:00
Sam Roberts 9574855435 Re-word intro to Gemini 3 page. (#24069) 2026-03-28 00:01:22 +00:00
krishdef7 bf6dae4690 fix(hooks): prevent SessionEnd from firing twice in non-interactive mode (#22139)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-03-27 23:39:48 +00:00
Ivan Porty b5529c2475 fix(core): resolve ACP Operation Aborted Errors in grep_search (#23821)
Co-authored-by: Sri Pasumarthi <sripas@google.com>
2026-03-27 23:12:34 +00:00
Tommaso Sciortino 9e74a7ec18 feat(core): implement windows sandbox expansion and denial detection (#24027) 2026-03-27 22:35:01 +00:00
Sandy Tao 4034c030e7 feat(context): add configurable memoryBoundaryMarkers setting (#24020) 2026-03-27 21:51:32 +00:00
Gal Zahavi 765fb67011 Enable network access in sandbox configuration (#24055) 2026-03-27 21:28:01 +00:00
Jacob Richman 97c99f263a Fix test flakes by globally mocking ink-spinner (#24044) 2026-03-27 21:19:46 +00:00
gemini-cli-robot f1a3c35dee Changelog for v0.36.0-preview.5 (#24046)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-27 21:19:26 +00:00
Jacob Richman ebe98fdee9 Debug command. (#23851)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-27 21:05:22 +00:00
Abhi ba71ffa736 fix(core): switch to subshells for shell tool wrapping to fix heredocs and edge cases (#24024) 2026-03-27 20:34:39 +00:00
joshualitt 320c8aba4c feat(core): Land AgentHistoryProvider. (#23978) 2026-03-27 19:22:35 +00:00
Sri Pasumarthi e7dccabf14 fix(acp): prevent crash on empty response in ACP mode (#23952) 2026-03-27 18:49:13 +00:00
Jacob Richman a84d4d876e Increase memory limited for eslint. (#24022) 2026-03-27 18:40:26 +00:00
Emily Hedlund 29031ea7cf refactor(core): improve ignore resolution and fix directory-matching bug (#23816) 2026-03-27 17:12:26 +00:00
Spencer f3977392e6 revert(core): support custom base URL via env vars (#23976) 2026-03-27 17:10:14 +00:00
Emily Hedlund 535667baf6 feat(core): add forbiddenPaths to GlobalSandboxOptions and refactor createSandboxManager (#23936) 2026-03-27 16:57:26 +00:00
Tommaso Sciortino 33cf2da1df disable extension-reload test (#24018) 2026-03-27 16:19:15 +00:00
Abhi 104587bae8 feat(core): subagent isolation and cleanup hardening (#23903) 2026-03-27 03:43:39 +00:00
Yuna Seol aca8e1af05 fix(core): explicitly set error names to avoid bundling renaming issues (#23913) 2026-03-27 03:40:49 +00:00
Sam Roberts 6f92642524 ACP integration documents (#22254)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: nmcnamara-eng <118702206+nmcnamara-eng@users.noreply.github.com>
2026-03-27 02:10:29 +00:00
gemini-cli-robot 8413dd62ef Changelog for v0.35.2 (#23960)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-27 02:10:03 +00:00
Sri Pasumarthi 750dec5d8d fix(acp): Update allow approval policy flow for ACP clients to fix config persistence and compatible with TUI (#23818) 2026-03-27 01:42:17 +00:00
gemini-cli-robot 335b36893b Changelog for v0.36.0-preview.4 (#23935)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-27 01:08:39 +00:00
Jenna Inouye 25a20f8e4e Docs: Update 'docs-writer' skill for relative links (#21463) 2026-03-27 00:32:20 +00:00
Jacob Richman b5ba88b001 dep(update) Update Ink version to 6.5.0 (#23843) 2026-03-26 23:49:51 +00:00
Tommaso Sciortino 8868b34c75 refactor(core): delegate sandbox denial parsing to SandboxManager (#23928) 2026-03-26 22:10:15 +00:00
Aditya Bijalwan 73dd7328df feat(core): implement persistent browser session management (#21306)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-03-26 21:33:37 +00:00
Spencer d25ce0e143 fix(core): remove shell outputChunks buffer caching to prevent memory bloat and sanitize prompt input (#23751) 2026-03-26 21:16:07 +00:00
David Pierce 30397816da feat(sandbox): implement secret visibility lockdown for env files (#23712)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-03-26 20:35:21 +00:00
Gen Zhang 84f1c19265 feat(cli): enable notifications cross-platform via terminal bell fallback (#21618)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2026-03-26 20:10:49 +00:00
Gal Zahavi d33170931c fix(core): allow disabling environment variable redaction (#23927) 2026-03-26 20:04:44 +00:00
Jenna Inouye 1d230dbfbf Docs: Update quotas and pricing (#23835) 2026-03-26 19:29:37 +00:00
Sehoon Shon c92ae8a359 feat(core): define TrajectoryProvider interface (#23050) 2026-03-26 19:24:06 +00:00
Keith Schaab bf03543bf6 fix(a2a-server): A2A server should execute ask policies in interactive mode (#23831) 2026-03-26 19:10:18 +00:00
matt korwel 1d2fbbf9c3 feat(gcp): add development worker infrastructure (#23814) 2026-03-26 19:01:37 +00:00
Adib234 9762bf2965 fix(plan): after exiting plan mode switches model to a flash model (#23885) 2026-03-26 18:45:03 +00:00
ruomeng c888da5f73 fix(core): replace hardcoded non-interactive ASK_USER denial with explicit policy rules (#23668) 2026-03-26 18:35:12 +00:00
Dev Randalpura aa4d9316a9 feat(core): new skill to look for duplicated code while reviewing PRs (#23704) 2026-03-26 18:32:30 +00:00
Aditya Bijalwan 5755ec2dcf fix(browser): keep input blocker active across navigations (#22562)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-03-26 16:54:49 +00:00
gemini-cli-robot a3c1c659fd Changelog for v0.35.1 (#23840)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-26 16:43:23 +00:00
Sehoon Shon 49534209f2 fix(cli): prioritize primary name matches in slash command search (#23850) 2026-03-26 12:18:57 +00:00
Chris Williams 9e7f52b8f5 Merge examples of use into quickstart documentation (#23319) 2026-03-26 02:57:23 +00:00
Gal Zahavi 30e0ab102a feat(sandbox): dynamic Linux sandbox expansion and worktree support (#23692)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-26 01:58:45 +00:00
Alisa 2e03e3aed5 feat(evals): add reliability harvester and 500/503 retry support (#23626) 2026-03-26 01:48:45 +00:00
gemini-cli-robot c1e4dbd157 Changelog for v0.35.0 (#23819)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
2026-03-26 01:33:27 +00:00
Yuna Seol ae3dbab38a fix(core): strip leading underscores from error types in telemetry (#23824)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-25 23:34:18 +00:00
Jacob Richman a86935b6de fix(cli): allow ask question dialog to take full window height (#23693) 2026-03-25 23:26:34 +00:00
Tommaso Sciortino b91758bf6b Don't try removing a tag from a non-existent release. (#23830) 2026-03-25 22:27:17 +00:00
Steven Robertson 20fd405f9c fix: Chat logs and errors handle tail tool calls correctly (#22460)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2026-03-25 22:17:30 +00:00
nirali 8595b07f6d fix(cli): show helpful guidance when no skills are available (#23785) 2026-03-25 22:06:44 +00:00
Alisa 7b710a2790 new linting check: github-actions-pinning (#23808) 2026-03-25 21:43:12 +00:00
gemini-cli-robot 124d5cfb9e Changelog for v0.36.0-preview.3 (#23827)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-25 21:32:39 +00:00
christine betts 3ada29fb51 feat(core,ui): Add experiment-gated support for gemini flash 3.1 lite (#23794) 2026-03-25 20:28:49 +00:00
gemini-cli-robot 012740b68f Changelog for v0.36.0-preview.0 (#23702)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-25 20:25:50 +00:00
Prasanna Pal fd0893c346 fix(ui): prevent escape key from cancelling requests in shell mode (#21245) 2026-03-25 20:25:13 +00:00
Tommaso Sciortino a6a3689298 don't silence errors from wombat (#23822) 2026-03-25 13:38:30 -07:00
Tommaso Sciortino 20aa695ac4 Revert "perf(cli): optimize --version startup time (#23671)" (#23812) 2026-03-25 19:59:23 +00:00
Jerop Kipruto 6d3437badb docs: clarify policy requirement for general.plan.directory in settings schema (#23784) 2026-03-25 19:37:48 +00:00
cynthialong0-0 86111c4d54 feat(browser): dynamically discover read-only tools (#23805) 2026-03-25 19:16:48 +00:00
Keith Guerin fe92a43e31 fix(ui): cleanup estimated string length hacks in composer (#23694) 2026-03-25 19:15:08 +00:00
Coco Sheng 830f7dec61 fix(cli): resolve TTY hang on headless environments by unconditionally resuming process.stdin before React Ink launch (#23673) 2026-03-25 18:18:43 +00:00
Adam Weidman 0bb6c25dc7 docs(core): document agent_card_json string literal options for remote agents (#23797) 2026-03-25 18:04:28 +00:00
Chris Williams f618da15d6 Add note about root privileges in sandbox docs (#23314) 2026-03-25 18:03:50 +00:00
Tommaso Sciortino 1b052df52f feat(core): implement Windows sandbox dynamic expansion Phase 1 and 2.1 (#23691) 2026-03-25 17:54:45 +00:00
Shaswat Raj f11bd3d079 fix(core): thread AbortSignal to chat compression requests (#20405) (#20778)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-03-25 16:57:59 +00:00
Sri Pasumarthi c06794b3c6 fix(acp): allow attachments by adding a permission prompt (#23680) 2026-03-25 16:52:21 +00:00
splint-disk-8i ec953426db docs: fix grammar in CONTRIBUTING and numbering in sandbox docs (#23448)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2026-03-25 09:49:58 -07:00
Adib234 028d0368d5 fix(policy): relax write_file argsPattern in plan mode to allow paths without session ID (#23695) 2026-03-25 16:06:45 +00:00
tony-shi 6deee11449 fix(browser): add proxy bypass constraint to domain restriction system prompt (#23229)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-03-25 15:59:21 +00:00
tony-shi bbf5c2fe95 fix(browser): detect embedded URLs in query params to prevent allowedDomains bypass (#23225)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-03-25 15:26:00 +00:00
Sheikh Limon e667739c04 docs(reference): split tools table into category sections (#21516) 2026-03-25 15:11:39 +00:00
Emily Hedlund 109a7dc531 test(core): install bubblewrap on Linux CI for sandbox integration tests (#23583) 2026-03-25 14:29:46 +00:00
cynthialong0-0 5e186bfb22 fix(cli): skip console log/info in headless mode (#22739) 2026-03-25 13:46:00 +00:00
Adam Weidman 0c919857fa feat(core): support inline agentCardJson for remote agents (#23743) 2026-03-25 04:03:51 +00:00
kevinjwang1 d78f54a08a Fix dynamic model routing for gemini 3.1 pro to customtools model (#23641)
Co-authored-by: Sehoon Shon <sshon@google.com>
2026-03-25 03:16:44 +00:00
Keith Guerin 46aa3fd193 fix(ui): prevent over-eager slash subcommand completion (#20136) 2026-03-25 03:11:09 +00:00
Tommaso Sciortino 73526416cf format recently added script (#23739) 2026-03-24 19:49:55 -07:00
Emily Hedlund 5b7f7b30a7 refactor(core): standardize OS-specific sandbox tests and extract linux helper methods (#23715) 2026-03-25 02:37:32 +00:00
Gal Zahavi a6c7affedb fix(core): conditionally expose additional_permissions in shell tool (#23729)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2026-03-25 01:46:15 +00:00
Emily Hedlund 578d656de9 feat(sandbox): implement forbiddenPaths for OS-specific sandbox managers (#23282)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-03-25 01:23:51 +00:00
matt korwel f74f2b0780 feat(skills): add ci skill for automated failure replication (#23720) 2026-03-24 17:43:04 -07:00
matt korwel 0552464eed fix(test): move flaky ctrl-c-exit test to non-blocking suite (#23732) 2026-03-25 00:22:23 +00:00
matt korwel bbdd8457df fix(cli): stabilize copy mode to prevent flickering and cursor resets (#22584)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-24 23:16:48 +00:00
Alisa 71a9131709 chore(tools): add toJSON to tools and invocations to reduce logging verbosity (#22899) 2026-03-24 23:08:29 +00:00
Yuna Seol 397ff84b0e Refine onboarding metrics to log the duration explicitly and use the tier name. (#23678) 2026-03-24 22:19:36 +00:00
Tommaso Sciortino 1f07efb5d8 fix(cli): only show updating spinner when auto-update is in progress (#23709) 2026-03-24 15:43:03 -07:00
Adam Weidman ee425aefa6 fix(core): improve agent loader error formatting for empty paths (#23690) 2026-03-24 22:04:28 +00:00
cynthialong0-0 466671eed4 feat(browser): add maxActionsPerTask for browser agent setting (#23216) 2026-03-24 21:40:48 +00:00
Jack Wotherspoon 11dc33eab7 fix(core): prevent premature MCP discovery completion (#23637) 2026-03-24 20:53:21 +00:00
Adib234 e591b51919 fix(plan): update telemetry attribute keys and add timestamp (#23685) 2026-03-24 20:49:50 +00:00
Abhi 055ff92276 revert: chore(config): disable agents by default (#23672) 2026-03-24 20:14:48 +00:00
Samee Zahid 84f40768a1 feat(evals): centralize test agents into test-utils for reuse (#23616)
Co-authored-by: Samee Zahid <sameez@google.com>
2026-03-24 19:50:48 +00:00
Adib234 bf80e27dbc test(evals): fix overlapping act() deadlock in app-test-helper (#23666) 2026-03-24 19:12:22 +00:00
Tommaso Sciortino 122b8d43ca chore(deps): fix npm audit vulnerabilities (#23679) 2026-03-24 18:53:03 +00:00
Adam Weidman 999ae7827d feat(core): change user-facing auth type from oauth2 to oauth (#23639)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-24 18:46:12 +00:00
Tommaso Sciortino 1c3d397782 use enableAutoUpdate in test rig (#23681) 2026-03-24 10:23:57 -07:00
Christian Gunderman 6b7dc4d822 refactor(core): stop gemini CLI from producing unsafe casts (#23611) 2026-03-24 16:19:59 +00:00
Sehoon Shon 139cc7b97c perf(cli): optimize --version startup time (#23671) 2026-03-24 15:58:41 +00:00
Adam Weidman 91d756f391 fix(core): improve remote agent streaming UI and UX (#23633) 2026-03-24 15:34:04 +00:00
Gal Zahavi fc18768155 refactor(sandbox): reorganize Windows sandbox files (#23645) 2026-03-24 14:32:20 +00:00
Sehoon Shon 893c7d3880 feat(ui): allow immediate user input during startup (#23661) 2026-03-24 13:33:17 +00:00
Adib234 dcedc42979 fix(plan): sandbox path resolution in Plan Mode to prevent hallucinations (#22737)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-24 13:19:29 +00:00
Sri Pasumarthi 46fd7b4864 fix(acp): Pass the cwd to AcpFileSystemService to avoid looping failures in asking for perms to write plan md file (#23612) 2026-03-24 05:34:08 +00:00
Gal Zahavi 36e6445dba feat(sandbox): dynamic macOS sandbox expansion and worktree support (#23301) 2026-03-24 04:48:13 +00:00
David Pierce 37c8de3c06 Implementation of sandbox "Write-Protected" Governance Files (#23139)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2026-03-24 04:04:17 +00:00
Adam Weidman a833d350a4 docs: update /mcp refresh to /mcp reload (#23631) 2026-03-24 03:41:24 +00:00
kartik 1c1416678d fix: API key input dialog user interaction when selected Gemini API Key (#21057)
Signed-off-by: Kartik Angiras <angiraskartik@gmail.com>
2026-03-24 03:00:50 +00:00
Jarrod Whelan 271908dc94 feat(ui): implement refreshed UX for Composer layout (#21212)
Co-authored-by: Keith Guerin <keithguerin@gmail.com>
2026-03-24 02:30:48 +00:00
gemini-cli-robot 1560131f94 Changelog for v0.35.0-preview.5 (#23606)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-24 02:06:27 +00:00
Abhi a1f9af3fa7 fix(core): accurately reflect subagent tool failure in UI (#23187) 2026-03-24 01:56:00 +00:00
Jarrod Whelan 89ca78837e refactor(cli,core): foundational layout, identity management, and type safety (#23286) 2026-03-24 01:49:51 +00:00
Samee Zahid 57a66f5f0d feat(evals): add behavioral evaluations for subagent routing (#23272)
Co-authored-by: Samee Zahid <sameez@google.com>
2026-03-24 01:19:21 +00:00
Sri Pasumarthi 84caf00cd4 fix: ACP: separate conversational text from execute tool command title (#23179) 2026-03-24 00:39:15 +00:00
Wesley Tanaka a7bed2cc4c fix(cli): prevent Ctrl+D exit when input buffer is not empty (#23306)
Co-authored-by: wtanaka.com <wtanaka@users.noreply.github.com>
2026-03-24 00:13:13 +00:00
Sehoon Shon a7aa6bd6cf perf(cli): background IDE client to speed up initialization (#23603) 2026-03-24 00:06:53 +00:00
Spencer fcd190b8b1 fix(telemetry): patch memory leak and enforce logPrompts privacy (#23281) 2026-03-23 23:58:06 +00:00
Sandy Tao f784e192fa eval(save_memory): add multi-turn interactive evals for memoryManager (#23572) 2026-03-23 22:58:55 +00:00
Keith Schaab b35c12d8d0 fix(core)!: Force policy config to specify toolName (#23330) 2026-03-23 22:35:08 +00:00
Abhi 2a18e78611 feat(test-utils): add TestMcpServerBuilder and support in TestRig (#23491) 2026-03-23 22:15:46 +00:00
Adam Weidman 4728028512 feat(core): add LegacyAgentSession (#22986) 2026-03-23 21:50:23 +00:00
gemini-cli-robot 00bda50d0b Changelog for v0.35.0-preview.4 (#23581)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-23 21:38:54 +00:00
Abhi 919e5da581 refactor(core): delete obsolete coreToolScheduler (#23502) 2026-03-23 21:21:14 +00:00
Abhi db14cdf92b feat(skills): add behavioral-evals skill with fixing and promoting guides (#23349) 2026-03-23 21:06:43 +00:00
gemini-cli-robot fbf38361ad Changelog for v0.35.0-preview.3 (#23574)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-23 21:01:43 +00:00
matt korwel b10bcf49b9 fix(test): move flaky tests to non-blocking suite (#23259) 2026-03-23 20:54:47 +00:00
matt korwel 15f8026983 fix(cli): prevent subcommand shadowing and skip auth for commands (#23177) 2026-03-23 20:34:09 +00:00
Tommaso Sciortino 37857ab956 fix(core): properly support allowRedirect in policy engine (#23579) 2026-03-23 20:32:50 +00:00
N. Taylor Mullen 42a673a52c feat(cli): always prefix extension skills with colon separator (#23566) 2026-03-23 20:02:40 +00:00
Abhi 153f2630b9 refactor(core): update production type imports from coreToolScheduler (#23498) 2026-03-23 19:48:38 +00:00
Adam Weidman d5b78dbeea fix(core): prevent redundant remote agent loading on model switch (#23576) 2026-03-23 19:45:59 +00:00
Dev Randalpura 139ef0d5bd fix(ui): make tool confirmations take up entire terminal height (#22366)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-23 19:42:30 +00:00
Abhi b2d6dc4e32 chore(config): disable agents by default (#23546) 2026-03-23 19:24:16 +00:00
Abhi ac95282758 test(core): migrate hook tests to scheduler (#23496) 2026-03-23 19:21:49 +00:00
Adam Weidman efeb9f7e7b fix(core): harden AgentSession replay semantics (#23548) 2026-03-23 18:43:38 +00:00
ruomeng 5a65610fa6 fix(plan): reserve minimum height for selection list in AskUserDialog (#23280) 2026-03-23 18:27:08 +00:00
Keith Guerin 447a854ad9 feat(cli): implement full "GEMINI CLI" logo for logged-out state (#22412) 2026-03-23 18:05:00 +00:00
matt korwel b58d79c517 fix(cli): prevent terminal escape sequences from leaking on exit (#22682)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-23 18:01:12 +00:00
Tommaso Sciortino daf3691841 fix: "allow always" for commands with paths (#23558) 2026-03-23 17:25:31 +00:00
Sehoon Shon 517961b2eb perf(cli): parallelize and background startup cleanup tasks (#23545) 2026-03-23 16:26:56 +00:00
Adam Weidman ec0161ad37 feat(core): add event-translator and update agent types (#22985) 2026-03-23 16:08:09 +00:00
Emily Hedlund cdf077da56 feat(core): refactor SandboxManager to a stateless architecture and introduce explicit Deny interface (#23141) 2026-03-23 15:43:58 +00:00
Alisa 99e5164c82 Evals: PR Guidance adding workflow (#23164) 2026-03-23 15:07:40 +00:00
Abhi d0ebc81c28 test(cli): force generic terminal in tests to fix snapshot failures (#23499) 2026-03-23 14:50:25 +00:00
Jack Wotherspoon c67817f1a9 fix(cli): resolve flicker at boundaries of list in BaseSelectionList (#23298) 2026-03-23 03:10:47 +00:00
Abhi c7d44e339b fix(core): ensure subagent tool updates apply configuration overrides immediately (#23161) 2026-03-23 00:24:24 +00:00
N. Taylor Mullen 6055c47079 fix(cli): record skill activation tool calls in chat history (#23203) 2026-03-22 20:36:18 +00:00
Adib234 4c533b1249 fix(plan): add state transition override to prevent plan mode freeze (#23020)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-21 22:56:31 +00:00
N. Taylor Mullen 4a3d9414ef fix(core): enable global session and persistent approval for web_fetch (#23295)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-21 10:32:07 -07:00
Abhi 0df9498674 fix(core): refine CliHelpAgent description for better delegation (#23310) 2026-03-21 06:24:37 +00:00
Christian Gunderman 8f391585ab Disallow and suppress misused spread operator. (#23294) 2026-03-21 05:21:53 +00:00
Abhi e7b6326cfa fix(cli): add Esc instruction to HooksDialog footer (#23258) 2026-03-21 04:29:09 +00:00
Alisa 1a70fdd364 chore(lint): enforce zero warnings and cleanup syntax restrictions (#22902) 2026-03-21 04:01:48 +00:00
cynthialong0-0 b316fcc44d feat(browser): add warning message for session mode 'existing' (#23288) 2026-03-21 03:59:16 +00:00
Christian Gunderman d1dc4902fd fix(hooks): support 'ask' decision for BeforeTool hooks (#21146) 2026-03-21 03:52:39 +00:00
Sandy Tao d3766875f8 fix(evals): remove tool restrictions and add compile-time guards (#23312) 2026-03-21 03:45:33 +00:00
Christian Gunderman 28935d1e6b Retry evals on API error. (#23322) 2026-03-21 02:52:19 +00:00
Yuna Seol 244a608186 feat(core): set up onboarding telemetry (#23118)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-03-21 01:15:47 +00:00
Emily Hedlund fc03891a11 fix(extensions): revert broken extension removal behavior (#23317) 2026-03-20 23:36:52 +00:00
CogitationOps 974d29128f Wrap the text under TOML rule for easier readability in policy-engine.md… (#23076)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-20 23:30:09 +00:00
Abhi 3382e0413e fix(core): fix agent description indentation (#23315) 2026-03-20 23:24:57 +00:00
Indrapal Singh 992c04e768 fix broken extension link in hooks guide (#21728)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-20 23:17:32 +00:00
Alisa fbb17ebf58 Disabling failing test while investigating (#23311) 2026-03-20 22:52:35 +00:00
cynthialong0-0 e8fe43bd69 feat(browser): add sensitive action controls and read-only noise reduction (#22867) 2026-03-20 22:34:04 +00:00
Tommaso Sciortino 11ec4ac2f8 test(cli): address unresolved feedback from PR #23252 (#23303) 2026-03-20 21:42:01 +00:00
Coco Sheng 8eb419a47a refactor(ide): replace dynamic undici import with static fetch import (#23268) 2026-03-20 21:14:25 +00:00
cynthialong0-0 4e80f01fda feat(core): add security prompt for browser agent (#23241) 2026-03-20 20:12:24 +00:00
Tommaso Sciortino 6c78eb7a39 test(cli): refactor tests for async render utilities (#23252) 2026-03-20 20:08:29 +00:00
kevinjwang1 86a3a913b5 Fix schema for ModelChains (#23284) 2026-03-20 19:50:15 +00:00
Sehoon Shon 05e4ea80ee feat(core): refine User-Agent for VS Code traffic (unified format) (#23256) 2026-03-20 19:31:01 +00:00
Dev Randalpura cca595971d fix(core): add sanitization to sub agent thoughts and centralize utilities (#22828) 2026-03-20 19:19:18 +00:00
Sandy Tao 26b9af1cdc refactor(core): use absolute paths in GEMINI.md context markers (#23135) 2026-03-20 19:10:01 +00:00
Jerop Kipruto b459e1a108 feat(telemetry): track if session is running in a Git worktree (#23265) 2026-03-20 19:01:12 +00:00
Ratish P 62cb14fa52 feat(extensions): add --skip-settings flag to install command (#17212) 2026-03-20 16:10:59 +00:00
kevinjwang1 7a65c1e91d Add support for linking in the extension registry (#23153) 2026-03-20 15:08:34 +00:00
Jerop Kipruto 5a3c7154df feat(worktree): add Git worktree support for isolated parallel sessions (#22973) 2026-03-20 14:10:51 +00:00
Michael Bleigh b9c87c14a2 feat(core): introduce AgentSession and rename stream events to agent events (#23159) 2026-03-20 13:40:10 +00:00
nmcnamara-eng 52250c162d feat(cli): conditionally exclude ask_user tool in ACP mode (#23045)
Co-authored-by: Sri Pasumarthi <sripas@google.com>
Co-authored-by: Sri Pasumarthi <111310667+sripasg@users.noreply.github.com>
2026-03-20 06:18:55 +00:00
matt korwel b52641de0d chore(lint): ignore .gemini directory and recursive node_modules (#23211) 2026-03-20 05:57:59 +00:00
Gaurav 8615315711 feat(core): add support for admin-forced MCP server installations (#23163) 2026-03-19 22:32:43 +00:00
matt korwel c9a336976b feat(core): implement native Windows sandboxing (#21807) 2026-03-19 22:25:22 +00:00
kevinjwang1 06a7873c51 Add ModelChain support to ModelConfigService and make ModelDialog dynamic (#22914) 2026-03-19 22:22:26 +00:00
kevinjwang1 0e66f545ca Ensure that copied extensions are writable in the user's local directory (#23016) 2026-03-19 22:22:08 +00:00
ruomeng 98d1bec99f fix(plan): clarify that plan mode policies are combined with normal mode (#23158) 2026-03-19 21:51:10 +00:00
Sri Pasumarthi 08063d7b0a feat: ACP: Add token usage metadata to the send method's return value (#23148) 2026-03-19 21:49:50 +00:00
Sam Roberts 2ebcd48a4e Update callouts to work on github. (#22245) 2026-03-19 21:11:14 +00:00
Sri Pasumarthi 36dbaa8462 fix: upgrade ACP SDK from 0.12 to 0.16.1 (#23132) 2026-03-19 21:02:33 +00:00
Sam Roberts 4fc059beb5 Update website issue template for label and title (#23036) 2026-03-19 20:51:16 +00:00
gemini-cli-robot 46ec71bf0e Changelog for v0.35.0-preview.2 (#23142)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-19 19:43:48 +00:00
Sandy Tao 33f630111f feat(core): add experimental memory manager agent to replace save_memory tool (#22726)
Co-authored-by: Christian Gunderman <gundermanc@gmail.com>
2026-03-19 12:57:52 -07:00
Sam Roberts b3ebab308e Docs: Minor style updates from initial docs audit. (#22872)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jenna Inouye <jinouye@google.com>
2026-03-19 19:33:58 +00:00
Sandy Tao 4e5dfd0cb7 feat(core): cap JIT context upward traversal at git root (#23074) 2026-03-19 17:50:58 +00:00
Jacob Richman 524b1e39a5 Fix logging and virtual list. (#23080) 2026-03-19 17:50:49 +00:00
Abhi 32a123fc54 feat(core): inject memory and JIT context into subagents (#23032) 2026-03-19 17:16:09 +00:00
Tommaso Sciortino 23264ced9a refactor(cli): integrate real config loading into async test utils (#23040) 2026-03-19 17:05:33 +00:00
cynthialong0-0 7de0616229 fix(browser-agent): enable "Allow all server tools" session policy (#22343) 2026-03-19 16:32:35 +00:00
joshualitt 39d3b0e28c feat(cli): Partial threading of AgentLoopContext. (#22978) 2026-03-19 16:02:13 +00:00
Gaurav 5acaacad96 fix(core): narrow browser agent description to prevent stealing URL tasks from web_fetch (#23086) 2026-03-19 10:45:59 +00:00
Jason Matthew Suhari a921bcd9ef fix(core): don't persist browser consent sentinel in non-interactive mode (#23073) 2026-03-19 06:47:13 +00:00
Sri Pasumarthi e9171fd792 fix: circumvent genai sdk requirement for api key when using gateway auth via ACP (#23042) 2026-03-19 04:31:02 +00:00
Adam Weidman 2009fbbd92 feat(core): add content-utils (#22984) 2026-03-19 02:30:48 +00:00
Bryan Morgan 8db2948361 fix(cli): correctly handle auto-update for standalone binaries (#23038) 2026-03-19 01:52:23 +00:00
Abhi 5fa14dbe42 feat(core): resilient subagent tool rejection with contextual feedback (#22951) 2026-03-19 01:09:37 +00:00
Suraj Sahani e6cd5d208c docs: add FAQ entry for checking Gemini CLI version (#21271) 2026-03-19 00:25:33 +00:00
Valery Teplyakov c9d48026c4 fix(acp): provide more meta in tool_call_update (#22663)
Co-authored-by: Mervap <megavaprold@gmail.com>
Co-authored-by: Sri Pasumarthi <sripas@google.com>
2026-03-19 00:02:07 +00:00
Dev Randalpura 34f271504a fix(ui): fix flickering on small terminal heights (#21416)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-18 21:28:21 +00:00
gemini-cli-robot d68100e6bc Changelog for v0.35.0-preview.1 (#23012)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-18 20:55:55 +00:00
ruomeng 94e6bf8591 fix(cli): resolve duplicate footer on tool cancel via ESC (#21743) (#21781) 2026-03-18 20:27:38 +00:00
Abhi fd44718bfe docs: add additional notes (#23008) 2026-03-18 20:24:51 +00:00
Emily Hedlund f6e21f50fd feat(core): implement strict macOS sandboxing using Seatbelt allowlist (#22832) 2026-03-18 20:07:54 +00:00
ruomeng 1725ec346b feat(plan): support plan mode in non-interactive mode (#22670) 2026-03-18 20:00:26 +00:00
AK c12fc340c1 fix(core): explicitly map execution context in LocalAgentExecutor (#22949)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-03-18 19:54:48 +00:00
Aditya Bijalwan b6d5374fb7 Feat/browser privacy consent (#21119) 2026-03-18 19:33:24 +00:00
Christian Gunderman 0082e1ec97 Fix issue where subagent thoughts are appended. (#22975) 2026-03-18 19:20:31 +00:00
ANIRUDDHA ADAK 0ed9f1e7f5 feat(ui): remove write todo list tool from UI tips (#22281)
Co-authored-by: Aniruddha Adak <aniruddhaadak80@users.noreply.github.com>
Co-authored-by: anj-s <32556631+anj-s@users.noreply.github.com>
2026-03-18 19:06:42 +00:00
Sam Roberts adf21df71e Docs: Remove references to stale Gemini CLI file structure info (#22976) 2026-03-18 18:43:56 +00:00
Keith Guerin 4dcca1ca10 feat(ui): format multi-line banner warnings with a bold title (#22955)
Co-authored-by: Sehoon Shon <sshon@google.com>
2026-03-18 18:39:12 +00:00
Tommaso Sciortino a5a461c234 test(cli): simplify createMockSettings calls (#22952) 2026-03-18 18:12:44 +00:00
gemini-cli-robot fac3661980 Changelog for v0.34.0 (#22860)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-18 17:23:05 +00:00
Tommaso Sciortino d7dfcf7f99 refactor(cli): simplify keypress and mouse providers and update tests (#22853) 2026-03-18 16:38:56 +00:00
Abhi 81a97e78f1 refactor(cli): group subagent trajectory deletion and use native filesystem testing (#22890) 2026-03-18 14:42:15 +00:00
jhhornn 1311e8c480 fix: updates Docker image reference for GitHub MCP server (#22938) 2026-03-18 14:32:57 +00:00
Abhi 4ecb4bb24b refactor(ui): extract SessionBrowser search and navigation components (#22377) 2026-03-18 04:44:01 +00:00
Abhi be7c7bb83d fix(cli): resolve subagent grouping and UI state persistence (#22252) 2026-03-18 03:11:20 +00:00
AK 7bfe6ac418 feat(core): subagent local execution and tool isolation (#22718) 2026-03-18 02:34:44 +00:00
adithya32 bd34a42ec3 fix(cli): lazily load settings in onModelChange to prevent stale closure data loss (#20403)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-18 00:40:38 +00:00
N. Taylor Mullen e2658ccda8 refactor(cli): remove extra newlines in ShellToolMessage.tsx (#22868)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-17 23:48:16 +00:00
anj-s b8719bcd47 feat: add 'blocked' status to tasks and todos (#22735) 2026-03-17 23:24:26 +00:00
Sakshi semalti e1eefffcf1 fix(cli): automatically add all VSCode workspace folders to Gemini context (#21380)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-17 23:05:49 +00:00
Alisa 7ae39fd622 feat(a2a): add agent acknowledgment command and enhance registry discovery (#22389) 2026-03-17 22:47:05 +00:00
N. Taylor Mullen fb9264bf80 chore: add posttest build hooks and fix missing dependencies (#22865) 2026-03-17 22:23:00 +00:00
anj-s d4397dbfc5 feat(tracker): integrate task tracker protocol into core system prompt (#22442) 2026-03-17 22:19:36 +00:00
Spencer 5fb0d1f01d fix(core): add actionable warnings for terminal fallbacks (#14426) (#22211) 2026-03-17 21:57:37 +00:00
Abhi 95bca2c3b3 fix(cli): expand tilde in policy paths from settings.json (#22772) 2026-03-17 21:48:24 +00:00
matt korwel e0be1b2afd fix(cli): use active sessionId in useLogger and improve resume robustness (#22606) 2026-03-17 21:42:40 +00:00
gemini-cli-robot 5d4e4c2814 chore(release): bump version to 0.36.0-nightly.20260317.2f90b4653 (#22858) 2026-03-17 21:18:21 +00:00
kevinjwang1 27a50191e3 Add support for dynamic model Resolution to ModelConfigService (#22578) 2026-03-17 21:15:50 +00:00
Sandy Tao 77ca3c0e13 fix(devtools): use theme-aware text colors for console warnings and errors (#22181) 2026-03-17 21:00:40 +00:00
AK 2504105a1c feat(core): multi-registry architecture and tool filtering for subagents (#22712) 2026-03-17 20:54:07 +00:00
gemini-cli-robot a361a84708 Changelog for v0.34.0-preview.4 (#22752)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-17 20:46:38 +00:00
gemini-cli-robot ff196fbe6f Changelog for v0.33.2 (#22730)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-17 20:33:30 +00:00
David Pierce 2f90b46537 Linux sandbox seccomp (#22815)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-03-17 20:29:13 +00:00
Sandy Tao 82d8680dcc refactor(core): align JIT memory placement with tiered context model (#22766) 2026-03-17 20:20:32 +00:00
Jomak-x 1f3f7247b1 fix(cli): clean up stale pasted placeholder metadata after word/line deletions (#20375)
Co-authored-by: ruomeng <ruomeng@google.com>
2026-03-17 20:16:26 +00:00
Sandy Tao 69e2d8c7ae docs: distribute package-specific GEMINI.md context to each package (#22734) 2026-03-17 19:51:23 +00:00
Adib234 77a874cf65 feat(plan): add 'All the above' option to multi-select AskUser questions (#22365)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-03-17 19:17:34 +00:00
Sehoon Shon b211f30d95 fix(cli): override j/k navigation in settings dialog to fix search input conflict (#22800) 2026-03-17 19:08:45 +00:00
Sehoon Shon fc51e50bc6 fix(core): handle surrogate pairs in truncateString (#22754) 2026-03-17 05:41:19 +00:00
AK 695bcaea0d feat(core): add foundation for subagent tool isolation (#22708) 2026-03-17 03:54:33 +00:00
gemini-cli-robot abe83fce0b Changelog for v0.34.0-preview.3 (#22393)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-17 00:52:17 +00:00
Adib234 61fd71dc29 fix(plan): allowlist get_internal_docs in Plan Mode (#22668) 2026-03-17 00:34:30 +00:00
Kevin Ramdass cddd9e7148 fix(config): ensure discoveryMaxDirs is passed to global config during initialization (#22744)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-16 23:38:56 +00:00
Sandy Tao 30271d64eb feat(config): enable JIT context loading by default (#22736) 2026-03-16 22:12:28 +00:00
Adam Weidman 605432ea70 refactor(core): replace positional execute params with ExecuteOptions bag (#22674) 2026-03-16 21:50:24 +00:00
Aishanee Shah 990d010ecf feat(core): implement Stage 2 security and consistency improvements for web_fetch (#22217) 2026-03-16 21:38:53 +00:00
Bryan Morgan b6c6da3618 feat(core): increase thought signature retry resilience (#22202)
Co-authored-by: Aishanee Shah <aishaneeshah@google.com>
2026-03-16 21:35:33 +00:00
David Pierce 8f22ffd2b1 Linux sandbox bubblewrap (#22680) 2026-03-16 21:34:48 +00:00
Adam Weidman 44ce90d76c refactor(core): introduce InjectionService with source-aware injection and backend-native background completions (#22544) 2026-03-16 21:06:29 +00:00
Sandy Tao b91f75cd6d fix(core): fix three JIT context bugs in read_file, read_many_files, and memoryDiscovery (#22679) 2026-03-16 20:10:50 +00:00
gemini-cli-robot dfe22aae21 Changelog for v0.34.0-preview.2 (#22220)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-16 19:22:01 +00:00
anj-s bba9c07541 feat(tracker): polish UI sorting and formatting (#22437) 2026-03-16 19:18:01 +00:00
Emily Hedlund 05fda0cf01 feat(extensions): implement cryptographic integrity verification for extension updates (#21772) 2026-03-16 19:01:52 +00:00
Abhi d43ec6c8f3 feat: enable subagents (#22386) 2026-03-16 18:40:12 +00:00
Jack Wotherspoon 56e0865a7b docs(changelog): remove internal commands from release notes (#22529) 2026-03-16 18:39:00 +00:00
Michael Bleigh cd2096ca80 refactor(core): Creates AgentSession abstraction for consolidated agent interface. (#22270) 2026-03-16 17:59:02 +00:00
Sehoon Shon 48130ebd25 Guard pro model usage (#22665) 2026-03-16 17:44:25 +00:00
Christian Gunderman ef5627eece Disallow Object.create() and reflect. (#22408) 2026-03-16 16:24:27 +00:00
Sri Pasumarthi e3df87cf1a fix: Adjust ToolGroupMessage filtering to hide Confirming and show Canceled tool calls. (#22230) 2026-03-16 15:50:11 +00:00
Emily Hedlund 8bad5823a9 fix(a2a-server): resolve unsafe assignment lint errors (#22661) 2026-03-16 15:28:35 +00:00
kawasin73 fd62938945 docs(policy): remove trailing space from commandPrefix examples (#22264)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-03-16 14:45:30 +00:00
anj-s fad032d466 perf: optimize TrackerService dependency checks (#22384) 2026-03-16 13:40:58 +00:00
cynthialong0-0 366aa84395 feat(agent): replace the runtime npx for browser agent chrome devtool mcp with pre-built bundle (#22213)
Co-authored-by: Gaurav Ghosh <gaghosh@google.com>
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2026-03-16 08:05:38 +00:00
Bryan Morgan 17b37144a9 fix(automation): evaluate staleness before checking protected labels (#22561) 2026-03-15 15:50:19 -04:00
Bryan Morgan 5ddb517593 fix(automation): harden stale PR closer permissions and maintainer detection (#22558) 2026-03-15 14:58:56 -04:00
Abhi abd9e23337 fix(core): skip discovery for incomplete MCP configs and resolve merge race condition (#22494) 2026-03-15 18:28:26 +00:00
Abhi 6061d8cac7 fix(core): merge user settings with extension-provided MCP servers (#22484) 2026-03-15 02:46:06 +00:00
N. Taylor Mullen bd590bbde6 fix(cli): improve command conflict handling for skills (#21942) 2026-03-14 23:33:14 +00:00
kevinjwang1 0bf7ea60c5 Add ModelDefinitions to ModelConfigService (#22302) 2026-03-14 21:45:21 +00:00
kevinjwang1 8f2697c2e5 Add registry var (#22224) 2026-03-14 20:14:51 +00:00
Abhi c5502b2dc5 fix(core): fix manual deletion of subagent histories (#22407) 2026-03-14 20:09:43 +00:00
Abhijit Balaji 9f7691fd88 feat(prompts): implement Topic-Action-Summary model for verbosity reduction (#21503) 2026-03-14 05:10:30 +00:00
Sandy Tao 3682842a5d fix(core): deduplicate project memory when JIT context is enabled (#22234) 2026-03-14 04:34:53 +00:00
Christian Gunderman 64c50d32ac Fix issue where config was undefined. (#22397) 2026-03-14 01:36:25 +00:00
anj-s 604d4ded8d fix(core): use session-specific temp directory for task tracker (#22382) 2026-03-13 23:35:26 +00:00
Gal Zahavi f75bdba568 fix(mcp): handle equivalent root resource URLs in OAuth validation (#20231) 2026-03-13 23:32:40 +00:00
Sehoon Shon 8d68ece8d6 Revert "fix(cli): validate --model argument at startup" (#22378) 2026-03-13 23:17:29 +00:00
Gal Zahavi b49fc8122d feat(security): add disableAlwaysAllow setting to disable auto-approvals (#21941) 2026-03-13 23:02:09 +00:00
anj-s b0d151bd65 feat(tracker): add tracker policy (#22379) 2026-03-13 22:19:04 +00:00
Christian Gunderman fe8d93c75a Promote stable tests. (#22253) 2026-03-13 21:32:00 +00:00
Tommaso Sciortino 24933a90d0 fix(cli): support CJK input and full Unicode scalar values in terminal protocols (#22353) 2026-03-13 21:24:26 +00:00
Gal Zahavi fa024133e6 feat(core): integrate SandboxManager to sandbox all process-spawning tools (#22231) 2026-03-13 21:11:51 +00:00
christine betts 24adacdbc2 Move keychain fallback to keychain service (#22332) 2026-03-13 20:57:08 +00:00
gemini-cli-robot aa23da67af chore/release: bump version to 0.35.0-nightly.20260313.bb060d7a9 (#22251) 2026-03-13 20:33:16 +00:00
cynthialong0-0 bfbd3c40a7 feat(agent): add allowed domain restrictions for browser agent (#21775) 2026-03-13 19:41:40 +00:00
anj-s dd8d4c98b3 feat(tracker): return TodoList display for tracker tools (#22060) 2026-03-13 18:18:33 +00:00
Gaurav d368997ca3 test: add Object.create context regression test and tool confirmation integration test (#22356) 2026-03-13 17:49:33 +00:00
Abhi bbd80c9393 docs: overhaul subagents documentation and add /agents command (#22345) 2026-03-13 17:26:13 +00:00
Abhi 3b601b3d90 refactor(ui): extract SessionBrowser static ui components (#22348) 2026-03-13 17:25:13 +00:00
Adam Weidman b4bcd1a015 docs(core): add authentication guide for remote subagents (#22178) 2026-03-13 16:48:21 +00:00
Alexander Farber aa000d7d30 fix(core): show descriptive error messages when saving settings fails (#18095)
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
2026-03-13 16:19:56 +00:00
Tommaso Sciortino 2a7e602356 refactor(cli): consolidate getErrorMessage utility to core (#22190) 2026-03-13 15:40:29 +00:00
matt korwel 8d0b2d7f1b feat(skills): improve async-pr-review workflow and logging (#21790) 2026-03-13 15:18:07 +00:00
Ankit c156bac5f7 fix(settings): prevent j/k navigation keys from intercepting edit buffer input (#21865) 2026-03-13 14:55:36 +00:00
Adib234 263b8cd3b3 fix(plan): Fix AskUser evals (#22074) 2026-03-13 13:30:19 +00:00
Abhi 2d05396dd2 refactor(ui): extract pure session browser utilities (#22256) 2026-03-13 06:22:52 +00:00
Sandy Tao 7b4a822b0e feat(core): instrument file system tools for JIT context discovery (#22082) 2026-03-13 03:44:42 +00:00
Bryan Morgan d44615ac2f feat(core): increase sub-agent turn and time limits (#22196) 2026-03-13 02:39:49 +00:00
joshualitt de656f01d7 feat(core): Fully migrate packages/core to AgentLoopContext. (#22115) 2026-03-13 01:56:31 +00:00
Abhi 1d2585dba6 fix(core): explicitly pass messageBus to policy engine for MCP tool saves (#22255) 2026-03-13 01:31:13 +00:00
Christian Gunderman 97bc3f28c5 build(ci): fix false positive evals trigger on merge commits (#22237) 2026-03-13 00:38:54 +00:00
gemini-cli-robot 3038fdce2e Changelog for v0.33.1 (#22235)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-13 00:12:06 +00:00
ruomeng bb060d7a98 docs(plan): document hooks with plan mode (#22197) 2026-03-12 23:35:56 +00:00
Qiaochu Hu 9a73aa4072 docs: clarify that tools.core is an allowlist for ALL built-in tools (#18813)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: hobostay <hobostay@users.noreply.github.com>
2026-03-12 22:40:05 +00:00
Yuna Seol d7d53981f3 feat(core): add trajectoryId to ConversationOffered telemetry (#22214)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-03-12 22:12:08 +00:00
krishdef7 19e0b1ff7d fix(cli): escape @ symbols on paste to prevent unintended file expansion (#21239) 2026-03-12 22:05:12 +00:00
Alisa 4d393f9dca feat(a2a): enable native gRPC support and protocol routing (#21403)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-03-12 21:36:50 +00:00
Douglas Reid 5abc170b08 docs(local model routing): add docs on how to use Gemma for local model routing (#21365)
Co-authored-by: Douglas Reid <21148125+douglas-reid@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2026-03-12 21:36:32 +00:00
Sandy Tao ceb4c5f6a7 fix: remove unused img.png from project root (#22222) 2026-03-12 21:28:57 +00:00
Sehoon Shon b6beab9480 perf(cli): enable code splitting and deferred UI loading (#22117) 2026-03-12 20:37:03 +00:00
gemini-cli-robot c2691f44b6 Changelog for v0.34.0-preview.1 (#22194)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-12 20:30:45 +00:00
Aishanee Shah 663d9c0537 feat(core): implement Stage 1 improvements for webfetch tool (#21313) 2026-03-12 20:13:00 +00:00
Gaurav 4863816b81 fix(browser): fix duplicate function declaration error in browser agent (#22207) 2026-03-12 19:58:09 +00:00
Adarsh Pandey 829c532703 fix(core/ide): add Antigravity CLI fallbacks (#22030) 2026-03-12 19:28:36 +00:00
Adam Weidman c68303c553 fix(core): add proxy routing support for remote A2A subagents (#22199) 2026-03-12 19:25:51 +00:00
Abhi 7242d71c01 fix(core): prevent duplicate tool schemas for instantiated tools (#22204) 2026-03-12 19:09:23 +00:00
Yuna Seol 391715c33c fix(core): fix startup stats to use int values for timestamps and durations (#22201)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-03-12 19:06:12 +00:00
Tommaso Sciortino 8a537d85e9 update vulnerable deps (#22180) 2026-03-12 17:14:43 +00:00
Abhi cd7dced951 feat(core): implement model-driven parallel tool scheduler (#21933) 2026-03-12 17:03:44 +00:00
Spencer 73c589f9e3 feat(cli): allow safe tools to execute concurrently while agent is busy (#21988) 2026-03-12 16:03:53 +00:00
nityam e700a9220b test(cli): add integration test for node deprecation warnings (#20215)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-03-12 15:47:21 +00:00
Adam Weidman 4b76fe0061 feat(core): add google credentials provider for remote agents (#21024) 2026-03-12 15:39:59 +00:00
Gaurav 867dc0fdda feat(telemetry): add Clearcut instrumentation for AI credits billing events (#22153) 2026-03-12 15:16:27 +00:00
Michael Ramos 7506b00488 fix(core): handle policy ALLOW for exit_plan_mode (#21802) 2026-03-12 14:43:40 +00:00
Jaisal K Jain 34709dc62d fix(cli): validate --model argument at startup (#21393)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-12 14:38:54 +00:00
Abhi 8432bcee75 fix(core): resolve MCP tool FQN validation, schema export, and wildcards in subagents (#22069) 2026-03-12 14:17:36 +00:00
Jack Wotherspoon a38aaa47fb chore: remove unnecessary log for themes (#22165) 2026-03-12 13:51:36 +00:00
Sehoon Shon 18e8dd768a feat(ui): Do not show Ultra users /upgrade hint (#22154) (#22156) 2026-03-12 13:46:58 +00:00
Jack Wotherspoon 45faf4d31b fix: register themes on extension load not start (#22148) 2026-03-12 13:38:09 +00:00
Aditya Bijalwan 333475c41f feat(browser): implement input blocker overlay during automation (#21132)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
Co-authored-by: Gaurav Ghosh <gaghosh@google.com>
2026-03-12 11:29:57 +00:00
Sri Pasumarthi 41d4f59f5e feat: Display pending and confirming tool calls (#22106)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-12 05:57:37 +00:00
Adam Weidman 10ab958378 refactor(core): extract ExecutionLifecycleService for tool backgrounding (#21717) 2026-03-12 04:03:54 +00:00
Bryan Morgan 949e85ca55 feat(core): differentiate User-Agent for a2a-server and ACP clients (#22059) 2026-03-12 02:31:59 +00:00
Spencer f090736ebc fix(core): secure argsPattern and revert WEB_FETCH_TOOL_NAME escalation (#22104)
Co-authored-by: Taylor Mullen <ntaylormullen@google.com>
2026-03-12 02:26:21 +00:00
Sam Roberts 35bf746e62 Add issue for automated changelogs (#21912) 2026-03-12 01:43:28 +00:00
Jenna Inouye 3da1563c30 Docs: Add documentation for model steering (experimental). (#21154) 2026-03-12 00:05:59 +00:00
N. Taylor Mullen 7380424782 fix(policy): ensure user policies are loaded when policyPaths is empty (#22090) 2026-03-11 23:58:58 +00:00
Adib234 90b53f9a82 docs(plan): clarify interactive plan editing with Ctrl+X (#22076) 2026-03-11 23:38:22 +00:00
N. Taylor Mullen f368e80baf fix(cli): resolve skill uninstall failure when skill name is updated (#22085) 2026-03-11 23:23:20 +00:00
N. Taylor Mullen 4a6d1fad9d fix(core): propagate subagent context to policy engine (#22086) 2026-03-11 23:01:45 +00:00
Sandy Tao 1a7f50661a fix: remove status/need-triage from maintainer-only issues (#22044)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-03-11 22:28:20 +00:00
Himanshu Soni 8bfa5b5054 docs: document npm deprecation warnings as safe to ignore (#20692)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-11 22:12:27 +00:00
Gal Zahavi e3b3b71c14 feat(core): implement SandboxManager interface and config schema (#21774)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-11 21:42:50 +00:00
krishdef7 926dddf0bf fix(hooks): fix BeforeAgent/AfterAgent inconsistencies (#18514) (#21383)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-11 21:40:11 +00:00
nityam 352bbc36c0 merge duplicate imports packages/cli/src subtask3 (#22056) 2026-03-11 21:21:40 +00:00
Abhi 3bf4f885d8 feat(core): simplify subagent success UI and improve early termination display (#21917) 2026-03-11 21:11:07 +00:00
Spencer 775bcbf3a6 fix(core): silently retry API errors up to 3 times before halting session (#21989) 2026-03-11 20:40:06 +00:00
nityam be16caece2 merge duplicate imports packages/cli/src subtask2 (#22051) 2026-03-11 20:14:12 +00:00
M Junaid Shaukat e802776c96 feat(core): support custom base URL via env vars (#21561)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-11 20:10:29 +00:00
Tommaso Sciortino 45a4a7054e chore: allow 'gemini-3.1' in sensitive keyword linter (#22065) 2026-03-11 20:00:03 +00:00
Sehoon Shon b7578eba7d fix(core): preserve dynamic tool descriptions on session resume (#18835)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-11 19:38:54 +00:00
Spencer b87718d1ff fix(policy): remove unnecessary escapeRegex from pattern builders (#21921) 2026-03-11 19:31:55 +00:00
Aishanee Shah 067e09a40b feat(telemetry): implement retry attempt telemetry for network related retries (#22027)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-11 18:55:48 +00:00
Sehoon Shon 36ce2ba96e fix(core): enable numerical routing for api key users (#21977) 2026-03-11 18:54:52 +00:00
Ali Anari 08e174a05c feat(ui): add vim yank/paste (y/p/P) with unnamed register (#22026)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-11 18:43:42 +00:00
Yuna Seol df8b399bb4 feat(core): include initiationMethod in conversation interaction telemetry (#22054)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-03-11 18:38:15 +00:00
Sehoon Shon 41f1ea4672 fix(core): handle EISDIR in robustRealpath on Windows (#21984) 2026-03-11 18:22:10 +00:00
gemini-cli-robot 92e0da3ecb Changelog for v0.34.0-preview.0 (#21965)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
2026-03-11 18:20:21 +00:00
gemini-cli-robot 6cc2f8d06e Changelog for v0.33.0 (#21967)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-11 18:20:16 +00:00
Sehoon Shon 58557ba786 perf(core): parallelize user quota and experiments fetching in refreshAuth (#21648) 2026-03-11 18:00:16 +00:00
nityam 016d5d8eb6 merge duplicate imports packages/cli/src subtask1 (#22040) 2026-03-11 17:50:42 +00:00
Gal Zahavi 6900fe5527 feat(policy): add --admin-policy flag for supplemental admin policies (#20360) 2026-03-11 17:35:45 +00:00
Tommaso Sciortino 7e9e196793 feat(cli): support removing keybindings via '-' prefix (#22042) 2026-03-11 17:34:03 +00:00
Yuna Seol 50384ab3c9 fix(core): update language detection to use LSP 3.18 identifiers (#21931) 2026-03-11 16:05:52 +00:00
Manav Sharma eaf6e8bbb1 fix(core)#20941: reap orphaned descendant processes on PTY abort (#21124)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-11 15:36:25 +00:00
Jack Wotherspoon b804fe9662 fix: clean up /clear and /resume (#22007) 2026-03-11 15:23:23 +00:00
Gyanranjan Priyam 99bbbc2170 docs: fix misleading YOLO mode description in defaultApprovalMode (#21878)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: A.K.M. Adib <adibakm@google.com>
2026-03-11 15:10:55 +00:00
Tommaso Sciortino 3e3d04877b docs(cli): add custom keybinding documentation (#21980) 2026-03-11 14:25:24 +00:00
Nick Salerni 88638c14f7 fix(cli): allow scrolling keys in copy mode (Ctrl+S selection mode) (#19933)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-11 07:16:25 +00:00
Krrish Verma c2d38bac54 test(core): add missing tests for prompts/utils.ts (#19941)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-11 07:00:37 +00:00
Ali Anari f16f13fba8 fix(ui): clamp cursor to last char after all NORMAL mode deletes (#21973) 2026-03-11 06:22:12 +00:00
Sehoon Shon e54c450bc1 fix(core): remove OAuth check from handleFallback and clean up stray file (#21962) 2026-03-11 04:56:06 +00:00
Tommaso Sciortino 075e0b1a81 feat(cli): support literal character keybindings and extended Kitty protocol keys (#21972) 2026-03-11 04:49:20 +00:00
Aishanee Shah f8ad3a200a Feat/retry fetch notifications (#21813) 2026-03-11 03:33:50 +00:00
Ali Anari 8b09ccc288 feat(ui): add missing vim mode motions (X, ~, r, f/F/t/T, df/dt and friends) (#21932) 2026-03-11 03:27:06 +00:00
Adam Weidman 5020d8fa57 refactor(a2a): remove legacy CoreToolScheduler (#21955) 2026-03-11 02:38:38 +00:00
gemini-cli-robot 3a0c9a0d39 chore(release): bump version to 0.35.0-nightly.20260311.657f19c1f (#21966) 2026-03-11 02:36:40 +00:00
joshualitt 20a226a5ab feat(core): Thread AgentLoopContext through core. (#21944) 2026-03-11 01:12:59 +00:00
Tommaso Sciortino daf3701194 feat(cli): customizable keyboard shortcuts (#21945) 2026-03-11 01:05:50 +00:00
gemini-cli-robot 657f19c1f3 Changelog for v0.33.0-preview.14 (#21938)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-11 00:49:26 +00:00
Gal Zahavi 524679d23c feat: implement background process logging and cleanup (#21189) 2026-03-11 00:13:20 +00:00
Shyam Raghuwanshi 7c4570339e fix: robust UX for remote agent errors (#20307)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-03-10 23:50:25 +00:00
nityam e22d9917b7 fix: preserve prompt text when cancelling streaming (#21103)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-10 22:35:04 +00:00
N. Taylor Mullen d63053cb59 fix(cli): stabilize prompt layout to prevent jumping when typing (#21081) 2026-03-10 21:29:29 +00:00
gemini-cli-robot a9500d6a6c chore/release: bump version to 0.34.0-nightly.20260310.4653b126f (#21816) 2026-03-10 21:22:37 +00:00
gemini-cli-robot acbd914d5e Changelog for v0.33.0-preview.13 (#21927)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-10 21:22:04 +00:00
christine betts 300929a32b Add ExtensionDetails dialog and support install (#20845) 2026-03-10 21:12:47 +00:00
Coco Sheng 519c75f410 fix: prevent hangs in non-interactive mode and improve agent guidance (#20893)
Co-authored-by: Keith Schaab <keith.schaab@gmail.com>
2026-03-10 20:30:58 +00:00
Gaurav 3ff68a9e55 fix: patch gaxios v7 Array.toString() stream corruption (#21884) 2026-03-10 20:25:24 +00:00
kevinjwang1 5b8ad9cd65 Add extensionRegistryURI setting to change where the registry is read from (#20463) 2026-03-10 20:22:03 +00:00
Aditya Bijalwan 5caa192cfc feat: add pulsating blue border automation overlay to browser agent (#21173)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2026-03-10 20:15:03 +00:00
Ayush Debnath 9eae91a489 feat(voice): implement speech-friendly response formatter (#20989)
Co-authored-by: Spencer <spencertang@google.com>
2026-03-10 19:57:23 +00:00
Coco Sheng 1b69637032 feat(a2a): switch from callback-based to event-driven tool scheduler (#21467)
Co-authored-by: Abhi <abhipatel@google.com>
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-03-10 19:36:17 +00:00
Adib234 e5615f47c4 fix(plan): prevent plan truncation in approval dialog by supporting unconstrained heights (#21037)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-03-10 19:34:10 +00:00
Yongrui Lin bc75a61982 docs(cli): mention per-model token usage in stream-json result event (#21908) 2026-03-10 19:29:18 +00:00
N. Taylor Mullen 5d213764fb feat(cli): enable skill activation via slash commands (#21758)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2026-03-10 19:24:54 +00:00
Alisa be67470432 feat(a2a): implement standardized normalization and streaming reassembly (#21402)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2026-03-10 19:19:48 +00:00
Adam Weidman 00a39b3da9 refactor: remove agent_card_requires_auth config flag (#21914) 2026-03-10 19:16:46 +00:00
Tommaso Sciortino 077c1a1e2d make command names consistent (#21907) 2026-03-10 19:15:45 +00:00
Abhi 0d60d68cf9 docs(mcp): standardize mcp tool fqn documentation (#21664) 2026-03-10 19:13:00 +00:00
Mark McLaughlin b404fc02e7 fix(auth): update terminology to 'sign in' and 'sign out' (#20892)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-10 19:10:26 +00:00
Aashir Javed b00d7c88ad fix(ui): prevent empty tool-group border stubs after filtering (#21852)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-03-10 19:09:07 +00:00
anj-s 2dd037682c Add behavioral evals for tracker (#20069) 2026-03-10 18:51:54 +00:00
skyvanguard 7aae5435fa fix(cli): prevent race condition in loop detection retry (#17916)
Co-authored-by: cynthialong0-0 <82900738+cynthialong0-0@users.noreply.github.com>
2026-03-10 18:41:16 +00:00
Jerop Kipruto 13f78bd9eb docs: remove experimental badge from plan mode in sidebar (#21906) 2026-03-10 18:22:07 +00:00
Yongrui Lin 4da0366eed feat(core): add per-model token usage to stream-json output (#21839) 2026-03-10 17:39:04 +00:00
Jerop Kipruto 18112c474e docs: clarify telemetry setup and comprehensive data map (#21879) 2026-03-10 17:20:25 +00:00
Jerop Kipruto 80cf2fe444 fix(release): Improve Patch Release Workflow Comments: Clearer Approval Guidance (#21894) 2026-03-10 17:15:04 +00:00
Prasanna Pal 0b78de9601 fix(core): handle AbortError when ESC cancels tool execution (#20863) 2026-03-10 17:11:08 +00:00
Spencer a220874281 feat(policy): support auto-add to policy by default and scoped persistence (#20361) 2026-03-10 17:01:41 +00:00
Jacob Richman 49ea9b0457 Handle dirty worktrees better and warn about running scripts/review.sh on untrusted code. (#21791) 2026-03-10 16:38:26 +00:00
JAYADITYA 556825f81c feat(cli): give visibility to /tools list command in the TUI and follow the subcommand pattern of other commands (#21213) 2026-03-10 16:36:12 +00:00
Sandy Tao b158c96465 feat(core): add OAuth2 Authorization Code auth provider for A2A agents (#21496)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-03-10 15:24:44 +00:00
Coco Sheng e91f86c248 feat(telemetry): add specific PR, issue, and custom tracking IDs for GitHub Actions (#21129) 2026-03-10 14:59:13 +00:00
Gaurav 47e4f6b13f fix(ui): handle headless execution in credits and upgrade dialogs (#21850) 2026-03-10 14:54:15 +00:00
Gaurav 94ab449e65 fix(core): treat retryable errors with >5 min delay as terminal quota errors (#21881) 2026-03-10 14:53:51 +00:00
Yuna Seol 0486a1675a refactor(core): improve API response error logging when retry (#21784) 2026-03-10 14:29:35 +00:00
Adam Weidman f9fc83089c fix(core): update @a2a-js/sdk to 0.3.11 (#21875) 2026-03-10 14:14:39 +00:00
Jerop Kipruto 5dd2dab189 fix(core): ensure correct flash model steering in plan mode implementation phase (#21871) 2026-03-10 13:30:41 +00:00
Jerop Kipruto a6b95897ad docs: clarify global policy rules application in plan mode (#21864) 2026-03-10 13:10:17 +00:00
Jacob Richman 6ae6c810ba fix(cli): make footer items equally spaced (#21843) 2026-03-10 08:07:26 +00:00
Gaurav 02d4451e77 fix(core): override toolRegistry property for sub-agent schedulers (#21766) 2026-03-10 07:41:54 +00:00
Sehoon Shon c25ff94608 build(release): restrict npm bundling to non-stable tags (#21821) 2026-03-10 04:17:46 +00:00
Tommaso Sciortino 14412c3a72 refactor(cli): rename 'return' key to 'enter' internally (#21796) 2026-03-10 02:32:40 +00:00
Shehab ec7773eb7b fix(docs): update theme screenshots and add missing themes (#20689)
Co-authored-by: Chris Williams <chrisjwilliams@google.com>
Co-authored-by: Chris Williams <diodesign@gmail.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-10 00:35:10 +00:00
Nicholas Bardy 4653b126f3 fix(core): destroy PTY on kill() and exception to prevent fd leak (#21693)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-10 00:08:16 +00:00
sinisterchill 1e1e7e349d fix(core): handle GUI editor non-zero exit codes gracefully (#20376)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-09 23:51:10 +00:00
christine betts 43eb74ac59 Add support for updating extension sources and names (#21715) 2026-03-09 23:31:31 +00:00
Tommaso Sciortino 215f8f3f15 refactor(ui): unify keybinding infrastructure and support string initialization (#21776) 2026-03-09 23:26:33 +00:00
Francesco Camporeale b89944c3a3 docs: fix heading formatting in commands.md and phrasing in tools-api.md (#20679)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-09 23:26:04 +00:00
Muhammad Usman f88488d1f9 fix(core): resolve Windows line ending and path separation bugs across CLI (#21068) 2026-03-09 22:40:22 +00:00
Sehoon Shon 1fd42802be perf(cli): cache loadSettings to reduce redundant disk I/O at startup (#21521) 2026-03-09 21:33:16 +00:00
Tommaso Sciortino ab64b15d51 refactor: migrate to useKeyMatchers hook (#21753) 2026-03-09 20:48:09 +00:00
Jacob Richman e406dcc249 feat/redesign header compact (#20922) 2026-03-09 20:40:46 +00:00
Vroot 680077631d fix(docs): fix headless mode docs (#21287)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-09 20:13:14 +00:00
Jacob Richman 9fc03a0c12 Add script to speed up reviewing PRs adding a worktree. (#21748) 2026-03-09 19:43:22 +00:00
Adib234 4f4431e4e1 fix(core): prevent infinite recursion in symlink resolution (#21750) 2026-03-09 19:38:45 +00:00
AK 527074b50a feat(policy): support subagent-specific policies in TOML (#21431) 2026-03-09 19:22:46 +00:00
joshualitt a17691f0fc feat(core): improve subagent result display (#20378) 2026-03-09 19:20:15 +00:00
Francesco Camporeale d246315cea docs: fix broken markdown syntax and anchor links in /tools (#20902)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-09 19:03:50 +00:00
Alisa e92ccec6c8 feat(security): implement robust IP validation and safeFetch foundation (#21401) 2026-03-09 19:02:07 +00:00
Pyush Sinha b68d7bc0f9 refactor(cli): better react patterns for BaseSettingsDialog (#21206) 2026-03-09 18:35:08 +00:00
Jacob Richman 4c9f9bb3e2 robustness(core): static checks to validate history is immutable (#21228) 2026-03-09 18:26:03 +00:00
David Pierce e7b20c49ac Update mcp's list function to check for disablement. (#21148) 2026-03-09 18:10:00 +00:00
David Pierce 743d05b37f Unmarshall update (#21721)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-09 17:32:15 +00:00
Zheyuan Lin 95074a1a84 fix(settings): display objects as JSON instead of [object Object] (#21458)
Co-authored-by: Zheyuan <zlin252@emory.edu>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-09 17:32:13 +00:00
Aditya Bijalwan 759575faa8 Feat/browser agent progress emission (#21218)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-09 17:26:00 +00:00
Sehoon Shon d485e08606 feat(cli): implement /upgrade command (#21511) 2026-03-09 17:17:30 +00:00
Sehoon Shon 0f1258305a perf(core): cache loadApiKey to reduce redundant keychain access (#21520) 2026-03-09 16:53:24 +00:00
Abhijit Balaji 09e99824d4 docs: document tool exclusion from memory via deny policy (#21428)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-09 16:29:52 +00:00
joshualitt 96b939f63a feat(core): Introduce AgentLoopContext. (#21198) 2026-03-09 16:02:20 +00:00
Adib234 7837194ab5 fix(core): resolve symlinks for non-existent paths during validation (#21487) 2026-03-09 16:02:13 +00:00
Jerop Kipruto 35ee2a841a feat(plan): enable Plan Mode by default (#21713) 2026-03-09 15:58:46 +00:00
Jack Wotherspoon a253938ac5 feat(cli): add /compact alias for /compress command (#21711) 2026-03-09 15:45:42 +00:00
aworki 37ffd608fd feat(cli): expose /tools desc as explicit subcommand for discoverability (#21241)
Co-authored-by: Coco Sheng <cocosheng@google.com>
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2026-03-09 15:31:05 +00:00
Chris Williams 0f019122b0 Docs: Make documentation links relative (#21490) 2026-03-09 15:23:00 +00:00
Gaurav 936f6240dd fix(core): sanitize SSE-corrupted JSON and domain strings in error classification (#21702) 2026-03-09 14:08:33 +00:00
anj-s f8dd6f4f4c fix(core): display actual graph output in tracker_visualize tool (#21455) 2026-03-09 13:36:16 +00:00
Gyanranjan Priyam ca7ac00030 docs: fix typo 'allowslisted' -> 'allowlisted' in mcp-server.md (#21665) 2026-03-09 05:38:00 +00:00
Dmitry Lyalin d41735d6a9 feat(cli): unify /chat and /resume command UX (#20256) 2026-03-08 22:50:51 +00:00
Jacob Richman d012929a28 Code review comments as a pr (#21209) 2026-03-08 08:36:54 +00:00
Jenna Inouye 97dfbd4598 Docs: Add documentation for notifications (experimental)(macOS) (#21163) 2026-03-08 06:31:24 +00:00
Keith Guerin 237864eb63 feat(cli): Invert quota language to 'percent used' (#20100)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-03-07 23:17:10 +00:00
Keith Guerin dc6741097c refactor(cli): standardize on 'reload' verb for all components (#20654)
Co-authored-by: Krishna Korade <MushuEE@users.noreply.github.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-07 22:56:11 +00:00
Christian Gunderman dac3735626 Disallow underspecified types (#21485) 2026-03-07 21:05:38 +00:00
Jacob Richman 245b68e9f1 Make test suite pass when the GEMINI_SYSTEM_MD env variable or GEMINI_WRITE_SYSTEM_MD variable happens to be set locally/ (#21480) 2026-03-07 20:04:17 +00:00
Jacob Richman e89cf5d86e fix(cli): correct shell height reporting (#21492) 2026-03-07 19:31:09 +00:00
Jarrod Whelan 54b0344fc5 fix(ui): unify Ctrl+O expansion hint experience across buffer modes (#21474) 2026-03-07 19:04:22 +00:00
Keith Guerin e5d58c2b5a feat(cli): overhaul thinking UI (#18725) 2026-03-07 04:20:27 +00:00
Sandy Tao 9455ecd78c fix(core): add in-memory cache to ChatRecordingService to prevent OOM (#21502) 2026-03-07 03:45:36 +00:00
Jeffrey Ying 0fd09e0150 fix: expand paste placeholders in TextInput on submit (#19946)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-07 03:29:38 +00:00
Gaurav 9a7427197b fix(billing): fix overage strategy lifecycle and settings integration (#21236) 2026-03-07 03:14:44 +00:00
Arnav Raj 33be30ab04 fix(core): whitelist TERM and COLORTERM in environment sanitization (#20514)
Co-authored-by: Sri Pasumarthi <sripas@google.com>
Co-authored-by: Sri Pasumarthi <111310667+sripasg@users.noreply.github.com>
2026-03-07 02:51:08 +00:00
Mark McLaughlin 6c3a90645a feat(skills): refine string-reviewer guidelines and description (#20368) 2026-03-06 22:46:11 +00:00
Abhi 32e61529f5 feat(cli): hide gemma settings from display and mark as experimental (#21471) 2026-03-06 22:34:59 +00:00
Abhi 931e668b47 refactor(core): standardize MCP tool naming to mcp_ FQN format (#21425) 2026-03-06 22:17:28 +00:00
Emily Hedlund 7989c28d2e feat(cli): implement dot-prefixing for slash command conflicts (#20979) 2026-03-06 20:43:20 +00:00
gemini-cli-robot 2965c115f1 Changelog for v0.33.0-preview.4 (#21354)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: galz10 <galzahavi@google.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-06 20:36:18 +00:00
Sébastien Prud'homme 7d31d5f4ec fix(core): append correct OTLP paths for HTTP exporters (#16836) 2026-03-06 19:58:00 +00:00
Srinath Padmanabhan 1a7d4184cd Update quota and pricing documentation with subscription tiers (#21351)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jenna Inouye <jinouye@google.com>
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
2026-03-06 19:46:03 +00:00
Sehoon Shon 7dce23e5d9 feat(core): implement generic CacheService and optimize setupUser (#21374) 2026-03-06 19:39:50 +00:00
ruomeng 06a176e33e fix(plan): keep approved plan during chat compression (#21284) 2026-03-06 19:36:05 +00:00
Sandy Tao 42d367d72f fix(cli): gracefully handle --resume when no sessions exist (#21429) 2026-03-06 19:02:33 +00:00
Emily Hedlund 6f579934db feat(core): implement unified KeychainService and migrate token storage (#21344) 2026-03-06 18:56:08 +00:00
Tommaso Sciortino 6d607a5953 feat(ui): dynamically generate all keybinding hints (#21346) 2026-03-06 18:34:26 +00:00
Abhi 4669148a4c feat(core): add concurrency safety guidance for subagent delegation (#17753) (#21278) 2026-03-06 18:09:45 +00:00
nityam 82316ef6e4 fix(core): deduplicate GEMINI.md files by device/inode on case-insensitive filesystems (#19904) (#19915) 2026-03-06 17:52:08 +00:00
Aarchi Kumari 337e4bc8c6 fix(hooks): propagate stopHookActive in AfterAgent retry path (#20426) (#20439) 2026-03-06 17:06:23 +00:00
Horizon_Architect_07 d97eaf3420 Fix(accessibility): add screen reader support to RewindViewer (#20750) 2026-03-06 15:48:36 +00:00
Adam Boudj 0452f787b2 fix(partUtils): display media type and size for inline data parts (#21358) 2026-03-06 15:45:43 +00:00
anj-s c1317aafb3 fix: logic for task tracker strategy and remove tracker tools (#21355) 2026-03-06 15:17:49 +00:00
Mohammed Abdelaziz f17f05373e docs(cli): clarify ! command output visibility in shell commands tutorial (#21041)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-06 08:47:29 +00:00
MumuTW 6691fac50e fix(core): handle AbortError thrown during processTurn (#21296)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2026-03-06 06:29:56 +00:00
JATIN 35c1999341 documentiong ensures ripgrep (#21298)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2026-03-06 06:10:12 +00:00
kt 5575c5ff66 docs: fix incorrect relative links to command reference (#20964) 2026-03-06 03:27:25 +00:00
Pavan Shinde 0833aca64b docs: format release times as HH:MM UTC (#20726)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-06 03:06:38 +00:00
Sehoon Shon 509d4ae0a9 fix(cli): implement --all flag for extensions uninstall (#21319) 2026-03-06 03:02:01 +00:00
gemini-cli-robot 4d310dda68 Changelog for v0.33.0-preview.3 (#21347)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: galz10 <galzahavi@google.com>
2026-03-06 02:11:30 +00:00
gemini-cli-robot e7be0d7bcc Changelog for v0.33.0-preview.2 (#21333)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-06 00:35:13 +00:00
anj-s a8f507352b feat (core): Implement tracker related SI changes (#19964) 2026-03-06 00:18:05 +00:00
Mark McLaughlin 6aa6630137 fix(theme): improve theme color contrast for macOS Terminal.app (#21175) 2026-03-05 23:33:49 +00:00
Shreya Keshive 7ec477d40d feat(acp): Add support for AI Gateway auth (#21305) 2026-03-05 22:15:23 +00:00
Tommaso Sciortino 19c9508fd1 remove wildcard behavior on keybindings (#21315) 2026-03-05 22:11:53 +00:00
Jacob Richman e8bc7bea44 Fix code colorizer ansi escape bug. (#21321) 2026-03-05 21:43:13 +00:00
Sam Roberts 1ba9d71284 docs(links): update docs-writer skill and fix broken link (#21314) 2026-03-05 21:20:52 +00:00
Sehoon Shon 1aa4a32066 test(core): improve testing for API request/response parsing (#21227) 2026-03-05 21:00:01 +00:00
Sehoon Shon 22d962e761 feat(core): fallback to 2.5 models with no access for toolcalls (#21283) 2026-03-05 20:37:15 +00:00
Shreya Keshive 0135b03c8a fix(acp): rename --experimental-acp to --acp & remove Zed-specific refrences (#21171) 2026-03-05 19:57:28 +00:00
kartik 9773a084c9 fix:reorder env var redaction checks to scan values first (#21059)
Signed-off-by: Kartik Angiras <angiraskartik@gmail.com>
2026-03-05 19:22:45 +00:00
Juhyuk a830858f91 fix(core): prevent unhandled AbortError crash during stream loop detection (#21123)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
Co-authored-by: ruomeng <ruomeng@google.com>
2026-03-05 19:12:09 +00:00
Jerop Kipruto f47cb3c136 docs: use absolute paths for internal links in plan-mode.md (#21299) 2026-03-05 19:11:57 +00:00
Zheyuan Lin 291639633f feat(cli): add native gVisor (runsc) sandboxing support (#21062)
Co-authored-by: Zheyuan <zlin252@emory.edu>
Co-authored-by: Kartik Angiras <angiraskartik@gmail.com>
2026-03-05 18:39:57 +00:00
Jacob Richman c7e2dbe0cf Fix so shell calls are formatted (#21237) 2026-03-05 18:39:42 +00:00
Yuna Seol 31d65f40bd feat(telemetry): implement Clearcut logging for startup statistics (#21172)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-03-05 18:21:55 +00:00
Sam Roberts 93d9adc03c feat(triage): add area/documentation to issue triage (#21222) 2026-03-05 18:14:47 +00:00
Sam Roberts d2726d4a43 DOCS: Update quota and pricing page (#21194) 2026-03-05 18:09:14 +00:00
Tommaso Sciortino 1c3c7a343f fix(cli): replace hardcoded keybinding strings with dynamic formatters (#21159) 2026-03-05 17:52:01 +00:00
Dev Randalpura f20e45175e fix(ui): add partial output to cancelled shell UI (#21178)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-05 17:30:20 +00:00
Sandy Tao 0228c2b9f0 refactor(core): extract shared OAuth flow primitives from MCPOAuthProvider (#20895) 2026-03-05 17:01:37 +00:00
Tommaso Sciortino ddafd79661 fix(cli): fix enabling kitty codes on Windows Terminal (#21136) 2026-03-05 15:29:12 +00:00
Aditya Bijalwan 09259a8ec4 test: add browser agent integration tests (#21151) 2026-03-05 13:29:35 +00:00
Adib234 173376ba67 fix(core): explicitly allow codebase_investigator and cli_help in read-only mode (#21157) 2026-03-05 13:20:04 +00:00
JAYADITYA 013d5dfbb0 refactor(cli): categorize built-in themes into dark/ and light/ directories (#18634) 2026-03-05 09:20:46 +00:00
Darren Sander 3d4956aa57 perf(core): fix OOM crash in long-running sessions (#19608)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-05 04:23:07 +00:00
Jack Wotherspoon 9dc6898d28 feat: add custom footer configuration via /footer (#19001)
Co-authored-by: Keith Guerin <keithguerin@gmail.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-05 02:21:48 +00:00
Christian Gunderman c5112cde46 fix(core): truncate excessively long lines in grep search output (#21147)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-05 01:30:28 +00:00
Eric Rahm c72cfad92c fix(cli): defer tool exclusions to policy engine in non-interactive mode (#20639)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-03-05 01:01:52 +00:00
Dev Randalpura 205d69eb07 fix(ui): removed double padding on rendered content (#21029) 2026-03-05 01:00:34 +00:00
Gal Zahavi 3481032980 fix(extensions): preserve symlinks in extension source path while enforcing folder trust (#20867) 2026-03-05 00:06:19 +00:00
Gen Zhang a5fd5d0b9f feat(release): ship esbuild bundle in npm package (#19171)
Co-authored-by: Yuna Seol <yunaseol@gmail.com>
2026-03-04 22:18:54 +00:00
Jerop Kipruto 55db3c776c docs: document planning workflows with Conductor example (#21166) 2026-03-04 22:07:05 +00:00
N. Taylor Mullen e63d273e4e fix(ui): suppress redundant failure note when tool error note is shown (#21078) 2026-03-04 21:20:08 +00:00
joshualitt 4c85d14f48 feat(core): Disable fast ack helper for hints. (#21011) 2026-03-04 20:56:56 +00:00
Yashodip More efec63658a chore(cli): enable deprecated settings removal by default (#20682) 2026-03-04 20:39:37 +00:00
Spencer c59ef74837 fix(core, a2a-server): prevent hang during OAuth in non-interactive sessions (#21045) 2026-03-04 20:35:21 +00:00
Jenna Inouye 29b3aa860c Docs: Create tools reference (#19470)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-04 20:16:33 +00:00
Christian Gunderman 1c92824636 chore(github): require prompt approvers for agent prompt files (#20896) 2026-03-04 19:45:12 +00:00
Aishanee Shah e200b40408 feat(loop-reduction): implement iterative loop detection and model feedback (#20763) 2026-03-04 19:38:36 +00:00
nityam 8f36051f32 fix: improve error message when OAuth succeeds but project ID is required (#21070) 2026-03-04 19:28:34 +00:00
kartik ac4e65d669 feat: add issue assignee workflow (#21003)
Signed-off-by: Kartik Angiras <angiraskartik@gmail.com>
2026-03-04 19:28:24 +00:00
Yuna Seol 6f3c3c7967 feat(core): add robustness tests, logging, and metrics for CodeAssistServer SSE parsing (#21013)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-03-04 19:27:47 +00:00
gemini-cli-robot 212402bd53 Changelog for v0.32.1 (#21055)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-04 19:20:33 +00:00
Christian Gunderman 49e4082f38 feat(telemetry): include language in telemetry and fix accepted lines computation (#21126) 2026-03-04 18:58:39 +00:00
Christian Gunderman 54885214a1 feat(evals): add overall pass rate row to eval nightly summary table (#20905) 2026-03-04 18:58:18 +00:00
Himanshu Soni 717660997d feat(sandbox): add experimental LXC container sandbox support (#20735) 2026-03-04 17:44:33 +00:00
Sehoon Shon bc89b05f01 feat(core): improve @file autocomplete to prioritize filenames (#21064) 2026-03-04 17:24:34 +00:00
gemini-cli-robot 66721379f8 Changelog for v0.33.0-preview.1 (#21058)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-04 17:17:00 +00:00
gemini-cli-robot df74b89876 Changelog for v0.32.0 (#21033)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-04 17:15:52 +00:00
Rudra 25e9613594 fix(cli): enable multi-arch docker builds for sandbox (#19821)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-03-04 16:53:30 +00:00
Rohit 94ba7ec319 chore(dev): update vscode settings for typescriptreact (#19907) 2026-03-04 16:25:33 +00:00
Eli Fayerman 07d2187a76 fix(cli): register extension lifecycle events in DebugProfiler (#20101)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
2026-03-04 16:03:00 +00:00
Jacob Richman 352fb0c976 fix(mcp): Notifications/tools/list_changed support not working (#21050)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-03-04 09:46:17 -05:00
Jenna Inouye 7011c13ee6 Docs: Update plan mode docs (#19682)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-03-04 12:53:51 +00:00
Jacob Richman 12957ea16a fix(cli): Polish shell autocomplete rendering to be a little more shell native feeling. (#20931) 2026-03-04 06:52:56 +00:00
Jacob Richman 1017b78157 Defensive coding to reduce the risk of Maximum update depth errors (#20940) 2026-03-04 06:32:05 +00:00
Tommaso Sciortino 7e06559db2 Consistently guard restarts against concurrent auto updates (#21016) 2026-03-04 06:18:12 +00:00
gemini-cli-robot bbcfff5cf1 chore/release: bump version to 0.34.0-nightly.20260304.28af4e127 (#21054) 2026-03-04 05:06:31 +00:00
Sri Pasumarthi 5bd21a240d fix: model persistence for all scenarios (#21051) 2026-03-04 03:28:12 +00:00
gemini-cli-robot fdfd626f28 Changelog for v0.33.0-preview.0 (#21030)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-03-04 02:51:50 +00:00
Jacob Richman 0659ad1702 Revert "fix(ui): persist expansion in AskUser dialog when navigating options" (#21042) 2026-03-04 01:40:29 +00:00
anj-s a63c76522a feat(core): Add tracker CRUD tools & visualization (#19489)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-03-04 00:42:48 +00:00
Jacob Richman af424aefa9 Add extra safety checks for proto pollution (#20396)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-03-04 00:21:09 +00:00
nityam 28af4e127f fix: merge duplicate imports in packages/core (3/4) (#20928) 2026-03-04 00:12:59 +00:00
Keith Guerin d25088956d feat(ui): standardize semantic focus colors and enhance history visibility (#20745)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-03-04 00:10:09 +00:00
gemini-cli-robot 75737c1b44 chore(release): bump version to 0.34.0-nightly.20260303.34f0c1538 (#21034) 2026-03-04 00:08:34 +00:00
Jacob Richman 533b65188d Cleanup old branches. (#19354) 2026-03-03 23:01:06 +00:00
Adam Weidman 066b0cc15f fix(core): increase A2A agent timeout to 30 minutes (#21028) 2026-03-03 22:59:53 +00:00
Jacob Richman 1124e49f34 Support bold and other styles in svg snapshots (#20937) 2026-03-03 22:44:25 +00:00
Shashank Trivedi df14a6c2db feat(cli): add chat resume footer on session quit (#20667)
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
2026-03-03 22:38:26 +00:00
Shreya Keshive 34f0c1538b feat(acp): add set models interface (#20991) 2026-03-03 22:29:42 +00:00
Sehoon Shon c70c95ead3 remove hardcoded tiername when missing tier (#21022) 2026-03-03 22:16:37 +00:00
Dev Randalpura f3bbe6e77a fix(core): send shell output to model on cancel (#20501) 2026-03-03 22:10:16 +00:00
Abhi 28e79831ac fix(core): sanitize and length-check MCP tool qualified names (#20987) 2026-03-03 21:38:52 +00:00
Sam Roberts fdf5b18cfb Format the quota/limit style guide. (#21017) 2026-03-03 21:37:05 +00:00
ruomeng b5f3eb2c9c feat(plan): add copy subcommand to plan (#20491) (#20988) 2026-03-03 21:36:51 +00:00
Ale Aadithya 2a84090dd5 Docs/add hooks reference (#20961)
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-03-03 21:29:15 +00:00
Sri Pasumarthi 27d7aeb1ed feat: Implement slash command handling in ACP for /memory,/init,/extensions and /restore (#20528) 2026-03-03 21:29:14 +00:00
Tommaso Sciortino d6c560498b fix(cli): pin clipboardy to ~5.2.x (#21009) 2026-03-03 21:01:29 +00:00
Sam Roberts 4500da339b Update docs-writer skill with new resource (#20917) 2026-03-03 20:49:18 +00:00
Ishaan Gupta 4be08a2261 refactor common settings logic for skills,agents (#17490)
Co-authored-by: ved015 <vedant.04.mahajan@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-03-03 19:25:17 +00:00
Adib234 fe332bbef7 feat(evals): add behavioral evals for ask_user tool (#20620) 2026-03-03 17:51:15 +00:00
kartik 50af050623 fix: pre-load @file references from external editor prompts (#20963)
Signed-off-by: Kartik Angiras <angiraskartik@gmail.com>
2026-03-03 17:41:30 +00:00
Tommaso Sciortino e5207eb67f fix(cli): wait for background auto-update before relaunching (#20904) 2026-03-03 17:18:29 +00:00
Adam Weidman f15bcaf499 feat(agents): directly indicate auth required state (#20986) 2026-03-03 17:10:12 +00:00
Adib234 5f2f60bed6 feat(plan): enable built-in research subagents in plan mode (#20972) 2026-03-03 16:52:27 +00:00
Mahima Shanware c332d1e636 feat(extensions): add support for plan directory in extension manifest (#20354)
Co-authored-by: Mahima Shanware <mshanware@google.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-03-03 16:50:18 +00:00
Sehoon Shon aa158e18d3 fix(core): enforce optionality for API response fields in code_assist (#20714) 2026-03-03 16:17:34 +00:00
Jerop Kipruto fca29b0bd8 fix(plan): clean up session directories and plans on deletion (#20914) 2026-03-03 14:11:25 +00:00
Keith Guerin 1e2afbb514 feat(cli): invert context window display to show usage (#20071)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-03-03 09:22:29 +00:00
Bryan Morgan 208291f391 fix(ci): handle empty APP_ID in stale PR closer (#20919) 2026-03-03 00:14:36 -05:00
Jacob Richman 8303edbb54 Code review fixes as a pr (#20612) 2026-03-03 04:32:50 +00:00
Aswin Ashok 0d69f9f7fa Build binary (#18933)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-03-03 01:02:19 +00:00
Christian Gunderman 46231a1755 ci(evals): only run evals in CI if prompts or tools changed (#20898)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-03 00:29:31 +00:00
Sandy Tao 2e7722d6a3 fix(core): restrict "System: Please continue" invalid stream retry to Gemini 2 models (#20897) 2026-03-02 23:21:13 +00:00
Yuna Seol 69e15a50d1 fix(core): skip telemetry logging for AbortError exceptions (#19477)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-03-02 23:14:31 +00:00
Christian Gunderman 25f59a0099 Add some dos and don'ts to behavioral evals README. (#20629) 2026-03-02 23:14:00 +00:00
Adib234 01927a36d1 feat(plan): support annotating plans with feedback for iteration (#20876) 2026-03-02 23:03:59 +00:00
Shreya Keshive 06ddfa5c4c feat(admin): enable 30 day default retention for chat history & remove warning (#20853) 2026-03-02 22:44:49 +00:00
Christian Gunderman 3f7ef816f1 fix(core): increase default headers timeout to 5 minutes (#20890) 2026-03-02 22:36:58 +00:00
Jerop Kipruto d05ba11a31 refactor(core): replace manual syncPlanModeTools with declarative policy rules (#20596) 2026-03-02 22:30:50 +00:00
Hamdanbinhashim e43b1cff58 docs: fix broken markdown links in main README.md (#20300) 2026-03-02 21:51:52 +00:00
Allen Hutchison bb6d1a2775 feat(core): add tool name validation in TOML policy files (#19281)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-03-02 21:47:21 +00:00
Nayana Parameswarappa dd9ccc9807 Adding MCPOAuthProvider implementing the MCPSDK OAuthClientProvider (#20121) 2026-03-02 21:37:44 +00:00
Pyush Sinha 8133d63ac6 refactor(cli): fully remove React anti patterns, improve type safety and fix UX oversights in SettingsDialog.tsx (#18963)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-02 21:30:58 +00:00
Sandy Tao 18d0375a7f feat(core): support authenticated A2A agent card discovery (#20622)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
Co-authored-by: Adam Weidman <65992621+adamfweidman@users.noreply.github.com>
2026-03-02 21:29:31 +00:00
Keith Guerin 31ca57ec94 feat: redesign header to be compact with ASCII icon (#18713)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-02 21:12:17 +00:00
Abhi b7a8f0d1f9 fix(core): ensure subagents use qualified MCP tool names (#20801) 2026-03-02 21:12:13 +00:00
Abdul Tawab 1502e5cbc3 style(cli) : Dialog pattern for /hooks Command (#17930) 2026-03-02 21:12:05 +00:00
Christian Gunderman 7ca3a33f8b Subagent activity UX. (#17570) 2026-03-02 21:04:31 +00:00
Sandy Tao ce5a2d0760 feat(core): truncate large MCP tool output (#19365) 2026-03-02 21:01:49 +00:00
Sam Roberts aa321b3d8c Update CODEOWNERS for README.md reviewers (#20860) 2026-03-02 20:54:05 +00:00
David Pierce 3a7a6e1540 Add install as an option when extension is selected. (#20358) 2026-03-02 20:41:16 +00:00
Tommaso Sciortino 66530e44c8 document node limitation for shift+tab (#20877) 2026-03-02 20:31:52 +00:00
Christian Gunderman b034dcd412 Do not block CI on evals (#20870) 2026-03-02 20:31:02 +00:00
Aishanee Shah 659301ff83 feat(core): centralize read_file limits and update gemini-3 description (#20619) 2026-03-02 20:11:58 +00:00
Sandy Tao 446a4316c4 feat(core): implement HTTP authentication support for A2A remote agents (#20510)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-03-02 19:59:48 +00:00
Tommaso Sciortino 48412a068e Add /unassign support (#20864)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-03-02 19:54:26 +00:00
Adib234 2e1efaebe4 fix(plan): deflake plan mode integration tests (#20477) 2026-03-02 19:51:44 +00:00
Sandy Tao 7c9fceba7f fix(core): reduce LLM-based loop detection false positives (#20701) 2026-03-02 19:08:15 +00:00
Adam Weidman 740efa2ac2 Merge User and Agent Card Descriptions #20849 (#20850) 2026-03-02 17:59:29 +00:00
Abhi 703759cfae fix(cli): allow sub-agent confirmation requests in UI while preventing background flicker (#20722) 2026-03-01 02:39:25 +00:00
Sehoon Shon 0063581e47 feat(skills): add github-issue-creator skill (#20709) 2026-02-28 23:22:22 +00:00
Sehoon Shon 6757d4b5c5 fix(cli): resolve autoThemeSwitching when background hasn't changed but theme mismatches (#20706) 2026-02-28 23:22:10 +00:00
Sandy Tao a153ff587b refactor(core): Extract tool parameter names as constants (#20460) 2026-02-28 21:27:54 +00:00
N. Taylor Mullen cd3a8c3f07 fix(cli): reset themeManager between tests to ensure isolation (#20598) 2026-02-28 19:45:31 +00:00
kartik b2214a6676 fix: acp/zed race condition between MCP initialisation and prompt (#20205)
Signed-off-by: Kartik Angiras <angiraskartik@gmail.com>
2026-02-28 17:33:08 +00:00
gemini-cli-robot 6c65a2d813 Changelog for v0.32.0-preview.0 (#20627)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-02-28 16:03:50 +00:00
Jagjeevan Kashid fae0639ba2 fix: use full paths for ACP diff payloads (#19539)
Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
2026-02-28 15:54:44 +00:00
gemini-cli-robot 76f70d65ff Changelog for v0.31.0 (#20634)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-02-28 03:45:07 +00:00
gemini-cli-robot fb6ff847dd chore/release: bump version to 0.33.0-nightly.20260228.1ca5c05d0 (#20644) 2026-02-28 02:13:48 +00:00
Gal Zahavi 1ca5c05d0d fix(github): use robot PAT for automated PRs to pass CLA check (#20641) 2026-02-28 01:13:58 +00:00
Gal Zahavi 0c6c9c6a62 chore(release): bump version to 0.33.0-nightly.20260227.ba149afa0 (#20637) 2026-02-28 00:51:22 +00:00
Sehoon Shon a1367e9cdd fix(core): parse raw ASCII buffer strings in Gaxios errors (#20626) 2026-02-27 23:57:32 +00:00
Tommaso Sciortino c89d4f9c6c docs: add Windows PowerShell equivalents for environments and scripting (#20333) 2026-02-27 23:41:47 +00:00
Aditya Sharma 08ee136132 docs: fix typo in installation documentation (#20153) 2026-02-27 23:04:52 +00:00
Jenna Inouye 07f51c324e Docs: Update model docs to remove Preview Features. (#20084) 2026-02-27 22:28:06 +00:00
nityam ba149afa0b fix: merge duplicate imports in a2a-server package (2/4) (#19781) 2026-02-27 21:13:30 +00:00
nityam f6533c0250 fix: merge duplicate imports in sdk and test-utils packages (1/4) (#19777) 2026-02-27 21:13:15 +00:00
nityam 5e3b1fe945 Enforce import/no-duplicates as error (#19797) 2026-02-27 21:08:34 +00:00
Christian Gunderman 05ef2eb362 Promote stable tests to CI blocking. (#20581) 2026-02-27 21:08:12 +00:00
Abhi 966b9059d0 feat(core): enable contiguous parallel admission for Kind.Agent tools (#20583) 2026-02-27 21:08:10 +00:00
Francesco Camporeale ca13458412 docs: fix spelling typos in installation guide (#20579)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-02-27 20:36:38 +00:00
Spencer 20d884da2f fix(core): reduce intrusive MCP errors and deduplicate diagnostics (#20232) 2026-02-27 20:04:36 +00:00
Jenna Inouye 6a0f4d3bdd Docs: FAQ update (#20585) 2026-02-27 19:29:58 +00:00
Christian Gunderman 0b682538d2 Disable Gemini PR reviews on draft PRs. (#20362)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-02-27 19:25:33 +00:00
Dmitry Lyalin 7f8ce8657c Add low/full CLI error verbosity mode for cleaner UI (#20399) 2026-02-27 19:15:10 +00:00
gemini-cli-robot 1c8951334a Changelog for v0.30.1 (#20589)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-02-27 19:11:32 +00:00
Christian Gunderman b2b6092c24 Add slash command for promoting behavioral evals to CI blocking (#20575)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-27 19:11:30 +00:00
Jacob Richman e00e8f4728 fix(cli): Shell autocomplete polish (#20411) 2026-02-27 19:03:37 +00:00
gemini-cli-robot b2cbf518e8 Changelog for v0.31.0-preview.1 (#20590)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
2026-02-27 19:01:52 +00:00
Abhi c914fd0700 fix(cli): prevent sub-agent tool calls from leaking into UI (#20580) 2026-02-27 19:00:19 +00:00
Jerop Kipruto 5d24d6a9e1 fix(ui): persist expansion in AskUser dialog when navigating options (#20559) 2026-02-27 18:30:16 +00:00
Gaurav ea48bd9414 feat: better error messages (#20577)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-02-27 18:18:16 +00:00
Gaurav b2d6844f9b feat(billing): implement G1 AI credits overage flow with billing telemetry (#18590) 2026-02-27 18:15:06 +00:00
Sehoon Shon fdd844b405 fix(core): disable retries for code assist streaming requests (#20561) 2026-02-27 18:04:43 +00:00
Adib234 23905bcd77 fix(plan): prevent agent from using ask_user for shell command confirmation (#20504) 2026-02-27 17:51:47 +00:00
Dev Randalpura ec39aa17c2 Moved markdown parsing logic to a separate util file (#20526) 2026-02-27 17:43:18 +00:00
DeWitt Clinton 7a1f2f3288 Disable expensive and scheduled workflows on personal forks (#20449) 2026-02-27 17:40:09 +00:00
Abhijit Balaji 59c0e73718 feat(cli): add temporary flag to disable workspace policies (#20523) 2026-02-27 17:25:16 +00:00
Dmitry Lyalin 3b2632fe40 fix(cli): keep thought summary when loading phrases are off (#20497)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-02-27 17:11:13 +00:00
Sehoon Shon e709789067 fix(core): handle optional response fields from code assist API (#20345) 2026-02-27 16:52:37 +00:00
Christian Gunderman 514d431049 Demote unreliable test. (#20571) 2026-02-27 16:48:46 +00:00
Abhijit Balaji 32e777f838 fix(core): revert auto-save of policies to user space (#20531) 2026-02-27 16:03:36 +00:00
Jacob Richman 14dd07be00 fix(cli): ensure dialogs stay scrolled to bottom in alternate buffer mode (#20527) 2026-02-27 16:00:07 +00:00
Pyush Sinha d7320f5425 refactor(core,cli): useAlternateBuffer read from config (#20346)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-02-27 15:55:02 +00:00
Adib234 25ade7bcb7 feat(plan): update planning workflow to encourage multi-select with descriptions of options (#20491) 2026-02-27 15:42:37 +00:00
Jacob Richman ac4d0c20d8 fix(cli): hide shortcuts hint while model is thinking or the user has typed a prompt + add debounce to avoid flicker (#19389) 2026-02-27 15:34:49 +00:00
Jacob Richman 4d9cc36146 Fix flicker showing message to press ctrl-O again to collapse. (#20414)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-27 15:07:14 +00:00
Jerop Kipruto 66b8922d66 feat(ui): add 'ctrl+o' hint to truncated content message (#20529) 2026-02-27 15:02:46 +00:00
christine betts 58df1c6237 Fix extension MCP server env var loading (#20374) 2026-02-27 14:49:10 +00:00
Bryan Morgan 522e95439c fix(core): apply retry logic to CodeAssistServer for all users (#20507) 2026-02-27 09:26:53 -05:00
Jacob Richman 82336de7a4 Fix bottom border rendering for search and add a regression test. (#20517) 2026-02-27 04:55:21 +00:00
Jenna Inouye 83a3851dfd Docs: Update to Terms of Service & FAQ (#20488)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-02-27 04:14:57 +00:00
christine betts e17f927a69 Add support for policy engine in extensions (#20049)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-02-27 03:29:33 +00:00
heaventourist b1befee8fb feat(telemetry) Instrument traces with more attributes and make them available to OTEL users (#20237)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
Co-authored-by: MD. MOHIBUR RAHMAN <35300157+mrpmohiburrahman@users.noreply.github.com>
Co-authored-by: Jeffrey Ying <jeffrey.ying86@live.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
Co-authored-by: joshualitt <joshualitt@google.com>
Co-authored-by: Dev Randalpura <devrandalpura@google.com>
Co-authored-by: Google Admin <github-admin@google.com>
Co-authored-by: Ben Knutson <benknutson@google.com>
2026-02-27 02:26:16 +00:00
Tommaso Sciortino 4b7ce1fe67 Avoid overaggressive unescaping (#20520) 2026-02-27 01:50:21 +00:00
Dev Randalpura ecfa4e0437 fix(ui): correct styled table width calculations (#20042) 2026-02-27 01:31:21 +00:00
Jarrod Whelan 085441352b ui(cli): reduce length of Ctrl+O hint (#20490) 2026-02-27 00:57:38 +00:00
Jarrod Whelan 049d48ef60 test(cli): fix flaky ToolResultDisplay overflow test (#20518) 2026-02-27 00:30:43 +00:00
Adib234 bc622a443e docs(plan): update documentation regarding supporting editing of plan files during plan approval (#20452)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-02-27 00:30:23 +00:00
Siddharth Diwan 9b7852f11c [Gemma x Gemini CLI] Add an Experimental Gemma Router that uses a LiteRT-LM shim into the Composite Model Classifier Strategy (#17231)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2026-02-26 23:43:43 +00:00
Bryan Morgan 6dc9d5ff11 feat(core): increase fetch timeout and fix [object Object] error stringification (#20441)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-02-26 23:41:09 +00:00
Yuvraj Angad Singh b8d6041d42 fix: prevent orphaned processes from consuming 100% CPU when terminal closes (#16965)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-26 23:17:09 +00:00
Jerop Kipruto aa98cafca7 feat(plan): adapt planning workflow based on complexity of task (#20465)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-02-26 22:58:19 +00:00
krishdef7 f700c923d9 fix(core): flush transcript for pure tool-call responses to ensure BeforeTool hooks see complete state (#20419)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-02-26 22:39:36 +00:00
Sehoon Shon edb1fdea30 fix(cli): support quota error fallbacks for all authentication types (#20475)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-02-26 22:39:25 +00:00
Adam Weidman 10c5bd8ce9 feat(core): improve A2A content extraction (#20487)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-02-26 22:38:30 +00:00
Gal Zahavi 9de8349cf0 fix: action var usage (#20492) 2026-02-26 22:06:09 +00:00
Jerop Kipruto 020da58327 fix(github): resolve actionlint and yamllint regressions from #19443 (#20467) 2026-02-26 11:31:31 -08:00
Google Admin ac454bcfbc Refactor Github Action per b/485167538 (#19443)
Co-authored-by: Ben Knutson <benknutson@google.com>
2026-02-26 12:58:14 -05:00
Dev Randalpura c7a70e6421 Updated tests in TableRenderer.test.tsx to use SVG snapshots (#20450) 2026-02-26 17:36:11 +00:00
joshualitt 611d934829 feat(core): Enable generalist agent (#19665) 2026-02-26 16:38:49 +00:00
Bryan Morgan 9c2fd5a7c6 feat(core): add HTTP 499 to retryable errors and map to RetryableQuotaError (#20432) 2026-02-26 15:42:34 +00:00
Jeffrey Ying 3db35812b7 fix(core): allow /memory add to work in plan mode (#20353) 2026-02-26 13:59:44 +00:00
MD. MOHIBUR RAHMAN 8380f0a3b1 feat(cli): implement interactive shell autocompletion (#20082) 2026-02-26 07:49:11 +00:00
Adib234 ef247e220d feat(plan): support opening and modifying plan in external editor (#20348) 2026-02-26 04:38:44 +00:00
Sandy Tao 39938000a9 feat(core): rename grep_search include parameter to include_pattern (#20328) 2026-02-26 04:16:21 +00:00
Abhijit Balaji d128fb0f7b feat(cli): hide workspace policy update dialog and auto-accept by default (#20351) 2026-02-26 04:05:19 +00:00
gemini-cli-robot 37903d5dbb Changelog for v0.31.0-preview.0 (#20249)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
2026-02-26 03:18:43 +00:00
Sam Roberts a3821a9440 Update changelog workflow to reject nightly builds (#20248) 2026-02-26 03:12:01 +00:00
gemini-cli-robot 0bf3a015e8 Changelog for v0.30.0 (#20252)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
2026-02-26 01:11:36 +00:00
Abhi 28c9a907de feat(core): introduce Kind.Agent for sub-agent classification (#20369) 2026-02-26 01:04:20 +00:00
Jacob Richman f9f916e1dc test: support tests that include color information (#20220) 2026-02-25 23:31:35 +00:00
anj-s 78dfe9dea8 feat(core): implement task tracker foundation and service (#19464) 2026-02-25 23:17:17 +00:00
nityam c9d07b62f2 fix: remove trailing comma in issue triage workflow settings json (#20265) 2026-02-25 22:05:21 +00:00
joshualitt 189ab6c637 feat(core): Enable model steering in workspace. (#20343) 2026-02-25 21:18:40 +00:00
Tommaso Sciortino 4aec3cdb24 docs: remove legacy cmd examples in favor of powershell (#20323)
avoid flakes
2026-02-25 12:09:49 -08:00
Achal Jhawar b765fb8af4 fix(cli): expose model.name setting in settings dialog for persistence (#19605) 2026-02-25 19:56:05 +00:00
Himanshu Soni fb0c7d268f fix(cli): skip 404 errors in setup-github file downloads (#20287) 2026-02-25 18:45:02 +00:00
kevinjwang1 be12371380 Plumb the maxAttempts setting through Config args (#20239) 2026-02-25 17:58:07 +00:00
Tommaso Sciortino a037b961b1 feat(cli): load extensions in parallel (#20229) 2026-02-25 17:15:00 +00:00
Adam Weidman 6c739955c0 feat(core): implement robust A2A streaming reassembly and fix task continuity (#20091) 2026-02-25 16:51:08 +00:00
Shreya Keshive 50947c57ce fix(acp): update auth handshake to spec (#19725) 2026-02-25 15:04:42 +00:00
Adib234 29e8f2abf4 feat(plan): add integration tests for plan mode (#20214) 2026-02-25 04:56:16 +00:00
Jerop Kipruto bf278ef2b0 feat(plan): support automatic model switching for Plan Mode (#20240) 2026-02-25 00:15:14 +00:00
Sam Roberts 1f9da6723f Docs: Add nested sub-folders for related topics (#20235) 2026-02-24 23:44:13 +00:00
Sandy Tao 3ff5cfaaf6 feat(telemetry): Add context breakdown to API response event (#19699) 2026-02-24 23:26:28 +00:00
Ishaan Gupta 70b650122f feat: prompt users to run /terminal-setup with yes/no (#16235)
Co-authored-by: Vedant Mahajan <Vedant.04.mahajan@gmail.com>
2026-02-24 21:48:28 +00:00
Adam Weidman 16d3883642 fix: additional high vulnerabilities (minimatch, cross-spawn) (#20221) 2026-02-24 21:47:37 +00:00
Jenna Inouye 5c23f7f6e0 Docs: Update UI links. (#20224) 2026-02-24 21:12:53 +00:00
Michael Bleigh d47d4855db feat(hooks): adds support for RuntimeHook functions. (#19598) 2026-02-24 21:03:36 +00:00
Gal Zahavi 6510347d5b feat(extensions): enforce folder trust for local extension install (#19703) 2026-02-24 19:58:44 +00:00
Jerop Kipruto 4dd940f8ce feat(plan): inject message when user manually exits Plan mode (#20203) 2026-02-24 19:31:41 +00:00
Tommaso Sciortino 87f7f0beb7 restrict /assign to help-wanted issues (#20207) 2026-02-24 19:26:00 +00:00
christine betts 8e9ce3f4c3 Fix extension env dir loading issue (#20198) 2026-02-24 18:13:21 +00:00
Jacob Richman 812794a471 Update packages. (#20152) 2026-02-24 18:05:06 +00:00
gemini-cli-robot 3c6539a32c Changelog for v0.30.0-preview.5 (#20107)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-02-24 18:04:59 +00:00
Himanshu Soni e4204d5939 fix(core): create new McpClient on restart to apply updated config (#20126) 2026-02-24 18:03:33 +00:00
Jerop Kipruto baccda969d feat(plan): summarize work after executing a plan (#19432) 2026-02-24 17:35:32 +00:00
Gaurav 9e95b8b3c5 feat(browser): implement experimental browser agent (#19284) 2026-02-24 17:22:09 +00:00
Jerop Kipruto 182c858e67 feat(policy): centralize plan mode tool visibility in policy engine (#20178)
Co-authored-by: Mahima Shanware <mshanware@google.com>
2026-02-24 17:17:43 +00:00
Jasmeet Bhatia c0b76af442 feat(mcp): add progress bar, throttling, and input validation for MCP tool progress (#19772) 2026-02-24 17:13:51 +00:00
sinisterchill 4efdbe9089 fix(a2a-server): pass allowedTools settings to core Config (#19680) 2026-02-24 16:52:32 +00:00
Jerop Kipruto 15f6c8b8da feat(policy): Propagate Tool Annotations for MCP Servers (#20083) 2026-02-24 14:20:11 +00:00
Kiryl Dubarenka ee2e947435 feat(ide): add GEMINI_CLI_IDE_PID env var to override IDE process detection (#15842)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
2026-02-24 13:35:25 +00:00
Jacob Richman 6676546a4b fix punycode2 (#20154) 2026-02-24 09:43:22 +00:00
Keith Guerin d143a83d5b refactor(ui): Update and simplify use of gray colors in themes (#20141) 2026-02-24 09:21:10 +00:00
Keith Guerin e69e23e4a0 Shortcuts: Move SectionHeader title below top line and refine styling (#18721) 2026-02-24 08:12:29 +00:00
Tommaso Sciortino 81cd2561dc ci(actions): fix PR rate limiter excluding maintainers (#20117) 2026-02-24 03:57:55 +00:00
Steven Robertson b0ceb74462 feat: implement AfterTool tail tool calls (#18486) 2026-02-24 03:57:00 +00:00
nityam ee5eb70070 fix(cli): Remove unsafe type assertions in activityLogger #19713 (#19745) 2026-02-24 03:54:09 +00:00
Rishabh Khandelwal dde844dbe1 feat(security): Introduce Conseca framework (#13193) 2026-02-24 02:44:28 +00:00
Yuki Okita 05bc0399f3 feat(cli): allow expanding full details of MCP tool on approval (#19916) 2026-02-24 01:45:05 +00:00
Jagjeevan Kashid 3409de774c feat:PR-rate-limit (#19804)
Signed-off-by: Jagjeevan Kashid <jagjeevandev97@gmail.com>
Co-authored-by: kevinjwang1 <kevinjwang@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Christian Gunderman <gundermanc@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-24 00:42:07 +00:00
Christian Gunderman 175ffc452b Add 3.1 pro preview to behavioral evals. (#20088) 2026-02-24 00:34:26 +00:00
Tommaso Sciortino 544df749af make windows tests mandatory (#20096) 2026-02-24 00:06:14 +00:00
Christian Gunderman 56c8d7e985 Stabilize tests. (#20095) 2026-02-24 00:01:39 +00:00
kevinjwang1 2ff7738b5d Add new setting to configure maxRetries (#20064)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-23 23:57:16 +00:00
Tommaso Sciortino 1ad26adb2b fix critical dep vulnerability (#20087) 2026-02-23 23:36:35 +00:00
nityam af5aec69da Fix: Handle corrupted token file gracefully when switching auth types (#19845) (#19850) 2026-02-23 23:15:54 +00:00
nityam dae67983a8 fix(a2a-server): Remove unsafe type assertions in agent (#19723) 2026-02-23 22:40:55 +00:00
Zafeer Mahmood 70856d5a6e fix(scripts): Add Windows (win32/x64) support to lint.js (#16193)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-23 22:36:23 +00:00
Abhijit Balaji cec45a1ebc fix(cli): skip workspace policy loading when in home directory (#20054) 2026-02-23 22:08:56 +00:00
Adam Weidman 767d80e768 fix(core): prevent utility calls from changing session active model (#20035) 2026-02-23 21:54:02 +00:00
Jerop Kipruto 3e5e608a22 feat(policy): Implement Tool Annotation Matching in Policy Engine (#20029) 2026-02-23 21:39:40 +00:00
Gal Zahavi 0bc2d3ab16 fix(core): allow environment variable expansion and explicit overrides for MCP servers (#18837) 2026-02-23 21:35:01 +00:00
Aviral Garg 31960c3388 fix(sandbox): harden image packaging integrity checks (#19552) 2026-02-23 21:02:42 +00:00
Sandy Tao 0cc4f09595 feat(core): replace expected_replacements with allow_multiple in replace tool (#20033) 2026-02-23 19:53:58 +00:00
Michael Bleigh 70336e73b1 feat(core): implement experimental direct web fetch (#19557) 2026-02-23 19:50:14 +00:00
Aishanee Shah 7cfbb6fb71 feat(core): optimize tool descriptions and schemas for Gemini 3 (#19643) 2026-02-23 19:27:35 +00:00
Mehmet Gok a105768de8 docs(CONTRIBUTING): update React DevTools version to 6 (#20014)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-02-23 19:17:04 +00:00
Jerop Kipruto 347f3fe7e4 feat(policy): Support MCP Server Wildcards in Policy Engine (#20024) 2026-02-23 19:07:06 +00:00
Sandy Tao 25803e05fd fix(bundling): copy devtools package to bundle for runtime resolution (#19766) 2026-02-23 18:40:41 +00:00
Himanshu Soni 774ae220be fix(core): prevent state corruption in McpClientManager during collis (#19782) 2026-02-23 18:35:31 +00:00
Tommaso Sciortino 813e0c18ac Allow ask headers longer than 16 chars (#20041) 2026-02-23 18:26:59 +00:00
Gal Zahavi 3f6cec22e6 chore: restrict gemini-automted-issue-triage to only allow echo (#20047) 2026-02-23 18:24:34 +00:00
Sri Pasumarthi 3966f3c053 feat: Map tool kinds to explicit ACP.ToolKind values and update test … (#19547) 2026-02-23 18:22:05 +00:00
sinisterchill 2e3cbd6363 fix(core): prevent OAuth server crash on unexpected requests (#19668) 2026-02-23 18:03:31 +00:00
Adib234 8b1dc15182 fix(plan): allow plan mode writes on Windows and fix prompt paths (#19658) 2026-02-23 17:48:50 +00:00
owenofbrien fa9aee2bf0 Fix for silent failures in non-interactive mode (#19905) 2026-02-23 17:35:13 +00:00
Sam Roberts 6628cbb39d Updates command reference and /stats command. (#19794) 2026-02-23 17:13:24 +00:00
Sehoon Shon aa9163da60 feat(core): add policy chain support for Gemini 3.1 (#19991) 2026-02-23 15:13:48 +00:00
Sehoon Shon ec0f23ae03 fix(core): increase default retry attempts and add quota error backoff (#19949) 2026-02-23 15:13:34 +00:00
nityam ac04c388e0 Fix: Persist manual model selection on restart #19864 (#19891) 2026-02-23 03:44:00 +00:00
Abhi 621ddbe744 refactor(core): move session conversion logic to core (#19972) 2026-02-23 01:18:07 +00:00
Sehoon Shon c537fd5aec refactor(config): remove enablePromptCompletion from settings (#19974) 2026-02-22 19:10:20 -05:00
Shivangi Sharma a91bc60e18 fix(core): add uniqueness guard to edit tool (#19890)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-02-22 20:24:58 +00:00
Nick Salerni faa1ec3044 fix(core): prevent omission placeholder deletions in replace/write_file (#19870)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-02-22 19:58:31 +00:00
Bryan Morgan d96bd05d36 fix(core): allow any preview model in quota access check (#19867) 2026-02-22 12:53:24 +00:00
Adib234 84666e1bbc fix(plan): time share by approval mode dashboard reporting negative time shares (#19847) 2026-02-22 00:32:57 +00:00
N. Taylor Mullen a7d851146a feat(core): remove unnecessary login verbiage from Code Assist auth (#19861) 2026-02-21 21:55:11 +00:00
Abhi acb7f577de chore(lint): fix lint errors seen when running npm run lint (#19844) 2026-02-21 18:33:25 +00:00
Abhi d2d345f41a fix(cli): filter subagent sessions from resume history (#19698) 2026-02-21 17:41:27 +00:00
Christian Gunderman dfd7721e69 Disallow unsafe returns. (#19767) 2026-02-21 01:12:56 +00:00
matt korwel 09218572d0 refactor(core): remove unsafe type assertions in error utils (Phase 1.1) (#19750) 2026-02-21 01:00:57 +00:00
Christian Gunderman 5d98ed5820 Utilize pipelining of grep_search -> read_file to eliminate turns (#19574) 2026-02-21 00:36:10 +00:00
Jarrod Whelan 727f9b67b1 feat(cli): improve CTRL+O experience for both standard and alternate screen buffer (ASB) modes (#19010)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-02-21 00:26:11 +00:00
Adam Weidman 547f5d45f5 feat(core): migrate read_file to 1-based start_line/end_line parameters (#19526) 2026-02-20 22:59:18 +00:00
Christian Gunderman 58d637f919 Disallow and suppress unsafe assignment (#19736) 2026-02-20 22:28:55 +00:00
Sehoon Shon b746524a1b fix(cli): re-enable CLI banner (#19741) 2026-02-20 22:21:26 +00:00
Abhijit Balaji c5baf39dbd feat(policy): repurpose "Always Allow" persistence to workspace level (#19707) 2026-02-20 22:07:20 +00:00
Sehoon Shon b48970da15 fix(cli): use getDisplayString for manual model selection in dialog (#19726) 2026-02-20 22:03:32 +00:00
Jacob Richman 9a8e5d3940 fix(cli): extensions dialog UX polish (#19685) 2026-02-20 21:08:24 +00:00
Jacob Richman 089aec8b8d feat(cli): make JetBrains warning more specific (#19687) 2026-02-20 21:06:35 +00:00
Christian Gunderman b7555ab1e1 Fix unsafe assertions in code_assist folder. (#19706)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-20 20:44:23 +00:00
Emily Hedlund c04602f209 fix(core): restore auth consent in headless mode and add unit tests (#19689) 2026-02-20 20:31:43 +00:00
Emily Hedlund a01d7e9a05 security: implement deceptive URL detection and disclosure in tool confirmations (#19288) 2026-02-20 20:21:31 +00:00
Emily Hedlund 49b2e76ee1 Revert "feat(ui): add source indicators to slash commands" (#19695) 2026-02-20 20:08:49 +00:00
Emily Hedlund aed348a99c security: strip deceptive Unicode characters from terminal output (#19026)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-20 20:04:32 +00:00
Christian Gunderman 7cf4c05c66 Fixes 'input.on' is not a function error in Gemini CLI (#19691) 2026-02-20 20:03:57 +00:00
Sam Roberts cdf157e52a Update sidebar.json for to allow top nav tabs. (#19595) 2026-02-20 19:54:26 +00:00
Sehoon Shon 723f269df6 fix(core): treat 503 Service Unavailable as retryable quota error (#19642) 2026-02-20 19:51:53 +00:00
Spencer 239aa0909c fix(cli): allow perfect match @-path completions to submit on Enter (#19562) 2026-02-20 19:46:48 +00:00
matt korwel 6cfd29ef9b feat(plan): enforce read-only constraints in Plan Mode (#19433)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-02-20 19:33:04 +00:00
Sehoon Shon f97b04cc9a feat(models): support Gemini 3.1 Pro Preview and fixes (#19676) 2026-02-20 19:19:21 +00:00
Christian Gunderman 788a40c445 Send accepted/removed lines with ACCEPT_FILE telemetry. (#19670) 2026-02-20 19:07:43 +00:00
Adam Weidman ce03156c9f feat(a2a): Add API key authentication provider (#19548) 2026-02-20 18:55:36 +00:00
Spencer fe428936d5 feat(ui): improve startup warnings UX with dismissal and show-count limits (#19584) 2026-02-20 18:22:45 +00:00
Gal Zahavi d24f10b087 feat(cli): enhance folder trust with configuration discovery and security warnings (#19492)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-20 18:21:03 +00:00
Tommaso Sciortino d54702185b feat(cli): add support for numpad SS3 sequences (#19659) 2026-02-20 18:09:10 +00:00
Alisa 27b7fc04de Search updates (#19482)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-20 17:54:28 +00:00
╯‵Д′)╯彡┻━┻ (☕1e6) be03e0619f fix: use discoverOAuthFromWWWAuthenticate for reactive OAuth flow (#18760) (#19038) 2026-02-20 17:48:42 +00:00
christine betts 2bb7aaecd0 Add initial implementation of /extensions explore command (#19029) 2026-02-20 17:30:49 +00:00
matt korwel 0f855fc0c4 fix(security): rate limit web_fetch tool to mitigate DDoS via prompt injection (#19567)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-20 17:18:07 +00:00
Jenna Inouye c7e309efc9 Docs: Update release information regarding Gemini 3.1 (#19568) 2026-02-20 16:37:41 +00:00
Jerop Kipruto 429932c663 docs: refine Plan Mode documentation structure and workflow (#19644) 2026-02-20 15:56:49 +00:00
Emily Hedlund d08b1efc72 feat(ui): add source indicators to slash commands (#18839) 2026-02-20 15:54:59 +00:00
matt korwel c3b52b8206 chore: resolve build warnings and update dependencies (#18880) 2026-02-20 03:25:56 +00:00
Adib234 5fd557347e fix(plan): exclude EnterPlanMode tool from YOLO mode (#19570) 2026-02-20 01:53:12 +00:00
gemini-cli-robot cbfb2a4e26 Changelog for v0.30.0-preview.3 (#19585)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-02-20 01:10:05 +00:00
Sandy Tao fb1b1b451d feat(core): refine Edit and WriteFile tool schemas for Gemini 3 (#19476) 2026-02-20 01:03:10 +00:00
Bryan Morgan 99fa700231 fix(ci): add fallback JSON extraction to issue triage workflow (#19593) 2026-02-19 20:19:01 -05:00
Michael Bleigh f1c0a695f8 refactor(sdk): introduce session-based architecture (#19180)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-20 00:47:35 +00:00
joshualitt 6351352e54 feat(core): Implement parallel FC for read only tools. (#18791) 2026-02-20 00:38:22 +00:00
Michael Bleigh 2ac39b6acc chore(skills): adds pr-address-comments skill to work on PR feedback (#19576) 2026-02-20 00:38:07 +00:00
Abhijit Balaji d8b24e6983 feat(policy): implement project-level policy support (#18682) 2026-02-20 00:16:03 +00:00
Sam Roberts d25c469f77 Migrate files to resource or references folder. (#19503) 2026-02-19 23:47:39 +00:00
Jerop Kipruto 537e56ffae feat(plan): support configuring custom plans storage directory (#19577) 2026-02-19 22:47:08 +00:00
Jack Wotherspoon 2cba2ab37a fix: remove extra padding in Composer (#19529) 2026-02-19 21:31:09 +00:00
Yuna Seol 8064973899 fix(core): improve error type extraction for telemetry (#19565)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-02-19 21:19:19 +00:00
christine betts ddc5458451 Revert "Add generic searchable list to back settings and extensions (… (#19434)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-02-19 21:06:37 +00:00
Adam Weidman a468407098 chore(core): improve encapsulation and remove unused exports (#19556) 2026-02-19 20:19:32 +00:00
Adib234 264c7aceaa fix(core): resolve crash in ClearcutLogger when os.cpus() is empty (#19555) 2026-02-19 20:13:28 +00:00
Abhijit Balaji 3408542a66 fix(core): prevent duplicate tool approval entries in auto-saved.toml (#19487)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-19 20:03:52 +00:00
Christian Gunderman c276d0c7b6 Fix message too large issue. (#19499) 2026-02-19 19:06:36 +00:00
Sam Roberts a00eb3b8e6 Update skill to adjust for generated results. (#19500) 2026-02-19 18:49:27 +00:00
Dmitry Lyalin 372f41eab8 feat(cli): replace loading phrases boolean with enum setting (#19347) 2026-02-19 18:43:12 +00:00
Tommaso Sciortino 09b623fbd7 feat(cli): add experimental.useOSC52Copy setting (#19488) 2026-02-19 18:22:11 +00:00
Tommaso Sciortino ba3e327ba1 format md file (#19474) 2026-02-19 09:43:53 -08:00
薄明色の忘れ路 5d235952ba Fix: Avoid tool confirmation timeout when no UI listeners are present (#17955) 2026-02-19 17:28:06 +00:00
Jacob Richman 082f41f54d Deflake windows tests. (#19511) 2026-02-19 16:17:34 +00:00
Emily Hedlund 880af43b02 fix(core): robust workspace-based IDE connection discovery (#18443) 2026-02-19 15:59:33 +00:00
Valery Teplyakov 966eef14ee feat(acp): support set_mode interface (#18890) (#18891)
Co-authored-by: Mervap <megavaprold@gmail.com>
2026-02-19 11:07:46 -05:00
Yuvraj Angad Singh b79e5ce56d fix(core): add error logging for IDE fetch failures (#17981) 2026-02-19 15:54:49 +00:00
Valery Teplyakov 1a8d77329e fix(acp): Initialize config (#18897) (#18898)
Co-authored-by: Mervap <megavaprold@gmail.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-02-19 15:08:09 +00:00
abhiasap ad9c49a604 fix(core): ensure user rejections update tool outcome for telemetry (#18982) 2026-02-19 13:14:02 +00:00
Jacob Richman 70b427c7dd fix spacing (#19494) 2026-02-19 06:39:54 +00:00
Jacob Richman a804f99fe0 Speculative fixes to try to fix react error. (#19508) 2026-02-19 06:39:32 +00:00
Jacob Richman c43500c50b build: replace deprecated built-in punycode with userland package (#19502) 2026-02-19 02:58:26 +00:00
gemini-cli-robot 42a7d89999 Changelog for v0.30.0-preview.1 (#19496)
Co-authored-by: gemini-cli-robot <224641728+gemini-cli-robot@users.noreply.github.com>
Co-authored-by: Sam Roberts <158088236+g-samroberts@users.noreply.github.com>
2026-02-19 01:56:36 +00:00
Jacob Richman 04f65f3d55 Migrate core render util to use xterm.js as part of the rendering loop. (#19044) 2026-02-19 00:46:50 +00:00
Sam Roberts 04c52513e7 Remove unused files and update index and sidebar. (#19479) 2026-02-19 00:10:49 +00:00
Spencer c62340675a feat(core): centralize compatibility checks and add TrueColor detection (#19478) 2026-02-19 00:01:23 +00:00
Sam Roberts ef65498031 Format strict-development-rules command (#19484) 2026-02-18 23:16:33 +00:00
Shreya Keshive 261788cf91 feat(admin): Admin settings should only apply if adminControlsApplicable = true and fetch errors should be fatal (#19453) 2026-02-18 22:54:07 +00:00
Jasmeet Bhatia 012392ad0a feat(cli): include /dir add directories in @ autocomplete suggestions (#19246) 2026-02-18 22:38:35 +00:00
garrettsparks 037061e2e0 use issuer instead of authorization_endpoint for oauth discovery (#17332)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-18 22:38:04 +00:00
Smitty 221ea360b9 fix(core): ripgrep fails when pattern looks like ripgrep flag (#18858)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-18 22:11:24 +00:00
N. Taylor Mullen 8910b2720f fix(cli): disable auto-completion on Shift+Tab to preserve mode cycling (#19451) 2026-02-18 22:08:38 +00:00
joshualitt 87f5dd15d6 feat(core): experimental in-progress steering hints (2 of 2) (#19307) 2026-02-18 22:05:50 +00:00
Adib234 81c8893e05 docs(plan): add documentation for plan mode command (#19467)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-18 22:03:09 +00:00
skyvanguard 178388d931 fix(cli): treat unknown slash commands as regular input instead of showing error (#17393)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-18 21:52:51 +00:00
imadraude e7f97dfa44 fix(ui): move margin from top to bottom in ToolGroupMessage (#17198) 2026-02-18 21:51:03 +00:00
Godwin Iheuwa f961e0d6b1 fix(core): ensure directory exists before writing conversation file (#18429)
Co-authored-by: godwiniheuwa <godwiniheuwa@users.noreply.github.com>
Co-authored-by: ruintheextinct <deepkarma001@gmail.com>
2026-02-18 21:13:54 +00:00
N. Taylor Mullen 14415316c0 feat(core): add support for MCP progress updates (#19046) 2026-02-18 20:46:12 +00:00
gemini-cli-robot 1cf05b0375 Changelog for v0.30.0-preview.0 (#19364)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
Co-authored-by: g-samroberts <samroberts@google.com>
2026-02-18 20:43:39 +00:00
Dev Randalpura 3099df1b7c fix(ui): preventing empty history items from being added (#19014) 2026-02-18 12:53:06 -08:00
gemini-cli-robot 758d419e33 Changelog for v0.29.0 (#19361)
Co-authored-by: g-samroberts <158088236+g-samroberts@users.noreply.github.com>
2026-02-18 20:30:52 +00:00
Dmitry Lyalin 78de533c48 feat(cli): add macOS run-event notifications (interactive only) (#19056)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-18 20:28:17 +00:00
Jerop Kipruto 8f6a711a3a fix(core): clarify plan mode constraints and exit mechanism (#19438) 2026-02-18 20:09:59 +00:00
Sandy Tao 65ad78b9c0 feat(devtools): migrate devtools package into monorepo (#18936) 2026-02-18 20:04:02 +00:00
christine betts 858918fe31 Add explicit color-convert dependency (#19460) 2026-02-18 19:55:21 +00:00
Adib234 9255e69abb fix(plan): allow safe fallback when experiment setting for plan is not enabled but approval mode at startup is plan (#19439)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-02-18 19:54:04 +00:00
dependabot[bot] e32111e609 chore(deps): bump tar from 7.5.7 to 7.5.8 (#19367)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 19:49:46 +00:00
Sandy Tao 2c1d6f8029 fix(cli): support legacy onConfirm callback in ToolActionsContext (#19369) 2026-02-18 19:46:09 +00:00
christine betts 8a8826654c Disable failing eval test (#19455) 2026-02-18 19:27:21 +00:00
Tommaso Sciortino 5f6b7c0158 feat(cli): add Alt+D for forward word deletion (#19300) 2026-02-18 09:19:26 -08:00
Mag1ck 65e0043fbf feat(cli): add gemini --resume hint on exit (#16285)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-02-18 15:54:01 +00:00
Jack Wotherspoon 22763c98b0 fix: optimize height calculations for ask_user dialog (#19017) 2026-02-18 15:52:30 +00:00
N. Taylor Mullen 05be2b51fc docs: clarify preflight instructions in GEMINI.md (#19377) 2026-02-18 07:16:55 -08:00
N. Taylor Mullen f1aa38b258 test(evals): add behavioral tests for tool output masking (#19172) 2026-02-18 05:07:25 +00:00
g-samroberts 4e11ddbf4a Release note generator fix (#19363) 2026-02-18 04:53:53 +00:00
Jacob Richman fe65d562de Fix bottom border color (#19266) 2026-02-18 02:41:43 +00:00
Christian Gunderman ce84b3cb5f Use ranged reads and limited searches and fuzzy editing improvements (#19240) 2026-02-17 23:54:08 +00:00
joshualitt 55c628e967 feat(core): experimental in-progress steering hints (1 of 3) (#19008) 2026-02-17 22:59:33 +00:00
Spencer 5e2f5df62c fix(paths): Add cross-platform path normalization (#18939) 2026-02-17 22:52:55 +00:00
Aishanee Shah 4fe86dbd4f refactor(core): modularize tool definitions by model family (#19269) 2026-02-17 22:26:38 +00:00
Jenna Inouye 216d7272bb Docs: Clarify extensions documentation. (#19277) 2026-02-17 21:57:27 +00:00
Pavan Shinde b7004ad5ed docs: format UTC times in releases doc (#18169) 2026-02-17 21:25:03 +00:00
Valery Teplyakov f1aa1683dd fix(acp): Wait for mcp initialization in acp (#18893) (#18894)
Co-authored-by: Mervap <megavaprold@gmail.com>
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2026-02-17 19:39:14 +00:00
Kevin Ramdass b56361559d feat(config): add setting to make directory tree context configurable (#19053) 2026-02-17 19:19:26 +00:00
g-samroberts c62601e90c Fix side breakage where anchors don't work in slugs. (#19261) 2026-02-17 18:38:00 +00:00
Jerop Kipruto fb32db5cd6 feat(cli): remove Plan Mode from rotation when actively working (#19262) 2026-02-17 17:36:59 +00:00
Yuna Seol 8aca3068cf feat: add role-specific statistics to telemetry and UI (cont. #15234) (#18824)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-02-17 17:32:30 +00:00
Adib234 14aabbbe8b feat(plan): support project exploration without planning when in plan mode (#18992) 2026-02-17 16:52:59 +00:00
Jacob Richman 366f1df120 refactor(cli): code review cleanup fix for tab+tab (#18967) 2026-02-17 15:16:37 +00:00
Jerop Kipruto e5ff2023ad feat(cli): update approval mode cycle order (#19254) 2026-02-17 15:13:27 +00:00
Abhi bf9ca33c18 feat(telemetry): add keychain availability and token storage metrics (#18971) 2026-02-17 15:11:38 +00:00
Gaurav bbf6800778 fix(telemetry): replace JSON.stringify with safeJsonStringify in file exporters (#19244) 2026-02-17 15:01:54 +00:00
Ramón Medrano Llamas b38e0984b9 Add Solarized Dark and Solarized Light themes (#19064)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-02-16 22:01:52 +00:00
Sehoon Shon ddd28f6431 chore(ui): remove outdated tip about model routing (#19226) 2026-02-16 20:50:13 +00:00
Jacob Richman 6ed1878c5f refactor: consolidate development rules and add cli guidelines (#19214) 2026-02-16 20:48:34 +00:00
N. Taylor Mullen 39d36108d7 feat(core): support custom reasoning models by default (#19227) 2026-02-16 20:47:58 +00:00
Krushna Korade 80f0cbd798 Add refresh/reload aliases to slash command subcommands (#19218)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-02-16 20:31:03 +00:00
Sehoon Shon 7d165e77f0 feat(cli): refactor model command to support set and manage subcommands (#19221) 2026-02-16 20:10:34 +00:00
kevinjwang1 c57a28f48a Disable workspace settings when starting GCLI in the home directory. (#19034) 2026-02-16 20:10:28 +00:00
Jack Wotherspoon a83ca11035 docs: custom themes in extensions (#19219) 2026-02-16 19:58:48 +00:00
Sehoon Shon 15ef1cd797 feat(cli): handle invalid model names in useQuotaAndFallback (#19222) 2026-02-16 19:55:17 +00:00
g-samroberts 5a74f7a2eb Add base branch to workflow. (#19189) 2026-02-16 17:25:19 +00:00
Sehoon Shon bb7bb11736 feat(cli): add loading state to new agents notification (#19190) 2026-02-16 06:43:25 +00:00
Kevin Moore d1ca8c0c80 docs: document .agents/skills alias and discovery precedence (#19166) 2026-02-16 04:18:36 +00:00
Gaurav 8979fc5f6a fix(core): propagate User-Agent header to setup-phase CodeAssist API calls (#19182) 2026-02-16 03:20:22 +00:00
N. Taylor Mullen 6eec9f3350 fix(core): Encourage non-interactive flags for scaffolding commands (#18804) 2026-02-15 20:26:59 +00:00
N. Taylor Mullen 884acda2dc test: fix hook integration test flakiness on Windows CI (#18665) 2026-02-15 19:42:13 +00:00
Bryan Morgan 7f7424dd1e fix(workflows): fix GitHub App token permissions for maintainer detection (#19139) 2026-02-15 10:08:28 -05:00
Srinath Padmanabhan 78130d4bb7 fix(cli): wrap terminal capability queries in hidden sequence (#19080)
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-15 04:08:13 +00:00
Krushna Korade bcd547baf6 feat: add /commands reload to refresh custom TOML commands (#19078) 2026-02-14 20:25:30 +00:00
Aishanee Shah 5559d40f31 refactor(core): complete centralization of core tool definitions (#18991) 2026-02-14 04:55:02 +00:00
Michael Bleigh a129dbcdd4 feat(sdk): implement support for custom skills (#19031) 2026-02-14 02:09:31 +00:00
g-samroberts 9fc7b56793 Revamp automated changelog skill (#18974) 2026-02-14 00:40:06 +00:00
Tommaso Sciortino 02da5ebbc1 chore: fix dep vulnerabilities (#19036) 2026-02-13 23:45:33 +00:00
Jacob Richman 401bef1d2b bug(ui) fix flicker refreshing background color (#19041) 2026-02-13 23:33:02 +00:00
Jerop Kipruto 9df604b01b feat(plan): hide plan write and edit operations on plans in Plan Mode (#19012) 2026-02-13 23:15:21 +00:00
Shreya Keshive 4e1b3b5f57 feat(cleanup): enable 30-day session retention by default (#18854) 2026-02-13 22:57:55 +00:00
Jerop Kipruto f87468c644 refactor: use CoreToolCallStatus in the the history data model (#19033) 2026-02-13 22:20:14 +00:00
Tommaso Sciortino e7e4c68c5c fix windows escaping (and broken tests) (#19011) 2026-02-13 22:19:08 +00:00
Jenna Inouye c7237f0c79 Docs: Refresh docs to organize and standardize reference materials. (#18403) 2026-02-13 22:09:17 +00:00
Michael Bleigh f76e24c00f feat(sdk): Implement dynamic system instructions (#18863)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2026-02-13 20:48:35 +00:00
Adib234 f460ab841d fix(plan): persist the approval mode in UI even when agent is thinking (#18955) 2026-02-13 20:02:39 +00:00
N. Taylor Mullen c2f62b2a2b docs: fix inconsistent commandRegex example in policy engine (#19027) 2026-02-13 20:02:07 +00:00
Sandy Tao e844a57bfc feat(core): fallback to chat-base when using unrecognized models for chat (#19016) 2026-02-13 19:00:08 +00:00
Sandy Tao 9c285eaf15 fix(core): Prevent loop detection false positives on lists with long shared prefixes (#18975) 2026-02-13 10:58:46 -08:00
Tommaso Sciortino c0e7da42b2 Remove unnecessary eslint config file (#19015) 2026-02-13 18:27:40 +00:00
Emily Hedlund b16c9a5ebd fix(vscode): resolve unsafe type assertion lint errors (#19006) 2026-02-13 17:54:41 +00:00
Tommaso Sciortino 3bed7bbe8d Adjust lint rules to avoid unnecessary warning. (#18970) 2026-02-13 17:30:28 +00:00
christine betts e1b9002b35 Enable in-CLI extension management commands for team (#18957) 2026-02-13 17:03:28 +00:00
Jerop Kipruto 60be42f095 refactor(core): adopt CoreToolCallStatus enum for type safety (#18998) 2026-02-13 16:27:20 +00:00
N. Taylor Mullen d0c6a56c65 fix(core): ensure --yolo does not force headless mode (#18976) 2026-02-13 15:43:50 +00:00
Adib234 d5dfae6bbf fix(plan): make question type required in AskUser tool (#18959) 2026-02-13 15:03:52 +00:00
Michael Bleigh b61a123da8 feat(sdk): implements SessionContext for SDK tool calls (#18862) 2026-02-13 07:28:48 +00:00
Michael Bleigh bed3eae0e1 feat(sdk): initial package bootstrap for SDK (#18861) 2026-02-13 06:08:27 +00:00
Tommaso Sciortino d82f66973f Fix drag and drop escaping (#18965) 2026-02-13 02:27:56 +00:00
Abhi 00f73b73bc refactor(cli): finalize event-driven transition and remove interaction bridge (#18569) 2026-02-13 02:14:35 +00:00
Aishanee Shah b62c6566be refactor(core): centralize tool definitions (Group 1: replace, search, grep) (#18944) 2026-02-13 02:05:33 +00:00
g-samroberts ca374dcf47 Update installation guide (#18823) 2026-02-13 01:21:10 +00:00
Allen Hutchison 696198be87 feat(policy): add --policy flag for user defined policies (#18500)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-13 00:25:23 +00:00
Philippe 5b4884692b fix(vim): vim support that feels (more) complete (#18755)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-13 00:22:39 +00:00
Jacob Richman 55ec0f043c feat(cli): disable ctrl-s shortcut outside of alternate buffer mode (#18887) 2026-02-12 23:00:13 +00:00
Shreya Keshive 44bcba323f feat(admin): Add admin controls documentation (#18644) 2026-02-12 22:39:42 +00:00
Jacob Richman c00de442e5 bug(cli) fix flicker due to AppContainer continuous initialization (#18958) 2026-02-12 22:16:46 +00:00
Jerop Kipruto 8275871963 Hide AskUser tool validation errors from UI (agent self-corrects) (#18954) 2026-02-12 21:49:07 +00:00
Jerop Kipruto e8e681c670 feat(ui): align AskUser color scheme with UX spec (#18943) 2026-02-12 21:10:25 +00:00
christine betts 991b2c6002 Add generic searchable list to back settings and extensions (#18838) 2026-02-12 20:50:41 +00:00
Jacob Richman 207ac6f2dc ui(polish) blend background color with theme (#18802) 2026-02-12 19:56:07 +00:00
Dmitry Lyalin db00c5abf3 feat(cli): prototype clean UI toggle and minimal-mode bleed-through (#18683) 2026-02-12 19:25:24 +00:00
Jack Wotherspoon b0cfbc6cd8 fix: character truncation in raw markdown mode (#18938) 2026-02-12 19:16:56 +00:00
Adib234 0b3130cec7 fix(plan): isolate plan files per session (#18757) 2026-02-12 19:02:59 +00:00
Adam Weidman d243dfce14 chore: cleanup unused and add unlisted dependencies in packages/a2a-server (#18916) 2026-02-12 18:40:52 +00:00
Sandy Tao 2e91c03e08 feat: add strict seatbelt profiles and remove unusable closed profiles (#18876) 2026-02-12 18:33:54 +00:00
Sandy Tao 2d38623472 fix(github-actions): use robot PAT for release creation to trigger release notes (#18794) 2026-02-12 18:01:04 +00:00
Tommaso Sciortino 375ebca2da feat(cli): support Ctrl-Z suspension (#18931)
Co-authored-by: Bharat Kunwar <brtkwr@gmail.com>
2026-02-12 17:55:56 +00:00
Adib234 868f43927e feat(plan): create metrics for usage of AskUser tool (#18820)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-02-12 17:46:59 +00:00
N. Taylor Mullen 27a1bae03b feat(core): refine Plan Mode system prompt for agentic execution (#18799) 2026-02-12 17:37:47 +00:00
Abhijit Balaji ddcfe5b1f2 fix(core): prioritize conditional policy rules and harden Plan Mode (#18882) 2026-02-12 17:04:39 +00:00
Dmitry Lyalin f603f4a12b fix(cli): dismiss '?' shortcuts help on hotkeys and active states (#18583)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-02-12 16:35:40 +00:00
christine betts 2ca183ffc9 Show notification when there's a conflict with an extensions command (#17890) 2026-02-12 16:29:06 +00:00
matt korwel 099aa9621c fix(core): ensure sub-agents are registered regardless of tools.allowed (#18870) 2026-02-12 02:12:01 +00:00
g-samroberts fe75de3efb Update changelog for v0.28.0 and v0.29.0-preview0 (#18819) 2026-02-12 02:03:00 +00:00
Abhi fad9f46273 refactor(cli): consolidate useToolScheduler and delete legacy implementation (#18567) 2026-02-12 01:49:30 +00:00
Bryan Morgan a1148ea1f1 fix(workflows): improve maintainer detection for automated PR actions (#18869) 2026-02-11 20:56:43 -05:00
Abhijit Balaji 0e85e021dc feat(cli): deprecate --allowed-tools and excludeTools in favor of policy engine (#18508) 2026-02-12 00:49:48 +00:00
Abhi c370d2397b refactor(cli): simplify UI and remove legacy inline tool confirmation logic (#18566) 2026-02-12 00:46:58 +00:00
Gal Zahavi 08e8eeab84 fix(core): improve headless mode detection for flags and query args (#18855) 2026-02-12 00:20:54 +00:00
Richie Foreman 941691ce72 fix(mcp): Ensure that stdio MCP server execution has the GEMINI_CLI=1 env variable populated. (#18832) 2026-02-12 00:07:51 +00:00
Pyush Sinha b8008695db refactor(cli): Reactive useSettingsStore hook (#14915) 2026-02-11 23:40:27 +00:00
Christian Gunderman 6c1773170e More grep prompt tweaks (#18846) 2026-02-11 21:55:27 +00:00
Dev Randalpura 00966062b8 Removed getPlainTextLength (#18848) 2026-02-11 21:47:02 +00:00
Adam Weidman 4138667bae feat(a2a): add value-resolver for auth credential resolution (#18653) 2026-02-11 21:23:28 +00:00
Sandy Tao bfa791e13d feat(core): update internal utility models to Gemini 3 (#18773) 2026-02-11 20:20:14 +00:00
Adib234 e9a9474810 Revert unintended credentials exposure (#18840) 2026-02-11 20:06:28 +00:00
Jerop Kipruto 02adfe2bca docs(plan): add ask_user tool documentation (#18830) 2026-02-11 20:04:01 +00:00
Christian Gunderman 2a08456ed0 Update prompt and grep tool definition to limit context size (#18780) 2026-02-11 19:20:51 +00:00
christine betts 2dac98dc8d Remove experimental note in extension settings docs (#18822) 2026-02-11 19:17:51 +00:00
Jerop Kipruto 77849cadac docs(plan): add documentation for plan mode tools (#18827) 2026-02-11 18:53:43 +00:00
Adib234 84ce53aafa feat(plan): allow skills to be enabled in plan mode (#18817)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2026-02-11 17:59:03 +00:00
Sandy Tao b19b026f30 fix(cli): update F12 behavior to only open drawer if browser fails (#18829) 2026-02-11 17:45:43 +00:00
Jacob Richman eb9223b6a4 Fix pressing any key to exit select mode. (#18421) 2026-02-11 17:38:01 +00:00
Jerop Kipruto 65d26e73a2 feat(plan): document and validate Plan Mode policy overrides (#18825) 2026-02-11 17:32:02 +00:00
Brad Dux 0080589939 fix(cli): resolve double rendering in shpool and address vscode lint warnings (#18704) 2026-02-11 17:29:18 +00:00
Sehoon Shon 34a47a51f4 fix(core): cache CLI version to ensure consistency during sessions (#18793) 2026-02-11 17:01:50 +00:00
Dmitry Lyalin f5dd1068f6 fix(core): complete MCP discovery when configured servers are skipped (#18586)
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-11 16:30:46 +00:00
matt korwel c202cf3145 perf(cli): truncate large debug logs and limit message history (#18663) 2026-02-11 15:17:01 +00:00
Jack Wotherspoon 5baad108d9 feat: multi-line text answers in ask-user tool (#18741) 2026-02-11 14:14:53 +00:00
Dev Randalpura 63e9d5d15f perf(ui): optimize table rendering by memoizing styled characters (#18770) 2026-02-11 13:10:30 +00:00
Abhi 3776c4d613 feat(masking): enable tool output masking by default (#18564) 2026-02-11 06:21:55 +00:00
Sandy Tao 2af5a3a01e fix(cli): allow closing debug console after auto-open via flicker (#18795) 2026-02-11 05:37:23 +00:00
Christian Gunderman 0d034b8c18 Introduce limits for search results. (#18767) 2026-02-11 03:50:10 +00:00
Jerop Kipruto 49d55d972e feat(core): formalize 5-phase sequential planning workflow (#18759) 2026-02-11 03:02:20 +00:00
Dmitry Lyalin 7a02d7261a feat(cli): add setting to hide shortcuts hint UI (#18562) 2026-02-11 02:46:20 +00:00
Jerop Kipruto 9c11ff2d58 test(evals): mark all save_memory evals as USUALLY_PASSES due to unreliability (#18786) 2026-02-11 02:16:52 +00:00
Abhijit Balaji b3ecac7086 fix(evals): prevent false positive in hierarchical memory test (#18777) 2026-02-11 01:51:05 +00:00
Brad Dux 6d3fff2ea4 fix(core): prevent race condition in policy persistence (#18506)
Co-authored-by: Allen Hutchison <adh@google.com>
2026-02-10 23:35:09 +00:00
Jacob Richman be2ebd1772 Add autoconfigure memory usage setting to the dialog (#18510)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-10 23:24:08 +00:00
N. Taylor Mullen cb4e1e684d chore(core): update activate_skill prompt verbiage to be more direct (#18605) 2026-02-10 22:17:42 +00:00
Adam Weidman b7a3243334 chore: cleanup unused and add unlisted dependencies in packages/core (#18762) 2026-02-10 22:07:06 +00:00
gemini-cli-robot 8257ec447a chore(release): bump version to 0.30.0-nightly.20260210.a2174751d (#18772) 2026-02-10 17:13:00 -05:00
Shreya Keshive 9590a092ae Revert "fix(mcp): ensure MCP transport is closed to prevent memory leaks" (#18771) 2026-02-10 22:00:36 +00:00
Dev Randalpura 49533cd106 feat(ux): added text wrapping capabilities to markdown tables (#18240)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-02-10 21:12:53 +00:00
Kevin Ramdass a2174751de feat(telemetry): Ensure experiment IDs are included in OpenTelemetry logs (#18747) 2026-02-10 21:01:35 +00:00
Christian Gunderman 8b762111a8 Fix issue where Gemini CLI creates tests in a new file (#18409) 2026-02-10 20:53:29 +00:00
Adam Weidman c03d96b46c chore: cleanup unused and add unlisted dependencies in packages/cli (#18749) 2026-02-10 20:53:19 +00:00
Sehoon Shon ea1f19aa52 fix(cli): fix history navigation regression after prompt autocomplete (#18752) 2026-02-10 20:53:06 +00:00
Christian Gunderman 2eb1c92347 Fix issues with rip grep (#18756) 2026-02-10 20:48:56 +00:00
Andrew Garrett ef02cec2cd fix(cli): hide scrollbars when in alternate buffer copy mode (#18354)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-02-10 20:30:27 +00:00
Jacob Richman f9fc9335f5 Code review cleanup for thinking display (#18720) 2026-02-10 19:12:40 +00:00
Sehoon Shon 9813531f81 Update Gemini.md to use the curent year on creating new files (#18460) 2026-02-10 19:06:17 +00:00
N. Taylor Mullen 55571de066 feat: redact disabled tools from system prompt (#13597) (#18613) 2026-02-10 19:00:36 +00:00
Jack Wotherspoon 740f0e4c3d fix: allow ask_user tool in yolo mode (#18541) 2026-02-10 18:56:51 +00:00
N. Taylor Mullen b37e67451a ci: shard windows tests and fix event listener leaks (#18670) 2026-02-10 18:46:42 +00:00
Aishanee Shah 262138cad5 test: add model-specific snapshots for coreTools (#18707)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2026-02-10 18:41:01 +00:00
Keith Guerin 5920750c24 ui: update & subdue footer colors and animate progress indicator (#18570) 2026-02-10 17:36:20 +00:00
Sandy Tao f5b1245f51 feat(cli): defer devtools startup and integrate with F12 (#18695) 2026-02-10 16:54:23 +00:00
Sri Pasumarthi f2ca0bb38d feat: add extensionsExplore setting to enable extensions explore UI. (#18686) 2026-02-10 16:49:24 +00:00
Jack Wotherspoon 4e9bafdacd chore: consolidate to green in ask user dialog (#18734) 2026-02-10 16:01:06 +00:00
N. Taylor Mullen 41bbe6ca0a fix(core): standardize tool formatting in system prompts (#18615) 2026-02-10 15:30:08 +00:00
Shreya Keshive eb5492f9b5 fix(ide): fix ide nudge setting (#18733) 2026-02-10 15:29:22 +00:00
matt korwel 37f128a109 feat(routing): restrict numerical routing to Gemini 3 family (#18478) 2026-02-10 14:25:21 +00:00
Jack Wotherspoon 79753ec5ec fix: move toasts location to left side (#18705) 2026-02-10 13:39:28 +00:00
Adib234 e151b4890b fix(plan): update persistent approval mode setting (#18638)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2026-02-10 13:07:04 +00:00
Jerop Kipruto e6b43cb846 feat(cli): update approval mode labels and shortcuts per latest UX spec (#18698) 2026-02-10 12:45:14 +00:00
N. Taylor Mullen 2ae5e1ae20 feat(core): optimize sub-agents system prompt intro (#18608) 2026-02-10 08:25:42 +00:00
N. Taylor Mullen 67d9b76e81 test(core): remove hardcoded model from TestRig (#18710) 2026-02-10 07:54:23 +00:00
N. Taylor Mullen 4a3c7ae8b7 docs(skills): enhance pr-creator safety and interactivity (#18616) 2026-02-10 05:38:10 +00:00
Christian Gunderman bd2744031f Fix layout rounding. (#18667) 2026-02-10 04:53:49 +00:00
N. Taylor Mullen 92a5f725a1 refactor(core): refine Security & System Integrity section in system prompt (#18601) 2026-02-10 04:32:36 +00:00
N. Taylor Mullen 4494f9e062 test(cli): fix AppContainer act() warnings and improve waitFor resilience (#18676) 2026-02-09 20:44:22 -08:00
N. Taylor Mullen ece001f264 fix(ui): remove redundant newlines in Gemini messages (#18538) 2026-02-10 04:18:21 +00:00
Dmitry Lyalin d3cfbdb3b7 Inline thinking bubbles with summary/full modes (#18033)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-02-10 03:24:41 +00:00
Jerop Kipruto 7a132512cf docs: remove TOC marker from Plan Mode header (#18678) 2026-02-10 03:13:04 +00:00
Spencer 6dae3a5402 Feature/quota visibility 16795 (#18203) 2026-02-10 02:53:10 +00:00
N. Taylor Mullen 0a3ecf3a75 fix(cli): Improve header spacing (#18531) 2026-02-10 02:12:42 +00:00
Jack Wotherspoon 9081743a7f feat: Ctrl+O to expand paste placeholder (#18103) 2026-02-10 02:04:34 +00:00
joshualitt 89d4556c45 feat(core): Render memory hierarchically in context. (#18350) 2026-02-10 02:01:59 +00:00
Aishanee Shah 5d0570b113 refactor(core): centralize core tool definitions and support model-specific schemas (#18662) 2026-02-10 01:29:52 +00:00
Tommaso Sciortino eb94284256 Properly parse at-commands with narrow non-breaking spaces (#18677) 2026-02-10 00:51:24 +00:00
N. Taylor Mullen cc2798018b feat: handle multiple dynamic context filenames in system prompt (#18598) 2026-02-10 00:37:08 +00:00
g-samroberts c9f9a7f67a Change event type for release (#18693) 2026-02-10 00:26:20 +00:00
Christian Gunderman fd65416a2f Disallow unsafe type assertions (#18688) 2026-02-10 00:10:15 +00:00
Gal Zahavi bce1caefd0 feat(cli): disable folder trust in headless mode (#18407) 2026-02-09 23:46:49 +00:00
Adib234 80057c5208 Fix number of lines being reported in rewind confirmation dialog (#18675) 2026-02-09 23:11:53 +00:00
Sandy Tao 14219bb57d chore: remove unused exports and redundant hook files (#18681) 2026-02-09 23:01:23 +00:00
Sandy Tao ef957a368d feat(cli): add DevTools integration with gemini-cli-devtools (#18648) 2026-02-09 22:03:10 +00:00
N. Taylor Mullen a3e5b564f7 fix(cli): correct 'esc to cancel' position and restore duration display (#18534) 2026-02-09 21:44:39 +00:00
Tommaso Sciortino 1b98c1f806 refactor: push isValidPath() into parsePastedPaths() (#18664) 2026-02-09 21:19:51 +00:00
Jerop Kipruto 9e41b2cd89 feat: enable plan mode experiment in settings (#18636) 2026-02-09 21:10:11 +00:00
Aishanee Shah 3fb1937247 refactor(core): model-dependent tool definitions (#18563) 2026-02-09 20:46:23 +00:00
Jacob Richman 07056c8f16 Harded code assist converter. (#18656) 2026-02-09 20:45:55 +00:00
joshualitt 08dca3e1d6 bug(core): Fix minor bug in migration logic. (#18661) 2026-02-09 20:41:12 +00:00
Jack Wotherspoon bcc0f27594 chore: make ask_user header description more clear (#18657) 2026-02-09 20:14:28 +00:00
Tommaso Sciortino 262e8384d4 Allow @-includes outside of workspaces (with permission) (#18470) 2026-02-09 12:24:28 -08:00
Abhijith V Ashok e73288f25f Added "" as default value, since getText() used to expect a string only and thus crashed when undefined... Fixes #18076 (#18099) 2026-02-09 12:13:12 -08:00
N. Taylor Mullen aebc107d2c feat: move shell efficiency guidelines to tool description (#18614) 2026-02-09 18:51:13 +00:00
Aswin Ashok 469cbca67f fix(chore): Support linting for cjs (#18639)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-02-09 18:36:16 +00:00
N. Taylor Mullen cb7fca01b2 docs: add legacy snippets convention to GEMINI.md (#18597) 2026-02-09 10:29:55 -08:00
christine betts 81ac5be30b Remove relative docs links (#18650) 2026-02-09 18:08:39 +00:00
Gal Zahavi 81ccd80c6d feat(cli): implement atomic writes and safety checks for trusted folders (#18406) 2026-02-09 17:16:56 +00:00
Sandy Tao 01906a9205 fix: shorten tool call IDs and fix duplicate tool name in truncated output filenames (#18600) 2026-02-09 17:09:17 +00:00
N. Taylor Mullen da66c7c0d1 chore(evals): update validation_fidelity_pre_existing_errors to USUALLY_PASSES (#18617) 2026-02-09 01:31:22 -08:00
N. Taylor Mullen fe70052baf fix(evals): update save_memory evals and simplify tool description (#18610) 2026-02-09 01:06:03 -08:00
Andrew Garrett 8cbe851339 Fix newline insertion bug in replace tool (#18595) 2026-02-09 06:37:53 +00:00
N. Taylor Mullen d45a45d565 chore: strengthen validation guidance in system prompt (#18544) 2026-02-09 05:32:46 +00:00
Jerop Kipruto 69f562b38f docs: Add Plan Mode documentation (#18582) 2026-02-09 03:25:02 +00:00
N. Taylor Mullen cb73fbf384 feat(core): transition sub-agents to XML format and improve definitions (#18555) 2026-02-09 02:25:04 +00:00
Jerop Kipruto 375c104b32 fix(core): ensure enter_plan_mode tool registration respects experimental.plan (#18587) 2026-02-09 01:57:01 +00:00
N. Taylor Mullen 97a4e62dfa feat(core): conditionally include ctrl+f prompt based on interactive shell setting (#18561) 2026-02-09 00:23:22 +00:00
Tommaso Sciortino 29a6aecffc propagate abortSignal (#18477) 2026-02-08 21:56:26 +00:00
N. Taylor Mullen 92012365ca fix(core): correct escaped interpolation in system prompt (#18557) 2026-02-08 21:08:17 +00:00
Abhi 802bcf4dee refactor(cli): switch useToolScheduler to event-driven engine (#18565) 2026-02-08 20:28:37 +00:00
Jarrod Whelan 4a48d7cf93 feat(cli): truncate shell output in UI history and improve active shell display (#17438) 2026-02-08 08:09:48 +00:00
Abhi 31522045cd refactor(config): remove experimental.enableEventDrivenScheduler setting (#17924) 2026-02-08 04:05:03 +00:00
Abhi 11951592aa feat(core): pause agent timeout budget while waiting for tool confirmation (#18415) 2026-02-08 04:03:47 +00:00
Abhi bc8ffa6631 feat(context): add remote configuration for tool output masking thresholds (#18553) 2026-02-08 03:04:46 +00:00
N. Taylor Mullen 86bd7dbd4f chore: remove feedback instruction from system prompt (#18560) 2026-02-08 02:22:50 +00:00
N. Taylor Mullen eee95c509d refactor(core): remove memory tool instructions from Gemini 3 prompt (#18559) 2026-02-08 01:57:53 +00:00
Abhi a1f2aacd1e feat(core): exempt high-signal tools from output masking (#18545) 2026-02-07 23:56:45 +00:00
Jack Wotherspoon 979bbee485 chore: update colors for ask_user dialog (#18543) 2026-02-07 22:11:51 +00:00
N. Taylor Mullen 7450c926d1 docs: require pr-creator skill for PR generation (#18536) 2026-02-07 21:22:00 +00:00
Jerop Kipruto be6723ebcc chore: remove redundant planning prompt from final shell (#18528) 2026-02-07 19:45:09 +00:00
Thanh Nguyen af606aed9b fix(cli): add SS3 Shift+Tab support for Windows terminals (#18187) 2026-02-07 15:38:59 +00:00
Jacob Richman a37844e5a1 Code review fixes for show question mark pr. (#18480) 2026-02-07 06:35:14 +00:00
g-samroberts 6f1a5bf81d Patch for generate changelog docs yaml file (#18496)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-07 03:13:29 +00:00
N. Taylor Mullen 9178b31629 feat(core): overhaul system prompt for rigor, integrity, and intent alignment (#17263) 2026-02-07 03:13:07 +00:00
Sandy Tao 19dc40825e fix(core): expand excludeTools with legacy aliases for renamed tools (#18498) 2026-02-07 00:49:25 +00:00
N. Taylor Mullen bc9b3052ee fix(cli): reload skills and agents on extension restart (#18411) 2026-02-07 00:40:43 +00:00
Jerop Kipruto 3b0649d408 feat(cli): update approval modes UI (#18476) 2026-02-07 00:23:59 +00:00
Sandy Tao 7409ce5df6 feat(cli): add WebSocket-based network logging and streaming chunk support (#18383) 2026-02-07 00:20:22 +00:00
Jerop Kipruto e3796d137a fix(core): prevent subagent bypass in plan mode (#18484) 2026-02-06 22:55:00 +00:00
Abhijit Balaji ee68a10e9c chore: Update build-and-start script to support argument forwarding (#18241) 2026-02-06 22:39:14 +00:00
Sandy Tao 28805a4b2d refactor: simplify tool output truncation to single config (#18446) 2026-02-06 21:41:19 +00:00
joshualitt fd72a8c40f bug(core): Ensure storage is initialized early, even if config is not. (#18471) 2026-02-06 21:33:13 +00:00
Abhi 63f7e30790 feat(core): implement persistence and resumption for masked tool outputs (#18451) 2026-02-06 21:22:22 +00:00
Tommaso Sciortino e844d4f45f Refactor atCommandProcessor (#18461) 2026-02-06 20:49:11 +00:00
joshualitt 7a8d6f6095 bug(core): Fix bug when saving plans. (#18465) 2026-02-06 20:45:37 +00:00
Zac Koch 95d79b7cbe fix- windows: add shell: true for spawnSync to fix EINVAL with .cmd editors (#18408) 2026-02-06 19:47:33 +00:00
Jerop Kipruto 601f0606da feat(plan): add positive test case and update eval stability policy (#18457) 2026-02-06 19:45:22 +00:00
Spencer ad6d3fd902 fix(config): treat system settings as read-only during migration and warn user (#18277) 2026-02-06 19:35:58 +00:00
Dmitry Lyalin 1f1cf756c8 Add shortcuts hint and panel for discoverability (#18035) 2026-02-06 19:33:39 +00:00
Gal Zahavi ec5836c4d6 fix(cli): improve focus navigation for interactive and background shells (#18343) 2026-02-06 18:36:14 +00:00
Shreya Keshive f062f56b43 feat(admin): apply MCP allowlist to extensions & gemini mcp list command (#18442) 2026-02-06 18:07:00 +00:00
Sehoon Shon 61d92c4a21 Remove previewFeatures and default to Gemini 3 (#18414) 2026-02-06 18:02:57 +00:00
g-samroberts 1495294cc0 Automatically generate change logs on release (#18401)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-06 17:55:46 +00:00
christine betts d86b1f7b7e Enable extension config by default (#18447) 2026-02-06 17:27:39 +00:00
christine betts 099fea2434 Add extension registry client (#18396) 2026-02-06 17:14:14 +00:00
Jerop Kipruto 1d70aa5c1b feat(plan): add behavioral evals for plan mode (#18437) 2026-02-06 16:51:12 +00:00
joshualitt 6fb3b09003 Shorten temp directory (#17901) 2026-02-06 16:10:17 +00:00
Abhi 30354892b3 feat(core,cli): implement session-linked tool output storage and cleanup (#18416) 2026-02-06 06:36:42 +00:00
Abhi 8ec176e005 feat(context): implement observation masking for tool outputs (#18389) 2026-02-06 01:53:11 +00:00
Gaurav 289769f544 perf(ui): optimize stripUnsafeCharacters with regex (#18413) 2026-02-06 01:46:23 +00:00
Adib234 4ffc349c18 feat(plan): create a metric for execution of plans generated in plan mode (#18236) 2026-02-05 23:46:34 +00:00
Gal Zahavi 83c6342e6e chore: update folder trust error messaging (#18402)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-05 23:26:30 +00:00
Adib234 fe975da91e feat(plan): implement support for MCP servers in Plan mode (#18229) 2026-02-05 21:37:28 +00:00
Yuna Seol 00a739e84c feat: expand verify-release to macOS and Windows (#18145)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-02-05 21:21:55 +00:00
Philippe 2498114df6 fix: resolve infinite loop when using 'Modify with external editor' (#17453)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: ehedlund <ehedlund@google.com>
2026-02-05 20:52:41 +00:00
Jacob Richman 8efae719ee ux(polish) autocomplete in the input prompt (#18181) 2026-02-05 20:38:29 +00:00
Tommaso Sciortino 9ca7300c90 Fix permission check (#18395) 2026-02-05 20:19:17 +00:00
Jerop Kipruto dc09b4988d feat(plan): integrate planning artifacts and tools into primary workflows (#18375) 2026-02-05 20:07:33 +00:00
Adib234 bce57ca1af feat(plan): fix invalid tool calls in plan mode (#18352) 2026-02-05 20:04:03 +00:00
Jerop Kipruto 6860556afe feat(plan): add guidance on iterating on approved plans vs creating new plans (#18346) 2026-02-05 19:11:45 +00:00
Jacob Richman 258643dec4 undo (#18147) 2026-02-05 18:54:46 +00:00
Grant McCloskey 5d04a01b06 fix(cli): color extension link success message green (#18386) 2026-02-05 18:34:09 +00:00
Alisa 5b9ea35b63 Improving memory tool instructions and eval testing (#18091) 2026-02-05 18:07:47 +00:00
Jerop Kipruto 4a6e3eb646 feat(plan): support replace tool in plan mode to edit plans (#18379) 2026-02-05 17:51:35 +00:00
Tommaso Sciortino e4c80e6382 fix: Windows Specific Agent Quality & System Prompt (#18351) 2026-02-05 17:50:12 +00:00
Adam DeMuri ee2c8eef19 feat(cli): Add W, B, E Vim motions and operator support (#16209)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-02-05 17:29:30 +00:00
Peter Friese 1cae5ab158 fix(core): handle non-compliant mcpbridge responses from Xcode 26.3 (#18376) 2026-02-05 17:03:32 +00:00
christine betts ee58e1e3c1 Add support for /extensions config command (#17895) 2026-02-05 16:04:24 +00:00
Philippe e3b8490edf fix(core): add retry logic for transient SSL/TLS errors (#17318) (#18310) 2026-02-05 15:47:35 +00:00
Shreya Keshive 2566057e44 feat(admin): Implement admin allowlist for MCP server configurations (#18311) 2026-02-05 13:46:01 +00:00
Jack Wotherspoon a342c954e9 chore: correct docs as skills and hooks are stable (#18358) 2026-02-05 13:31:22 +00:00
g-samroberts d29383a132 Changelogs for 0.27.0 and 0.28.0-preview0 (#18336)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-05 02:22:31 +00:00
Grant McCloskey a3af4a8cae feat(skills): implement linking for agent skills (#18295) 2026-02-04 22:11:01 +00:00
Chris Coutinho 821355c429 fix(mcp): ensure MCP transport is closed to prevent memory leaks (#18054)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-02-04 21:00:41 +00:00
Abhi 3afc8f25e1 fix(hooks): remove unnecessary logging for hook registration (#18332) 2026-02-04 19:48:33 +00:00
Adib234 d79478689f Stop showing an error message in /plan (#18333) 2026-02-04 19:43:25 +00:00
Jerop Kipruto 650980af37 feat(core): add enter_plan_mode tool (#18324) 2026-02-04 18:57:41 +00:00
g-samroberts bd156e6832 Add information about the agent skills lifecycle and clarify docs-writer skill metadata. (#18234)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2026-02-04 17:52:30 +00:00
Jack Wotherspoon b987e1780d feat: increase ask_user label limit to 16 characters (#18320) 2026-02-04 17:50:01 +00:00
Adib234 0012d95848 feat(plan): implement plan slash command (#17698) 2026-02-04 17:01:43 +00:00
Abhi fedc0c5d60 feat(core): remove hardcoded policy bypass for local subagents (#18153) 2026-02-04 15:20:36 +00:00
gemini-cli-robot 99e523a15f chore(release): bump version to 0.29.0-nightly.20260203.71f46f116 (#18243) 2026-02-04 14:43:29 +00:00
Christian Gunderman a0b6602d09 Fix issue where agent gets stuck at interactive commands. (#18272) 2026-02-04 07:02:09 +00:00
Abhi b39cefe14e feat(core): add default execution limits for subagents (#18274) 2026-02-04 06:28:00 +00:00
Sehoon Shon 94f4e5cc15 feat(core): enable getUserTierName in config (#18265) 2026-02-04 03:28:58 +00:00
Jerop Kipruto d866e7e6e7 feat(plan): unify workflow location in system prompt to optimize caching (#18258) 2026-02-04 03:11:28 +00:00
Christian Gunderman ed02b94570 Encourage agent to utilize ecosystem tools to perform work (#17881) 2026-02-04 02:02:25 +00:00
Gal Zahavi aba8c5f662 fix(cli): allow restricted .env loading in untrusted sandboxed folders (#17806) 2026-02-04 01:08:10 +00:00
Jack Wotherspoon d1cde575d9 fix: remove ask_user tool from non-interactive modes (#18154) 2026-02-03 23:41:36 +00:00
Gal Zahavi 71f46f1160 fix: enforce folder trust for workspace settings, skills, and context (#17596)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-03 22:53:31 +00:00
Sehoon Shon d63c34b6e1 feat(ui): move user identity display to header (#18216) 2026-02-03 21:51:21 +00:00
Shreya Keshive 7a6dfa3704 fix(sandbox): propagate GOOGLE_GEMINI_BASE_URL&GOOGLE_VERTEX_BASE_URL env vars (#18231) 2026-02-03 21:40:41 +00:00
Emily Hedlund 69f8273481 feat(core): require user consent before MCP server OAuth (#18132) 2026-02-03 21:26:00 +00:00
Shreya Keshive 1fc59484b1 feat(admin): add support for MCP configuration via admin controls (pt1) (#18223) 2026-02-03 21:19:14 +00:00
Adib234 53027af94c Add telemetry to rewind (#18122) 2026-02-03 21:17:29 +00:00
Jack Wotherspoon 69c0585ab2 feat: Add markdown rendering to ask_user tool (#18211) 2026-02-03 21:04:38 +00:00
christine betts 3e954930f1 Fix handling of empty settings (#18131) 2026-02-03 20:39:20 +00:00
christine betts 2cf3a14439 Reload skills when extensions change (#18225) 2026-02-03 20:31:14 +00:00
Adam Weidman 0f918f0cc8 feat(a2a): Add pluggable auth provider infrastructure (#17934) 2026-02-03 20:22:07 +00:00
David Pierce 75dbf9022c A2a admin setting (#17868) 2026-02-03 20:16:20 +00:00
Jerop Kipruto 675ca07c8b chore(core): explicitly state plan storage path in prompt (#18222) 2026-02-03 19:55:43 +00:00
Adam Weidman 40f505e257 docs: document GEMINI_CLI_HOME environment variable (#18219) 2026-02-03 19:49:37 +00:00
Serghei 5407878138 fix(core): Respect user's .gitignore preference (#15482)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2026-02-03 19:37:21 +00:00
christine betts 14e2e09d10 Match on extension ID when stopping extensions (#18218) 2026-02-03 19:29:15 +00:00
Adib234 0365f13caa feat(plan): use custom deny messages in plan mode policies (#18195) 2026-02-03 19:23:22 +00:00
Coco Sheng 3183e4137a fix(test): improve test isolation and enable subagent evaluations (#18138) 2026-02-03 19:05:26 +00:00
Jerop Kipruto 4aa295994d feat(plan): add exit_plan_mode ui and prompt (#18162) 2026-02-03 18:04:07 +00:00
Sehoon Shon e1bd1d239f Set default max attempts to 3 and use the common variable (#18209) 2026-02-03 17:47:13 +00:00
Adam Weidman b84585d0c8 feat(core): Add A2A auth config types (#18205) 2026-02-03 17:44:22 +00:00
Bryan Morgan 0e7944df4f refactor: localize ACP error parsing logic to cli package (#18193) 2026-02-03 16:32:20 +00:00
christine betts d8837ec95e Remove MCP servers on extension uninstall (#18121)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-03 16:18:09 +00:00
Adam Weidman dc37b190fa refactor(core): robust trimPreservingTrailingNewline and regression test (#18196) 2026-02-03 15:51:09 +00:00
Alexander Farber 19b1a74c99 feat(core): add draft-2020-12 JSON Schema support with lenient fallback (#15060)
Co-authored-by: A.K.M. Adib <adibakm@google.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-02-03 15:49:08 +00:00
Adib234 1d045792ce Add link to rewind doc in commands.md (#17961) 2026-02-03 15:06:33 +00:00
matt korwel a8b4c38c89 chore(core): reassign telemetry keys to avoid server conflict (#18161)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-03 06:43:57 -06:00
N. Taylor Mullen ad8796b02d feat(core): add .agents/skills directory alias for skill discovery (#18151) 2026-02-03 06:07:36 +00:00
Bryan Morgan e7bfd2bf83 fix(cli): resolve environment loading and auth validation issues in ACP mode (#18025)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-03 05:54:10 +00:00
Gaurav 1b274b081d fix(core): prioritize detailed error messages for code assist setup (#17852) 2026-02-03 04:27:55 +00:00
Sandy Tao 5b254c379c feat(core): rename search_file_content tool to grep_search and add legacy alias (#18003) 2026-02-03 04:18:24 +00:00
Jerop Kipruto ed26ea49e9 feat(plan): add core logic and exit_plan_mode tool definition (#18110) 2026-02-03 03:30:03 +00:00
Adib234 01e33465bd feat(plan): handle inconsistency in schedulers (#17813) 2026-02-03 03:10:04 +00:00
Jack Wotherspoon 18cce6a9ab fix: improve Ctrl+R reverse search (#18075) 2026-02-03 01:03:28 +00:00
Gal Zahavi 18d7d1a92c feat: update review-frontend-and-fix slash command to review-and-fix (#18146) 2026-02-03 00:44:20 +00:00
Shreya Keshive 0dd0b83612 fix(ide): no-op refactoring that moves the connection logic to helper functions (#18118) 2026-02-03 00:42:29 +00:00
Abhijit Balaji 4e4a55be35 feat(cli): implement automatic theme switching based on terminal background (#17976)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-02-03 00:39:17 +00:00
Pavan Shinde f57fd642df docs: fix help-wanted label spelling (#18114)
Co-authored-by: Christian Gunderman <gundermanc@gmail.com>
2026-02-03 00:38:52 +00:00
Sandy Tao 5e96373e6b feat(core): implement tool name aliasing for backward compatibility (#17974) 2026-02-03 00:34:14 +00:00
Jerop Kipruto 09beb648b8 refactor: migrate checks.ts utility to core and deduplicate (#18139) 2026-02-03 00:32:13 +00:00
Jerop Kipruto c159c85c89 fix(ui): prevent content leak in MaxSizedBox bottom overflow (#17991) 2026-02-02 23:37:33 +00:00
Jacob Richman 8cae90f404 Fix up/down arrow regression and add test. (#18108)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-02 13:55:45 -08:00
Jenna Inouye c5d0fc2c3e Docs: Revise docs/index.md (#17879) 2026-02-02 18:28:32 +00:00
Sandy Tao e860f517c0 feat(core): add setting to disable loop detection (#18008) 2026-02-02 18:13:20 +00:00
Sehoon Shon b0be1f1689 Sehoon/oncall filter (#18105)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-02-02 18:10:28 +00:00
Jenna Inouye 85dd6ef773 docs-writer skill: Update docs writer skill (#17928) 2026-02-02 18:07:25 +00:00
Jack Wotherspoon ae672881d1 docs: update clearContext to hookSpecificOutput (#18024) 2026-02-02 17:32:37 +00:00
Jerop Kipruto 9e7c10ad88 feat(plan): use placeholder for choice question "Other" option (#18101) 2026-02-02 17:00:13 +00:00
Victor Vianna 381669dce0 chore: delete autoAccept setting unused in production (#17862)
Co-authored-by: Victor Hugo Vianna Silva <victorvianna@google.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-02-02 13:49:17 +00:00
Bryan Morgan 707b3e85d5 fix(ci): prevent stale PR closer from incorrectly closing new PRs (#18069) 2026-02-01 15:13:29 -05:00
Bryan Morgan 7d36cc004f feat(acp): add session resume support (#18043)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-02-01 19:16:57 +00:00
Dmitry Lyalin cb4f0c6fa4 Fix Esc cancel during streaming (#18039) 2026-02-01 16:16:14 +00:00
Bryan Morgan b0f38104d7 fix(workflow): update maintainer check logic to be inclusive and case-insensitive (#18009) 2026-01-30 22:32:58 -05:00
Jacob Richman 7469ea0fca Fix truncation for AskQuestion (#18001) 2026-01-31 01:07:41 +00:00
Jacob Richman 00fdb30211 Support ctrl-C and Ctrl-D correctly Refactor so InputPrompt has priority over AppContainer for input handling. (#17993) 2026-01-31 00:11:14 +00:00
g-samroberts 0fe8492569 Fix broken link. (#17972) 2026-01-30 21:31:07 +00:00
Abhi 76387d22ae fix(core): ensure YOLO mode auto-approves complex shell commands when parsing fails (#17920) 2026-01-30 20:44:17 +00:00
Sehoon Shon a362b7b382 lower the default max retries to reduce contention (#17975) 2026-01-30 20:00:31 +00:00
Jerop Kipruto 71308caf05 feat(plan): refactor ToolConfirmationPayload to union type (#17980) 2026-01-30 19:51:45 +00:00
kevinjwang1 6396ab1ccb Add allowedExtensions setting (#17695) 2026-01-30 19:43:51 +00:00
Sehoon Shon 12531a06f8 run npx pointing to the specific commit SHA (#17970)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-30 19:42:29 +00:00
lottielin d1cd69a20d feat(core): enable overriding CODE_ASSIST_API_VERSION with env var (#17942)
Co-authored-by: Charlotte Lin <charlotteclin@google.com>
2026-01-30 19:12:04 +00:00
Jerop Kipruto 62346875e4 feat(plan): reuse standard tool confirmation for AskUser tool (#17864)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-01-30 18:32:21 +00:00
christine betts 13e013230b Fix broken link in docs (#17959) 2026-01-30 18:27:25 +00:00
Jacob Richman bb6a336ca9 Fix bugs where Rewind and Resume showed Ugly and 100X too verbose content. (#17940) 2026-01-30 18:09:27 +00:00
Shreya Keshive f14d0c6a17 feat(admin): provide actionable error messages for disabled features (#17815) 2026-01-30 18:05:22 +00:00
Gal Zahavi b611f9a519 feat: Implement background shell commands (#14849) 2026-01-30 17:53:09 +00:00
Abhi d3bca5d97a feat(core): implement dynamic policy registration for subagents (#17838) 2026-01-30 16:57:54 +00:00
Bryan Morgan 94f4e027f8 feat(ci): add npx smoke test to verify installability (#17927) 2026-01-30 16:09:59 +00:00
Abhi 95b7d69d5b refactor(hooks): remove legacy tools.enableHooks setting (#17867) 2026-01-30 15:15:48 +00:00
Abhi f605628624 perf(core): optimize token calculation and add support for multimodal tool responses (#17835) 2026-01-30 15:15:00 +00:00
Emily Hedlund 2238802e97 feat(core): implement interactive and non-interactive consent for OAuth (#17699) 2026-01-30 14:57:34 +00:00
Jacob Richman 32cfce16bb bug(ux) vim mode fixes. Start in insert mode. Fix bug blocking F12 and ctrl-X in vim mode. (#17938) 2026-01-30 07:31:47 +00:00
Jacob Richman 137080da45 Fix HalfLinePaddedBox in screenreader mode. (#17914) 2026-01-30 03:21:18 +00:00
Thomas Shephard 695785c69d feat: preserve EOL in files (#16087)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-30 00:57:06 +00:00
g-samroberts d43d772e65 Create skills page, update commands, refine docs (#17842) 2026-01-29 23:52:06 +00:00
Sandy Tao 59e3624ada feat(core): Isolate and cleanup truncated tool outputs (#17594) 2026-01-29 23:20:11 +00:00
Danielle Yim fdda3a2399 feat(core): Add GOOGLE_GENAI_API_VERSION environment variable support (#16177)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-29 22:45:37 +00:00
Alisa 2de39311cf Refactoring of disabling of mouse tracking in e2e tests (#17902) 2026-01-29 22:05:19 +00:00
Sehoon Shon fc926cd0b0 Revert "fix(core): resolve DEP0040 punycode deprecation via patch-package" (#17898) 2026-01-29 21:13:00 +00:00
Jack Wotherspoon 567761fbc0 chore: revert IDE specific ASCII logo (#17887) 2026-01-29 20:44:02 +00:00
Sehoon Shon f2591aada6 fix(cli): use correct setting key for Cloud Shell auth (#17884) 2026-01-29 20:21:17 +00:00
Sehoon Shon 74468928e8 Revert "chore: refresh package-lock.json to resolve inconsistencies"
This reverts commit d561b995c0.
2026-01-29 15:29:26 -05:00
Sehoon Shon d561b995c0 chore: refresh package-lock.json to resolve inconsistencies 2026-01-29 15:28:40 -05:00
Alisa b44e432f55 Disable mouse tracking e2e (#17880)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-29 19:25:11 +00:00
Coco Sheng bcc6ee596a fix(core): use GIT_CONFIG_GLOBAL to isolate shadow git repo configuration - Fixes #17877 (#17803) 2026-01-29 19:08:34 +00:00
Christian Gunderman bc258eba4c Cleanup post delegate_to_agent removal (#17875) 2026-01-29 18:24:35 +00:00
Adib234 0e30055ae4 feat(plan): create generic Checklist component and refactor Todo (#17741) 2026-01-29 18:13:18 +00:00
Atharva Ralegankar ac7687c1dd fix(core): resolve DEP0040 punycode deprecation via patch-package (#17692)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
2026-01-29 16:04:26 +00:00
Dev Randalpura f9da18e0cc feat(ux): update truncate dots to be shorter in tables (#17825) 2026-01-29 15:56:56 +00:00
Shreya Keshive f619cd8750 fix(admin): Rename secureModeEnabled to strictModeDisabled (#17789) 2026-01-29 15:31:00 +00:00
christine betts 42eedc9184 Resolve error thrown for sensitive values (#17826) 2026-01-29 14:59:26 +00:00
Adam Weidman eb17d94e91 docs: mark A2A subagents as experimental in subagents.md (#17863) 2026-01-29 14:48:27 +00:00
Jack Wotherspoon 9f1623688d fix: prevent ghost border for AskUserDialog (#17788) 2026-01-29 14:00:46 +00:00
Yuna Seol 7f066fd3a7 feat(cli): Display user identity (auth, email, tier) on startup (#17591)
Co-authored-by: Keith Guerin <keithguerin@gmail.com>
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-01-29 05:07:52 +00:00
Abhi 6d36219e55 feat(cli): show hooksConfig.enabled in settings dialog (#17810) 2026-01-29 04:58:20 +00:00
Benjamin G. 5cedd28733 Fix detection of bun as package manager (#17462)
Co-authored-by: Sehoon Shon <sshon@google.com>
2026-01-29 03:31:07 +00:00
Mark Cockram ba3e1ed1c7 fix(core): use returnDisplay for error result display (#14994)
Co-authored-by: Sehoon Shon <sshon@google.com>
2026-01-29 03:02:39 +00:00
Alexander Farber 7c2cdb225a fix(cli): handle PAT tokens and credentials in git remote URL parsing (#14650) 2026-01-29 02:41:30 +00:00
Tu Shaokun a91f4e692a fix(cli): list installed extensions when update target missing (#17082) 2026-01-29 02:13:40 +00:00
Vedant Mahajan 9bb175a506 test: add integration test to verify stdout/stderr routing (#17280)
Co-authored-by: Allen Hutchison <adh@google.com>
2026-01-29 00:01:57 +00:00
Sandy Tao 0b169e9867 fix(evals): use absolute path for activity log directory (#17830) 2026-01-28 15:20:21 -08:00
Tommaso Sciortino 553ae3ad69 feat(cli): update undo/redo keybindings to Cmd+Z/Alt+Z and Shift+Cmd+Z/Shift+Alt+Z (#17800) 2026-01-28 22:57:27 +00:00
Dev Randalpura b2265cfde4 fix(ux): fixed off-by-some wrapping caused by fixed-width characters (#17816) 2026-01-28 21:52:37 +00:00
Sehoon Shon bee1267e2a feat(cli): add user identity info to stats command (#17612) 2026-01-28 21:26:33 +00:00
Jacob Richman 30065c51fb Change height for the ToolConfirmationQueue. (#17799) 2026-01-28 21:23:51 +00:00
Dev Randalpura 065e69a12b feat(ux): update cell border color and created test file for table rendering (#17798) 2026-01-28 19:55:01 +00:00
g-samroberts 519a0e617a Update release notes pages for 0.26.0 and 0.27.0-preview. (#17744) 2026-01-28 19:35:37 +00:00
Krushna Korade 0465de303a fix: persist and restore workspace directories on session resume (#17454)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-01-28 19:07:58 +00:00
Spencer beaa134f0e feat(extensions): add support for custom themes in extensions (#17327) 2026-01-28 18:58:35 +00:00
Adib234 47f4a3e50e Fix unintended credential exposure to MCP Servers (#17311)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-28 18:56:15 +00:00
Allen Hutchison 3787c71d15 feat(core): add support for custom deny messages in policy rules (#17427) 2026-01-28 18:52:48 +00:00
Sandy Tao 9e09db1ddb feat(cli): enable activity logging for non-interactive mode and evals (#17703) 2026-01-28 17:02:41 +00:00
Jack Wotherspoon 25ae1a1b54 test: add more tests for AskUser (#17720) 2026-01-28 16:57:16 +00:00
Abhi 65accca296 fix(core): suppress duplicate hook failure warnings during streaming (#17727) 2026-01-28 16:40:44 +00:00
g-samroberts 72f0733d98 Fix docs-writer skill issues (#17734) 2026-01-28 16:15:53 +00:00
christine betts 4d4e16cc8c [extension config] Make breaking optional value non-optional (#17785) 2026-01-28 16:11:21 +00:00
Shreya Keshive 370b165769 fix(admin): rename advanced features admin setting (#17786) 2026-01-28 15:53:05 +00:00
Sehoon Shon 899e8a9edc /oncall dedup - wrap texts to nextlines (#17782) 2026-01-28 15:13:25 +00:00
kapsner 4dca5c27c6 feat(core): add support for positron ide (#15045) (#15047)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2026-01-28 15:08:03 +00:00
maruto 06c7dc561e fix: verify audio/video MIME types with content check (#16907) 2026-01-28 14:58:39 +00:00
Adib234 f54eaa1713 Rewind documentation (#17446) 2026-01-28 14:40:32 +00:00
steven semyung oh 6807a2fa28 Add a email privacy note to bug_report template (#17474)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-28 13:37:54 +00:00
erikus 9aeeb69ab0 feat(cli): include auth method in /bug (#17569)
Co-authored-by: Erik Staab <estaab@google.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-28 13:32:37 +00:00
jw bot 0a77999d73 test(core): mock fetch in OAuth transport fallback tests (#17059)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-28 13:30:08 +00:00
Abhi 9035ca32bc feat(skills): final stable promotion cleanup (#17726) 2026-01-28 04:56:04 +00:00
gemini-cli-robot ef3146eed6 chore(release): bump version to 0.28.0-nightly.20260128.adc8e11bb (#17725) 2026-01-28 03:25:06 +00:00
Leo Chiu ffbecd4eb4 docs: add CLI reference documentation (#17504)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-28 02:20:43 +00:00
Sehoon Shon 2c09785748 feat(cli): align hooks enable/disable with skills and improve completion (#16822) 2026-01-28 01:56:06 +00:00
N. Taylor Mullen 130b596c80 feat(commands): add /prompt-suggest slash command (#17264) 2026-01-28 01:32:20 +00:00
Alisa adc8e11bb1 Add support for an additional exclusion file besides .gitignore and .geminiignore (#16487)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-01-28 01:19:13 +00:00
Gal Zahavi 18efe82ddc feat: add review-frontend-and-fix command (#17707) 2026-01-28 01:19:00 +00:00
Abhi 7c445526a4 docs: remove 'experimental' syntax for hooks in docs (#17660) 2026-01-28 01:06:12 +00:00
Jacob Richman 5e41b7d29e feat(ui): add terminal cursor support (#17711) 2026-01-28 00:43:37 +00:00
Abhi fe8de892f7 docs(skills): remove experimental labels and update tutorials (#17714) 2026-01-28 00:42:41 +00:00
Sandy Tao 2a49965d37 fix(cli): Preserve settings dialog focus when searching (#17701) 2026-01-28 00:41:41 +00:00
Abhi 830e212758 feat(skills): promote skills settings to stable (#17713) 2026-01-28 00:09:52 +00:00
Jacob Richman d165b6d4e7 feat(ux) Expandable (ctrl-O) and scrollable approvals in alternate buffer mode. (#17640) 2026-01-28 00:06:24 +00:00
Abhi ff6547857e revert: promote Agent Skills to stable (#17693) (#17712) 2026-01-27 23:29:12 +00:00
Jacob Richman b51323b40c refactor(cli): keyboard handling and AskUserDialog (#17414) 2026-01-27 22:26:00 +00:00
Adam Weidman 3103697ea7 docs: Add Experimental Remote Agent Docs (#17697) 2026-01-27 22:15:28 +00:00
Abhi 6f6445994e feat(skills): promote Agent Skills to stable (#17693) 2026-01-27 21:50:22 +00:00
N. Taylor Mullen 5f569fa103 refactor(core): centralize path validation and allow temp dir access for tools (#17185)
Co-authored-by: Your Name <joshualitt@google.com>
2026-01-27 21:17:40 +00:00
Jacob Richman c9340a9c6f GEMINI.md polish (#17680) 2026-01-27 21:13:11 +00:00
Jerop Kipruto 0774f60e08 feat(plan): enable AskUser tool in Plan mode for clarifying questions (#17694) 2026-01-27 20:23:49 +00:00
Dev Randalpura 771ece03c9 fix(ux): have user message display a short path for pasted images (#17613) 2026-01-27 19:59:00 +00:00
g-samroberts 82687c6dc4 Update docs-writer skill for editing and add style guide for reference. (#17669) 2026-01-27 19:52:21 +00:00
Christian Gunderman b6cf189ab2 Fix issue where Gemini CLI can make changes when simply asked a question (#17608) 2026-01-27 19:47:33 +00:00
christine betts 9dc0994878 Load extension settings for hooks, agents, skills (#17245) 2026-01-27 19:34:14 +00:00
Jack Wotherspoon 36d618f72a feat: wire up AskUserTool with dialog (#17411) 2026-01-27 18:30:44 +00:00
Christian Gunderman 246a6d10c3 Sub-agents documentation. (#16639)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2026-01-27 18:24:37 +00:00
joshualitt dacc178d4e feat(core): Model family-specific system prompts (#17614) 2026-01-27 18:21:05 +00:00
Adib234 894bd66dc6 Fix missing slash commands when Gemini CLI is in a project with a package.json that doesn't follow semantic versioning (#17561) 2026-01-27 18:18:16 +00:00
Sehoon Shon 50e4f9380b feat(cli): show candidate issue state reason and duplicate status in triage (#17676) 2026-01-27 18:07:52 +00:00
Tommaso Sciortino f03f2e8907 revert bad changes to tests (#17673) 2026-01-27 17:25:57 +00:00
Shreya Keshive 7904f973a0 fix(admin): fix a few bugs related to admin controls (#17590) 2026-01-27 17:14:11 +00:00
christine betts a63277c1d0 Update sidebar to resolve site build issues (#17674) 2026-01-27 17:09:10 +00:00
Tommaso Sciortino 8b2b71c8ef Change formatting to prevent UI redressing attacks (#17611) 2026-01-27 16:56:01 +00:00
Jacob Richman 6be42be575 Fix cluster of bugs in the settings dialog. (#17628) 2026-01-27 16:55:35 +00:00
christine betts e5145ab60d Fix sidebar issue for extensions link (#17668) 2026-01-27 16:42:10 +00:00
Sehoon Shon 5c16334b8c feat(cli): add oncall command for issue triage (#17661)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-27 16:32:46 +00:00
Jack Wotherspoon 1e628fbd1d chore: remove extra top margin from /hooks and /extensions (#17663) 2026-01-27 16:30:39 +00:00
Mark Cockram db028bc19a refactor: rename formatMemoryUsage to formatBytes (#14997)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
2026-01-27 16:21:53 +00:00
Jacob Richman 362384112e paste transform followup (#17624)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-27 14:19:54 +00:00
Akihiro Suda 0dc69bd364 feat(cli): add gemini extensions list --output-format=json (#14479)
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-27 13:27:42 +00:00
Godwin Iheuwa 56fff518cc fix(extensions): add .gitignore to extension templates (#17293)
Co-authored-by: RUiNtheExtinct <deepkarma001@gmail.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-27 13:24:21 +00:00
Jacob Richman 6b021aa27b Fix iterm alternate buffer mode issue rendering backgrounds (#17634) 2026-01-27 13:15:44 +00:00
Aaron Smith 312a72acb8 feat(ui): pretty JSON rendering tool outputs (#9767)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-27 12:55:06 +00:00
Alex Gavrilescu 88d3df912f feat (mcp): Refresh MCP prompts on list changed notification (#14863)
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-27 12:50:27 +00:00
Abhi eccc200f4f feat(core): enforce server prefixes for MCP tools in agent definitions (#17574) 2026-01-27 04:53:05 +00:00
Abhi 9fcdc0cdc1 chore(core): delete legacy nonInteractiveToolExecutor (#17573) 2026-01-27 03:56:34 +00:00
Gaurav f4e73191d1 fix: loadcodeassist eligible tiers getting ignored for unlicensed users (regression) (#17581) 2026-01-27 03:45:39 +00:00
Abhi 67b00252d3 refactor(cli): migrate non-interactive flow to event-driven scheduler (#17572) 2026-01-27 03:11:29 +00:00
Jack Wotherspoon a79051d9f8 feat: add double-click to expand/collapse large paste placeholders (#17471) 2026-01-27 02:59:09 +00:00
Christian Gunderman 5cf06503c8 Slash command for helping in debugging (#17609) 2026-01-27 02:47:04 +00:00
Abhi 68649c8dec fix(cli): restore 'Modify with editor' option in external terminals (#17621) 2026-01-27 02:24:25 +00:00
Adib234 ad0bece6d6 feat(plan): update cycling order of approval modes (#17622) 2026-01-27 02:20:51 +00:00
Jacob Richman 8e8e7b33ed Ctrl-O (#17617) 2026-01-27 02:14:03 +00:00
Tommaso Sciortino d75dc88de6 Always map mac keys, even on other platforms (#17618) 2026-01-27 01:06:07 +00:00
Jasmeet Bhatia 57b57cc997 feat(mcp/extensions): Allow users to selectively enable/disable MCP servers included in an extension( Issue #11057 & #17402) (#17434) 2026-01-27 01:02:14 +00:00
Tommaso Sciortino 3909ad67db test(core): fix tests in windows (#17592) 2026-01-27 00:43:44 +00:00
Yuna Seol 7708009103 fix(security): enforce strict policy directory permissions (#17353)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-01-27 00:27:49 +00:00
Gal Zahavi 00f60ef532 feat(cli): add global setting to disable UI spinners (#17234)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-27 00:06:58 +00:00
Jerop Kipruto 49c26b4801 feat(plan): refresh system prompt when approval mode changes (Shift+Tab) (#17585) 2026-01-26 23:45:24 +00:00
Jacob Richman b5fe372b5b feat(ui): add solid background color option for input prompt (#16563)
Co-authored-by: Alexander Farber <farber72@outlook.de>
2026-01-26 23:23:54 +00:00
Jerop Kipruto 7fbf470373 fix(plan): remove subagent invocation from plan mode (#17593) 2026-01-26 22:44:39 +00:00
christine betts 46629726f4 Fix extensions config error (#17580)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-26 22:28:52 +00:00
Abhi 9d34ae52d6 feat(agents): migrate subagents to event-driven scheduler (#17567) 2026-01-26 22:12:55 +00:00
Jerop Kipruto 13bc5f620c feat(plan): add persistent plan file storage (#17563) 2026-01-26 21:57:27 +00:00
Adam Weidman 018dc0d5cf fix(core): stream grep/ripgrep output to prevent OOM (#17146) 2026-01-26 21:52:19 +00:00
Jenna Inouye c2d0783965 Docs: Refactor left nav on the website (#17558) 2026-01-26 21:19:27 +00:00
christine betts b07953fb38 Update extensions docs (#16093) 2026-01-26 20:14:38 +00:00
Christian Gunderman 2271bbb339 feat(agents): implement first-run experience for project-level sub-agents (#17266) 2026-01-26 19:49:32 +00:00
Abhi d745d86af1 feat(scheduler): support multi-scheduler tool aggregation and nested call IDs (#17429) 2026-01-26 18:38:11 +00:00
Jacob Richman 3e1a377d78 Fix bug in detecting already added paths. (#17430) 2026-01-26 18:12:40 +00:00
Sandy Tao 50f89e8a41 feat(core): optimize shell tool llmContent output format (#17538) 2026-01-26 18:12:21 +00:00
Harsha Nadimpalli b8319bee76 feat(cli): add quick clear input shortcuts in vim mode (#17470)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-26 17:36:42 +00:00
Dongjun Shin 4827333c48 fix(core): handle URI-encoded workspace paths in IdeClient (#17476)
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2026-01-26 17:09:43 +00:00
Ali Muthanna 93c62a2bdc Fix/issue 17070 (#17242)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-01-26 16:59:20 +00:00
David Pierce 39e91ad633 Follow up to "enableInteractiveShell for external tooling relying on a2a server" (#17130) 2026-01-26 15:14:48 +00:00
Gaurav 5fe328c56a Improve error messages on failed onboarding (#17357) 2026-01-26 14:31:19 +00:00
Abhi cb772a5b7f docs(hooks): clarify mandatory 'type' field and update hook schema documentation (#17499) 2026-01-25 23:33:12 +00:00
Nils Breunese dcd949bdd0 docs: Add instructions for MacPorts and uninstall instructions for Homebrew (#17412)
Signed-off-by: Nils Breunese <nils@breun.nl>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-25 19:21:16 +00:00
rwa c0b8c4ab9e fix: detect pnpm/pnpx in ~/.local (#15254)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-25 19:13:43 +00:00
Maxim Masiutin 4d197c992d Resolves the confusing error message `ripgrep exited with code null that occurs when a search operation is cancelled or aborted (#14267)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-01-25 19:02:37 +00:00
Bryan Morgan fd36d65723 chore(workflow): remove redundant label-enforcer workflow (#17460)
just removing this workflow
2026-01-24 16:54:56 -05:00
Bryan Morgan 05e73c4193 feat(workflow): expand stale-exempt labels to include help wanted and Public Roadmap (#17459) 2026-01-24 16:39:15 -05:00
Bryan Morgan a76c2986c2 feat(workflow): add stale pull request closer with linked-issue enforcement (#17449) 2026-01-24 13:07:56 -05:00
Tommaso Sciortino 80e1fa198f Clean up dead code (#17443) 2026-01-24 15:42:18 +00:00
Vedant Mahajan 84e882770b migrate fireToolNotificationHook to hookSystem (#17398)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-24 13:22:08 +00:00
Gal Zahavi 0242a3dc56 feat: Enforce unified folder trust for /directory add (#17359)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-01-24 05:31:42 +00:00
Sehoon Shon 3c2482a084 fix(core): hide user tier name (#17418) 2026-01-24 03:16:01 +00:00
Abhi 1832f7b90a feat(cli): Moves tool confirmations to a queue UX (#17276)
Co-authored-by: Christian Gunderman <gundermanc@google.com>
2026-01-24 01:32:35 +00:00
Christian Gunderman 77aef861fe fix(agents): default to all tools when tool list is omitted in subagents (#17422) 2026-01-24 01:30:18 +00:00
Sandy Tao 0c134079cc feat: implement AgentConfigDialog for /agents config command (#17370) 2026-01-24 00:10:51 +00:00
Adib234 12a5490bcf Allow prompt queueing during MCP initialization (#17395) 2026-01-23 23:32:06 +00:00
Sandy Tao 93da9817b6 feat(ui): Move keyboard handling into BaseSettingsDialog (#17404) 2026-01-23 23:16:53 +00:00
Adib234 6fae28197e feat(plan): implement persistent approvalMode setting (#17350) 2026-01-23 23:14:11 +00:00
Tommaso Sciortino 00b5b2045f Fix line endings issue with Notice file (#17417) 2026-01-23 15:19:47 -08:00
Dev Randalpura daccf4d6d1 fix(cli): change image paste location to global temp directory (#17396) (#17396)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-23 22:45:24 +00:00
Jack Wotherspoon da1664c7a0 feat: add clearContext to AfterAgent hooks (#16574) 2026-01-23 22:14:30 +00:00
Sehoon Shon 5c649d8db1 feat(ui): display user tier in about command (#17400) 2026-01-23 21:03:53 +00:00
Jack Wotherspoon 2c0cc7b9a5 feat: add AskUserDialog for UI component of AskUser tool (#17344)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-01-23 20:42:48 +00:00
Tommaso Sciortino 25c0802b52 chore: upgrade dep: diff 7.0.0-> 8.0.3 (#17403) 2026-01-23 20:20:21 +00:00
Manoj Naik df379b523b fix(cli): preserve input text when declining tool approval (#15624) (#15659)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-23 19:37:22 +00:00
Sandy Tao 68f5f6d3b0 chore(refactor): extract BaseSettingsDialog component (#17369) 2026-01-23 19:29:29 +00:00
Ishaan Gupta 37c7286295 Add conda installation instructions for Gemini CLI (#16921)
Co-authored-by: Vedant Mahajan <vedant.04.mahajan@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-23 11:32:33 -08:00
Pato Beltran 7b7d2b0297 Update Code Wiki README badge (#15229)
Co-authored-by: Pato Beltran <2132567+PatoBeltran@users.noreply.github.com>
2026-01-23 19:04:20 +00:00
Vijay Vasudevan 3066288c06 fix(core): use RFC 9728 compliant path-based OAuth protected resource discovery (#15756)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-01-23 18:55:23 +00:00
Shreya Keshive 1ec8f40096 fix(oauth): update oauth to use 127.0.0.1 instead of localhost (#17388) 2026-01-23 18:41:37 +00:00
Godwin Iheuwa dabb9ad8f6 fix(core): gracefully handle disk full errors in chat recording (#17305)
Co-authored-by: RUiNtheExtinct <deepkarma001@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-23 18:28:45 +00:00
seeksky b5cac836c5 Fix modifyOtherKeys enablement on unsupported terminals (#16714)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-23 17:34:52 +00:00
Ratish P 4fc3ebb930 fix(core): await MCP initialization in non-interactive mode (#17390) 2026-01-23 17:21:47 +00:00
Adib234 488d5fc439 Refactor: Migrate CLI appEvents to Core coreEvents (#15737) 2026-01-23 16:45:46 +00:00
BaeSeokJae 0b7d26c9e3 fix(core): add alternative command names for Antigravity editor detec… (#16829)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
2026-01-23 15:56:39 +00:00
Aaron Smith 140fba7f53 fix: ensure @-command UI message ordering and test (#12038)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-23 15:50:45 +00:00
Yuvraj Angad Singh a270f7caa5 fix: exit with non-zero code when esbuild is missing (#16967) 2026-01-23 15:23:15 +00:00
Jerop Kipruto 3c832ddbeb feat(plan): implement simple workflow for planning in main agent (#17326) 2026-01-23 06:53:47 +00:00
Jacob Richman 1f9f3dd1c2 Fix pr-triage.sh script to update pull requests with tags "help wanted" and "maintainer only" (#17324) 2026-01-23 02:57:21 +00:00
Jerop Kipruto 798900a6c8 fix(core): Include MCP server name in OAuth message (#17351) 2026-01-23 02:48:15 +00:00
Christian Gunderman 2c6781d134 Refactor subagent delegation to be one tool per agent (#17346) 2026-01-23 02:18:31 +00:00
Gaurav 07bd89399d fix: remove obsolete CloudCode PerDay quota and 120s terminal threshold (#17236) 2026-01-23 01:33:32 +00:00
Allen Hutchison 1ec172e34b fix(cli): include source in policy rule display (#17358) 2026-01-23 00:36:44 +00:00
joshualitt 678c58634b feat(core): Refresh agents after loading an extension. (#17355) 2026-01-23 00:22:22 +00:00
Jacob Richman a1f5d39029 Fix issue #17080 (#17100)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-01-23 00:02:14 +00:00
Ishaan Gupta beacc4f6fd fix(cli)!: Default to interactive mode for positional arguments (#16329)
Co-authored-by: Allen Hutchison <adh@google.com>
2026-01-22 23:38:53 +00:00
Jasmeet Bhatia a060e6149a feat(mcp): add enable/disable commands for MCP servers (#11057) (#16299)
Co-authored-by: Allen Hutchison <adh@google.com>
2026-01-22 23:38:06 +00:00
Sandy Tao 35feea8868 feat(cli): add /agents config command and improve agent discovery (#17342) 2026-01-22 23:22:56 +00:00
lkk214 11e48e2dd1 fix(ui): stabilize rendering during terminal resize in alternate buffer (#15783)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-01-22 23:21:55 +00:00
Adib234 5f1c6447a9 feat(plan): update UI Theme for Plan Mode (#17243) 2026-01-22 22:22:21 +00:00
matt korwel 57601adc90 feat(routing): A/B Test Numerical Complexity Scoring for Gemini 3 (#16041)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2026-01-22 22:12:07 +00:00
Jerop Kipruto 50985d38c4 feat(plan): add 'communicate' tool kind (#17341) 2026-01-22 21:38:15 +00:00
joshualitt 62dd9b5b3c feat(core): Remove legacy settings. (#17244) 2026-01-22 20:59:47 +00:00
Jacob Richman 2ac7900d95 Fix so rewind starts at the bottom and loadHistory refreshes static content. (#17335) 2026-01-22 20:54:23 +00:00
Adib234 016a94ffaf Disable tips after 10 runs (#17101) 2026-01-22 20:46:18 +00:00
Spencer 5d68d8cda5 fix(core): Resolve AbortSignal MaxListenersExceededWarning (#5950) (#16735) 2026-01-22 20:16:00 +00:00
g-samroberts e2ddaedab4 New skill: docs-writer (#17268) 2026-01-22 20:14:52 +00:00
Tommaso Sciortino addb57c31f Emit correct newline type return (#17331) 2026-01-22 19:54:34 +00:00
kapsner 233fe90f17 bug: fix ide-client connection to ide-companion when inside docker via ssh/devcontainer (#15049)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-22 19:19:04 +00:00
Sandy Tao 902e5d6dae feat(cli): Add state management and plumbing for agent configuration dialog (#17259) 2026-01-22 18:30:44 +00:00
Christian Gunderman ba8c64459b ci: allow failure in evals-nightly run step (#17319) 2026-01-22 18:23:15 +00:00
Jacob Richman 1320ebceb9 Remove redundant calls setting linuxClipboardTool. getUserLinuxClipboardTool() now handles the caching internally (#17320) 2026-01-22 18:11:56 +00:00
Saksham Goyal 6d7423263b fix: show whitespace changes in edit tool diffs (#17213)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-01-22 18:02:37 +00:00
Mag1ck fe06f9a1ea fix cli settings: resolve layout jitter in settings bar (#16256) 2026-01-22 17:38:38 +00:00
Jack Wotherspoon e65208b244 feat: add AskUser tool schema (#16988) 2026-01-22 17:12:13 +00:00
Dev Randalpura 7962801a14 Added image pasting capabilities for Wayland and X11 on Linux (#17144) 2026-01-22 17:02:56 +00:00
Shreya Keshive 87a0db20d2 fix(auth): don't crash when initial auth fails (#17308) 2026-01-22 16:44:55 +00:00
Emily Hedlund d956c5b221 Sanitize command names and descriptions (#17228) 2026-01-22 16:41:51 +00:00
Lucas Schiffer 048c30513e docs: update typo in mcp-server.md file (#17099)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-22 15:48:26 +00:00
Adib234 3b9f580fa4 feat: implement /rewind command (#15720) 2026-01-22 15:26:52 +00:00
Chuck ff9c77925e Feature/jetbrains ide detection (#16243)
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
2026-01-22 15:21:05 +00:00
Jacob Richman 56f9ab025a refactor: improve large text paste placeholder (#17269)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-22 15:05:38 +00:00
Abhi 0a173cac46 docs(hooks): comprehensive update of hook documentation and specs (#16816) 2026-01-22 03:13:15 +00:00
Christian Gunderman 982a093791 Enable the ability to queue specific nightly eval tests (#17262) 2026-01-22 03:07:33 +00:00
Yuna Seol 5debf86854 security(hooks): Wrap hook-injected context in distinct XML tags (#17237)
Co-authored-by: Yuna Seol <yunaseol@google.com>
2026-01-22 02:11:45 +00:00
Jack Wotherspoon 75e4f492ab feat: replace large text pastes with [Pasted Text: X lines] placeholder (#16422) 2026-01-22 02:09:24 +00:00
joshualitt 27d21f9921 feat(core): Have subagents use a JSON schema type for input. (#17152) 2026-01-22 00:56:01 +00:00
Sandy Tao b24544c80e feat(core): Enable AgentRegistry to track all discovered subagents (#17253) 2026-01-22 00:19:04 +00:00
Abhi 61040d0eb8 feat(hooks): enable hooks system by default (#17247) 2026-01-21 22:40:31 +00:00
Abhi 3cca8ec0f0 feat(config): default enableEventDrivenScheduler to true (#17211) 2026-01-21 22:40:19 +00:00
Abhi 2219bac16d fix(scheduler): prevent stale tool re-publication and fix stuck UI state (#17227) 2026-01-21 22:39:20 +00:00
N. Taylor Mullen 1c9a57c3c2 feat(cli): consolidate shell inactivity and redirection monitoring (#17086) 2026-01-21 22:31:24 +00:00
Sandy Tao a1233e7e5c fix(core): simplify replace tool error message (#17246) 2026-01-21 22:25:36 +00:00
Ishaan Gupta 1033550f78 fix: /policy to display policies according to mode (#16772)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2026-01-21 21:33:57 +00:00
Pyush Sinha addecf2c74 fix(core): update token count and telemetry on /chat resume history load (#16279)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-21 21:24:33 +00:00
Abhi c266b529ae refactor(cli): decouple UI from live tool execution via ToolActionsContext (#17183) 2026-01-21 21:16:30 +00:00
Tommaso Sciortino dce450b1e8 drain stdin on exit (#17241) 2026-01-21 21:13:10 +00:00
christine betts a91665db40 Remove unused slug from sidebar (#17229) 2026-01-21 20:00:10 +00:00
Sandy Tao f79124f96e feat(core): enable disableLLMCorrection by default (#17223) 2026-01-21 18:53:41 +00:00
Jerop Kipruto eb2af84bb9 feat(plan): add approval mode instructions to system prompt (#17151) 2026-01-21 18:44:35 +00:00
Tommaso Sciortino f190b87223 Support command/ctrl/alt backspace correctly (#17175) 2026-01-21 18:13:26 +00:00
Jenna Inouye e894871afc Docs: Marking for experimental features (#16760) 2026-01-21 18:11:42 +00:00
Gal Zahavi 45d554ae2f fix(core,cli): enable recursive directory access for (#17094) 2026-01-21 17:58:23 +00:00
N. Taylor Mullen acbef4cd31 feat(core): support dynamic variable substitution in system prompt override (#17042) 2026-01-21 17:43:50 +00:00
N. Taylor Mullen 80069b4a78 feat(cli): improve skill enablement/disablement verbiage (#17192) 2026-01-21 17:39:37 +00:00
Shreya Keshive d0cae4547e fix(admin): Ensure CLI commands run in non-interactive mode (#17218) 2026-01-21 17:38:20 +00:00
Bryan Morgan 7399c623d8 fix(github): improve label-workstream-rollup efficiency and fix bugs (#17219) 2026-01-21 12:25:48 -05:00
Vedant Mahajan 6b14dc8240 Migrate beforeTool and afterTool hooks to hookSystem (#17204)
Co-authored-by: Ishaan Gupta <ishaankone@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-21 17:13:03 +00:00
g-samroberts 4d77934a83 Docs: Update changelogs for v.0.25.0 and v0.26.0-preview.0 releases. (#17215) 2026-01-21 17:04:13 +00:00
Bryan Morgan 9e3d36c19b fix(github): improve label-workstream-rollup efficiency with GraphQL (#17217) 2026-01-21 12:10:19 -05:00
Christian Gunderman c43b04b44c Run evals for all models. (#17123) 2026-01-21 16:38:37 +00:00
Bryan Morgan 8605d0d024 feat(workflows): support recursive workstream labeling and new IDs (#17207) 2026-01-21 11:15:38 -05:00
Jerop Kipruto c21c297133 feat(plan): refactor TestRig and eval helper to support configurable approval modes (#17171) 2026-01-21 15:43:48 +00:00
Adib234 0605e6e3e9 feat(plan): Extend Shift+Tab Mode Cycling to include Plan Mode (#17177) 2026-01-21 15:19:47 +00:00
Sehoon Shon b703c87a64 feat(skills): add code-reviewer skill (#17187) 2026-01-21 07:28:36 +00:00
christine betts a784c263be Remove other rewind reference in docs (#17149) 2026-01-21 05:26:48 +00:00
gemini-cli-robot 169d906fe3 chore(release): bump version to 0.27.0-nightly.20260121.97aac696f (#17181) 2026-01-21 05:23:58 +00:00
Abhi 525539fc13 feat(cli): implement event-driven tool execution scheduler (#17078) 2026-01-21 05:18:42 +00:00
Sehoon Shon 53e0c212cc chore(skills): update pr-creator skill workflow (#17180) 2026-01-21 05:09:53 +00:00
Sehoon Shon 7990073543 feat(cli): sanitize ANSI escape sequences in non-interactive output (#17172) 2026-01-21 04:58:37 +00:00
Sehoon Shon 367e7bf401 Update Attempt text to Retry when showing the retry happening to the … (#17178)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-21 04:57:00 +00:00
Vedant Mahajan 3a4012f76a Remove unused modelHooks and toolHooks (#17115)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-21 04:34:50 +00:00
Ishaan Gupta c9f0a48bdc remove fireAgent and beforeAgent hook (#16919)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-21 04:32:07 +00:00
Andrew Garrett 97aac696fb Fix mcp tool lookup in tool registry (#17054)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-01-21 04:18:33 +00:00
Jacob Richman 93ae7772fd Fix bug where System scopes weren't migrated. (#17174) 2026-01-21 04:07:17 +00:00
Tommaso Sciortino 9866eb0551 fix bad fallback logic external editor logic (#17166) 2026-01-21 02:48:44 +00:00
Panagiotis Mantafounis 55c2783e6a fix(cli): display 'http' type on mcp list (#16915)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-21 02:37:19 +00:00
Tommaso Sciortino 2455f939a3 fix(cli): resolve home/end keybinding conflict (#17124) 2026-01-21 02:15:18 +00:00
Jacob Richman 995ae42f53 Avoid spurious warnings about unexpected renders triggered by appEvents and coreEvents. (#17160) 2026-01-21 00:46:10 +00:00
Adib234 e1fd5be429 Add Esc-Esc to clear prompt when it's not empty (#17131) 2026-01-21 00:32:26 +00:00
Gaurav 3b626e7c61 Add interactive ValidationDialog for handling 403 VALIDATION_REQUIRED errors. (#16231) 2026-01-21 00:23:01 +00:00
Tommaso Sciortino aceb06a587 fix(cli): fix newline support broken in previous PR (#17159) 2026-01-21 00:20:51 +00:00
joshualitt 211d2c5fdd feat(core): Ensure all properties in hooks object are event names. (#16870) 2026-01-20 22:47:31 +00:00
christine betts c9061a1cfe Remove missing sidebar item (#17145) 2026-01-20 22:03:35 +00:00
David Soria Parra b288f124b2 fix(cli): send gemini-cli version as mcp client version (#13407)
Co-authored-by: Taylor Mullen <ntaylormullen@google.com>
2026-01-20 22:01:18 +00:00
imadraude 645e2ec041 fix(cli): resolve Ctrl+Enter and Ctrl+J newline issues (#17021) 2026-01-20 21:56:33 +00:00
N. Taylor Mullen 67d69084e9 docs: update project context and pr-creator workflow (#17119) 2026-01-20 21:20:04 +00:00
Sehoon Shon ed0b0fae49 fix(core): resolve auto model in default strategy (#17116) 2026-01-20 21:03:34 +00:00
Sandy Tao f0f705d3ca feat(core): unify agent enabled and disabled flags (#17127) 2026-01-20 21:00:43 +00:00
joshualitt f42b4c80ac feat(core): Add initial eval for generalist agent. (#16856) 2026-01-20 20:32:48 +00:00
David Zammit b99e841021 Fixes Windows crash: "Cannot resize a pty that has already exited" (#15757)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-01-20 20:14:28 +00:00
Adam Weidman a16d5983cf feat: Add flash lite utility fallback chain (#17056) 2026-01-20 19:43:43 +00:00
Adib234 e5745f16cb feat(plan): telemetry to track adoption and usage of plan mode (#16863) 2026-01-20 18:57:34 +00:00
Christian Gunderman 12b0fe1cc2 Demote the subagent test to nightly (#17105) 2026-01-20 18:18:16 +00:00
Pyush Sinha 5b8a23979f fix(core): update telemetry token count after session resume (#15491)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-20 18:01:39 +00:00
Shreya Keshive b71fe94e0a feat(admin): apply admin settings to gemini skills/mcp/extensions commands (#17102) 2026-01-20 17:52:11 +00:00
Vedant Mahajan e92f60b4fc fix: migrate BeforeModel and AfterModel hooks to HookSystem (#16599)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-20 17:46:54 +00:00
Sandy Tao 15f26175b8 fix(core): Provide compact, actionable errors for agent delegation failures (#16493)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-20 17:30:59 +00:00
christine betts 85b17166a5 Revert "Revert "Update extension examples"" (#16445) 2026-01-20 17:14:46 +00:00
Christian Gunderman 88df6210eb Test coverage for hook exit code cases (#17041) 2026-01-20 17:13:15 +00:00
Shreya Keshive 943481ccc0 feat(admin): set admin.skills.enabled based on advancedFeaturesEnabled setting (#17095) 2026-01-20 16:57:47 +00:00
Coco Sheng 79076d1d52 [A2A] Disable checkpointing if git is not installed (#16896) 2026-01-20 16:38:38 +00:00
christine betts 166e04a8dd Fix mcp instructions (#16439) 2026-01-20 16:10:21 +00:00
Ramón Medrano Llamas 1182168bd9 feat(core): enhanced anchored iterative context compression with self-verification (#15710) 2026-01-20 08:43:15 +00:00
Adam Weidman e34f0b4a98 fix: update currentSequenceModel when modelChanged (#17051) 2026-01-20 06:25:15 +00:00
jw bot 4920ad2694 docs(themes): remove unsupported DiffModified color key (#17073) 2026-01-20 05:08:48 +00:00
N. Taylor Mullen 52fadba9f2 fix(core): deduplicate ModelInfo emission in GeminiClient (#17075) 2026-01-20 04:29:45 +00:00
N. Taylor Mullen ec7413456e feat(core): improve shell redirection transparency and security (#16486) 2026-01-20 04:07:28 +00:00
Abhi 451e0b49cb feat(cli): add experiment gate for event-driven scheduler (#17055) 2026-01-20 03:59:30 +00:00
Vedant Mahajan 155d9aafe2 fix return type of fireSessionStartEvent to defaultHookOutput (#16833) 2026-01-20 03:25:43 +00:00
Bryan Morgan 05c0a8eac3 fix(workflows): use author_association for maintainer check (#17060) 2026-01-20 03:05:15 +00:00
N. Taylor Mullen 0bebc664c1 fix(ui): ensure rationale renders before tool calls (#17043) 2026-01-20 01:22:15 +00:00
Abhi 1b6b6d40d5 refactor(cli): centralize tool mapping and decouple legacy scheduler (#17044) 2026-01-20 01:00:42 +00:00
N. Taylor Mullen a90bcf749d feat: add /introspect slash command (#17048) 2026-01-19 16:15:20 -08:00
Abhi e2901f3f7e refactor(core): decouple scheduler into orchestration, policy, and confirmation (#16895) 2026-01-19 23:19:17 +00:00
김현수 4b4bdd10b6 fix(automation): fix jq quoting error in pr-triage.sh (#16958)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-19 21:10:35 +00:00
Pyry Takala 0a6f2e089f Fix: Process all parts in response chunks when thought is first (#13539) 2026-01-19 21:04:45 +00:00
Thomas Shephard d8a8b434f6 fix(cli): use OSC-52 clipboard copy in Windows Terminal (#16920)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-19 20:22:42 +00:00
Christian Gunderman 49769152d6 Demote git evals to nightly run. (#17030) 2026-01-19 19:00:41 +00:00
kij 4cfbe4c716 fix(cli): correct Homebrew installation detection (#14727)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-19 15:37:32 +00:00
JAYADITYA a4eb04b7d4 docs: update README and config guide to reference Gemini 3 (#15806)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2026-01-19 15:24:34 +00:00
Bryan Morgan d079b7a216 chore(scripts): add duplicate issue closer script and fix lint errors (#16997)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-19 09:23:08 -05:00
Christian Gunderman d87a3acdef Fix inverted logic. (#17007) 2026-01-19 07:16:05 +00:00
N. Taylor Mullen 08c32f725e fix(core): attempt compression before context overflow check (#16914) 2026-01-19 06:40:07 +00:00
Christian Gunderman 203f5209ba Stabilize the git evals (#16989) 2026-01-19 06:18:06 +00:00
N. Taylor Mullen 9d9e3d1555 Stabilize skill-creator CI and package format (#17001) 2026-01-18 19:51:05 -08:00
Adib234 20580d754d Delete rewind documentation for now (#16932) 2026-01-17 17:25:35 +00:00
Sehoon Shon 41e01c2321 fix(core): resolve PKCE length issue and stabilize OAuth redirect port (#16815) 2026-01-17 17:18:40 +00:00
Ali Abbas 6900253cb8 feat(cli): replace relative keyboard shortcuts link with web URL (#16479) 2026-01-17 13:54:36 +00:00
Ishaan Gupta 86dbf2013e fix: Show experiment values in settings UI for compressionThreshold (#16267)
Co-authored-by: Vedant Mahajan <vedant.04.mahajan@gmail.com>
2026-01-17 03:18:34 +00:00
Adam Weidman a76946189a chore: remove a2a-adapter and bump @a2a-js/sdk to 0.3.8 (#16800) 2026-01-17 01:01:39 +00:00
Christian Gunderman e03042657b Don't commit unless user asks us to. (#16902) 2026-01-17 01:00:46 +00:00
Abhi 1998a713e2 fix(hooks): enable /hooks disable to reliably stop single hooks (#16804) 2026-01-17 00:28:36 +00:00
N. Taylor Mullen ee8d425603 refactor(core): foundational truncation refactoring and token estimation optimization (#16824) 2026-01-16 23:57:47 +00:00
N. Taylor Mullen 272570cc18 feat(agent): enable agent skills by default (#16736) 2026-01-16 23:10:55 +00:00
N. Taylor Mullen 1681ae1842 refactor(cli): unify shell confirmation dialogs (#16828) 2026-01-16 23:06:52 +00:00
Alexander Farber 608da23393 feat(settings): rename negative settings to positive naming (disable* -> enable*) (#14142)
Co-authored-by: jacob314 <jacob314@gmail.com>
2026-01-16 22:33:49 +00:00
Jacob Richman f2d3b76389 Remove LRUCache class migrating to mnemoist (#16872) 2026-01-16 21:17:31 +00:00
Shreya Keshive d8d4d87e29 feat(admin): implement admin controls polling and restart prompt (#16627) 2026-01-16 20:24:53 +00:00
Jerop Kipruto 93224e1813 feat(plan): remove read_many_files from approval mode policies (#16876) 2026-01-16 20:09:36 +00:00
Sehoon Shon 9722ec9b6a fix(core): surface warnings for invalid hook event names in configuration (#16788) (#16873) 2026-01-16 19:39:07 +00:00
N. Taylor Mullen 063f0d0dcd docs(extensions): add Agent Skills support and mark feature as experimental (#16859) 2026-01-16 19:37:28 +00:00
Sehoon Shon 42fd647373 fix(core): truncate large telemetry log entries (#16769) 2026-01-16 19:30:48 +00:00
Sehoon Shon 59da61602f remove need-triage label from bug_report template (#16864) 2026-01-16 19:12:28 +00:00
Jerop Kipruto 5241174827 feat(plan): enforce strict read-only policy and halt execution on violation (#16849) 2026-01-16 17:56:48 +00:00
Gal Zahavi 013a4e02ff fix(core): fix PTY descriptor shell leak (#16773) 2026-01-16 17:55:29 +00:00
N. Taylor Mullen be37c26c88 perf(ui): optimize text buffer and highlighting for large inputs (#16782)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-01-16 17:33:13 +00:00
joshualitt fcd860e1b0 feat(core): Add generalist agent. (#16638) 2026-01-16 17:21:13 +00:00
Tommaso Sciortino ce35d84113 cleanup: Organize key bindings (#16798) 2026-01-16 16:56:46 +00:00
christine betts cfdc4cfca8 Fix race condition by awaiting scheduleToolCalls (#16759)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-16 16:55:15 +00:00
Christian Gunderman a15978593a Steer outer agent to use expert subagents when present (#16763) 2026-01-16 16:51:10 +00:00
Tommaso Sciortino 4bb817de22 skip simple-mcp-server.test.ts (#16842) 2026-01-16 08:43:30 -08:00
Bryan Morgan c6cf3a4234 chore(workflows): rename label-workstream-rollup workflow (#16818) 2026-01-15 23:48:56 -05:00
Bryan Morgan 420a419f5e fix(infra): use GraphQL to detect direct parents in rollup workflow (#16811) 2026-01-15 23:38:27 -05:00
Bryan Morgan 8dde66c0dd fix(infra): update maintainer rollup label to 'workstream-rollup' (#16809) 2026-01-15 21:37:11 -05:00
Abhi f367b959cd feat(scheduler): add functional awaitConfirmation utility (#16721) 2026-01-15 22:44:59 +00:00
Jerop Kipruto 655ab21d8b feat(plan): add experimental 'plan' approval mode (#16753) 2026-01-15 22:00:19 +00:00
Adib234 1e8f87fbdf Add support for running available commands prior to MCP servers loading (#15596) 2026-01-15 20:33:16 +00:00
Krushna Korade 8a627d6c9a fix(cli): safely handle /dev/tty access on macOS (#16531)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-15 20:10:53 +00:00
matt korwel b0d2ec55cc docs: clarify workspace test execution in GEMINI.md (#16764) 2026-01-15 20:09:58 +00:00
Gal Zahavi e77d7b2e1e fix(cli): prevent OOM crash by limiting file search traversal and adding timeout (#16696) 2026-01-15 20:04:22 +00:00
Bryan Morgan 48fdb9872f fix(automation): robust label enforcement with permission checks (#16762) 2026-01-15 19:53:08 +00:00
Sehoon Shon c8670f8696 fix(cli): add explicit dependency on color-convert (#16757) 2026-01-15 19:03:53 +00:00
Coco Sheng 5ba6e243b5 Restricting to localhost (#16548)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2026-01-15 18:59:34 +00:00
christine betts 9e13a43225 Replace relative paths to fix website build (#16755) 2026-01-15 17:54:43 +00:00
Sehoon Shon 6740886e22 fix(core): prevent ModelInfo event emission on aborted signal (#16752) 2026-01-15 17:26:54 +00:00
Jacob Richman f7f38e2b9e Make merged settings non-nullable and fix all lints related to that. (#16647) 2026-01-15 17:26:10 +00:00
Bryan Morgan 2b6bfe4097 feat(automation): enforce '🔒 maintainer only' and fix bot loop (#16751) 2026-01-15 16:40:33 +00:00
Allen Hutchison f909c9ef90 feat(policy): add source tracking to policy rules (#16670) 2026-01-15 16:06:07 +00:00
g-samroberts fa3981990c Add links to supported locations and minor fixes (#16476) 2026-01-15 15:59:31 +00:00
Bryan Morgan d545a3b614 fix(automation): prevent label-enforcer loop by ignoring all bots (#16746)
Co-authored-by: Sehoon Shon <sshon@google.com>
2026-01-15 15:50:36 +00:00
Bryan Morgan a8631a109e fix(automation): correct status/need-issue label matching wildcard (#16727) 2026-01-15 14:26:00 +00:00
gemini-cli-robot b0c9db7b33 chore/release: bump version to 0.26.0-nightly.20260115.6cb3ae4e0 (#16738)
Co-authored-by: Sehoon Shon <sshon@google.com>
2026-01-15 08:24:47 +00:00
Sehoon Shon 448fd3ca66 fix(core): resolve circular dependency via tsconfig paths (#16730) 2026-01-15 07:42:03 +00:00
Bryan Morgan 53f54436c9 chore(automation): enforce 'help wanted' label permissions and update guidelines (#16707) 2026-01-15 05:36:58 +00:00
Abhi 409f9c825b feat(scheduler): add SchedulerStateManager for reactive tool state (#16651) 2026-01-15 04:42:31 +00:00
N. Taylor Mullen 222b739501 feat(skills): add conflict detection and warnings for skill overrides (#16709) 2026-01-15 04:02:17 +00:00
N. Taylor Mullen d0bbc7fa59 refactor(core): harden skill frontmatter parsing (#16705) 2026-01-15 02:44:08 +00:00
maruto 4848f42486 fix: Handle colons in skill description frontmatter (#16345)
Co-authored-by: gemini-code-assist[bot] <gemini-code-assist[bot]@users.noreply.github.com>
2026-01-15 02:10:21 +00:00
Bryan Morgan 467e869326 chore(automation): ensure status/need-triage is applied and never cleared automatically (#16657) 2026-01-15 01:58:50 +00:00
ZhangYvJing 4f324b548e fix: replace 3 consecutive periods with ellipsis character (#16587) 2026-01-15 01:47:39 +00:00
N. Taylor Mullen a81500a929 feat(cli): add security consent prompts for skill installation (#16549) 2026-01-15 01:47:02 +00:00
Jerop Kipruto 5bdfe1a1fa feat(plan): add experimental plan flag (#16650) 2026-01-15 00:55:10 +00:00
Jacob Richman ae198029bc Add timeout for shell-utils to prevent hangs. (#16667) 2026-01-15 00:48:02 +00:00
Sehoon Shon 4b2e9f7954 Enable & disable agents (#16225) 2026-01-15 00:30:17 +00:00
Tommaso Sciortino 42c26d1e1b cleanup: Improve keybindings (#16672) 2026-01-15 00:30:07 +00:00
Sehoon Shon e58fca68ce feat(config): add 'auto' alias for default model selection (#16661)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-15 00:07:51 +00:00
Patrick Schimpl b3527dc9e4 chore: update dependabot configuration (#13507)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-15 00:02:54 +00:00
Alex Austin Chettiar a2dab146b9 feat(cli): undeprecate the --prompt flag (#13981)
Co-authored-by: Allen Hutchison <adh@google.com>
2026-01-14 23:09:27 +00:00
Tommaso Sciortino fb7640886b Remove sequence binding (#16664) 2026-01-14 23:09:09 +00:00
Tommaso Sciortino 5ed275ce39 Remove unused rewind key binding (#16659) 2026-01-14 22:46:33 +00:00
Abhi 6021e4c3ba feat(scheduler): add types needed for event driven scheduler (#16641) 2026-01-14 22:22:44 +00:00
Adrian Cole 7e6817da5b fix(acp): run exit cleanup when stdin closes (#14953)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
Co-authored-by: Allen Hutchison <adh@google.com>
Co-authored-by: Allen Hutchison <allen@hutchison.org>
2026-01-14 22:02:44 +00:00
Bryan Morgan b14cf1dc30 chore(automation): improve scheduled issue triage discovery and throughput (#16652) 2026-01-14 21:55:19 +00:00
Tommaso Sciortino 94d5ae541e Simplify paste handling (#16654) 2026-01-14 21:27:36 +00:00
Jenna Inouye 41369f67eb Docs: Update release notes for 1/13/2026 (#16583)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-14 21:27:33 +00:00
N. Taylor Mullen c8c7b57a79 refactor(skills): replace 'project' with 'workspace' scope (#16380) 2026-01-14 21:05:26 +00:00
Bryan Morgan b3eecc3a50 chore(automation): remove automated PR size and complexity labeler (#16648) 2026-01-14 21:04:55 +00:00
N. Taylor Mullen 16b35910e2 feat: introduce 'skill-creator' built-in skill and CJS management tools (#16394) 2026-01-14 20:57:46 +00:00
Bryan Morgan 1212161d1d chore(automation): recursive labeling for workstream descendants (#16609)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-14 20:56:16 +00:00
Abhi 4db00b8f2a docs(skills): use body-file in pr-creator skill for better reliability (#16642) 2026-01-14 20:23:04 +00:00
Tommaso Sciortino 09a7301d80 remove unnecessary \x7f key bindings (#16646) 2026-01-14 20:08:46 +00:00
Abhi a3234fb534 prefactor: add rootCommands as array so it can be used for policy parsing (#16640) 2026-01-14 18:50:28 +00:00
Emily Hedlund 764016bca7 fix(a2a): Don't throw errors for GeminiEventType Retry and InvalidStream. (#16541)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2026-01-14 17:04:51 +00:00
Adib234 dfb7dc7069 feat: add Rewind Confirmation dialog and Rewind Viewer component (#15717) 2026-01-14 15:22:21 +00:00
christine betts 3b55581aaf Add an experimental setting for extension config (#16506) 2026-01-14 15:16:42 +00:00
Aaron Smith f6c2d61906 docs: Remove .md extension from internal links in architecture.md (#12899)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-14 14:02:13 +00:00
Jack Wotherspoon c04af6c3e9 docs: clarify F12 to open debug console (#16570) 2026-01-14 13:48:52 +00:00
gemini-cli-robot a1cbe85da3 chore(release): bump version to 0.26.0-nightly.20260114.bb6c57414 (#16604) 2026-01-14 13:37:32 +00:00
Krushna Korade c8d7c09ca4 fix: PDF token estimation (#16494) (#16527)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-14 13:32:36 +00:00
N. Taylor Mullen bb6c574144 feat(admin): support admin-enforced settings for Agent Skills (#16406) 2026-01-14 07:40:23 +00:00
Christian Gunderman 66e7b479ae Aggregate test results. (#16581) 2026-01-14 07:08:05 +00:00
Christian Gunderman 8030404b08 Behavioral evals framework. (#16047) 2026-01-14 04:49:17 +00:00
Jacob Richman 933bc5774f Modernize MaxSizedBox to use <Box maxHeight> and ResizeObservers (#16565) 2026-01-14 04:22:10 +00:00
Sehoon Shon 4afd3741df feat(core/ui): enhance retry mechanism and UX (#16489) 2026-01-14 04:03:19 +00:00
Adam Weidman 428e602882 refactor: clean up A2A task output for users and LLMs (#16561) 2026-01-14 01:58:55 +00:00
Sehoon Shon 04f65d7b4e feat(ui): highlight persist mode status in ModelDialog (#16483) 2026-01-14 01:52:42 +00:00
Abhi eda47f587c fix(core): Resolve race condition in tool response reporting (#16557) 2026-01-14 01:37:10 +00:00
Tommaso Sciortino 8dbaa2bcea Fix: make ctrl+x use preferred editor (#16556) 2026-01-14 00:55:07 +00:00
N. Taylor Mullen 778de55fd8 docs(skills): clarify skill directory structure and file location (#16532) 2026-01-14 00:03:45 +00:00
Sercan Sagman c7c409c68f fix(cli): copy uses OSC52 only in SSH/WSL (#16554)
Signed-off-by: assagman <ahmetsercansagman@gmail.com>
2026-01-13 22:55:28 +00:00
joshualitt d66ec38f82 feat(core): Align internal agent settings with configs exposed through settings.json (#16458) 2026-01-13 22:31:34 +00:00
Jacob Richman 63c918fe7d fix(ui): resolve sticky header regression in tool messages (#16514) 2026-01-13 22:17:05 +00:00
Gal Zahavi b2e866585d fix(cli): allow @ file selector on slash command lines (#16370) 2026-01-13 22:01:30 +00:00
Adam Weidman b518125c46 chore(ui): optimize AgentsStatus layout with dense list style and group separation (#16545) 2026-01-13 21:35:31 +00:00
N. Taylor Mullen e8be252b75 fix(cli): fix 'gemini skills install' unknown argument error (#16537) 2026-01-13 21:14:14 +00:00
joshualitt 92e31e3c4a feat(core, cli): Add support for agents in settings.json. (#16433) 2026-01-13 20:16:02 +00:00
Tommaso Sciortino e931ebe581 Improve key binding names and descriptions (#16529) 2026-01-13 20:07:55 +00:00
Sehoon Shon 91fcca3b1c refactor: make baseTimestamp optional in addItem and remove redundant calls (#16471) 2026-01-13 19:15:04 +00:00
Christian Gunderman aa52462550 Implement support for subagents as extensions. (#16473) 2026-01-13 19:09:22 +00:00
Jerop Kipruto 0f7a136612 docs(telemetry): add Google Cloud Monitoring dashboard documentation (#16520) 2026-01-13 18:10:34 +00:00
N. Taylor Mullen 8faa23cea6 feat(agents): clarify mandatory YAML frontmatter for sub-agents (#16515) 2026-01-13 17:44:52 +00:00
Vedant Mahajan a6dca02344 Refactor beforeAgent and afterAgent hookEvents to follow desired output (#16495) 2026-01-13 16:50:54 +00:00
N. Taylor Mullen 304caa4e43 fix(cli): refine 'Action Required' indicator and focus hints (#16497) 2026-01-13 14:19:53 +00:00
N. Taylor Mullen 7bbfaabffa fix(policy): ensure MCP policies match unqualified names in non-interactive mode (#16490) 2026-01-13 07:25:11 +00:00
N. Taylor Mullen 6adae9f775 fix: Set both tab and window title instead of just window title (#16464)
Co-authored-by: Oleksandr Nikitin <oleksandr@tvori.info>
2026-01-13 04:14:01 +00:00
Sandy Tao b81fe68325 feat(core): add disableLLMCorrection setting to skip auto-correction in edit tools (#16000) 2026-01-13 01:26:53 +00:00
N. Taylor Mullen 2fc61685a3 feat(cli): implement dynamic terminal tab titles for CLI status (#16378) 2026-01-13 01:18:14 +00:00
Sandy Tao c572b9e9ac feat(cli): cleanup activity logs alongside session files (#16399) 2026-01-13 01:12:35 +00:00
Tommaso Sciortino 8d3e93cdb0 Migrate keybindings (#16460) 2026-01-13 00:28:10 +00:00
N. Taylor Mullen 548641c952 feat(agents): improve UI feedback and parser reliability (#16459) 2026-01-13 00:20:28 +00:00
Christian Gunderman 6ef2a92233 Collect hardware details telemetry. (#16119) 2026-01-12 23:59:22 +00:00
N. Taylor Mullen e9c9dd1d67 feat(core): support shipping built-in skills with the CLI (#16300) 2026-01-12 23:44:08 +00:00
Jacob Richman ca6786a28b feat(ui): use Tab to switch focus between shell and input (#14332) 2026-01-12 23:30:12 +00:00
N. Taylor Mullen 2e8c6cfdbb feat(cli): add install and uninstall commands for skills (#16377) 2026-01-12 23:24:41 +00:00
Tommaso Sciortino 95d9a33996 migrate yolo/auto-edit keybindings (#16457) 2026-01-12 22:50:32 +00:00
汞齐 b8cc414d5b docs: fix broken internal link by using relative path (#15371) 2026-01-12 21:58:22 +00:00
Coco Sheng d7bff8610f feat(a2a): Introduce /memory command for a2a server (#14456)
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2026-01-12 21:46:42 +00:00
Tommaso Sciortino e049d5e4e8 Fix: add back fastreturn support (#16440) 2026-01-12 21:31:33 +00:00
christine betts 8437ce940a Revert "Update extension examples" (#16442) 2026-01-12 20:53:22 +00:00
Sehoon Shon 7d92242011 Update cli-help agent's system prompt in sub-agents section (#16441) 2026-01-12 20:41:01 +00:00
Shreya Keshive d65eab01d2 feat(admin): prompt user to restart the CLI if they change auth to oauth mid-session or don't have auth type selected at start of session (#16426) 2026-01-12 20:39:08 +00:00
Bryan Morgan 2306e60be4 perf(workflows): optimize PR triage script for faster execution (#16355)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-12 19:49:20 +00:00
N. Taylor Mullen 3b678a4da0 fix(core): avoid 'activate_skill' re-registration warning (#16398) 2026-01-12 19:31:34 +00:00
Allen Hutchison 64cde8d439 fix(policy): enhance shell command safety and parsing (#15034)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2026-01-12 19:23:32 +00:00
Wang Lecheng 0167392f22 docs: Fix formatting issue in memport documentation (#14774) 2026-01-12 18:17:15 +00:00
Adib234 15891721ad feat: introduce useRewindLogic hook for conversation history navigation (#15716) 2026-01-12 17:42:14 +00:00
Vedant Mahajan 8a2e0fac0d Add other hook wrapper methods to hooksystem (#16361) 2026-01-12 17:38:45 +00:00
Sehoon Shon 8656ce8a27 revert the change that was recently added from a fix (#16390) 2026-01-12 17:23:06 +00:00
christine betts ed7bcf9968 Update extension examples (#16274)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-12 17:16:35 +00:00
Adam Weidman 465ec9759d fix(core): ensure sub-agent schema and prompt refresh during runtime (#16409)
Co-authored-by: Sehoon Shon <sshon@google.com>
2026-01-12 17:11:24 +00:00
christine betts 950244f6b0 Attempt to resolve OOM w/ useMemo on history items (#16424) 2026-01-12 16:53:04 +00:00
christine betts 64c75cb767 Fix crash on unicode character (#16420) 2026-01-12 16:52:19 +00:00
Sehoon Shon 7b7f2fc69e Markdown w/ Frontmatter Agent Parser (#16094)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-12 16:31:49 +00:00
Adam Weidman d315f4d3da fix(core): ensure silent local subagent delegation while allowing remote confirmation (#16395)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2026-01-12 08:55:16 +00:00
Abdul Tawab 9703fe73cf feat(cli): Hooks enable-all/disable-all feature with dynamic status (#15552) 2026-01-12 07:42:04 +00:00
N. Taylor Mullen 93b57b82c1 style: format pr-creator skill (#16381) 2026-01-11 16:54:49 -08:00
Abhi 0e955da171 feat(cli): add /chat debug command for nightly builds (#16339) 2026-01-11 19:11:06 +00:00
Sandy Tao 39b3f20a22 feat(cli): implement passive activity logger for session analysis (#15829) 2026-01-11 13:22:49 +00:00
Abhi b9762a3ee1 docs: add note about experimental hooks (#16337) 2026-01-11 00:34:59 +00:00
Bryan Morgan 33e3ed0f6c fix(workflows): resolve triage workflow failures and actionlint errors (#16338) 2026-01-10 19:31:17 -05:00
Bryan Morgan 446058cb1c fix: fallback to GITHUB_TOKEN if App ID is missing 2026-01-10 16:46:27 -05:00
Bryan Morgan d130d99ff0 fix: Add event-driven trigger to issue triage workflow (#16334) 2026-01-10 16:23:41 -05:00
Bryan Morgan 72dae7e0ee Triage action cleanup (#16319) 2026-01-10 19:58:36 +00:00
Vedant Mahajan 6f7d798189 remove unused sessionHookTriggers and exports (#16324) 2026-01-10 16:49:15 +00:00
N. Taylor Mullen 3090008b1c fix(skills): remove "Restart required" message from non-interactive commands (#16307) 2026-01-10 11:59:38 +00:00
N. Taylor Mullen 461c277bf2 Support for Built-in Agent Skills (#16045) 2026-01-10 06:26:58 +00:00
Jacob Richman b54e688c75 Update ink version to 6.4.7 (#16284) 2026-01-10 00:31:29 +00:00
N. Taylor Mullen b08b0d715b Update system prompt to prefer non-interactive commands (#16117) 2026-01-09 23:38:11 +00:00
Christian Gunderman c87d1aed4c Fix an issue where the agent stops prematurely (#16269) 2026-01-09 23:05:27 +00:00
Gal Zahavi 356f76e545 refactor(config): remove legacy V1 settings migration logic (#16252) 2026-01-09 22:34:23 +00:00
Jacob Richman 1fb55dcb2e Autogenerate docs/cli/settings.md docs/getting-started/configuration.md was already autogenerated but settings.md was not. (#14408) 2026-01-09 22:28:09 +00:00
Shreya Keshive d74bf9ef2f feat: apply remote admin settings (no-op) (#16106) 2026-01-09 22:04:57 +00:00
Eric Rahm e04a5f0cb0 feat(core): Cache ignore instances for performance (#16185) 2026-01-09 21:22:53 +00:00
Tommaso Sciortino ea7393f7fd Infer modifyOtherKeys support (#16270) 2026-01-09 21:10:15 +00:00
Jack Wotherspoon c7d17dda49 fix: properly use systemMessage for hooks in UI (#16250) 2026-01-09 20:47:14 +00:00
Vedant Mahajan 9d187e041c refactor: migrate chatCompressionService to use HookSystem (#16259)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-09 20:18:06 +00:00
N. Taylor Mullen 14f0cb4538 feat(ui): reduce home directory warning noise and add opt-out setting (#16229) 2026-01-09 19:56:22 +00:00
Kevin Ramdass ca48661423 feat(core): add local experiments override via GEMINI_EXP (#16181) 2026-01-09 18:47:05 +00:00
joshualitt 041463d112 feat(core, ui): Add /agents refresh command. (#16204) 2026-01-09 17:33:59 +00:00
Tu Shaokun c1401682ed fix: handle Shift+Space in Kitty keyboard protocol terminals (#15767) 2026-01-09 17:28:14 +00:00
N. Taylor Mullen 8bc3cfe29a feat(skills): add pr-creator skill and enable skills (#16232) 2026-01-09 17:25:14 +00:00
christine betts 77e226c55f Show settings source in extensions lists (#16207) 2026-01-09 17:04:53 +00:00
Vedant Mahajan b9f8858bfb refactor: migrate clearCommand hook calls to HookSystem (#16157) 2026-01-09 16:48:55 +00:00
Ishaan Gupta f7b97ef55e refactor: migrate app containter hook calls to hook system (#16161) 2026-01-09 16:47:54 +00:00
Tommaso Sciortino 88f1ec8d0a Always enable bracketed paste (#16179) 2026-01-09 16:07:05 +00:00
Sehoon Shon aa480e5fbb chore: clean up unused models and use consts (#16246) 2026-01-09 15:03:46 +00:00
N. Taylor Mullen 41e627a7ee Refine Gemini 3 system instructions to reduce model verbosity (#16139) 2026-01-09 07:59:40 +00:00
Sandy Tao e1e3efc9d0 feat(hooks): Support explicit stop and block execution control in model hooks (#15947)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2026-01-09 05:36:27 +00:00
Sehoon Shon 18dd399cb5 Support @ suggestions for subagenets (#16201)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-09 00:51:18 +00:00
Wesley Tanaka f1ca7fa40a ci: guard nightly release workflow from running on forks (#15463)
Co-authored-by: wtanaka.com <wtanaka@users.noreply.github.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-09 00:17:58 +00:00
Wesley Tanaka 6166d7f6ec ci: guard links workflow from running on forks (#15461)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-09 00:16:00 +00:00
Joseph Sheng ffb80c2426 The telemetry.js script should handle paths that contain spaces (#12078) 2026-01-09 00:07:57 +00:00
falouu 4ab1b9895a Ensure TERM is set to xterm-256color (#15828) 2026-01-08 23:51:57 +00:00
wszqkzqk 84710b1953 test(command-registry): increase initialization test timeout (#15979)
Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-08 23:46:29 +00:00
David Sherret a7f758eb3a docs: shorten run command and use published version (#16172)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-08 23:18:31 +00:00
Liqiong Zheng 26505b580c docs: Remove redundant and duplicate documentation files (#14699)
Co-authored-by: Liqiong Zheng <laceyzheng2017@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-08 23:07:45 +00:00
sangwook e51f3e11f1 fix: remove unsupported 'enabled' key from workflow config (#15611)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-08 22:45:41 +00:00
Christian Gunderman d75792703a Always enable redaction in GitHub actions. (#16200) 2026-01-08 22:35:12 +00:00
Adib234 e5f7a9c424 feat: implement file system reversion utilities for rewind (#15715) 2026-01-08 22:21:15 +00:00
maruto 9062a943e7 docs(cli): fix includeDirectories nesting in configuration.md (#15067) 2026-01-08 21:59:15 +00:00
Adam Weidman 7e02ef697d feat(cli): add /agents slash command to list available agents (#16182) 2026-01-08 21:02:44 +00:00
joshualitt 41a8809280 feat(core): Wire up model routing to subagents. (#16043) 2026-01-08 20:39:40 +00:00
Alejandro López Almeida 01d2d43737 Add support for Antigravity terminal in terminal setup utility (#16051)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2026-01-08 20:08:30 +00:00
Abhi 16da6918cb refactor(core): extract ToolModificationHandler from scheduler (#16118) 2026-01-08 19:52:56 +00:00
phreakocious fbfad06307 feat: add native Sublime Text support to IDE detection (#16083)
Co-authored-by: phreakocious <567063+phreakocious@users.noreply.github.com>
2026-01-08 19:49:05 +00:00
Pyush Sinha f8138262fa fix(cli): disableYoloMode shouldn't enforce default approval mode against args (#16155) 2026-01-08 19:48:03 +00:00
Abhi 1a4ae41397 fix: yolo should auto allow redirection (#16183) 2026-01-08 19:24:51 +00:00
Angel Montero 75bc41fc20 fix: typo in MCP servers settings description (#15929) 2026-01-08 18:59:23 +00:00
minglu7 ced5110dab docs: correct typo in bufferFastReturn JSDoc ("accomodate" → "accommodate") (#16056) 2026-01-08 18:59:02 +00:00
Keith Schaab 76d020511f Update the page's title to be consistent and show in site. (#16174) 2026-01-08 18:43:35 +00:00
kevinjwang1 02cf264ee1 Add extension linking capabilities in cli (#16040) 2026-01-08 18:37:16 +00:00
Vijay Vasudevan eb3f3cfdb8 feat(hooks): add mcp_context to BeforeTool and AfterTool hook inputs (#15656)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-08 18:35:33 +00:00
joshualitt 660368f249 bug(core): Fix spewie getter in hookTranslator.ts (#16108) 2026-01-08 18:12:11 +00:00
Shreya Keshive 97ad3d97cb Reapply "feat(admin): implement extensions disabled" (#16082) (#16109) 2026-01-08 17:59:30 +00:00
David Pierce cf021ccae4 enableInteractiveShell for external tooling relying on a2a server (#16080) 2026-01-08 17:03:30 +00:00
joshualitt eb75f59a96 bug(core): fix issue with overrides to bases. (#15255) 2026-01-08 14:59:58 +00:00
N. Taylor Mullen 030847a80a feat(cli): export chat history in /bug and prefill GitHub issue (#16115) 2026-01-08 11:43:55 +00:00
N. Taylor Mullen 722c4933dc Polish: Move 'Failed to load skills' warning to debug logs (#16142) 2026-01-08 11:38:47 +00:00
N. Taylor Mullen 3e2f4eb8ba [Skills] UX Polishing: Transparent feedback and CLI refinements (#15954) 2026-01-08 06:30:33 +00:00
cayden-google aca6bf6aa0 Add upgrade option for paid users (#15978) 2026-01-08 02:01:40 +00:00
Jasmeet Bhatia d48c934357 feat(cli): add filepath autosuggestion after slash commands (#14738)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-08 01:47:05 +00:00
Jacob Richman 41cc6cf105 Reduce nags about PRs that reference issues but don't fix them. (#16112)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-08 00:53:03 +00:00
Tommaso Sciortino dd04b46e86 Fix CI for forks (#16113) 2026-01-08 00:18:33 +00:00
N. Taylor Mullen 1bd4f9d8b6 Optimize json-output tests with mock responses (#16102) 2026-01-08 00:10:50 +00:00
Tommaso Sciortino 1aa35c8796 enable cli_help agent by default (#16100) 2026-01-07 23:43:12 +00:00
Jenna Inouye 51d3f44d51 Docs: Changelogs update 20260105 (#15937) 2026-01-07 23:28:32 +00:00
Tommaso Sciortino d4b418ba01 Fix and rename introspection agent -> cli help agent (#16097) 2026-01-07 23:01:57 +00:00
Jacob Richman bd77515fd9 fix(workflows): fix and limit labels for pr-triage.sh script (#16096)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-07 22:58:42 +00:00
Adam Weidman 1c77bac146 feat: add confirmation details support + jsonrpc vs http rest support (#16079) 2026-01-07 22:46:37 +00:00
Sehoon Shon 0be8b5b1ed Add option to fallback for capacity errors in ProQuotaDi… (#16050) 2026-01-07 21:59:48 +00:00
N. Taylor Mullen d5996fea99 Optimize CI workflow: Parallelize jobs and cache linters (#16054)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2026-01-07 21:50:22 +00:00
joshualitt a1dd19738e feat(core): Preliminary changes for subagent model routing. (#16035) 2026-01-07 21:21:10 +00:00
Abhi 17b3eb730a docs: add docs for hooks + extensions (#16073) 2026-01-07 20:46:44 +00:00
joshualitt 4c961df313 feat(core): Decouple enabling hooks UI from subsystem. (#16074) 2026-01-07 20:34:33 +00:00
christine betts 19bdd95eab Revert "feat(admin): implement extensions disabled" (#16082) 2026-01-07 19:35:56 +00:00
Gaurav 143bb63483 Add exp.gws_experiment field to LogEventEntry (#16062) 2026-01-07 19:26:25 +00:00
Vedant Mahajan c64b5ec4a3 feat(hooks): simplify hook firing with HookSystem wrapper methods (#15982)
Co-authored-by: Ishaan Gupta <ishaankone@gmail.com>
2026-01-07 19:11:49 +00:00
Adib234 57012ae5b3 Core data structure updates for Rewind functionality (#15714) 2026-01-07 17:10:22 +00:00
Shreya Keshive db99beda36 feat(admin): implement extensions disabled (#16024) 2026-01-07 16:31:17 +00:00
christine betts 97b31c4eef Simplify extension settings command (#16001) 2026-01-07 16:23:07 +00:00
christine betts d1eb87c81f Add keytar to dependencies (#15928) 2026-01-07 15:47:29 +00:00
Sehoon Shon 8f9bb6bccc Update troubleshooting doc for UNABLE_TO_GET_ISSUER_CERT_LOCALLY (#16069) 2026-01-07 15:11:35 +00:00
N. Taylor Mullen 416d243027 Enhance TestRig with process management and timeouts (#15908) 2026-01-07 07:58:13 +00:00
Abhi 5fe5d1da46 policy: extract legacy policy from core tool scheduler to policy engine (#15902) 2026-01-07 04:28:06 +00:00
N. Taylor Mullen 2d683bb6f8 [Skills] Multi-scope skill enablement and shadowing fix (#15953) 2026-01-07 04:24:29 +00:00
N. Taylor Mullen 7956eb239e Introduce GEMINI_CLI_HOME for strict test isolation (#15907) 2026-01-07 04:09:39 +00:00
N. Taylor Mullen a26463b056 [Skills] Foundation: Centralize management logic and feedback rendering (#15952) 2026-01-06 20:11:19 -08:00
Kevin Jiang 982eee63b6 Hx support (#16032) 2026-01-07 02:31:38 +00:00
gemini-cli-robot b54215f0a5 chore(release): bump version to 0.25.0-nightly.20260107.59a18e710 (#16048) 2026-01-07 02:25:28 +00:00
Christian Gunderman 521dc7f26c Add initiation method telemetry property (#15818) 2026-01-07 02:02:40 +00:00
N. Taylor Mullen da85e3f8f2 feat(core): improve activate_skill tool and use lowercase XML tags (#16009) 2026-01-07 01:10:00 +00:00
N. Taylor Mullen 59a18e710d Agent Skills: Initial Documentation & Tutorial (#15869) 2026-01-07 00:59:56 +00:00
Krushna Korade 5f027cb63a fix: hide broken skills object from settings dialog (#15766) 2026-01-07 00:55:13 +00:00
Christian Gunderman 4086abf375 Fix test. (#16011) 2026-01-07 00:25:16 +00:00
Jerop Kipruto 8f5bf33eac ci(github-actions): triage all new issues automatically (#16018) 2026-01-07 00:15:00 +00:00
Jerop Kipruto 7eeb7bd74c fix: limit scheduled issue triage queries to prevent argument list too long error (#16021) 2026-01-07 00:03:23 +00:00
Adam Weidman 96b9be3ec4 feat(agents): add support for remote agents (#16013) 2026-01-06 23:45:05 +00:00
joshualitt 1e31427da8 Remove trailing whitespace in yaml. (#16036) 2026-01-06 15:41:58 -08:00
Bryan Morgan 7feb2f8f42 Add 'reopened' type to issue labeling workflow 2026-01-06 18:17:12 -05:00
Bryan Morgan 2122604b32 Refactor parent issue check to use URLs 2026-01-06 18:00:39 -05:00
Bryan Morgan d4b4aede2f Add debugging logs for issue parent checks
Added debugging logs to inspect issue object and parent information.
2026-01-06 17:56:39 -05:00
Bryan Morgan 4b5c044272 Fix label-backlog-child-issues workflow logic 2026-01-06 17:48:08 -05:00
Shreya Keshive 2fe45834dd feat(admin): Introduce remote admin settings & implement secureModeEnabled/mcpEnabled (#15935) 2026-01-06 21:38:07 +00:00
joshualitt 56092bd782 feat(hooks): Add a hooks.enabled setting. (#15933) 2026-01-06 21:33:37 +00:00
Jack Wotherspoon c31f05356a fix: image token estimation (#16004) 2026-01-06 21:19:29 +00:00
Abhi 61dbab03e0 feat(ui): add visual indicators for hook execution (#15408) 2026-01-06 20:52:12 +00:00
Bryan Morgan 86b5995f12 Add workflow to label child issues for rollup (#16002) 2026-01-06 16:00:47 -05:00
Tommaso Sciortino d2849fda8a properly disable keyboard modes on exit (#16006) 2026-01-06 20:11:43 +00:00
Tommaso Sciortino a61fb058b7 fix: writeTodo construction (#16014) 2026-01-06 20:08:25 +00:00
christine betts 7edd803034 Fix settings command fallback (#15926) 2026-01-06 19:50:27 +00:00
N. Taylor Mullen 0c54136244 Agent Skills: Add skill directory to WorkspaceContext upon activation (#15870) 2026-01-06 19:24:37 +00:00
Ishaan Gupta cce4574143 Use GetOperation to poll for OnboardUser completion (#15827)
Co-authored-by: Vedant Mahajan <vedant.04.mahajan@gmail.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2026-01-06 19:08:59 +00:00
Sehoon Shon 9172e28315 Add description for each settings item in /settings (#15936) 2026-01-06 19:06:15 +00:00
Gal Zahavi 6f4b2ad0b9 fix: default folder trust to untrusted for enhanced security (#15943) 2026-01-06 18:09:09 +00:00
N. Taylor Mullen 9a3ff6510f feat(policy): allow 'modes' in user and admin policies (#15977) 2026-01-06 17:56:50 +00:00
christine betts 4c67eef0f2 Inform user of missing settings on extensions update (#15944)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-01-06 17:26:01 +00:00
ppergame 7d4f97de7a fix(core): use correct interactive check for system prompt (#15020)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: Billy Biggs <bbiggs@google.com>
2026-01-06 16:21:36 +00:00
Sehoon Shon cbd2eee9c4 remove manual string when displaying manual model in the footer (#15967) 2026-01-06 04:07:44 +00:00
Tommaso Sciortino 384fb6a465 Add setting to support OSC 52 paste (#15336) 2026-01-06 00:11:50 +00:00
N. Taylor Mullen 2cb33b2f76 Agent Skills: Implement /skills reload (#15865) 2026-01-05 23:12:51 +00:00
Tommaso Sciortino 8f0324d868 fix(cli): resolve paste issue on Windows terminals. (#15932) 2026-01-05 22:46:23 +00:00
Christian Gunderman fd7b6bf40a Fix failing unit tests (#15940) 2026-01-05 21:41:35 +00:00
Tommaso Sciortino ed8bad8c26 Fix order of preflight (#15941) 2026-01-05 21:32:02 +00:00
Christian Gunderman 6d1e27633a Support context injection via SessionStart hook. (#15746) 2026-01-05 21:27:53 +00:00
Manoj Naik 2da911e4a0 fix: prevent /copy crash on Windows by skipping /dev/tty (#15657)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2026-01-05 20:33:03 +00:00
Sehoon Shon e5d183031a Opt-in to persist model from /model (#15820) 2026-01-05 20:31:13 +00:00
Abhi b13c6b57ae chore: rename smart-edit to edit (#15923) 2026-01-05 20:25:54 +00:00
Dev Randalpura 3c92666ec2 Make default settings apply (#15354) 2026-01-05 20:00:20 +00:00
Vedant Mahajan dc6dda5c37 fix: avoid SDK warning by not accessing .text getter in logging (#15706)
Co-authored-by: Ishaan Gupta <ishaankone@gmail.com>
2026-01-05 19:03:00 +00:00
Christian Gunderman 3997c7ff80 Fix terminal hang when user exits browser without logging in (#15748) 2026-01-05 19:02:55 +00:00
Abhi b4b49e7029 refactor(core): Extract and integrate ToolExecutor (#15900) 2026-01-05 05:48:41 +00:00
N. Taylor Mullen 615b218ff7 fix(cli): mock fs.readdir in consent tests for Windows compatibility (#15904) 2026-01-04 21:19:33 -08:00
Abhi f3625aab13 refactor: consolidate EditTool and SmartEditTool (#15857) 2026-01-05 04:52:14 +00:00
N. Taylor Mullen d3563e2f0e Agent Skills: Add gemini skills CLI management command (#15837) 2026-01-05 04:40:21 +00:00
Sandy Tao dd84c2fb83 feat(hooks): implement granular stop and block behavior for agent hooks (#15824) 2026-01-05 02:58:34 +00:00
N. Taylor Mullen bdb349e7f6 Agent Skills: Extension Support & Security Disclosure (#15834) 2026-01-04 22:45:07 +00:00
Abhi 12c7c9cc42 feat(core,cli): enforce mandatory MessageBus injection (Phase 3 Hard Migration) (#15776) 2026-01-04 22:11:43 +00:00
Abhi 90be9c3587 feat(core): Standardize Tool and Agent Invocation constructors (Phase 2) (#15775) 2026-01-04 20:51:23 +00:00
Abhi eec5d5ebf8 feat(core): restore MessageBus optionality for soft migration (Phase 1) (#15774) 2026-01-04 19:59:35 +00:00
Abhi d3c206c677 Unify shell security policy and remove legacy logic (#15770) 2026-01-04 05:19:00 +00:00
N. Taylor Mullen f0a039f7c0 Agent Skills: Unify Representation & Centralize Loading (#15833) 2026-01-03 16:24:36 -08:00
Gal Zahavi 30f5c4af4a fix(core): mock powershell output in shell-utils test (#15831) 2026-01-02 23:20:26 +00:00
N. Taylor Mullen e78c3fe4f0 Agent Skills: Status Bar Integration for Skill Counts (#15741) 2026-01-02 23:01:31 +00:00
Abhi c0ccb22460 chore: cleanup old smart edit settings (#15832) 2026-01-02 22:28:28 +00:00
N. Taylor Mullen 764b195977 Agent Skills: Implement Agent Integration and System Prompt Awareness (#15728) 2026-01-02 21:47:46 +00:00
Jack Wotherspoon 0f3555a4d2 feat: add folder suggestions to /dir add command (#15724) 2026-01-02 21:08:11 +00:00
Abhi 006de1dd31 Add security docs (#15739) 2026-01-02 20:22:30 +00:00
Gal Zahavi 18fef0db31 fix(core): improve shell command with redirection detection (#15683) 2026-01-02 19:36:59 +00:00
N. Taylor Mullen 958284dc24 Agent Skills: Implement Autonomous Activation Tool & Context Injection (#15725) 2026-01-02 19:15:06 +00:00
Sehoon Shon 788bb04f5c log fallback mode (#15817) 2026-01-02 18:19:43 +00:00
HyeongHo Jun 8a0190ca3b fix(core): handle unhandled promise rejection in mcp-client-manager (#14701) 2026-01-02 16:06:56 +00:00
Christian Gunderman c29a8c12b3 Fix build issues caused by year-specific linter rule (#15780) 2026-01-01 19:01:03 +00:00
Sandy Tao 05049b5abf feat(hooks): implement STOP_EXECUTION and enhance hook decision handling (#15685) 2025-12-30 23:22:53 +00:00
Sehoon Shon 3ebe4e6a8f feat(agents): Add remote agents to agent registry (#15711) 2025-12-30 23:11:51 +00:00
Abhi 0eb84f5133 chore: remove cot style comments (#15735) 2025-12-30 21:43:33 +00:00
N. Taylor Mullen de1233b8ca Agent Skills: Implement Core Skill Infrastructure & Tiered Discovery (#15698) 2025-12-30 13:35:52 -08:00
christine betts ec11b8afbf Add extension settings info to /extensions list (#14905) 2025-12-30 21:09:48 +00:00
christine betts ec79fe1ab2 Add instructions to the extensions update info notification (#14907) 2025-12-30 19:50:33 +00:00
Christian Gunderman 90eb1e0281 Implement support for tool input modification (#15492) 2025-12-30 19:37:43 +00:00
Abhi 15c9f88da6 fix(hooks): deduplicate agent hooks and add cross-platform integration tests (#15701) 2025-12-30 19:13:16 +00:00
Abhi 4e6fee7fcd Revert "Update wittyPhrases.ts (#15697)" (#15719) 2025-12-30 16:50:28 +00:00
Shreya Keshive 1e08b150f7 refactor(auth): Refactor non-interactive mode auth validation & refresh (#15679) 2025-12-30 16:09:00 +00:00
segyges fb22f5b8ee Update wittyPhrases.ts (#15697)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-30 07:18:44 +00:00
Adam Weidman 848e8485cd feat(agents): add support for remote agents and multi-agent TOML files (#15437) 2025-12-30 00:12:16 +00:00
Sehoon Shon 07e597de40 Exponential back-off retries for retryable error without a specified … (#15684) 2025-12-29 22:23:23 +00:00
Adib234 10ae84869a Migrate console to coreEvents.emitFeedback or debugLogger (#15219) 2025-12-29 20:46:10 +00:00
Abhi dcd2449b1a refactor: deprecate legacy confirmation settings and enforce Policy Engine (#15626) 2025-12-29 19:22:42 +00:00
gemini-cli-robot a3d214f8d7 chore/release: bump version to 0.24.0-nightly.20251227.37be16243 (#15612) 2025-12-27 05:29:40 +00:00
Abhi 37be162435 fix(core): enable granular shell command allowlisting in policy engine (#15601) 2025-12-26 23:48:44 +00:00
Abhi 5566292cc8 refactor(core): extract static concerns from CoreToolScheduler (#15589) 2025-12-26 20:51:39 +00:00
Gal Zahavi 65e2144b3d Manual nightly version bump to 0.24.0-nightly.20251226.546baf993 (#15594) 2025-12-26 19:40:46 +00:00
Maple! a26d195404 fix(cli): add enableShellOutputEfficiency to settings schema (#15560) 2025-12-26 19:07:33 +00:00
Maple! 21388a0a40 fix(core): handle checkIsRepo failure in GitService.initialize (#15574) 2025-12-26 18:37:57 +00:00
Adib234 acecd80afa Resolve unhandled promise rejection in ide-client.ts (#15587) 2025-12-26 16:37:13 +00:00
Sehoon Shon 69fc75c0b2 do not persist the fallback model (#15483) 2025-12-26 16:08:44 +00:00
Sehoon Shon 9cdb267ba5 feat: Show snowfall animation for holiday theme (#15494)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-12-26 16:07:39 +00:00
Maple! 56b050422d chore(core): fix comment typo (#15558) 2025-12-26 04:31:43 +00:00
Vedant Mahajan 546baf9934 Added modifyOtherKeys protocol support for tmux (#15524)
Co-authored-by: Ishaan Gupta <ishaankone@gmail.com>
2025-12-25 19:09:38 +00:00
Sehoon Shon e6344a8c24 Security: Project-level hook warnings (#15470) 2025-12-23 21:10:46 +00:00
Pyush Sinha 873d10df42 feat: terse transformations of image paths in text buffer (#4924)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: owenofbrien <86964623+owenofbrien@users.noreply.github.com>
2025-12-23 20:46:09 +00:00
Adam Weidman 02a36afc38 feat: Add A2A Client Manager and tests (#15485) 2025-12-23 20:27:16 +00:00
christine betts 563d81e08e Add experimental in-CLI extension install and uninstall subcommands (#15178)
Co-authored-by: Christine Betts <chrstn@google.com>
2025-12-23 19:48:27 +00:00
Jack Wotherspoon 5f28614760 chore: limit MCP resources display to 10 by default (#15489) 2025-12-23 19:39:35 +00:00
Jacob Richman b6b0727e28 Make schema validation errors non-fatal (#15487) 2025-12-23 18:26:37 +00:00
Jack Wotherspoon e9a601c1fe fix: add missing type field to MCPServerConfig (#15465) 2025-12-23 16:59:32 +00:00
Stoyan Dimitrov 308aa70718 refactor(core): remove deprecated permission aliases from BeforeToolHookOutput (#14855)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-12-23 16:13:20 +00:00
Niyas Hameed 6be034392f feat: automatic /model persistence across Gemini CLI sessions (#13199)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-12-23 14:23:43 +00:00
Christian Gunderman 3b1dbcd42d Implemented unified secrets sanitization and env. redaction options (#15348) 2025-12-23 03:18:27 +00:00
Jack Wotherspoon 2ac9fe08f7 chore: remove clipboard file (#15447) 2025-12-22 23:04:02 +00:00
Jack Wotherspoon 24c722454b chore: improve error messages for --resume (#15360) 2025-12-22 22:44:41 +00:00
ElecTwix 0a216b28f3 fix #15369, prevent crash on unhandled EIO error in readStdin cleanup (#15410)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2025-12-22 20:50:43 +00:00
Sandy Tao 9c48cd849b feat(ui): Add security warning and improve layout for Hooks list (#15440) 2025-12-22 20:47:56 +00:00
N. Taylor Mullen 0843d9af58 fix(core): use debugLogger.debug for startup profiler logs (#15443) 2025-12-22 20:45:33 +00:00
Abhi b0d5c4c058 feat(policy): implement dynamic mode-aware policy evaluation (#15307) 2025-12-22 20:25:07 +00:00
Christian Gunderman d18c96d6a1 Record timestamp with code assist metrics. (#15439) 2025-12-22 20:04:06 +00:00
Sehoon Shon dced409ac4 Add Folder Trust Support To Hooks (#15325) 2025-12-22 16:46:38 +00:00
Adam Weidman d6a2f1d670 chore(core): refactor model resolution and cleanup fallback logic (#15228) 2025-12-22 15:18:51 +00:00
Serghei 58fd00a3df fix(core): Add .geminiignore support to SearchText tool (#13763)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2025-12-22 04:25:26 +00:00
Abhi b923604602 feat(telemetry): add clearcut logging for hooks (#15405) 2025-12-21 21:18:42 +00:00
gemini-cli-robot 8643d60b88 chore/release: bump version to 0.21.0-nightly.20251220.41a1a3eed (#15352) 2025-12-21 03:59:46 +00:00
Ying-xi 8feeffb29b fix: prevent infinite relaunch loop when --resume fails (#14941) (#14951)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-12-20 03:22:01 +00:00
Jacob Richman e64146914a fix(policy): fix bug where accepting-edits continued after it was turned off (#15351) 2025-12-20 01:09:43 +00:00
Gal Zahavi 6084708cc2 fix(cli): fix right border overflow in trust dialogs (#15350) 2025-12-20 00:19:03 +00:00
Adam Weidman 8ed0f8981f fix(folder trust): add validation for trusted folder level (#12215)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2025-12-20 00:13:03 +00:00
Sandy Tao 41a1a3eed1 fix(core): sanitize hook command expansion and prevent injection (#15343) 2025-12-19 22:31:42 +00:00
Tommaso Sciortino 10ba348a3a Introspection agent demo (#15232) 2025-12-19 22:11:32 +00:00
Tommaso Sciortino db67bb106a more robust command parsing logs (#15339) 2025-12-19 21:53:13 +00:00
Shehab b828b4754b docs(cli): add System Prompt Override (GEMINI_SYSTEM_MD) (#9515) 2025-12-19 20:11:37 +00:00
Gal Zahavi 9383b54d50 Validate OAuth resource parameter matches MCP server URL (#15289) 2025-12-19 19:33:20 +00:00
JAYADITYA 181da07dd9 fix(cli):change the placeholder of input during the shell mode (#15135)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2025-12-19 18:07:45 +00:00
Jacob Richman 419464a8c2 feat(ui): Put "Allow for all future sessions" behind a setting off by default. (#15322) 2025-12-19 17:25:23 +00:00
Sandy Tao 2e229d3bb6 feat(core): Implement JIT context memory loading and UI sync (#14469) 2025-12-19 17:04:03 +00:00
gemini-cli-robot 3c92bdb1ad chore/release: bump version to 0.21.0-nightly.20251219.70696e364 (#15301) 2025-12-19 16:17:12 +00:00
N. Taylor Mullen e0f159085e feat: simplify tool confirmation labels for better UX (#15296) 2025-12-19 00:38:53 +00:00
Abhi 402148dbc4 feat(hooks): reduce log verbosity and improve error reporting in UI (#15297) 2025-12-19 00:30:45 +00:00
Sandy Tao 70696e364b fix(ui): show command suggestions even on perfect match and sort them (#15287) 2025-12-19 00:05:36 +00:00
Gal Zahavi 1e10492e55 fix: prevent infinite loop in prompt completion on error (#14548) 2025-12-18 23:34:46 +00:00
Sehoon Shon 9e6914d641 Handle all 429 as retryableQuotaError (#15288) 2025-12-18 23:25:42 +00:00
Tommaso Sciortino 0c4fb6afd2 Remove unnecessary dependencies (#15291) 2025-12-18 23:24:19 +00:00
Tommaso Sciortino edab97997a Remove unused code (#15290) 2025-12-18 23:04:29 +00:00
Gal Zahavi 2515b89e2b feat: Pass additional environment variables to shell execution (#15160) 2025-12-18 22:01:23 +00:00
Tommaso Sciortino 60f0f19d76 add 3.0 to allowed sensitive keywords (#15276) 2025-12-18 18:58:07 +00:00
Jacob Richman 322232e514 feat: Detect background color (#15132) 2025-12-18 18:36:48 +00:00
Abhi 54466a3ea8 feat(hooks): add support for friendly names and descriptions (#15174) 2025-12-18 16:09:24 +00:00
Abhi 7da060c149 (docs): Add reference section to hooks documentation (#15159) 2025-12-18 15:49:05 +00:00
Jacob Richman 088f48d60f Add core tool that adds all context from the core package. (#15238) 2025-12-18 15:45:35 +00:00
Abhi 2b426c1d91 feat: add agent toml parser (#15112) 2025-12-18 03:46:55 +00:00
Jacob Richman bc168bbae4 Change detailed model stats to use a new shared Table class to resolve robustness issues. (#15208) 2025-12-18 02:01:37 +00:00
gemini-cli-robot 124a6da743 chore/release: bump version to 0.21.0-nightly.20251218.739c02bd6 (#15231) 2025-12-17 16:54:26 -08:00
Sandy Tao 739c02bd6d fix(cli): correct initial history length handling for chat commands (#15223) 2025-12-18 00:04:02 +00:00
Christian Gunderman 5d13145995 Code Assist backend telemetry for user accept/reject of suggestions (#15206) 2025-12-17 23:12:59 +00:00
Jenna Inouye c28ff3d5a5 Docs: Update Changelog for Dec 17, 2025 (#15204)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-17 23:11:22 +00:00
Sandy Tao 6ddd5abd7b fix(ui): Prevent eager slash command completion hiding sibling commands (#15224) 2025-12-17 22:30:35 +00:00
Adam Weidman bf6d0485ce chore(core): remove legacy fallback flags and migrate loop detection (#15213) 2025-12-17 22:14:33 +00:00
Jacob Richman 3d486ec1e9 feat(ui): add Windows clipboard image support and Alt+V paste workaround (#15218)
Co-authored-by: sgeraldes <sgeraldes@users.noreply.github.com>
2025-12-17 22:05:25 +00:00
Sehoon Shon a6d1245a54 Respect previewFeatures value from the remote flag if undefined (#15214) 2025-12-17 21:36:50 +00:00
joshualitt de7e1937f6 feat(core): Late resolve GenerateContentConfigs and reduce mutation. (#14920) 2025-12-17 20:29:26 +00:00
Adam Weidman b465e12747 chore(core): remove redundant isModelAvailabilityServiceEnabled toggle and clean up dead code (#15207) 2025-12-17 19:23:56 +00:00
Adam Weidman 948401a450 chore: update a2a-js to 0.3.7 (#15197) 2025-12-17 18:07:52 +00:00
Adib234 bb8f181ef1 Refactor: Migrate console.error in ripGrep.ts to debugLogger (#15201) 2025-12-17 17:40:28 +00:00
Tommaso Sciortino bf90b59935 feat: launch Gemini 3 Flash in Gemini CLI ️ (#15196)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: joshualitt <joshualitt@google.com>
Co-authored-by: Sehoon Shon <sshon@google.com>
Co-authored-by: Adam Weidman <65992621+adamfweidman@users.noreply.github.com>
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: Jenna Inouye <jinouye@google.com>
2025-12-17 09:43:21 -08:00
Daan Versavel 18698d6929 (fix) Automated pr labeller (#14885) 2025-12-17 17:17:26 +00:00
Scars 80c4225286 feat(cli): Add /auth logout command to clear credentials and auth state (#13383) 2025-12-17 17:07:13 +00:00
Adam Weidman d02f3f6809 feat(core): introduce remote agent infrastructure and rename local executor (#15110) 2025-12-17 17:06:38 +00:00
Jacob Richman da85aed5aa Add one to the padding in settings dialog to avoid flicker. (#15173) 2025-12-17 16:53:51 +00:00
Christian Gunderman 7f2d33458a Disallow unnecessary awaits. (#15172) 2025-12-17 05:28:18 +00:00
Jack Wotherspoon 3e9a0a7628 chore: remove user query from footer in debug mode (#15169) 2025-12-17 01:44:04 +00:00
Jack Wotherspoon 26c115a4fb chore: remove repo specific tips (#15164) 2025-12-17 00:34:42 +00:00
Jacob Richman db643e9166 Remove foreground for themes other than shades of purple and holiday. (#14606)
Co-authored-by: Miguel Solorio <miguelsolorio@google.com>
2025-12-16 23:44:46 +00:00
Steffen Deusch ba100642e3 Use official ACP SDK and support HTTP/SSE based MCP servers (#13856) 2025-12-16 23:28:27 +00:00
Roaim cc52839f19 Docs (#15103)
Co-authored-by: Abhi <abhipatel@google.com>
2025-12-16 21:51:47 +00:00
gemini-cli-robot e79b149985 chore/release: bump version to 0.21.0-nightly.20251216.bb0c0d8ee (#15121) 2025-12-16 17:46:42 +00:00
Christian Gunderman 5e21c8c03c Code assist service metrics. (#15024) 2025-12-16 17:34:05 +00:00
Jacob Richman 5ea5107d05 refactor(cli): fix settings merging so that settings using the new json format take priority over ones using the old format (#15116) 2025-12-16 03:59:24 +00:00
Sehoon Shon 2995af6a21 use previewFeatures to determine which pro model to use for A2A (#15131) 2025-12-16 03:51:23 +00:00
Mayur Vaid 0c3eb82671 fix: Mark A2A requests as interactive (#15108) 2025-12-16 02:54:41 +00:00
Jacob Richman 79f664d593 Show raw input token counts in json output. (#15021)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-16 02:47:39 +00:00
Tommaso Sciortino bb0c0d8ee3 Simplify method signature. (#15114) 2025-12-15 21:18:04 +00:00
Abhi d236df5b21 Fix tool output fragmentation by encapsulating content in functionResponse (#13082) 2025-12-15 20:36:34 +00:00
N. Taylor Mullen 13944b9bb1 docs: update policy engine getting started and defaults (#15105) 2025-12-15 20:17:48 +00:00
Tommaso Sciortino ec665ef405 Clean up processes in integration tests (#15102) 2025-12-15 19:11:08 +00:00
Mayur Vaid 217e2b0eb4 fix: similar to policy-engine, throw error in case of requiring tool execution confirmation for non-interactive mode (#14702)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-15 18:34:27 +00:00
Shardul Natu d030a1f62f update(telemetry): add hashed_extension_name to field to extension events (#15025)
Co-authored-by: Shnatu <snatu@google.com>
2025-12-15 17:40:54 +00:00
Allen Hutchison fc2a5a42ce fix: use zod for safety check result validation (#15026)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-15 03:54:28 +00:00
Gal Zahavi 57c7b9ccce fix(auth): prioritize GEMINI_API_KEY env var and skip unnecessary key… (#14745) 2025-12-13 01:50:21 +00:00
Christian Gunderman 942bcfc61e Disallow redundant typecasts. (#15030) 2025-12-13 01:43:43 +00:00
gemini-cli-robot fcc3b2b5ec chore/release: bump version to 0.21.0-nightly.20251213.977248e09 (#15029) 2025-12-12 17:30:29 -08:00
Gaurav Sehgal d9f94103cd Add clarity to error messages (#14879) 2025-12-13 01:01:12 +00:00
JAYADITYA ad60cbfc2c chore : remove a redundant tip (#14947)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-12-13 01:00:09 +00:00
Tommaso Sciortino 126c32aca4 Refresh hooks when refreshing extensions. (#14918) 2025-12-12 16:43:46 -08:00
Jacob Richman 977248e095 chore(docs): add 'Maintainers only' label info to CONTRIBUTING.md (#14914) 2025-12-12 23:15:29 +00:00
Allen Hutchison a47af8e261 fix(core): commandPrefix word boundary and compound command safety (#15006) 2025-12-12 23:02:19 +00:00
gemini-cli-robot 5b56920f0a chore/release: bump version to 0.21.0-nightly.20251212.54de67536 (#14969) 2025-12-12 14:34:18 -08:00
Allen Hutchison 5f298c17d7 feat: Persistent "Always Allow" policies with granular shell & MCP support (#14737)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-12 21:45:39 +00:00
jb-perez d2a1a45646 Add license field into package.json (#14473) 2025-12-12 20:31:46 +00:00
Jacob Richman 6dea66f1f5 Remove flex from stats display. See snapshots for diffs. (#14983) 2025-12-12 20:19:39 +00:00
Kevin Ramdass 20164ebcda test: update ide detection tests to make them more robust when run in an ide (#15008) 2025-12-12 19:53:07 +00:00
Abhi edbe5480ca fix: temp fix for subagent invocation until subagent delegation is merged to stable (#15007) 2025-12-12 19:43:46 +00:00
Shreya Keshive e84c4bfb81 fix(vscode-ide-companion): correct license generation for workspace dependencies (#15004) 2025-12-12 19:06:58 +00:00
Shreya Keshive 3b2a4ba27a refactor(ide ext): Update port file name + switch to 1-based index for characters + remove truncation text (#10501) 2025-12-12 17:39:15 +00:00
Abhi 12cbe320e4 fix(policy): allow codebase_investigator by default in read-only policy (#15000) 2025-12-12 17:22:27 +00:00
Jack Wotherspoon 1e734d7e60 feat: support multi-file drag and drop of images (#14832) 2025-12-12 17:14:35 +00:00
Coco Sheng 299cc9bebf feat(a2a): Introduce /init command for a2a server (#13419) 2025-12-12 17:09:04 +00:00
Shreya Keshive a02abcf578 Revert "chore(deps): bump express from 5.1.0 to 5.2.0" (#14998) 2025-12-12 16:49:45 +00:00
Shreya Keshive bb33e281c0 fix(ide): Update IDE extension to write auth token in env var (#14999) 2025-12-12 16:42:49 +00:00
Nemo 86134e9970 feat(settings-validation): add validation for settings schema (#12929) 2025-12-12 06:30:34 +00:00
Jacob Richman 54de67536d feat(cli): polish cached token stats and simplify stats display when quota is present. (#14961) 2025-12-11 23:17:14 +00:00
Jacob Richman d818fb1d91 tool(cli): tweak the frontend tool to be aware of more core files from the cli (#14962) 2025-12-11 22:15:35 +00:00
Tommaso Sciortino 927102ea1b increase labeler timeout (#14922) 2025-12-11 17:05:20 +00:00
Kevin Ramdass 2d3db97067 Fix: Correctly detect MCP tool errors (#14937) 2025-12-11 16:41:02 +00:00
gemini-cli-robot 24fca1b745 chore/release: bump version to 0.21.0-nightly.20251211.8c83e1ea9 (#14924) 2025-12-11 04:24:47 +00:00
Adam Weidman 8c83e1ea9a feat: reset availabilityService on /auth (#14911) 2025-12-10 21:53:12 +00:00
Abhi 91b15fc9dc refactor: implement DelegateToAgentTool with discriminated union (#14769) 2025-12-10 21:14:13 +00:00
Sasha Varlamov d4506e0fc0 feat(core): Add support for transcript_path in hooks for git-ai/Gemini extension (#14663)
Co-authored-by: Christian Gunderman <gundermanc@gmail.com>
2025-12-10 20:44:30 +00:00
Christian Gunderman 648041c62a Add missing await. (#14910) 2025-12-10 19:52:31 +00:00
Adam Weidman 22e6af414a feat: attempt more error parsing (#14899) 2025-12-10 19:14:07 +00:00
joshualitt c8b688655c feat(core): Plumbing for late resolution of model configs. (#14597) 2025-12-10 17:36:27 +00:00
破茧 68ebf5d655 Fix: Correct typo in code comment (#14671)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-10 17:11:54 +00:00
Tommaso Sciortino 1954f45c19 Limit search depth in path corrector (#14869) 2025-12-10 04:08:39 +00:00
Jack Wotherspoon ee6556cbd2 refactor(sessions): move session summary generation to startup (#14691) 2025-12-10 03:25:22 +00:00
Christian Gunderman d2a6b30398 Send the model and CLI version with the user agent (#14865) 2025-12-10 00:38:33 +00:00
Gal Zahavi d90356e8a3 chore: add closing reason to stale bug workflow (#14861) 2025-12-09 23:13:42 +00:00
Abhi aced401071 feat: ensure codebase investigator uses preview model when main agent does (#14412) 2025-12-09 21:07:50 +00:00
Sehoon Shon 2800187355 feat: display quota stats for unused models in /stats (#14764) 2025-12-09 20:09:46 +00:00
Shreya Keshive 3f5f030d01 feat(ide): fallback to GEMINI_CLI_IDE_AUTH_TOKEN env var (#14843) 2025-12-09 19:41:32 +00:00
dependabot[bot] 364b12e2fa chore(deps): bump express from 5.1.0 to 5.2.0 (#14325)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-09 19:34:56 +00:00
Jenna Inouye 6877dd0de7 Docs: Fix errors preventing site rebuild. (#14842) 2025-12-09 18:31:54 +00:00
Kirill Klashtorny 6be32e9383 Update CODEOWNERS (#14830) 2025-12-09 18:22:52 +00:00
Daan Versavel f919783173 (fix) Automated pr labeller (#14788) 2025-12-09 17:19:16 +00:00
David Pierce 674494e80b allow final:true to be returned on a2a server edit calls. (#14747) 2025-12-09 15:30:50 +00:00
Coco Sheng 1f813f6a06 feat(a2a): Introduce restore command for a2a server (#13015)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2025-12-09 15:08:23 +00:00
Jack Wotherspoon afd4829f10 fix: use Gemini API supported image formats for clipboard (#14762) 2025-12-09 12:29:30 +00:00
Allen Hutchison 03be923e05 fix(lint): upgrade pip and use public pypi for yamllint (#14746) 2025-12-09 03:25:41 +00:00
Tommaso Sciortino bc542cbca8 Always set pending status in E2E tests (#14756) 2025-12-09 02:58:52 +00:00
Alex Gavrilescu 560550f5df feat: Add support for MCP Resources (#13178)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-12-09 02:43:12 +00:00
gemini-cli-robot 720b31cb8b chore/release: bump version to 0.21.0-nightly.20251209.ec9a8c7a7 (#14751) 2025-12-09 01:58:12 +00:00
Abhi d35a1fdec7 fix: handle missing local extension config and skip hooks when disabled (#14744) 2025-12-09 01:51:42 +00:00
Tommaso Sciortino 8f43d4851d Remove old E2E Workflows (#14749) 2025-12-09 00:32:29 +00:00
Gal Zahavi 171103aedc refactor(core): Improve environment variable handling in shell execution (#14742)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: christine betts <chrstn@uw.edu>
2025-12-09 00:22:46 +00:00
christine betts ec9a8c7a72 Add support for user-scoped extension settings (#13748) 2025-12-08 22:51:26 +00:00
Jenna Inouye 91c46311c8 Docs: Proper release notes (#14405) 2025-12-08 22:26:43 +00:00
Jack Wotherspoon 89570aef06 feat: auto-execute on slash command completion functions (#14584) 2025-12-08 21:32:39 +00:00
Kevin Ramdass 17b5b40765 feat: Add OTEL log event gemini_cli.startup_stats for startup stats. (#14734) 2025-12-08 20:29:50 +00:00
Tommaso Sciortino cdc74a742a Always set status in chained_e2e workflow (#14730) 2025-12-08 19:37:47 +00:00
Marat Boshernitsan 4322137cee refactor(telemetry): Improve previous PR that allows telemetry to use the CLI auth and add testing (#14589) 2025-12-08 11:20:13 -08:00
Daan Versavel 8651c53923 feat(github action) Triage and Label Pull Requests by Size and Comple… (#5571)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-08 18:19:49 +00:00
Shreya Keshive b2a821c81a Update automated triage workflow to stop assigning priority labels (#14717) 2025-12-08 18:17:26 +00:00
Tommaso Sciortino 3888a592cf set failed status when chained e2e fails (#14725) 2025-12-08 18:10:39 +00:00
Jack Wotherspoon 84c07c8fa1 fix(audio): improve reading of audio files (#14658) 2025-12-08 17:46:33 +00:00
parthasaradhi 389cadb06a Fix: Prevent freezing in non-interactive Gemini CLI when debug mode is enabled (#14580) 2025-12-08 17:18:11 +00:00
Paweł Dec 6e51bbc215 Add prompt_id propagation in a2a-server task (#14581) 2025-12-08 15:12:47 +00:00
Adam Weidman 8f4f8baa81 feat(modelAvailabilityService): integrate model availability service into backend logic (#14470) 2025-12-08 14:44:34 +00:00
gemini-cli-robot 7a72037572 chore/release: bump version to 0.21.0-nightly.20251207.025e450ac (#14662) 2025-12-07 01:34:24 +00:00
Christian Gunderman 025e450ac2 Disallow floating promises. (#14605) 2025-12-06 00:12:49 +00:00
Jenna Inouye 3cf44acc08 Docs: Update Gemini 3 on Gemini CLI documentation (#14601) 2025-12-05 22:37:35 +00:00
Tommaso Sciortino bdd15e8911 Fully detach autoupgrade process (#14595) 2025-12-05 22:12:54 +00:00
Jacob Richman 04cbae5b5f Fix emoji width in debug console. (#14593) 2025-12-05 20:58:54 +00:00
Sehoon Shon 2c4ec31ed1 expose previewFeatures flag in a2a (#14550) 2025-12-05 18:28:52 +00:00
Jenna Inouye 996cbcb680 Docs: Model routing clarification (#14373) 2025-12-05 18:10:34 +00:00
matt korwel dd3fd73ffe fix(core): improve API response error handling and retry logic (#14563) 2025-12-05 17:49:08 +00:00
Tommaso Sciortino 738354ff65 Use Robot PAT for chained e2e merge queue skipper (#14585) 2025-12-05 17:45:18 +00:00
Jack Wotherspoon 616d6f6667 feat(sessions): use 1-line generated session summary to describe sessions (#14467) 2025-12-05 17:20:15 +00:00
gemini-cli-robot 8341256d1e chore/release: bump version to 0.21.0-nightly.20251204.3da4fd5f7 (#14476) 2025-12-05 15:52:09 +00:00
Jacob Richman 934b309b4c Fix issue where we were passing the model content reflecting terminal line wrapping. (#14566) 2025-12-05 04:42:57 +00:00
Jacob Richman d284fa66c0 Fix bug in the shellExecutionService resulting in both truncation and 3X bloat (#14545) 2025-12-04 18:26:12 -08:00
Tommaso Sciortino bedce8aacf Trigger chained e2e tests on all pull requests (#14551) 2025-12-05 01:28:50 +00:00
Silvio Junior 7db5abdecf Fixes [API Error: Cannot read properties of undefined (reading 'error')] (#14553) 2025-12-05 01:18:37 +00:00
Tommaso Sciortino 290ede93e2 Write e2e status to local repo not forked repo (#14549) 2025-12-05 00:35:08 +00:00
Tommaso Sciortino f4f2bcbd98 Make trigger_e2e manually fireable. (#14547) 2025-12-04 23:58:45 +00:00
Tommaso Sciortino 1c5213788c Grant chained workflows proper permission. (#14534) 2025-12-04 22:11:37 +00:00
Gal Zahavi 0d5424fb79 feat: Exclude maintainer labeled issues from stale issue closer (#14532) 2025-12-04 21:54:26 +00:00
Tommaso Sciortino ae8694b303 Fix privacy screen for legacy tier users (#14522) 2025-12-04 21:24:00 +00:00
Adib234 5f60281d25 Add support for MCP dynamic tool update by notifications/tools/list_changed (#14375) 2025-12-04 21:04:38 +00:00
christine betts 0c7ae22f5d Disable flaky extension reloading test on linux (#14528)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-04 19:40:36 +00:00
Paresh Joshi 2d1c1ac567 fix(client): Correctly latch hasFailedCompressionAttempt flag (#13002) 2025-12-04 18:12:45 +00:00
Justin Poehnelt 205d0f456e fix(extensions): resolve GitHub API 415 error for source tarballs (#13319) 2025-12-04 17:16:08 +00:00
Jainam M 8b0a8f47c1 Adding session id as part of json o/p (#14504) 2025-12-04 17:06:20 +00:00
Aswin Ashok 84f521b1c6 fix(shell): cursor visibility when using interactive mode (#14095)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2025-12-04 16:58:03 +00:00
Jack Wotherspoon 1040c246f5 feat: add auto-execute on Enter behavior to argumentless MCP prompts (#14510) 2025-12-04 16:33:45 +00:00
Coco Sheng b27cf0b0a8 feat(cli): Move key restore logic to core (#13013) 2025-12-04 15:56:16 +00:00
Jack Wotherspoon 0a2971f9d3 feat(mcp): add --type alias for --transport flag in gemini mcp add (#14503) 2025-12-04 15:45:03 +00:00
Sehoon Shon 48e8c12476 remove unused isSearching field (#14509) 2025-12-04 15:44:21 +00:00
Megha Bansal 6f3b56c5b6 fix: improve retry logic for fetch errors and network codes (#14439) 2025-12-04 15:41:08 +00:00
Sehoon Shon b745d46395 do not toggle the setting item when entering space (#14489) 2025-12-04 14:48:18 +00:00
Daan Versavel 46bb07e4b7 Fix(cli): Improve Homebrew update instruction to specify gemini-cli (#14502) 2025-12-04 14:28:25 +00:00
Adib234 d5e5f58737 Update setting search UX (#14451) 2025-12-04 06:43:11 +00:00
ismellpillows 9bc5a4d64f feat(cli): support /copy in remote sessions using OSC52 (#13471) 2025-12-04 06:27:33 +00:00
Paresh Joshi 7b811a38a6 chore(tests): remove obsolete test for hierarchical memory (#13122) 2025-12-04 00:28:54 +00:00
christine betts e0a2227faf Add commands for listing and updating per-extension settings (#12664) 2025-12-04 00:16:16 +00:00
christine betts 470f3b057f Remove example extension (#14376) 2025-12-04 00:16:13 +00:00
Sandy Tao 518e73ac9f fix(cli): Fix word navigation for CJK characters (#14475) 2025-12-04 00:16:11 +00:00
Hirokazu Hata 3da4fd5f7d fix(acp): prevent unnecessary credential cache clearing on re-authent… (#9410)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-03 23:43:15 +00:00
Mark Hansen 1e6243045e Markdown export: move the emoji to the end of the line (#12278)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-03 23:30:29 +00:00
Victor Anderson a28be4a4e0 docs: fix typo 'socus' to 'focus' in todos.md (#14374) 2025-12-03 12:58:40 -08:00
Adam Weidman 153d01a01e feat: Add enableAgents experimental flag (#14371)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-12-03 20:53:06 +00:00
Abhi eb3312e7ba feat: Support Extension Hooks with Security Warning (#14460) 2025-12-03 20:07:37 +00:00
Gal Zahavi 939cb67621 feat: add scheduled workflow to close stale issues (#14404) 2025-12-03 19:11:28 +00:00
Tommaso Sciortino 00705b14bd Fix tests (#14458) 2025-12-03 19:07:23 +00:00
Edilmo Palencia 8d4082ef2e feat(hooks): Hook System Documentation (#14307) 2025-12-03 18:57:05 +00:00
Allen Hutchison f588219bb9 fix: Bundle default policies for npx distribution (#14457) 2025-12-03 18:53:18 +00:00
Edilmo Palencia b8c038f41f feat(hooks): Hooks Commands Panel, Enable/Disable, and Migrate (#14225) 2025-12-03 18:01:57 +00:00
Jacob Richman 08067acc71 Avoid triggering refreshStatic unless there really is a banner to display. (#14328) 2025-12-03 17:08:32 +00:00
Edilmo Palencia 1c12da1fad feat(hooks): Hook Session Lifecycle & Compression Integration (#14151) 2025-12-03 17:04:13 +00:00
christine betts 7a6d3067c6 Add new enterprise instructions (#8641)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-03 15:32:34 +00:00
Alexander Farber 54c62d580c fix(security): Fix npm audit vulnerabilities in glob and body-parser (#14090) 2025-12-03 14:07:50 +00:00
CHAEWAN KIM 0857345945 refactor(editor): use const assertion for editor types with single source of truth (#8604) 2025-12-03 06:16:19 +00:00
Marat Boshernitsan b9b3b8050d Allow telemetry exporters to GCP to utilize user's login credentials, if requested (#13778) 2025-12-03 05:27:37 +00:00
Riddhi Dutta 92e95ed806 track github repository names in telemetry events (#13670)
Co-authored-by: riddhi <duttariddhi@google.com>
2025-12-03 05:26:12 +00:00
Tommaso Sciortino 035bea3699 Restrict integration tests tools (#14403) 2025-12-03 01:43:06 +00:00
Jack Wotherspoon bdbbe9232d feat: consolidate remote MCP servers to use url in config (#13762) 2025-12-03 01:01:33 +00:00
Billy Biggs 145fb246a6 docs: Recommend using --debug intead of --verbose for CLI debugging (#14334) 2025-12-03 00:44:23 +00:00
Allen Hutchison 533a3fb312 feat: enable message bus integration by default (#14329) 2025-12-03 00:05:54 +00:00
Sehoon Shon 344f2f26e7 implement fuzzy search inside settings (#13864) 2025-12-02 23:52:56 +00:00
gemini-cli-robot ed10edbf0d chore(release): bump version to 0.21.0-nightly.20251202.2d935b379 (#14409) 2025-12-02 23:39:40 +00:00
Allen Hutchison 828afe113e refactor(stdio): always patch stdout and use createWorkingStdio for clean output (#14159) 2025-12-02 23:08:25 +00:00
ljxfstorm 2d935b3798 chore(ci): mark GitHub release as pre-release if not on "latest" npm channel (#7386)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-02 21:59:53 +00:00
bl-ue aa544c40de Hide sessions that don't have user messages (#13994) 2025-12-02 20:52:53 +00:00
g-samroberts c78f2574a2 Add docs directive to GEMINI.md (#14327)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-02 20:51:51 +00:00
christine betts 2b1a791a0b Use polling for extensions-reload integration test (#14391) 2025-12-02 20:35:58 +00:00
Sandy Tao 752a521423 feat(core): Implement JIT context manager and setting (#14324)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-12-02 20:09:46 +00:00
Tommaso Sciortino 71b0e7ab0d Don't fail test if we can't cleanup (#14389) 2025-12-02 10:25:22 -08:00
Tommaso Sciortino f7f047936b Remove references to deleted kind/bug label (#14383) 2025-12-02 09:52:59 -08:00
christine betts 2a3c0eddb9 Increase flakey test timeout (#14377) 2025-12-02 17:15:10 +00:00
Jacob Richman 1689e9b671 fix(cli): fix issue updating a component while rendering a different component (#14319) 2025-12-02 01:33:03 +00:00
Smetalo 98d7238ed6 fix: Conditionally add set -eEuo pipefail in setup-github command (#8550)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-02 00:31:12 +00:00
g-samroberts d24e5cf353 docs: Update 4 files (#13628)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-01 23:55:25 +00:00
Sudheer Tripathi 70a48a3dd6 fix(ui): misaligned markdown table rendering (#8336)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-01 23:26:48 +00:00
joshualitt 5fa6d87c25 feat(cli): Documentation for model configs. (#12967) 2025-12-01 22:45:22 +00:00
Marco Mihai Condrache 5729642556 fix(zed-integration): remove extra field from acp auth request (#13646)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-01 22:23:11 +00:00
CHAEWAN KIM f4babf172b fix(async): prevent missed async errors from bypassing catch handlers (#13714)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-12-01 22:11:40 +00:00
Juan C.S. 0c463e664e docs: Fix grammar error in Release Cadence (Nightly section) (#13866)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-01 22:04:32 +00:00
Transient Onlooker 4df43c802b update screenshot (#13976) 2025-12-01 22:02:25 +00:00
fancivez 784d3c6c9a fix: remove invalid type key in bug_report.yml (#13576) 2025-12-01 22:00:51 +00:00
Brian de Alwis fcb85e612f chore(logging): log the problematic event for #12122 (#14092)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-12-01 21:42:44 +00:00
Adam Weidman b4df7e351b feat(core): enhance availability routing with wrapped fallback and single-model policies (#13874) 2025-12-01 20:41:06 +00:00
Coco Sheng 806cd112ac feat(a2a): Urgent fix - Process modelInfo agent message (#14315) 2025-12-01 20:09:02 +00:00
David Huntsperger 26f050ff10 Updated ToC on docs intro; updated title casing to match Google style (#13717) 2025-12-01 19:38:48 +00:00
Jack Wotherspoon bde8b78a88 feat(themes): add built-in holiday theme 🎁 (#14301)
Co-authored-by: jacob314 <jacob314@gmail.com>
2025-12-01 19:09:55 +00:00
joshualitt 62f890b5aa bug(core): Avoid stateful tool use in executor. (#14305) 2025-12-01 18:54:28 +00:00
Kevin Ramdass db027dd95b feat: Add startup profiler to measure and record application initialization phases. (#13638) 2025-12-01 18:06:13 +00:00
gemini-cli-robot 613fb2fed6 chore/release: bump version to 0.20.0-nightly.20251201.2fe609cb6 (#14304) 2025-12-01 17:38:07 +00:00
Jack Wotherspoon f918af82fe feat: auto-execute simple slash commands on Enter (#13985) 2025-12-01 17:29:03 +00:00
christine betts 844d3a4dfa Always use MCP server instructions (#14297) 2025-12-01 17:17:54 +00:00
Mayur Vaid 4228a75186 fix: Exclude web-fetch tool from executing in default non-interactive mode to avoid CLI hang. (#14244) 2025-12-01 17:13:14 +00:00
Sandy Tao 2fe609cb62 fix(core): handle EPIPE error in hook runner when writing to stdin (#14231) 2025-12-01 16:58:41 +00:00
korade-krushna f2466e5224 Fixes /clear command to preserve input history for up-arrow navigation while still clearing the context window and screen (#14182) 2025-12-01 00:51:53 +00:00
Maryam Ariyan f98e84f03f test: Add verification for $schema property in settings schema (#13497) 2025-11-30 04:22:56 +00:00
Shardul Natu bbd61f375f feat(telemetry): Add Semantic logging for to ApiRequestEvents (#13912)
Co-authored-by: Shnatu <snatu@google.com>
2025-11-30 03:35:24 +00:00
Jack Wotherspoon 576fda18eb chore: fix session browser test and skip hook system tests (#14099) 2025-11-28 21:07:54 +00:00
Edilmo Palencia 7a4280a482 feat(hooks): Hooks Comprehensive Integration Testing (#9112) 2025-11-27 05:38:35 +00:00
Shardul Natu 6a43b31218 update(telemetry): OTel API response event with finish reasons (#13849)
Co-authored-by: Shnatu <snatu@google.com>
2025-11-27 04:46:40 +00:00
Tommaso Sciortino 450734e333 Revert to default LICENSE (Revert #13449) (#13876) 2025-11-27 02:23:08 +00:00
gemini-cli-robot cf7f6b49ed chore/release: bump version to 0.20.0-nightly.20251127.5bed97064 (#13877) 2025-11-27 01:58:44 +00:00
Gal Zahavi b9dc8eb14d feat(shell): Standardize pager to 'cat' for shell execution by model (#13878) 2025-11-27 01:23:31 +00:00
Sehoon Shon 69188c8538 Add usage limit remaining in /stats (#13843) 2025-11-27 01:21:33 +00:00
Andrew Garrett 5949d56370 feat(ui): Show waiting MCP servers in ConfigInitDisplay (#13721) 2025-11-27 00:26:44 +00:00
Edilmo Palencia 5bed97064a feat(hooks): Hook LLM Request/Response Integration (#9110) 2025-11-26 23:51:28 +00:00
Gal Zahavi b2bdfcf1b5 fix(auth): improve API key authentication flow (#13829) 2025-11-26 21:58:14 +00:00
Gal Zahavi 0d29385e1b feat(core): Add configurable inactivity timeout for shell commands (#13531) 2025-11-26 21:43:33 +00:00
Adam Weidman 87edeb4e32 feat(core): implement towards policy-driven model fallback mechanism (#13781) 2025-11-26 20:36:42 +00:00
sai-sunder-s 0f12d6c426 feat(mcp): Inject GoogleCredentialProvider headers in McpClient (#13783) 2025-11-26 20:08:19 +00:00
kevinjwang1 3406dc5b2e Add consent flag to Link command (#13832) 2025-11-26 19:22:26 +00:00
Aishanee Shah 4a82b0d891 Update System Instructions for interactive vs non-interactive mode. (#12315) 2025-11-26 19:04:36 +00:00
christine betts bc365f1eaa Add support for MCP server instructions behind config option (#13432)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-26 18:08:47 +00:00
Edilmo Palencia 558c8ece2c feat(hooks): Hook Tool Execution Integration (#9108) 2025-11-26 17:41:29 +00:00
Silvio Junior 1187c7fdac Changes in system instruction to adapt to gemini 3.0 to ensure that the CLI explains its actions before calling tools (#13810) 2025-11-26 15:27:32 +00:00
Sandy Tao e1d2653a7a feat(core): Improve request token calculation accuracy (#13824) 2025-11-26 04:20:46 +00:00
gemini-cli-robot 36a0a3d37b chore(release): bump version to 0.20.0-nightly.20251126.d2a6cff4d (#13835) 2025-11-26 03:17:53 +00:00
Megha Bansal d97bbd5324 Update error codes when process exiting the gemini cli (#13728) 2025-11-26 02:43:21 +00:00
Billy Biggs d2a6cff4df Update dependency for modelcontextprotocol/sdk to 1.23.0 (#13827) 2025-11-26 01:23:13 +00:00
Aarushi Shah acf5ed595f Add Databricks auth support and custom header option to gemini cli (#11893)
Co-authored-by: Taylor Mullen <ntaylormullen@google.com>
2025-11-26 00:22:47 +00:00
Pato Beltran 03845198ce Update Code Wiki README badge (#13768)
Co-authored-by: Pato Beltran <patobeltran@google.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-11-25 23:52:41 +00:00
Sehoon Shon d8a3d08f8e fallback to flash for TerminalQuota errors (#13791) 2025-11-25 21:17:22 +00:00
Daniel Alejandro Coll Tejeda 6f9118dca6 Fix TypeError: "URL.parse is not a function" for Node.js < v22 (#13698) 2025-11-25 20:18:49 +00:00
bl-ue d0b6701fba docs(sessions): add documentation for chat recording and session management (#13667) 2025-11-25 18:55:29 +00:00
bl-ue 94c3eecb99 feat(sessions): add /resume slash command to open the session browser (#13621) 2025-11-25 18:54:09 +00:00
bl-ue 098e5c281c fix(resume): allow passing a prompt via stdin while resuming using --resume (#13520) 2025-11-25 17:53:17 +00:00
Maksym f2c52f777c fix(cli): allow non-GitHub SCP-styled URLs for extension installation (#13800)
Co-authored-by: Maksym Kursin <maksym.kursin@dkatalis.com>
2025-11-25 16:57:53 +00:00
Scott Wu 2b41263aa7 fix: Add $schema property to settings.schema.json (#12763)
Co-authored-by: cornmander <shikhman@google.com>
2025-11-25 04:48:47 +00:00
Adam Weidman 404a4468d8 chore: remove console.error (#13779) 2025-11-25 04:24:51 +00:00
gemini-cli-robot 7f67c7f952 chore/release: bump version to 0.19.0-nightly.20251125.f6d97d448 (#13782) 2025-11-25 02:42:52 +00:00
Adam Weidman c8540b5744 feat(config): add isModelAvailabilityServiceEnabled setting (#13777) 2025-11-25 01:26:47 +00:00
Edilmo Palencia f6d97d4488 feat(hooks): Hook System Orchestration (#9102) 2025-11-24 23:24:18 +00:00
Adam Weidman 87712a0a7c feat(model-availability): introduce ModelPolicy and PolicyCatalog (#13751) 2025-11-24 23:08:10 +00:00
joshualitt ba0e053ffc bug(core): Add default chat compression config. (#13766) 2025-11-24 23:02:00 +00:00
joshualitt d14779b264 feat(core): Land bool for alternate system prompt. (#13764) 2025-11-24 22:34:44 +00:00
Edilmo Palencia 5411f4a667 feat(hooks): Hook Agent Lifecycle Integration (#9105) 2025-11-24 22:31:48 +00:00
Edilmo Palencia 2034098780 feat(hooks): Hook Event Handling (#9097) 2025-11-24 21:51:39 +00:00
grMLEqomlkkU5Eeinz4brIrOVCUCkJuN d53a5c4fb5 fix: (some minor improvements to configs and getPackageJson return behaviour) (#12510)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-11-24 21:20:23 +00:00
Edilmo Palencia f6ee025c46 feat(hooks): Hook Telemetry Infrastructure (#9082) 2025-11-24 21:13:24 +00:00
joshualitt e50bf6adad feat(core): Migrate chatCompressionService to model configs. (#12863) 2025-11-24 20:24:45 +00:00
Adib234 c21b6899e1 Add session subtask in /stats command (#13750) 2025-11-24 19:01:41 +00:00
Megha Bansal 95693e265e Improve code coverage for cli package (#13724) 2025-11-24 17:41:46 +00:00
JAYADITYA 569c6f1dd0 feat :rephrasing the extension logging messages to run the explore command when there are no extensions installed (#13740) 2025-11-24 15:54:15 +00:00
Kimihiko Kitase 7350399a50 fix(core): Fix context window overflow warning for PDF files (#13548) 2025-11-24 07:46:03 +00:00
gemini-cli-robot c2a741ee36 chore/release: bump version to 0.19.0-nightly.20251124.e177314a4 (#13713) 2025-11-24 02:16:24 +00:00
gemini-cli-robot e177314a4a chore/release: bump version to 0.19.0-nightly.20251123.dadd606c0 (#13675) 2025-11-23 01:53:21 +00:00
gemini-cli-robot dadd606c0d chore/release: bump version to 0.19.0-nightly.20251122.42c2e1b21 (#13637) 2025-11-22 07:46:20 +00:00
Jacob Richman b3fcddde11 Update ink version to 6.4.6 (#13631) 2025-11-22 03:20:28 +00:00
Megha Bansal e205a468d9 Improve test coverage for cli/src/ui/components (#13598) 2025-11-22 02:47:29 +00:00
christine betts bdf80ea7c0 fix(cli): Prevent stdout/stderr patching for extension commands (#13600)
Co-authored-by: jacob314 <jacob314@gmail.com>
2025-11-22 02:08:06 +00:00
Jacob Richman 5e218a5630 Turn off alternate buffer mode by default. (#13623) 2025-11-22 01:30:38 +00:00
joshualitt 8c36b10682 feat(core): Add BaseLlmClient.generateContent. (#13591) 2025-11-22 01:27:57 +00:00
joshualitt 42c2e1b217 feat(core): Add support for custom aliases for model configs. (#13546) 2025-11-22 00:13:10 +00:00
Tommaso Sciortino 1e715d1e5c Restore bracketed paste mode after external editor exit (#13606) 2025-11-21 21:20:37 +00:00
owenofbrien 9f9a2fa844 Moved client id logging into createBasicLogEvent (#13607) 2025-11-21 21:20:15 +00:00
owenofbrien 64eb14ab11 Fix exp id logging (#13430) 2025-11-21 20:44:50 +00:00
joshualitt 0713c86dec feat(docs): Ensure multiline JS objects are rendered properly. (#13535) 2025-11-21 17:59:34 +00:00
Adib234 99c5bf2e97 Remove useModelRouter experimental flag (#13593) 2025-11-21 17:54:17 +00:00
joshualitt fe67ef63c1 bug(core): Ensure we use thinking budget on fallback to 2.5 (#13596) 2025-11-21 17:43:20 +00:00
JAYADITYA 19d4384f16 docs: Update uninstall command to reflect multiple extension support (#13582) 2025-11-21 17:38:59 +00:00
Jack Wotherspoon d351f07758 feat: custom loading phrase when interactive shell requires input (#12535) 2025-11-21 17:19:34 +00:00
noahacgn d72f35c2e7 docs: fix grammar typo "a MCP" to "an MCP" (#13595) 2025-11-21 16:59:45 +00:00
Adam Weidman aeffa2a460 feat(core): add modelAvailabilityService for managing and tracking model health (#13426) 2025-11-21 16:54:16 +00:00
Jacob Richman 030a5ace97 Fix multiple bugs with auth flow including using the implemented but unused restart support. (#13565) 2025-11-21 16:31:47 +00:00
bl-ue b97661553f feat(ui): build interactive session browser component (#13351) 2025-11-21 16:16:56 +00:00
Megha Bansal 3370644ffe Improved code coverage for cli/src/zed-integration (#13570) 2025-11-21 15:38:33 +00:00
fancivez 0f0b463a2f docs: fix typos in source code and documentation (#13577) 2025-11-21 14:59:42 +00:00
Megha Bansal 8d082a904d Improve code coverage for cli/src/ui/privacy package (#13493) 2025-11-21 06:34:30 +00:00
Megha Bansal 61582678bf Optimize and improve test coverage for cli/src/config (#13485) 2025-11-21 04:57:59 +00:00
Pyry Takala 613b8a4527 fix(core): correct bash @P prompt transformation detection (#13544) 2025-11-21 00:34:47 +00:00
Sandy Tao 5982abeffb fix(ui): Correct mouse click cursor positioning for wide characters (#13537) 2025-11-20 23:56:31 +00:00
Vish (Ishaya) Abrams 78b10dccf1 Skip pre-commit hooks for shadow repo (#13331) (#13488)
Co-authored-by: Vishvananda Abrams <vabrams@google.com>
2025-11-20 22:50:36 +00:00
gemini-cli-robot 85bc25a765 chore(release): bump version to 0.19.0-nightly.20251120.8e531dc02 (#13540) 2025-11-20 22:43:11 +00:00
Jacob Richman fec0eba07e move stdio (#13528) 2025-11-20 22:16:46 +00:00
Tommaso Sciortino f92e79eba0 update docs for http proxy (#13538) 2025-11-20 22:13:59 +00:00
Adib234 3e50be1658 Update persistence state to track counts of messages instead of times banner has been displayed (#13428) 2025-11-20 21:57:06 +00:00
cornmander 9937fb2220 Use lenient MCP output schema validator (#13521) 2025-11-20 21:51:25 +00:00
joshualitt 8e531dc029 feat(core): Incorporate Gemini 3 into model config hierarchy. (#13447) 2025-11-20 21:07:14 +00:00
Ben Brandt 83d0bdc32e feat(zed-integration): Use default model routing for Zed integration (#13398)
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2025-11-20 20:08:37 +00:00
Tommaso Sciortino d15970e12c remove duplicated mouse code (#13525) 2025-11-20 11:46:53 -08:00
Tommaso Sciortino c7b5dcd28f Change default compress threshold to 0.5 for api key users (#13517) 2025-11-20 11:43:35 -08:00
joshualitt 8c07ad2ab9 feat(core): Use thinking level for Gemini 3 (#13445) 2025-11-20 19:19:52 +00:00
Adib234 ade9dfeebb Enable switching preview features on/off without restart (#13515) 2025-11-20 19:00:16 +00:00
Jacob Richman d1e35f8660 Protect stdout and stderr so JavaScript code can't accidentally write to stdout corrupting ink rendering (#13247)
Bypassing rules as link checker failure is spurious.
2025-11-20 10:44:02 -08:00
Adib234 e20d282088 Update banner design (#13420) 2025-11-20 16:52:15 +00:00
Gaurav Sehgal 4adfdad47f Copy commands as part of setup-github (#13464) 2025-11-20 16:05:15 +00:00
Ben Brandt 6c126b9e58 fix(zed-integration): Ensure that the zed integration is classified as interactive (#13394)
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2025-11-20 15:28:37 +00:00
lifefloating 1d2e27a698 Fix: Update system instruction when GEMINI.md memory is loaded or refreshed (#12136) 2025-11-20 13:22:06 +00:00
Adam Weidman 049a299b92 Revert "feat(core): Fix bug with incorrect model overriding." (#13483) 2025-11-20 06:39:21 +00:00
Sandy Tao b1258dd52c fix(cli): prevent race condition when restoring prompt after context overflow (#13473) 2025-11-20 05:54:16 +00:00
Greg Shikhman 98cdaa01b8 Revert "build bun"
This reverts commit b0938f9102.
2025-11-20 06:02:54 +00:00
Greg Shikhman 3476a97acc build bun 2025-11-20 06:02:54 +00:00
Tommaso Sciortino 9ebf321717 Use synchronous writes when detecting keyboard modes (#13478) 2025-11-20 05:50:05 +00:00
joshualitt ff725dea41 feat(core): Fix bug with incorrect model overriding. (#13477) 2025-11-20 05:48:08 +00:00
gemini-cli-robot c3f1b29c1e chore/release: bump version to 0.18.0-nightly.20251120.2231497b1 (#13476) 2025-11-20 05:05:32 +00:00
joshualitt 257cd07a3a feat(core): Wire up chat code path for model configs. (#12850) 2025-11-20 04:41:16 +00:00
Preston Holmes 43d6dc3668 Add User email detail to about box (#13459) 2025-11-20 03:46:21 +00:00
Gal Zahavi 2231497b1f feat: add click-to-focus support for interactive shell (#13341) 2025-11-19 23:49:39 +00:00
Tommaso Sciortino d0a845b6e6 remove unneeded log (#13456) 2025-11-19 23:42:21 +00:00
kevin-ramdass e4c4bb265e feat: update thinking mode support to exclude gemini-2.0 models and simplify logic. (#13454) 2025-11-19 23:35:35 +00:00
Smetalo 0f845407f1 Fix typo in write_todos methodology instructions (#13411) 2025-11-19 23:29:12 +00:00
Tommaso Sciortino b2a2ea3633 Fix Copyright line in LICENSE (#13449) 2025-11-19 22:53:34 +00:00
niladri das f8a862738d [cli-ui] Keep header ASCII art colored on non-gradient terminals (#13373) (#13374)
Co-authored-by: Niladri Das <bniladridas@users.noreply.github.com>
2025-11-19 22:04:58 +00:00
joshualitt 25f8452127 feat(core, cli): Bump genai version to 1.30.0 (#13435) 2025-11-19 20:52:27 +00:00
Tommaso Sciortino 84573992b4 Restore keyboard mode when exiting the editor (#13350) 2025-11-19 19:37:30 +00:00
Holt Skinner 3f8d636501 docs: Add Code Wiki link to README (#13289) 2025-11-19 18:15:41 +00:00
Ben Brandt 300205b07c fix(zed-integration): Correctly handle cancellation errors (#13399) 2025-11-19 17:25:52 +00:00
bl-ue e1c711f5ba feat(sessions): record interactive-only errors and warnings to chat recording JSON files (#13300) 2025-11-19 16:32:13 +00:00
Jainam M 282654e7b8 Capturing github action workflow name if present and send it to clearcut (#13132) 2025-11-19 16:30:03 +00:00
bl-ue 0d89ac7406 Followup from #10719 (#13243) 2025-11-19 16:22:17 +00:00
davidmcwherter 5c47592159 Refactor createTransport to duplicate less code (#13010)
Co-authored-by: David McWherter <davidmcw@gmail.com>
2025-11-19 15:23:01 +00:00
Jack Wotherspoon 61f0f3c243 fix: allow MCP prompts with spaces in name (#12910)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-11-19 14:44:30 +00:00
avilladsen 1e8ae5b9d7 fix(cli): fix crash on startup in NO_COLOR mode (#13343) due to ungua… (#13352) 2025-11-19 04:18:18 +00:00
Jacob Richman e8d0e0d342 bug(ui) showLineNumbers had the wrong default value. (#13356) 2025-11-19 03:33:40 +00:00
Sandy Tao b644f037a3 fix(ui): Clear input prompt on Escape key press (#13335) 2025-11-19 03:11:36 +00:00
Gal Zahavi c5498bbb07 Improve pty resize error handling for Windows (#13353) 2025-11-19 02:08:01 +00:00
Tommaso Sciortino 90c764ce13 Support 3-parameter modifyOtherKeys sequences (#13342) 2025-11-19 00:40:40 +00:00
joshualitt 10003a6490 fix(core): Ensure read_many_files tool is available to zed. (#13338) 2025-11-18 22:58:12 +00:00
Tommaso Sciortino b916d79fe2 Improve keyboard code parsing (#13307) 2025-11-18 19:49:08 +00:00
Gray Mackall 36b0a86c69 Fix links in Gemini 3 Pro documentation (#13312) 2025-11-18 19:39:51 +00:00
Jenna Inouye 7cc5234b9c Docs: Access clarification. (#13304) 2025-11-18 19:31:51 +00:00
Shreya Keshive 379f09d92f chore(release): v0.18.0-nightly.20251118.86828bb56 (#13309) 2025-11-18 19:04:29 +00:00
Aswin Ashok fd9d3e19a9 Remove obsolete reference to "help wanted" label in CONTRIBUTING.md (#13291) 2025-11-18 18:17:07 +00:00
Shreya Keshive 86828bb561 feat: launch Gemini 3 in Gemini CLI 🚀🚀🚀 (in main) (#13287)
Co-authored-by: Adam Weidman <65992621+adamfweidman@users.noreply.github.com>
Co-authored-by: Sehoon Shon <sshon@google.com>
Co-authored-by: Adib234 <30782825+Adib234@users.noreply.github.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: Aishanee Shah <aishaneeshah@gmail.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: joshualitt <joshualitt@google.com>
Co-authored-by: Jenna Inouye <jinouye@google.com>
2025-11-18 09:01:16 -08:00
Jenna Inouye 78075c8a37 Docs: Add changelog for v.0.15.0 (#13276) 2025-11-18 16:09:55 +00:00
JAYADITYA 7d33baabe4 feat :uninstall multiple extensions (#13016)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-18 15:20:25 +00:00
JAYADITYA ecf8fba10e feat: Show tip on first request and refactor phrases (#12952)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-11-18 07:02:31 +00:00
Tommaso Sciortino 2f8b68dffd update glob version (#13242) 2025-11-18 00:31:17 +00:00
Tommaso Sciortino 8877c85278 Right click to paste in Alternate Buffer mode (#13234) 2025-11-17 23:48:33 +00:00
Riddhi Dutta 1d1bdc57ce Refactored 4 files of tools package (#13235)
Co-authored-by: riddhi <duttariddhi@google.com>
2025-11-17 19:31:29 +00:00
Tommaso Sciortino ba88707b1e Fix test to not leave terminal in mouse mode (#13232) 2025-11-17 17:47:08 +00:00
cornmander 8c78fe4f10 rework MCP tool discovery and invocation (#13160)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-17 17:03:48 +00:00
Riddhi Dutta 394a7ea019 Refactored 3 files of tools package (#13231)
Co-authored-by: riddhi <duttariddhi@google.com>
2025-11-17 16:54:09 +00:00
Jacob Richman 78a28bfc01 Fix: Animated scrollbar renders black in NO_COLOR mode (#13188) 2025-11-17 04:45:07 +00:00
gemini-cli-robot cf8de02c68 chore/release: bump version to 0.17.0-nightly.20251116.e650a4ee5 (#13154) 2025-11-16 02:32:39 +00:00
Riddhi Dutta e650a4ee59 Refactored core package ut (#13139)
Co-authored-by: riddhi <duttariddhi@google.com>
2025-11-15 17:23:21 +00:00
Samuel Soto c6b6dcbe95 Docs: Clarify Project-Scoped Behavior of Chat Sub-commands (#10458)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-15 15:50:30 +00:00
shrutip90 9786c4dcff Check folder trust before allowing add directory (#12652) 2025-11-15 03:06:30 +00:00
Tommaso Sciortino d03496b710 Increase paste timeout + add warning. (#13099) 2025-11-15 00:02:28 +00:00
Jacob Richman ab6b2293e1 Only warn about mouse movement when the mouse is down. (#13101) 2025-11-14 22:55:05 +00:00
shrutip90 472e775a13 feat: Update permissions command to support modifying trust for other… (#11642) 2025-11-14 22:41:53 +00:00
Adib234 ce56b4ee1b Change flag name to flag id for existing flags (#13073) 2025-11-14 21:34:54 +00:00
Jacob Richman ba15eeb55f bug(ui) make it clear when users need to enter selection mode and fix clear issue. (#13083) 2025-11-14 20:02:15 +00:00
shrutip90 d683e1c0db fix(cli): Exit CLI when trust save unsuccessful during launch (#11968) 2025-11-14 19:56:39 +00:00
Tommaso Sciortino 6d83d3440c Change default compress threshold to 0.7 for api key users (#13079) 2025-11-14 17:13:59 +00:00
Caroline Rose 9d74b7c0e8 feat(auth): Add option for metadata server application default credentials without project override (#12948) 2025-11-14 16:39:11 +00:00
Stone Sun 016b5b42e2 docs: remove references to deprecated --checkpointing flag (#12477)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-11-14 16:19:12 +00:00
YongSung Na a591505bf9 docs: remove references to deprecated flags (--checkpointing, --sandbox-image) (#12578)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-11-14 15:28:14 +00:00
Megha Bansal 638dd2f6c0 Improve test code coverage for cli/command/extensions package (#12994) 2025-11-14 05:28:01 +00:00
Tommaso Sciortino 555e25e633 slightly adjust model message formatting (#13043) 2025-11-14 05:13:39 +00:00
gemini-cli-robot 3174573b64 chore/release: bump version to 0.17.0-nightly.20251114.0fcbff506 (#13040) 2025-11-14 04:07:27 +00:00
Tommaso Sciortino 2c5e09e1c3 Update comment and undo unnecessary logging (#13025) 2025-11-14 03:11:13 +00:00
Tommaso Sciortino ab11b2c27f Show model in history (#13034) 2025-11-14 03:11:06 +00:00
gemini-cli-robot 0fcbff506e chore(release): bump version to 0.17.0-nightly.20251113.48e3932f6 (#13027) 2025-11-14 00:19:33 +00:00
joshualitt 48e3932f65 feat(core, cli): Add auth type to history checkpoint. (#13023) 2025-11-13 23:13:39 +00:00
Jacob Richman d304216300 Polish sticky headers (#13024) 2025-11-13 22:33:48 +00:00
Jacob Richman 2b8adf8cf3 jacob314/drag scrollbar (#12998) 2025-11-13 22:13:18 +00:00
Jacob Richman fb99b95372 Switch back to truncating headers. Unfortunately we have too many headers that are 10+ lines for no good reason so we need to add back this truncation until we fix them. (#13018) 2025-11-13 19:38:19 +00:00
Jacob Richman 60fe5acd60 feat(ui) support animated page up/down, fn-up/down and end+home (#13012) 2025-11-13 19:16:23 +00:00
Jacob Richman eb9ff72b5a Support incremental update experiment flag. (#12926) 2025-11-13 17:45:03 +00:00
Tommaso Sciortino fb03242950 Improve MALFORMED_FUNCTION_CALL handling (#12965) 2025-11-13 16:07:49 +00:00
Adam Weidman 54c1e13853 chore: update package lock (#12974) 2025-11-13 14:50:14 +00:00
N. Taylor Mullen 102905bbc7 feat: normalize verticality (#12991) 2025-11-13 08:20:14 +00:00
N. Taylor Mullen fe1bfc64f7 feat: disengage surface adhesion protocols (#12989) 2025-11-13 07:36:18 +00:00
Jacob Richman 0f9ec2735c feat(ui) Make useAlternateBuffer the default (#12976) 2025-11-13 05:17:46 +00:00
Abhi 13d8d9477c fix(editor): ensure preferred editor setting updates immediately (#12981) 2025-11-13 04:02:53 +00:00
Tommaso Sciortino 43916b98aa Don't clear buffers on cleanup. (#12979) 2025-11-13 03:20:21 +00:00
Abhi 5d27a62bec refactor: remove read-many-files tool from agent (#12796) 2025-11-13 02:56:37 +00:00
gemini-cli-robot a05e0ea3a4 chore/release: bump version to 0.16.0-nightly.20251113.ad1f0d99 (#12977) 2025-11-13 02:03:52 +00:00
anthony bushong 2987b473dd feat(core): set default chat base model configs (#12951) 2025-11-13 01:01:31 +00:00
Jacob Richman ee7065f665 Sticky headers where the top rounded border is sticky. (#12971) 2025-11-13 01:01:16 +00:00
anthony bushong d26b828ab3 feat(core): update default model config in client.ts (#12960) 2025-11-13 00:52:04 +00:00
Sehoon Shon a810ca80bc Allow users to reset to auto when it's in fallback mode (#12623) 2025-11-13 00:30:43 +00:00
Allen Hutchison ad1f0d995d refactor: move toml-loader.test.ts to use real filesystem (#12969) 2025-11-12 23:17:38 +00:00
Allen Hutchison 1ed163a666 feat(safety): Introduce safety checker framework (#12504) 2025-11-12 21:18:34 +00:00
cornmander aa9922bc98 feat: autogenerate keyboard shortcut docs (#12944) 2025-11-12 21:07:14 +00:00
Tommaso Sciortino 0075b4f118 Always show the tool internal name in /tools (#12964) 2025-11-12 20:45:18 +00:00
Jacob Richman 4d85ce40be Turns out the node console.clear() clears the buffer. (#12959) 2025-11-12 20:15:25 +00:00
anj-s 7ec78452ec Enable write_todo tool and fix output function schema (#12905) 2025-11-12 18:18:15 +00:00
Abhi 540f60696a fix(docs): Release version for read many files removal (#12949) 2025-11-12 18:05:16 +00:00
Shardul Natu 1ffb9c4188 fix(FileCommandLoader): Remove error logs if the operation was aborted (#12927)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-12 16:33:28 +00:00
Shreya Keshive 570ccc7da0 feat: Update client metadata for consistency (#12947) 2025-11-12 16:11:48 +00:00
Edilmo Palencia 1c8fe92d0f feat(hooks): Hook Result Aggregation (#9095) 2025-11-12 07:14:09 +00:00
gemini-cli-robot 396b427cc9 chore/release: bump version to 0.16.0-nightly.20251112.c961f274 (#12923) 2025-11-12 06:13:46 +00:00
gemini-cli-robot c961f27401 chore(release): bump version to 0.16.0-nightly.20251112.2abc288c (#12917)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-11-12 05:14:20 +00:00
Abhi 1c87e7cd25 feat: enhance RipGrep tool with advanced search options and improved defaults (#12677) 2025-11-12 05:11:19 +00:00
Sandy Tao 408b885689 feat(core): enhance loop detection with 2-stage check (#12902) 2025-11-12 04:49:00 +00:00
N. Taylor Mullen cab9b1f370 Fix extensions disable/enable commands not awaiting handler (#12915) 2025-11-12 04:31:46 +00:00
Tommaso Sciortino d3cf28eb4b Use PascalCase for all tool display names (#12918) 2025-11-12 04:28:13 +00:00
Megha Bansal 11a0a9b911 Increase code coverage for core packages (#12872) 2025-11-12 04:06:43 +00:00
Tommaso Sciortino e8038c727f fix test to use faketimer (#12913) 2025-11-12 03:03:10 +00:00
Jacob Richman 2abc288c52 Make useFullWidth the default. (#12911) 2025-11-12 00:14:08 +00:00
Tommaso Sciortino 2e2b066713 Move temp dir from system prompt to first user msg (#12895) 2025-11-11 21:22:22 +00:00
Abhi c1076512d1 Deprecate read_many_files tool (#12861) 2025-11-11 20:35:20 +00:00
Abhi 3154c06dc3 fix(ci): pre-download ripgrep in global setup to prevent race conditions (#12886) 2025-11-11 18:50:17 +00:00
kevinjwang1 b248ec6dfb Add implementation for setting to disable Github extensions (#12838) 2025-11-11 18:37:01 +00:00
Shardul Natu cc2c48d59e fix(extension-uninstallation): Fix uninstalling extensions named differently than their directory name (#12852)
Co-authored-by: Shnatu <snatu@google.com>
2025-11-11 18:19:06 +00:00
Tommaso Sciortino ac733d40b3 Add expected_replacements to smart-edit tool (#12885) 2025-11-11 18:17:45 +00:00
joshualitt a4415f15d3 feat(core): Migrate generateContent to model configs. (#12834) 2025-11-11 16:10:50 +00:00
Jacob Richman cbbf565121 Support ink scrolling final pr (#12567) 2025-11-11 15:50:11 +00:00
N. Taylor Mullen 7bb13d1c41 telemetry: track interactive session state (#12856)
Co-authored-by: owenofbrien <86964623+owenofbrien@users.noreply.github.com>
2025-11-11 10:03:32 +00:00
gemini-cli-robot e79f62694a chore/release: bump version to 0.15.0-nightly.20251111.51f952e7 (#12860) 2025-11-11 07:04:14 +00:00
cornmander 4fbeac8b32 Add experiment logging and add caching experiment (#12862) 2025-11-11 04:15:38 +00:00
Megha Bansal 22b0550520 Issue#9751 - fix the gemini crash on startup in tmux environments (#11637) 2025-11-11 03:57:43 +00:00
Mark Thompson 5ba6bc7139 fix(prompt): Add Angular support to base prompt (#10252) 2025-11-11 03:42:22 +00:00
bl-ue 6893d27441 feat(sessions): add resuming to geminiChat and add CLI flags for session management (#10719)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-11 01:31:00 +00:00
Abhi 51f952e700 fix(core): use ripgrep --json output for robust cross-platform parsing (#12853) 2025-11-11 00:01:01 +00:00
davidmcwherter 4af4f8644d Fixes #12841: Plumb headers through google_credentials transport crea… (#12849)
Co-authored-by: David McWherter <davidmcw@gmail.com>
2025-11-10 22:06:31 +00:00
cornmander 37ca643a64 Fix external editor diff drift (#12846) 2025-11-10 21:19:32 +00:00
Jacob Richman 8f4b1b582d Switch to alternate buffer mode before rendering Ink. (#12833) 2025-11-10 20:30:38 +00:00
Tommaso Sciortino 3c9052a751 Stop printing garbage characters for F1,F2.. keys (#12835) 2025-11-10 18:56:05 +00:00
cornmander 2136598e87 Harden modifiable tool temp workspace (#12837)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-10 18:48:44 +00:00
owenofbrien 3f90001f83 Added active experiment ids to Clearcut log events (#12745) 2025-11-10 17:21:49 +00:00
Edilmo Palencia 4ef4bd6f09 feat(hooks): Hook Execution Engine (#9092) 2025-11-10 16:08:21 +00:00
Adib234 331dbd5638 Preserve tabs on paste (#12735) 2025-11-10 15:37:43 +00:00
Hriday 4ab94dec5e test: fix flaky file system integration test (#12724)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-11-10 06:20:30 +00:00
Tommaso Sciortino c0b766ad74 Simplify switch case (#12798) 2025-11-09 22:36:13 +00:00
Tommaso Sciortino fd59d9dd92 Fix shift+return in vscode. (#12799) 2025-11-09 22:08:29 +00:00
Tommaso Sciortino 9e4ae214a8 Revamp KeypressContext (#12746) 2025-11-09 16:45:04 +00:00
Jacob Richman f649948713 Branch batch scroll (#12680) 2025-11-09 00:09:22 +00:00
christine betts 43b8731241 Fix extensions logging race condition and slash command logging (#12732) 2025-11-08 15:29:36 +00:00
Jacob MacDonald 9116cf2bab [cleanup] rename info message property 'icon' to 'prefix' (#12743) 2025-11-08 00:07:33 +00:00
Jacob MacDonald bafbcbbe8b [feat]: Add /extensions restart command (#12739) 2025-11-07 23:17:23 +00:00
joshualitt fdb6088603 feat(core): Migrate generateJson to resolved model configs. (#12626) 2025-11-07 22:18:45 +00:00
Sandy Tao f3a8b73717 fix(ci): ensure correct version calculation and git ls-remote filtering in release workflow (#12683) 2025-11-07 21:06:55 +00:00
Jacob MacDonald c883403147 [feat] Extension Reloading - respect updates to exclude tools (#12728) 2025-11-07 20:18:35 +00:00
joshualitt 2077521f84 Trivial yaml fixes for linter. (#12725) 2025-11-07 18:37:36 +00:00
Shreya Keshive 6d90b7ddb3 feat(issue-templates): Refine issue template labels and types
Updated  and  to use a  field instead of  and  labels.
Modified  to use  instead of  and removed .

This change streamlines issue categorization and aligns with updated labeling conventions.
2025-11-07 12:46:18 -05:00
Jacob Richman 6cf1c98524 Update ink version (#12720) 2025-11-07 17:32:46 +00:00
Allen Hutchison 5ff7cdc9e8 test(policy): add extreme priority value tests (follow-up to #12617) (#12679) 2025-11-07 17:28:05 +00:00
Jacob MacDonald 47603ef8e1 Reload gemini memory on extension load/unload + memory refresh refactor (#12651) 2025-11-07 17:07:25 +00:00
Lê Nam Khánh ef4030331a docs: fix typos in some files (#12706)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-07 15:51:56 +00:00
Haroon Chaudhry a0a6828265 fix: Downloading release assets from private GitHub repository #11928 (#12682) 2025-11-07 15:50:44 +00:00
cocosheng-g 69339f08a6 Adds listCommands endpoint to a2a server (#12604)
Co-authored-by: Juanda <jdgarrido@google.com>
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2025-11-07 15:10:29 +00:00
gemini-cli-robot cd27cae848 chore(release): bump version to 0.15.0-nightly.20251107.b8eeb553 (#12687)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-11-07 04:29:38 +00:00
Tommaso Sciortino 475e92da5d Fix test in windows (#12681) 2025-11-07 04:01:30 +00:00
Shreya Keshive 054497c7a6 fix(core): Handle null command in VSCode IDE detection (#12689) 2025-11-07 03:01:53 +00:00
Allen Hutchison c81a02f8d2 fix: integrate DiscoveredTool with Policy Engine (#12646) 2025-11-06 23:51:16 +00:00
Richie Foreman 445a5eac33 fix(patch workflow): Ensure that the environment is listed on patch comments (#12538) 2025-11-06 23:30:20 +00:00
Tommaso Sciortino f05d937f39 Use consistent param names (#12517) 2025-11-06 23:03:52 +00:00
HugoMurillo 5f1208ad81 chore: disable flaky test (#12670) 2025-11-06 22:43:55 +00:00
Adam Weidman 1e42fdf6c2 fix(cli): handle flash model errors gracefully (#12667) 2025-11-06 22:13:38 +00:00
Jenna Inouye 98055d0989 Docs: Add /model documentation (#12654) 2025-11-06 21:12:52 +00:00
christine betts c13ec85d7d Update keychain storage name to be more user-friendly (#12644) 2025-11-06 20:55:20 +00:00
Sandy Tao 36feb73bfd Revert "Enable WriteTodos tool by default (#12500)" (#12658) 2025-11-06 20:21:53 +00:00
HugoMurillo 77614eff5b fix(#11707): should replace multiple instances of a string test (#12647) 2025-11-06 19:12:06 +00:00
Sehoon Shon 31b34b11ab Let users know when falling back to flash, and update the error messa… (#12640) 2025-11-06 18:43:21 +00:00
Jainam M c585470a71 refactor(cli): consolidate repetitive tests in InputPrompt using it.each (#12524) 2025-11-06 17:41:50 +00:00
Gal Zahavi 9ba1cd0336 feat(shell): include cwd in shell command description (#12558) 2025-11-06 16:51:07 +00:00
Allen Hutchison 5f6453a1e0 feat(policy): Add comprehensive priority range validation tests (#12617) 2025-11-06 07:19:05 +00:00
joshualitt 956ab94452 feat(core): Add ModelConfigService. (#12556) 2025-11-06 01:18:42 +00:00
Allen Hutchison 0f5dd2229c chore: remove unused CLI policy TOML files (#12620) 2025-11-06 01:17:44 +00:00
Jacob Richman 224a33db2e Improve tracking of animated components. (#12618) 2025-11-06 00:20:04 +00:00
Jenna Inouye fb0768f007 Docs: Added newest changelog: v0.12.0 (#12611) 2025-11-05 23:44:24 +00:00
Tommaso Sciortino 9787108532 List tools in a consistent order. (#12615) 2025-11-05 23:38:44 +00:00
Andrew Riggs 44b8c62db9 fix(core) Path reader method readPathFromWorkspace does not respect git/gemini ignore config. (#10073)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-11-05 21:40:54 +00:00
Silvio Junior 1d2f90c7e7 Add compression mechanism to subagent (#12506) 2025-11-05 21:15:28 +00:00
Adam Weidman c951f9fdcd fix: add line breaks in quota/capacity msgs (#12603) 2025-11-05 21:12:06 +00:00
Jacob MacDonald fa93b56243 [Extension Reloading]: Update custom commands, add enable/disable command (#12547) 2025-11-05 19:36:07 +00:00
Tommaso Sciortino ca6cfaaf4e Update auto compression message. (#12605) 2025-11-05 19:08:57 +00:00
Shreya Keshive 400da30a8d fix(triage-workflow): Pass environment variables directly into prompt (#12602) 2025-11-05 18:33:33 +00:00
Allen Hutchison f5bd474e51 fix(core): prevent server name spoofing in policy engine (#12511) 2025-11-05 18:10:23 +00:00
Bryan Morgan 16113647de Fix/windows pty crash (#12587)
Co-authored-by: LayorX <yor31117@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-05 16:53:03 +00:00
Gaurav f51d74586c refactor: parse string for retryInfo (#12586) 2025-11-05 16:42:58 +00:00
Shreya Keshive c743631148 chore(release): bump version to 0.14.0-nightly.20251104.da3da198 (#12564) 2025-11-05 16:09:33 +00:00
shishu314 b445db3d46 fix(infra) - Make list dir less flaky (#12554)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-11-05 16:00:06 +00:00
Adam Weidman 21dd9bbf7d fix: allow user to set pro model even in fallback (#12566) 2025-11-05 14:38:45 +00:00
Jacob Richman 3937461272 Scrollable support (#12544) 2025-11-05 00:21:00 +00:00
Shreya Keshive da3da19844 feat(core): Integrate remote experiments configuration (#12539) 2025-11-04 23:09:53 +00:00
Silvio Junior 53c7646ed7 enable codebase investigator by default for preview (#12555) 2025-11-04 22:30:01 +00:00
Sehoon Shon b6524e410a migrate console.error to coreEvents/debugger for sandbox, logger, chatRecordingService (#12253) 2025-11-04 21:02:31 +00:00
shishu314 75c2769b32 Ss/fix ext (#12540)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-11-04 20:01:30 +00:00
Tommaso Sciortino f796650122 Fix shift+tab keybinding when not in kitty mode (#12552) 2025-11-04 19:45:22 +00:00
christine betts 460c3debf5 Fix flicker in screen reader nudge (#12541) 2025-11-04 16:57:15 +00:00
cornmander b8b6620365 Tighten bash shell option handling (#12532) 2025-11-04 16:11:29 +00:00
shishu314 96d7eb2966 fix(infra) - Use canned response for flicker test (#12377)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-11-04 16:08:46 +00:00
Jacob MacDonald da4fa5ad75 Extensions MCP refactor (#12413) 2025-11-04 15:51:18 +00:00
anj-s 2b77c1ded4 SI prompt nudge for the todo tool (#12159) 2025-11-04 14:25:15 +00:00
Jainam M 6ab1b239ca refactor(core): Refactored and removed redundant test lines in telemetry (#12356) 2025-11-04 08:42:31 +00:00
Chris Coutinho ab73051298 fix(mcp): replace hardcoded port 7777 with dynamic port allocation for OAuth (#12520) 2025-11-04 07:16:56 +00:00
Edilmo Palencia cb2880cb93 feat(hooks): Hook Execution Planning and Matching (#9090) 2025-11-04 06:25:43 +00:00
Tommaso Sciortino b5315bfc20 Fix alt+left on ghostty (#12503) 2025-11-04 04:30:42 +00:00
Edilmo Palencia b259153403 feat(hooks): Hook Input/Output Contracts (#9080) 2025-11-04 02:47:23 +00:00
Sandy Tao f0c3c81e94 fix(core): Improve loop detection for longer repeating patterns (#12505) 2025-11-04 02:06:22 +00:00
christine betts fc42c4613f Only show screen reader notice once (#12247) 2025-11-04 02:04:48 +00:00
cornmander bd06e5b161 chore: bump vite to 7.1.12 (#12512) 2025-11-04 01:21:18 +00:00
Jacob Richman ad33c22374 Modify navigation and completion keyboard shortcuts to not use scroll. (#12502) 2025-11-04 00:22:04 +00:00
anthony bushong f3759381b1 feat(core): add timeout to llm edit fix (#12393) 2025-11-04 00:04:51 +00:00
Edilmo Palencia 80673a0c0c feat(hooks): Hook Type Decoupling and Translation (#9078) 2025-11-03 23:56:53 +00:00
Jacob Richman 1671bf77fb Alt buffer default (#12507) 2025-11-03 23:48:24 +00:00
Allen Hutchison ffc5e4d048 Refactor PolicyEngine to Core Package (#12325)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-11-03 23:41:00 +00:00
anj-s 60d2c2cc90 Enable WriteTodos tool by default (#12500) 2025-11-03 23:40:20 +00:00
Gal Zahavi 2144d25885 fix(auth): Return empty map if token file does not exits, and refacto… (#12332)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-11-03 23:07:22 +00:00
Silvio Junior 7a515339ea Log recovery events (nudges) that happens inside the subagent (#12408) 2025-11-03 22:53:43 +00:00
Shreya Keshive be1dc13bb1 feat(core): Add support for listing experiments (#12495) 2025-11-03 21:51:22 +00:00
anj-s 1c044ba8af (fix): Respect ctrl+c signal for aborting execution in NonInteractive mode (#11478) 2025-11-03 21:49:01 +00:00
Jacob Richman 4fc9b1cde2 alternate buffer support (#12471) 2025-11-03 21:41:58 +00:00
Silvio Junior 60973aacd9 Grants subagent a recovery turn for when it hits TIMEOUT, MAX_TURNS or NO_TOOL_CALL failures. (#12344) 2025-11-03 21:22:12 +00:00
Silvio Junior 1c18552426 Enforce timeout for subagents (#12232) 2025-11-03 20:33:04 +00:00
Shehab c4377c1b1a fix(settings): persist restart-required changes when exiting with ESC (#12443) 2025-11-03 20:04:53 +00:00
Abhi 265f24e5d7 fix(ui): ensure model changes update the UI immediately (#12412) 2025-11-03 19:59:51 +00:00
Abhi 59e0b10e6c Cap Thinking Budget to prevent runaway thought loops (#12416) 2025-11-03 18:39:06 +00:00
Allen Hutchison 9d642f3bb1 refactor(core): improve error handling for setGlobalProxy (#12437) 2025-11-03 18:13:52 +00:00
Riddhi Dutta 19ea68b838 Refactoring packages/cli/src/ui tests (#12482)
Co-authored-by: riddhi <duttariddhi@google.com>
2025-11-03 18:10:57 +00:00
anj-s 93f14ce626 refactor: split core system prompt into multiple parts (#12461) 2025-11-03 17:08:56 +00:00
cornmander 1ef34261e0 chore: bump tar to 7.5.2 (#12466) 2025-11-03 07:36:35 +00:00
cornmander 5062fadf87 chore: autogenerate settings documentation (#12451) 2025-11-03 01:42:49 +00:00
cornmander 462c7d3502 feat(ui): add response semantic color (#12450)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: shambhu-hegde <143840542+shambhu-hegde@users.noreply.github.com>
2025-11-03 00:21:26 +00:00
Chris Coutinho 9187f6f6d1 fix: preserve path components in OAuth issuer URLs (#12448)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Gregory Shikhman <cornmander@cornmander.com>
2025-11-02 21:19:46 +00:00
Edilmo Palencia c0495ce2f9 feat(hooks): Hook Configuration Schema and Types (#9074)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-11-02 19:49:16 +00:00
Allen Hutchison 02518d2927 docs: update command-line flag documentation (#12452) 2025-11-02 17:59:03 +00:00
Jacob Richman d7243fb81f Add DarkGray to the ColorTheme. (#12420) 2025-11-01 23:50:51 +00:00
Eric Rahm e3262f8766 fix(core): combine .gitignore and .geminiignore logic for correct precedence (#11587)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-11-01 17:06:34 +00:00
Tommaso Sciortino caf2ca1438 Add kitty support for function keys. (#12415) 2025-10-31 23:19:55 +00:00
Jacob Richman f8ce3585eb Jacob314/jrichman ink (#12414) 2025-10-31 23:14:12 +00:00
Jacob Richman 61207fc2cb further incremental steps. Update the string width version to align with upstream ink (#12411) 2025-10-31 22:01:04 +00:00
Shreya Keshive b3cc397a31 feat(triage): overhaul automated issue triage workflow (#12365) 2025-10-31 21:21:05 +00:00
Shreya Keshive f9df415392 feat(core): Introduce release channel detection (#12257)
Co-authored-by: shishu314 <shishu_1998@yahoo.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Shardul Natu <43422294+kiranani@users.noreply.github.com>
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-31 21:18:39 +00:00
Abhi fd2cbacae9 fix(core): prevent model router from overriding explicit model choice (#12399) 2025-10-31 21:02:22 +00:00
Jacob Richman 8b93a5f27d I think the package lock was added in error to .gitignore. (#12405) 2025-10-31 20:29:42 +00:00
Jenna Inouye 9478bca67d Adding the Policy Engine docs to indexes. (#12404) 2025-10-31 20:23:56 +00:00
Jenna Inouye 4b53b3a6e6 Update telemetry.md to remove references to flags. (#12397) 2025-10-31 20:23:45 +00:00
Jacob Richman d72f8453cb Remove unused jsdom dep (#12394) 2025-10-31 20:03:57 +00:00
shishu314 6ee7165e39 feat(infra) - Add logging for slow rendering (#11147)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-31 19:51:05 +00:00
kevinjwang1 adddafe6d0 Handle untrusted folders on extension install and link (#12322)
Co-authored-by: Jacob MacDonald <jakemac@google.com>
2025-10-31 19:17:01 +00:00
shishu314 35f091bb01 feat(telemetry) - Add metric for slow rendering (#12391)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-31 18:57:47 +00:00
Sehoon Shon e9c7a80b12 migrate console.error to coreEvents for mcp-client-manager and google-auth-provider (#12342) 2025-10-31 18:52:56 +00:00
Sehoon Shon ab013fb7e9 migrating console.error to debugger for installationManager, oauth-provider, modifiable-tool (#12279) 2025-10-31 18:17:51 +00:00
Allen Hutchison c158923b27 docs: Add policy engine documentation and update sidebar (#12240) 2025-10-31 18:11:19 +00:00
Gaurav 31c5761e06 refactor: simplify daily quota error messages (#12386) 2025-10-31 17:49:32 +00:00
Jacob Richman f4ee245bf9 Switch to ink@. version 6.4.0 (#12381) 2025-10-31 16:40:51 +00:00
Tommaso Sciortino d13482e802 Mark model.compressionThreshold as requiring a restart (#12378) 2025-10-31 16:06:28 +00:00
Sandy Tao 11e1e98022 fix(core): ensure loop detection respects session disable flag (#12347) 2025-10-31 16:06:10 +00:00
Hriday b31f6804fe chore: migrate console.error to debugLogger in usePromptCompletion (#12208)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-10-31 15:39:03 +00:00
Jerop Kipruto 01ad74a870 docs(cli): user.email attribute is only available for Google auth (#12372) 2025-10-31 15:13:38 +00:00
Jacob Richman f875911af7 Remove testing-library/react dep now that it is unused. (#12355) 2025-10-31 14:57:29 +00:00
Richard Michael f8ff921c42 Update mcp-server.md (#12310)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-10-31 14:46:51 +00:00
Jacob Richman ab8c24f5ea Fixes for Ink 6.4.0 (#12352) 2025-10-31 14:43:12 +00:00
Jerop Kipruto 9da3cb7e43 fix(core): remove duplicate session_id in GCP log exporter (#12370) 2025-10-31 14:42:13 +00:00
Jack Wotherspoon 6f69cdcc31 chore: make clear that --model is for choosing model on startup (#12367) 2025-10-31 14:01:56 +00:00
Shardul Natu 236334d015 feat(telemetry): Add extension name to ToolCallEvent telemetry (#12343)
Co-authored-by: Shnatu <snatu@google.com>
2025-10-31 13:50:22 +00:00
Jainam M 12472ce9b2 refactor(core): Refactored and removed redundant test lines in teleme… (#12284) 2025-10-31 07:33:33 +00:00
matt korwel e762cda55d fix: Address silent failure in release-patch-1-create-pr workflow (#12339) 2025-10-30 20:09:22 -07:00
matt korwel f566df91c8 feat: add dynamic run-names to patch release workflows (#12336) 2025-10-31 02:33:27 +00:00
gemini-cli-robot db37c715c0 chore/release: bump version to 0.13.0-nightly.20251031.c89bc30d (#12330) 2025-10-31 01:55:09 +00:00
Jacob Richman c89bc30d66 Code review script to catch common package/cli regressions (#12316)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-31 00:04:52 +00:00
Abhi 59e00eeda6 Remove context percentage in footer by default (#12326) 2025-10-30 23:18:25 +00:00
Tommaso Sciortino 3332703fca Make compression threshold editable in the UI. (#12317) 2025-10-30 23:03:58 +00:00
Victor May 643f2c0958 Enable model routing for all users (#12300) 2025-10-30 22:29:24 +00:00
Hyang-Ah Hana Kim c6a7107f78 fixing minor formatting issues in quota-and-pricing.md (#11340) 2025-10-30 21:46:23 +00:00
Sandy Tao 322feaafa6 refactor(core): decouple GeminiChat from uiTelemetryService via Usage events (#12196) 2025-10-30 21:05:38 +00:00
Tommaso Sciortino 68afb7200e Change default compression threshold (#12306) 2025-10-30 20:46:41 +00:00
matt korwel b382ae6803 feat: Prevent self-imports and fix build loop (#12309) 2025-10-30 20:15:49 +00:00
Jerop Kipruto 135d981e3c Create line change metrics (#12299) 2025-10-30 18:55:47 +00:00
Jacob Richman 54fa26ef0e Fix tests to wrap all calls changing the UI with act. (#12268) 2025-10-30 18:50:26 +00:00
Jacob MacDonald cc081337b7 Initial support for reloading extensions in the CLI - mcp servers only (#12239) 2025-10-30 18:05:49 +00:00
shishu314 d4cad0cdcc fix(test) - Make JSON output error test use canned response (#12250)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-30 17:25:01 +00:00
Pascal Birchler b8969cceff fix(docs): remove incorrect extension install method (#11194) 2025-10-30 17:24:48 +00:00
kevinjwang1 a3370ac86b Add validate command (#12186) 2025-10-30 16:08:13 +00:00
Jacob MacDonald 7d03151cd5 fix output messages for install and link (#12168) 2025-10-30 15:32:33 +00:00
matt korwel 054b4307ed Revert "fix(core): Add rootDir to tsconfig.json to resolve TS5055 error" (#12293) 2025-10-30 08:25:57 -07:00
Adib234 b8330b626e Fix misreported number of lines being removed by model (#12076) 2025-10-30 14:29:39 +00:00
christine betts 2a3244b1bb Log extension ID with tool call/slash command invocation (#12254)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-30 13:47:36 +00:00
Jenna Inouye 4d2a2de557 Docs: add v.0.11.0 to changelog (#12256) 2025-10-30 13:26:07 +00:00
Riddhi Dutta c583b510e0 Refactoring unit tests in packages/cli/src/ui (#12251)
Co-authored-by: riddhi <duttariddhi@google.com>
2025-10-30 07:18:45 +00:00
matt korwel 42c79c64d7 fix(core): Add rootDir to tsconfig.json to resolve TS5055 error (#12274) 2025-10-29 23:17:10 -07:00
Abhi 1d9e6870be feat(core): Implement granular memory loaders for JIT architecture (#12195) 2025-10-30 04:09:12 +00:00
Hriday 167b6ff8a1 chore: migrate console.error to debugLogger in useSlashCompletion (#12218)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-10-30 03:59:15 +00:00
Jack Wotherspoon 77df6d48e2 docs: update keyboard shortcuts with missing shortcuts (#12024)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: cornmander <shikhman@google.com>
2025-10-30 02:39:15 +00:00
Gal Zahavi 06035d5d43 feat(auth): improve API key authentication flow (#11760)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-30 01:58:08 +00:00
Miguel Solorio 6c8a48db13 feat(ui): Fix Todo item text color not propagating for custom themes (#12265) 2025-10-29 23:39:31 +00:00
Sehoon Shon 523274dbf3 Standardize error logging with coreEvents.emitFeedback (#12199) 2025-10-29 22:27:17 +00:00
Shardul Natu 36207abec2 feat(telemetry): Add extensions to StartSessionEvent telemetry (#12261)
Co-authored-by: Shnatu <snatu@google.com>
2025-10-29 22:21:32 +00:00
shishu314 99f75f3218 Fix(noninteractive) - Add message when user uses deprecated flag (#11682)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-29 21:54:40 +00:00
Tommaso Sciortino 82c10421a0 Fix alt key mappings for mac (#12231) 2025-10-29 21:32:02 +00:00
Miguel Solorio 2e003ad8cf refactor(todo): improve performance and readability of todo component (#12238) 2025-10-29 21:19:44 +00:00
Tommaso Sciortino 42a265d290 Fix atprocessor test on windows (#12252) 2025-10-29 21:11:39 +00:00
Tommaso Sciortino 121732dde6 Hide collapsed Todo tray when they're all done. (#12242) 2025-10-29 20:41:20 +00:00
Shreya Keshive 3e9701861e refactor(core): Move getPackageJson utility to core package (#12224) 2025-10-29 20:23:35 +00:00
Gal Zahavi b31b786db7 refactor: Replace console.error with structured logging and feedback (#12175) 2025-10-29 20:20:11 +00:00
Shardul Natu 66e981ed1e feat: Add auth_type to StartSessionEvent OTel logging (#12034)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-29 19:28:28 +00:00
shishu314 c60d8ef5a8 fix(infra) - Unskip read many file test (#12181)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-29 18:56:09 +00:00
shishu314 6e026bd950 fix(security) - Use emitFeedback instead of console error (#11954)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-29 14:49:46 +00:00
gemini-cli-robot 372b588778 chore(release): bump version to 0.13.0-nightly.20251029.cca41edc (#12191)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-10-28 21:53:10 -07:00
Tommaso Sciortino 5d87a7f9c7 Remove Todo Icon (#12190) 2025-10-29 03:48:38 +00:00
lifefloating 706834ecd3 fix: enhance path handling in handleAtCommand to support relative paths (#9065)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-29 02:13:04 +00:00
Richie Foreman cca41edc6e feat(docs): Symlink CONTRIBUTING.md in the docs folder so that the site can pick it up. (#12178) 2025-10-28 23:24:04 +00:00
Victor May 601a639f95 Disable model routing for oauth users (#11889)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-10-28 15:25:53 -07:00
Tommaso Sciortino f6423ea45a Remove obsolete snapshots (#12180) 2025-10-28 20:31:36 +00:00
Christie Warwick (Wilson) 70996bfdee feat: Add Open Telemetric semantic standard compliant log (#11975) 2025-10-28 20:02:46 +00:00
Jacob MacDonald 44bdd3ad11 Record model responses with --record-responses (for use in testing) (#11894) 2025-10-28 19:13:45 +00:00
Tommaso Sciortino ab1f195508 Change debug drawer keybinding to F12 (#12171) 2025-10-28 19:10:40 +00:00
hritan 39eb6ed9cc chore: migrate console.error in workspaceContext (#12167)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-10-28 19:06:13 +00:00
hritan e750da987d chore: migrate console.error in useGeminiStream (#12157)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-10-28 19:05:48 +00:00
christine betts 7e987113a2 Add support for sensitive keychain-stored per-extension settings (#11953) 2025-10-28 18:48:50 +00:00
shishu314 7a238bd938 fix(infra) - Continue workflow when merge queue skipper fail (#10509)
Co-authored-by: Shi Shu <shii@google.com>
2025-10-28 18:30:05 +00:00
JAYADITYA c2d60d61ac feat: Add explore subcommand for extension (#11846)
Co-authored-by: christine betts <chrstn@uw.edu>
2025-10-28 18:16:26 +00:00
Jacob Richman 13aa0148e7 Migrate tests to use avoid jsdom (#12118) 2025-10-28 17:32:15 +00:00
Allen Hutchison 5d61adf804 feat: Add message bus setting guard for tool confirmation (#12169) 2025-10-28 17:18:34 +00:00
Allen Hutchison 4e6eef5882 refactor: Migrate console.error to debugLogger.warn in atCommandProcessor.ts (#12134) 2025-10-28 17:16:47 +00:00
Allen Hutchison 064edc52f5 feat(policy): Introduce config-based policy engine with TOML configuration (#11992) 2025-10-28 16:20:57 +00:00
Jacob MacDonald 1b302deeff Add ExtensionLoader interface, use that on Config object (#12116) 2025-10-28 16:04:30 +00:00
Shreya Keshive 25f27509c0 revert nightly schedule (#11653) 2025-10-28 15:59:39 +00:00
Adam Weidman d465a26e30 chore(console): change console errors in sa-impersontation (#12165) 2025-10-28 15:26:39 +00:00
Adam Weidman 034ca93907 Revert "feat(ID token support): Add ID token support for authenticating to MC…" (#12162) 2025-10-28 15:07:57 +00:00
Tekkali Rahul Lakshmi Subrahmanyam cca5a12839 docs: update installation section in README (#12035) 2025-10-28 14:36:41 +00:00
Jainam M ecf0a24873 refactor(core): Parameterize tests in glob.test.ts (#12061) 2025-10-28 14:32:55 +00:00
Pavel Jbanov cb208f53d8 Added a a script to setup and run genkit telemetry and dev ui (#12120) 2025-10-28 03:37:43 +00:00
Tommaso Sciortino 85f3a8c210 Migrate to coreEvents/debugLogger (#12107) 2025-10-27 23:46:35 +00:00
Jacob Richman e9f8ccd51a Fix config test so it passes even if the user running the test happens to have set GEMINI_MODEL to flash (#12114) 2025-10-27 23:31:01 +00:00
Pavel Jbanov a9cb8f4958 feat: added basic dev otel trace instrumentation (#11690)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-27 23:16:44 +00:00
Pyush Sinha 2dfb813c90 (fix): appcontainer should not poll and footer should use currentModel from ui state (#11923) 2025-10-27 22:33:12 +00:00
matt korwel cb0947c501 fix(ci): tsc build for package/core is idempodent (#12112) 2025-10-27 14:39:09 -07:00
Sandy Tao 2a87d663d2 refactor(core): extract ChatCompressionService from GeminiClient (#12001) 2025-10-27 21:29:39 +00:00
Sandy Tao 6db64aab2b fix(telemetry): Prevent duplicate StartSessionEvent logging (#12090) 2025-10-27 20:40:03 +00:00
Ruchika Goel abd22a753d feat(ID token support): Add ID token support for authenticating to MC… (#12031)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
2025-10-27 20:34:38 +00:00
cocosheng-g 9e8f7c074c Create BYOID auth client when detecting BYOID credentials (#11592) 2025-10-27 20:05:11 +00:00
Jenna Inouye 44c62c8e5d Docs: Contributing guide (#12012) 2025-10-27 19:52:32 +00:00
Sandy Tao 4ef3c09332 fix(core): update loop detection LLM schema fields (#12091) 2025-10-27 19:16:25 +00:00
Alisa 29efebe38f Implementing support for recitations events in responses from A2A Server (#12067)
Co-authored-by: Alisa Novikova <alisanovikova@google.com>
2025-10-27 18:56:08 +00:00
Tommaso Sciortino 0e4dce23b2 use debugLogger instead of console (#12095) 2025-10-27 18:35:16 +00:00
Jerop Kipruto e115083fac docs(github): revamp pull request template (#11949) 2025-10-27 17:33:29 +00:00
Riddhi Dutta 5ded674ad6 Refactor vim.test.ts: Use Parameterized Tests (#11969) 2025-10-27 17:13:17 +00:00
joshualitt 541eeb7a50 feat(core, cli): Implement sequential approval. (#11593) 2025-10-27 16:59:08 +00:00
Jack Wotherspoon 23c906b085 fix: user configured oauth scopes should take precedence over discovered scopes (#12088) 2025-10-27 16:57:12 +00:00
Krishna Bajpai c7817aee30 fix(cli): Add delimiter before printing tool response in non-interactive mode (#11351) 2025-10-27 14:57:54 +00:00
Gaurav Sehgal 2fa13420ae add absolute file path description for windows (#12007) 2025-10-27 04:17:13 +00:00
Jacob Richman ee66732ad2 First batch of fixing tests to use best practices. (#11964) 2025-10-25 21:41:53 +00:00
Tommaso Sciortino 8352980f01 Remove non-existent parallel flag. (#12018) 2025-10-25 16:07:35 +00:00
Sandy Tao a2d7f82b49 fix(core): Prepend user message to loop detection history if it starts with a function call (#11860) 2025-10-25 04:22:26 +00:00
ph-sp 73570f1c86 Fix the shortenPath function to correctly insert ellipsis. (#12004)
Co-authored-by: Greg Shikhman <shikhman@google.com>
2025-10-25 04:10:00 +00:00
Sandy Tao 51578397a5 refactor(cli): replace custom wait with vi.waitFor in InputPrompt tests (#12005) 2025-10-25 03:32:21 +00:00
Tommaso Sciortino ef70e63230 Make PASTE_WORKAROUND the default. (#12008) 2025-10-25 02:55:13 +00:00
Lakshan Perera ce26b58f09 docs(contributing): update project structure section with missing packages (#11599) 2025-10-25 02:08:42 +00:00
Qiyu-Wei bcd9735a73 Fix typo in: packages/cli/src/utils/handleAutoUpdate.ts (#11809) 2025-10-25 02:00:48 +00:00
Eric Rahm b1059f891f refactor: Switch over to unified shouldIgnoreFile (#11815) 2025-10-25 01:55:12 +00:00
Tommaso Sciortino 145e099ca5 Support paste markers split across writes. (#11977) 2025-10-25 01:52:03 +00:00
Jacob MacDonald 81006605c8 use debugLogger instead of console.error (#11990) 2025-10-24 23:31:25 +00:00
Allen Hutchison f934f01881 fix(tools): ReadFile no longer shows confirmation when message bus is off (#12003) 2025-10-24 23:22:02 +00:00
Jacob MacDonald cdff69b7b2 Support redirects in fetchJson, add tests for it (#11993) 2025-10-24 22:35:09 +00:00
Abhi d91484eb4d Fix tests (#11998) 2025-10-24 21:49:42 +00:00
Jacob MacDonald c20b88cee2 use coreEvents.emitFeedback in extension enablement (#11985) 2025-10-24 21:47:13 +00:00
Gal Zahavi 810d940e57 fix(update): replace update-notifier with latest-version (#11989) 2025-10-24 21:23:39 +00:00
Sandy Tao 7e2642b9f1 fix(core): use debugLogger.warn for loop detection errors (#11986) 2025-10-24 21:00:05 +00:00
Eric Rahm 40057b55f0 fix(cli): Use correct defaults for file filtering (#11426) 2025-10-24 20:20:17 +00:00
Allen Hutchison b188a51c32 feat(core): Introduce message bus for tool execution confirmation (#11544)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-24 20:04:40 +00:00
Jacob MacDonald 63a90836fe fix linked extension test on windows (#11973) 2025-10-24 18:55:31 +00:00
Eric Rahm ca94dabd4f Fix(cli): Use cross-platform path separators in extension tests (#11970) 2025-10-24 18:42:49 +00:00
cornmander 31b7c010d0 Add regression tests for shell command parsing (#11962) 2025-10-24 18:25:54 +00:00
shishu314 4960c47257 fix(infra) - Simplify cancel in progress and add permission to set status step (#11835)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-24 18:23:50 +00:00
Gaurav ee92db7533 fix: handle request retries and model fallback correctly (#11624) 2025-10-24 18:09:06 +00:00
shishu314 c2104a14fb fix(security) - Use emitFeedback instead of console error (#11948)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-24 18:07:11 +00:00
shishu314 25996ae037 fix(security) - Use emitFeedback (#11961)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-24 17:52:07 +00:00
Eric Rahm a123a813b2 Fix(cli): Use the correct extensionPath (#11896) 2025-10-24 17:45:58 +00:00
owenofbrien 8bdef8754e Stop logging session ids on extension events (#11941) 2025-10-24 17:11:42 +00:00
Sehoon Shon 978fbcf95e run bom test on windows (#11828) 2025-10-24 15:46:52 +00:00
Jerop Kipruto d915525c8e docs(cli): update telemetry documentation (#11806) 2025-10-24 14:56:21 +00:00
Adam Weidman c079084ca4 chore(core): add token caching in google auth provider (#11946) 2025-10-24 14:26:42 +00:00
Riddhi Dutta a889c15e38 Adding Parameterised tests (#11930) 2025-10-24 13:45:36 +00:00
Sandy Tao 884d838a1e fix(cli): re-throw errors in non-interactive mode (#11849) 2025-10-24 01:52:16 +00:00
Tommaso Sciortino 0fe82a2f4e Use raw writes to stdin in test (#11871) 2025-10-23 23:55:30 +00:00
Jacob MacDonald b16fe7b646 First take at mocking out gemini cli responses in integration tests (#11156) 2025-10-23 23:10:43 +00:00
joshualitt b77381750c feat(core) Bump get-ripgrep version. (#11698) 2025-10-23 22:01:02 +00:00
Riddhi Dutta 9814f86a25 Added parameterization to base-storage-token.test and prompts.test.ts (#11821) 2025-10-23 21:47:06 +00:00
Tommaso Sciortino aa6ae954ef Use raw writes to stdin where possible in tests (#11837) 2025-10-23 21:41:21 +00:00
cornmander 5e70a7dd46 fix: align shell allowlist handling (#11510) (#11813) 2025-10-23 20:55:01 +00:00
shishu314 48ff9e1555 fix(infra) - Fix merge queue skipper issues for chain e2e (#11810)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-23 20:46:46 +00:00
Jacob MacDonald c4c0c0d182 Create ExtensionManager class which manages all high level extension tasks (#11667) 2025-10-23 18:39:36 +00:00
Abhi 3a501196f0 feat(ux): Surface internal errors via unified event system (#11803) 2025-10-23 18:14:14 +00:00
shishu314 7787a31f81 feat(infra) - Make merge group and pushes run chained e2e (#11796)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-23 17:14:40 +00:00
Jacob Richman 9e91aafe40 Fix bug where tool scheduler was repeatedly created. (#11767) 2025-10-23 16:35:32 +00:00
shishu314 8ad72ec1ae fix(infra) - Remove context input for setting status (#11734)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-23 16:27:53 +00:00
Smetalo d3e4ff2cfc feat: Add lychee-action to check for broken links (#11781)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-10-23 15:50:41 +00:00
christine betts 750c0e366f Add extension settings to be requested on install (#9802) 2025-10-23 15:47:08 +00:00
cornmander bde5d61812 Re-enable test. (#11628) 2025-10-23 13:50:50 +00:00
Smetalo 5ae9fe6949 Fix broken links in documentation (#11789)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-10-23 13:48:24 +00:00
jdgarrido1105 3f38f95b1d Adds executeCommand endpoint with support for /extensions list (#11515) 2025-10-23 13:05:43 +00:00
Smetalo 445ef4fbed Docs: Fix broken link in docs/cli/configuration.md (#11655) 2025-10-23 08:29:31 +00:00
Jainam M 5ebe40e919 refactor(cli): Parameterize tests in InputPrompt (#11776) 2025-10-23 06:24:44 +00:00
Keith Lyons 8e9f71b7a3 fix(ui): resolve race condition in double-escape handler (#8913)
Co-authored-by: Megha Bansal <megha.igit@gmail.com>
2025-10-23 04:40:29 +00:00
Tommaso Sciortino 1202dced73 Refactor KeypressContext (#11677) 2025-10-23 00:51:03 +00:00
Eric Rahm 047bc44032 refactor(core): Clean up exclude description (#11678)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-23 00:08:38 +00:00
Eric Rahm 92d412e542 refactor: simplify FilterReport and remove unused code (#11681)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-23 00:06:31 +00:00
Sandy Tao d9f0b9c668 fix(cli): fix race condition and unskip tests in useGitBranchName (#11759) 2025-10-22 23:11:06 +00:00
JAYADITYA 8f8a689722 feat(preflight): Use venv for yamllint installation (#11694) 2025-10-22 22:58:04 +00:00
Sandy Tao a90b9fe977 fix(a2a-server): Fix and unskip GCS persistence test (#11755) 2025-10-22 22:57:34 +00:00
Jenna Inouye eee3452948 Docs: adds 2025-10-13 changelog. (#11751) 2025-10-22 22:02:55 +00:00
Sandy Tao 2ede47d5ee fix(ui): Fix and unskip InputPrompt tests (#11700) 2025-10-22 21:59:10 +00:00
shishu314 4f220e945a feat(infra) - Add logging for when user tries to exit multiple times (#11218)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-22 21:39:27 +00:00
Tommaso Sciortino 30dd2f1dfe Document todo tool (#11695) 2025-10-22 20:27:10 +00:00
Abhi b40f67b76a extract console error to util func (#11675) 2025-10-22 20:09:10 +00:00
shishu314 a7faa2080f feat(infra) - Update status for chained e2e (#11651)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-22 20:01:02 +00:00
Adib234 6d75005afc Add setting to disable YOLO mode (#11609)
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2025-10-22 18:57:10 +00:00
shishu314 5bb9cd1a13 feat(infra) - Create a workflow for deflake (#11535)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-22 18:41:26 +00:00
kevinjwang1 0bf2a0353d Add extension alias for extensions command (#11622) 2025-10-22 18:24:32 +00:00
Sandy Tao ce655436ef fix(test): unskip and fix useToolScheduler tests (#11671) 2025-10-22 17:45:50 +00:00
gemini-cli-robot 59985138f7 chore(release): bump version to 0.12.0-nightly.20251022.0542de95 (#11672) 2025-10-22 17:37:25 +00:00
matt korwel 0542de95eb fix(release): Pass args to promoteNightlyVersion (#11666)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-22 09:45:42 -07:00
Tommaso Sciortino dc90c8fec7 Updates to package-lock.json from running npm install (#11665) 2025-10-22 16:37:33 +00:00
Mayur Vaid 0d7da7ecb1 fix(mcp): Include path in oauth resource parameter (#11654) 2025-10-22 15:48:47 +00:00
christine betts 73b1afb106 Remove errant console.debug log of config (#11579) 2025-10-22 14:13:42 +00:00
Smetalo d1c913ed5c Docs: Fix broken telemetry link in docs/cli/configuration.md (#11638) 2025-10-22 11:55:34 +00:00
Mayur Vaid 2940b50811 fix: Ignore correct errors thrown when resizing or scrolling an exited pty (#11440) 2025-10-22 04:27:49 +00:00
Sandy Tao c7243997f4 fix(cli): fix flaky BaseSelectionList test (#11620) 2025-10-22 03:56:29 +00:00
Jacob Richman 306e12c23c Fix regression in handling shift+tab resulting in u in the input prompt. (#11634) 2025-10-22 02:54:51 +00:00
Tommaso Sciortino cc3904f026 Add aria labels to Todo list display (#11621) 2025-10-22 00:39:49 +00:00
James ed9f714fbb feat(cli): Adds the ability to run MCP prompt commands in non-interactive mode (#10194)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-10-21 23:40:13 +00:00
Silvio Junior 5b750f519b fix(config): Disable CI for stable release (#11615) 2025-10-21 23:36:41 +00:00
matt korwel 465f97a528 fix: Improve patch workflow and update NOTICES.txt (#11623) 2025-10-21 16:45:32 -07:00
Sandy Tao ccf8d0ca31 fix(test): Enable Ctrl+C exit test (#11618) 2025-10-21 22:47:12 +00:00
Tommaso Sciortino 519bd57e55 Apply new style to Todos (#11607) 2025-10-21 22:40:45 +00:00
Adam Weidman 16f5f767b2 chore: use waitFor rather than wait (#11616) 2025-10-21 22:18:23 +00:00
christine betts c6a59896f3 Add extensions logging (#11261) 2025-10-21 20:55:16 +00:00
gemini-cli-robot e9e80b054d chore/release: bump version to 0.11.0-nightly.20251021.e72c00cf (#11614) 2025-10-21 20:46:18 +00:00
Abhi b364f37655 refactor(logging): Centralize console logging with debugLogger (#11590) 2025-10-21 20:35:22 +00:00
shishu314 f5e07d94bd fix(infra) - Fix how we download and upload repo names (#11613)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-21 20:33:54 +00:00
Sandy Tao dd3b1cb653 feat(cli): continue request after disabling loop detection (#11416) 2025-10-21 20:27:57 +00:00
Sandy Tao cf16d1678d fix(scripts): add tsconfig linter to prevent adding files to the exclude list (#11602) 2025-10-21 20:08:33 +00:00
Adam Weidman fb44f5ba0d chore: renable test (#11582) 2025-10-21 20:05:19 +00:00
Shreya Keshive e72c00cf9a fix(proxy): Add error handling to proxy agent creation (#11538)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-21 19:43:37 +00:00
Jack Wotherspoon 62dc9683bd fix: improve gemini mcp add option handling for arrays (#11575) 2025-10-21 19:35:01 +00:00
shishu314 3443946087 fix(infra) - Fix issues with downloading repo artifact (#11606)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-21 19:33:00 +00:00
Smetalo e49f4673f2 Docs: Fix broken checkpointing links in docs/cli/configuration.md (#11508) 2025-10-21 19:05:12 +00:00
Richie Foreman af833c5eff feat(release): Add dev env support to release-3-patch (#11458) 2025-10-21 19:04:21 +00:00
Richie Foreman 74a7771943 fix(ci): Default all GHA env variables to 'prod' set (#11572)
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
2025-10-21 19:02:48 +00:00
Shreya Keshive 193b4bba91 bump nightly test an hour (#11603) 2025-10-21 19:01:05 +00:00
Allen Hutchison bf80263bd6 feat: Implement message bus and policy engine (#11523)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-21 18:45:33 +00:00
Shreya Keshive 0658b4aa31 remove another replace flake (#11601) 2025-10-21 18:36:49 +00:00
Abhi a74a04d12d Revert "Disable Routing by default (#11549)" (#11594) 2025-10-21 18:36:28 +00:00
Abhi 2c93542e5c Revert "Per-Auth Method Feature Flag for Model Routing (#11333)" (#11597) 2025-10-21 18:36:02 +00:00
shishu314 cb8f93bad7 Feat(infra) - Make chained e2e workflow run e2e tests (#11521)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-21 18:23:34 +00:00
cornmander 9d0177e0ce Use env variables in workflows (#11585) 2025-10-21 18:14:27 +00:00
Shreya Keshive f0eed9b221 Temporarily update nightly release schedule (#11573) 2025-10-21 14:12:39 -04:00
shishu314 a2013f34e5 Skip delete test since it's flakey (#11591)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-21 17:50:18 +00:00
cornmander 0ed4f98087 Pin auth action in eval workflow (#11584) 2025-10-21 17:45:03 +00:00
matt korwel 14867c7c14 fix(workflow): Add missing comma in release-patch-0-from-comment.yml (#11588) 2025-10-21 10:38:30 -07:00
Shreya Keshive f4080b6037 skip flaky test (#11577) 2025-10-21 15:01:13 +00:00
Victor May 0e7b3951c2 Per-Auth Method Feature Flag for Model Routing (#11333)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-10-21 13:25:51 +00:00
Richie Foreman 81772c4252 feat(release): Add dev support to patch2 workflow (#11460) 2025-10-21 03:09:27 +00:00
Alex Patterson fc4e10b537 fix(docs): Broken Images on Themes (#11266) 2025-10-21 02:58:28 +00:00
cornmander 654c555099 test: add readWasmBinaryFromDisk unit test (#11546) 2025-10-21 02:42:16 +00:00
Abhi 7dd2d8f794 fix(tools): restore static tool names to fix configuration exclusions (#11551) 2025-10-21 02:35:35 +00:00
Abhi 8aace3aff2 Disable Routing by default (#11549) 2025-10-21 02:22:54 +00:00
Gal Zahavi 72b16b3a24 fix(core): Handle PTY spawn errors in macOS sandbox (#11539) 2025-10-21 00:14:27 +00:00
Adam Weidman 723b8d33c2 chore: update tests with removed exclude from cli tsconfig (#11540) 2025-10-20 23:40:54 +00:00
cornmander 70a99af1d3 Fix shell auto-approval parsing for chained commands (#11527) 2025-10-20 23:18:00 +00:00
cornmander 31f58a1f04 Fix Windows ripgrep detection (#11492) 2025-10-20 23:17:44 +00:00
Zack Birkenbuel cc7e1472f9 Pass whole extensions rather than just context files (#10910)
Co-authored-by: Jake Macdonald <jakemac@google.com>
2025-10-20 23:15:23 +00:00
Abhi 995ae717cc refactor(logging): Centralize all console messaging to a shared logger (part 1) (#11537) 2025-10-20 22:16:47 +00:00
Eric Rahm d5a06d3cd2 fix(core): Preserve significant trailing spaces in gitignore patterns (#11536) 2025-10-20 21:41:33 +00:00
Pyush Sinha 61a71c4fcd (fix): remove custom waitFor and use testing-library implementation (#11522)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-20 20:36:43 +00:00
gemini-cli-robot 3c57e76c45 chore/release: bump version to 0.11.0-nightly.20251020.a96f0659 (#11529) 2025-10-20 20:31:35 +00:00
Shreya Keshive 30d9a336bc Update nightly workflow to create issues for scheduled run failures (#11531) 2025-10-20 20:12:13 +00:00
jajanet 49bde9fca0 fix(core): address GCS path input (#11221)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: cornmander <shikhman@google.com>
2025-10-20 20:05:47 +00:00
Paweł Dec 36de686224 feat: Propagate traceId from code assist to response metadata (Fixes … (#11360)
Co-authored-by: owenofbrien <86964623+owenofbrien@users.noreply.github.com>
2025-10-20 20:00:24 +00:00
shishu314 085e5b1f4d feat(infra) - Add base files for deflake workflow (#11397)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-20 19:27:21 +00:00
Shreya Keshive a96f065903 skip flaky test (#11526) 2025-10-20 19:25:22 +00:00
Gal Zahavi 9a4c045518 docs: require bug bash for major launches and clarify roles (#11384) 2025-10-20 17:54:28 +00:00
Pyush Sinha 397e52dac7 fix(ui): escaping theme dialog no longer resets theme to default (#11323)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-20 17:50:09 +00:00
lifefloating d0ab6e9982 fix(SettingsDialog): race condition in SettingsDialog causing settings to be unexpectedly cleared (#10875)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-20 17:37:56 +00:00
Tommaso Sciortino 35afab31e1 Don't display todo in history (#11516) 2025-10-20 17:36:55 +00:00
Adrian Arribas 71ecc401c3 [Part 5/6] feat(telemetry): add activity monitor with event-driven snapshots (#8124)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-20 17:29:53 +00:00
Eric Rahm 518a9ca314 fix(core): Preserve escaped characters in gitignore patterns (#11171)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-20 17:03:22 +00:00
shishu314 d52ec522f1 fix(infra) - Create an empty file to test trigger workflow for e2e (#11022)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-20 15:28:29 +00:00
Adam Weidman 8731309d7c chore: do not retry the model request if the user has aborted the request (#11224) 2025-10-20 15:21:49 +00:00
anj-s a788a6df48 Update docs to specifying GEMINI_SYSTEM_MD and GEMINI_WRITE_SYSTEM_MD instructions (#9953) 2025-10-20 12:59:21 +00:00
Abhi c8518d6a63 refactor(tools): Move all tool names into tool-names.ts (#11493) 2025-10-20 00:53:53 +00:00
Sandy Tao 0fd9ff0f53 fix(cli): Fix type errors in UI hooks tests (#11483) 2025-10-20 00:16:16 +00:00
Abhi 23e52f0ff3 refactor(core): Centralize tool names to avoid circular dependencies - Edit, Grep, Read (#11434) 2025-10-19 23:21:47 +00:00
shrutip90 98eef9ba0c fix: Update web_fetch tool definition to instruct the model to provid… (#11252) 2025-10-19 20:12:15 +00:00
Tommaso Sciortino f425bd765b Rename component to "TodoTray" (#11469) 2025-10-19 12:22:01 +00:00
Sandy Tao d065c3ca53 fix(cli): Enable typechecking for more test files (#11455) 2025-10-19 03:43:19 +00:00
gsehgal f22aa72c62 Making shell:true as default and adding -I to grep (#11448)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-10-19 03:08:01 +00:00
Richie Foreman aa46eb4fd7 feat(release): Support dev/prod for release patch 1 (#11404) 2025-10-18 20:18:12 +00:00
Sandy Tao ff31a2224e fix(ci): use standard integration test command on windows (#11437) 2025-10-18 15:20:14 +00:00
Sandy Tao dd42893df7 fix(config): Enable type checking for config tests (#11436) 2025-10-18 05:39:53 +00:00
Smetalo 725b312032 Docs: Fix MCP server link in docs/cli/trusted-folders.md (#11349)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-10-18 04:48:40 +00:00
Tommaso Sciortino cd76b0b22d Create Todo List Tab (#11430) 2025-10-18 04:10:57 +00:00
Abhi 2ef38065c7 refactor(tools): Migrate shell tool name to a centralized constant (#11418) 2025-10-18 01:07:26 +00:00
Sandy Tao cedf0235a1 fix(cli): enable typechecking for ui/components tests (#11419)
Co-authored-by: Jacob MacDonald <jakemac@google.com>
2025-10-17 23:16:12 +00:00
Jacob MacDonald f4330c9f5e remove support for workspace extensions and migrations (#11324) 2025-10-17 23:08:57 +00:00
Abhi 9b9ab60985 feat(logging): Centralize debug logging with a dedicated utility (#11417) 2025-10-17 22:00:23 +00:00
shishu314 0b20f88fc0 fix(infra) - Make file system interactive test check only tool call (#11055)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-17 21:25:31 +00:00
Sandy Tao 21163a1636 fix(cli): enable typechecking for ui/commands tests (#11413) 2025-10-17 21:20:49 +00:00
owenofbrien 08e87a59d5 Log all user settings to enable measurement of experiment impacts (#11354) 2025-10-17 20:54:35 +00:00
Jacob MacDonald d3bdbc6978 add extension IDs (#11377) 2025-10-17 20:29:07 +00:00
Tommaso Sciortino b4a405c684 Style slash command descriptions consistently (#11395) 2025-10-17 20:20:15 +00:00
shrutip90 426d36146a fix: Unset selected auth type in integ test so that the local setting… (#11322) 2025-10-17 20:18:18 +00:00
Riddhi Dutta 4d2a1111e0 fix: make @file suggestions case-insensitive (#11394) 2025-10-17 19:58:06 +00:00
Billy Biggs e4226b8a3e Only check for updates if disableUpdateNag is false (#11405) 2025-10-17 19:44:31 +00:00
Tommaso Sciortino 7c086fe55b Remove MCP Tips and reorganize MCP slash commands (#11387) 2025-10-17 19:35:14 +00:00
Richie Foreman 6786684962 fix(release): Update create-patch-pr.js to take a package name (#11400) 2025-10-17 19:02:44 +00:00
Sandy Tao 8da47db1a4 fix(cli): enable and fix types for MCP command tests (#11385) 2025-10-17 18:23:26 +00:00
JAYADITYA 2b61ac532d feat: add missing visual cue for closing dialogs with Esc key (#11386) 2025-10-17 18:22:54 +00:00
Richie Foreman 4a0fcd054b fix(scripts): Update get-release-version to use yargs parsing, handle a dynamically set package name (#11374) 2025-10-17 18:08:27 +00:00
Jainam M 659b0557be feat(cli): Suppress slash command execution and suggestions in shell … (#11380) 2025-10-17 17:30:27 +00:00
Tommaso Sciortino 795e5134c7 Remove ctrl-t binding for /mcp commands (#11372) 2025-10-17 16:42:09 +00:00
Gal Zahavi 0ded546a09 fix(prompt): Make interactive command avoidance conditional (#11225) 2025-10-17 16:07:18 +00:00
Allen Hutchison be25e2cb96 feat: Remove deprecated flags (#11338) 2025-10-17 15:58:00 +00:00
Richie Foreman b2ef66263f docs(release): Add information about dev/prod to the release docs. (#11366) 2025-10-17 14:53:46 +00:00
Jacob MacDonald ca3d260a2b Revert "Update package.json in include git dependency on Ink fork." (#11365) 2025-10-17 14:48:29 +00:00
hritan f3ffaf09c7 fix: copy command delay in Linux handled (#6856)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-10-17 11:23:31 +00:00
Abhi 3a1d3769ae Refactor EditTool.Name to use centralized EDIT_TOOL_NAME (#11343) 2025-10-17 05:35:35 +00:00
Jacob Richman d42da87161 fix(accessibility) allow line wrapper in screen reader mode (#11317) 2025-10-17 03:38:49 +00:00
Jacob Richman 406f0baaf2 fix(ux) keyboard input hangs while waiting for keyboard input. (#10121) 2025-10-17 03:38:06 +00:00
Jacob Richman cd0f9fe22f Update package.json in include git dependency on Ink fork. (#11330) 2025-10-17 03:32:53 +00:00
Jacob Richman a67deae8ba Skip failing test. (#11337) 2025-10-17 03:19:07 +00:00
cornmander dcf362bcf9 Inline tree-sitter wasm and add runtime fallback (#11157) 2025-10-17 00:25:30 +00:00
Akhil Appana 22f725eb08 feat: allow editing queued messages with up arrow key (#10392)
Co-authored-by: Akhil Appana <akhilapp@google.com>
2025-10-17 00:04:13 +00:00
Allen Hutchison 9049f8f8ae feat: remove deprecated telemetry flags (#11318) 2025-10-16 23:54:59 +00:00
JAYADITYA a440333990 feat(ui): add "Esc to close" hint to SettingsDialog (#11289)
Co-authored-by: Miguel Solorio <miguelsolorio@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-16 23:22:14 +00:00
Sandy Tao 991bd37362 fix(scripts): Improve deflake script isolation and unskip test (#11325) 2025-10-16 23:15:46 +00:00
Tommaso Sciortino 9a4211b610 Improve rendering of ToDo lists. (#11315) 2025-10-16 23:06:43 +00:00
shrutip90 c71b749185 fix: Add folder names in permissions dialog similar to the launch dialog (#11278) 2025-10-16 23:04:16 +00:00
Abhi 02241e9126 feat(auth): Improve auth dialog error handling and messaging (#11320) 2025-10-16 22:08:42 +00:00
Jacob Richman 01c577c371 Jacob314/safe home dir (#10861) 2025-10-16 21:55:16 +00:00
Sandy Tao 2aa1d74286 fix(test): deflake flicker integration test (#11308) 2025-10-16 20:53:08 +00:00
matt korwel 6b866d1282 remove (#11310) 2025-10-16 13:14:52 -07:00
matt korwel de3632afc3 fork regulation testing (#11304) 2025-10-16 12:36:40 -07:00
Allen Hutchison 937c15c66e refactor: Remove deprecated --all-files flag (#11228)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-16 19:09:21 +00:00
shishu314 bec2bfcadb Revert "fix(infra) - Remove e2e maintainer label from e2e workflow" (#11292) 2025-10-16 12:14:09 -07:00
shishu314-alt 39cc07de30 fix(infra) - Remove e2e maintainer label from e2e workflow (#11028)
Co-authored-by: shishu314 <shishu_1998@yahoo.com>
2025-10-16 18:33:41 +00:00
DeWitt Clinton d2c9c5b35e Use Node.js built-ins in scripts/clean.js instead of glob. (#11286) 2025-10-16 18:24:30 +00:00
Srivats Jayaram 6ded45e5d2 feat: Add markdown toggle (alt+m) to switch between rendered and raw… (#10383)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-16 18:23:36 +00:00
Abhi 05930d5e25 fix(web-fetch): respect Content-Type header in fallback mechanism (#11284) 2025-10-16 18:16:24 +00:00
shrutip90 ffa547ce8d fix: Update folder trust docs to mention MCP servers and file command… (#10842) 2025-10-16 18:02:52 +00:00
JAYADITYA 155242af34 feat: Blend educative tips with witty phrases during loading times (fun, subtle learning...) (#10569)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-16 17:08:43 +00:00
Gal Zahavi c96fd828df feat(docs): add initial release confidence document (#11069)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: mkorwel <matt.korwel@gmail.com>
2025-10-16 16:29:52 +00:00
Jenna Inouye b4f6c7c4b9 Docs: Add changelog v0.9.0 (#11237) 2025-10-16 16:07:59 +00:00
Richie Foreman 872d2eaf60 fix(ci): Make the release-rollback action properly support non-prod envs (#11244) 2025-10-16 15:45:21 +00:00
christine betts b734723d95 Update extensions install warning (#11149)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-16 15:01:17 +00:00
anj-s 5aaa0e66f5 (fix): Enable Codebase Investigator for all modes (#11259) 2025-10-16 14:21:09 +00:00
Jacob MacDonald a9083b9d48 include extension name in gemini mcp list command (#11263) 2025-10-16 14:21:09 +00:00
Ramón Medrano Llamas 60420e52db feat: Do not add trailing space on directory autocomplete (#11227)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-10-16 13:10:23 +00:00
Abhi 3acb014ed7 fix(e2e): Refactor and unskip context compression interactive tests (#11086) 2025-10-16 03:57:05 +00:00
Abhi c9c633be62 refactor: move web_fetch tool name to tool-names.ts (#11174) 2025-10-16 02:48:12 +00:00
Abhi 130f0a0253 chore(subagents): Remove legacy subagent code (#11175) 2025-10-16 02:32:57 +00:00
Dmitry Lyalin 8c74be79c5 Update README.md (#11240) 2025-10-15 23:57:00 +00:00
Richie Foreman e2fef41fe2 fix(ci): Ensure we cleanup the false tag. (#11232)
Co-authored-by: mkorwel <matt.korwel@gmail.com>
2025-10-15 23:42:04 +00:00
Tommaso Sciortino 72b2cc54b9 Updates from running "npm install" (#11238) 2025-10-15 23:40:41 +00:00
Allen Hutchison cfaa95a2b9 feat(cli): Add nargs to yargs options (#11132) 2025-10-15 22:00:23 +00:00
Jacob MacDonald 8c1656bf56 Don't always fall back on a git clone when installing extensions (#11229) 2025-10-15 21:29:16 +00:00
Richie Foreman 1fc3fc0a22 fix(ci): Fix a2a publishing (#11211)
Co-authored-by: mkorwel <matt.korwel@gmail.com>
2025-10-15 21:23:13 +00:00
shishu314 ccaa7009a7 fix(infra) - Reenable github test (#10839)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-15 21:09:47 +00:00
anj-s 47f693173a Add support for output-format stream-jsonflag for headless mode (#10883) 2025-10-15 20:55:37 +00:00
matt korwel 7bed302f21 refactor(actions): remove checkout from sub-actions (#11219) 2025-10-15 20:11:56 +00:00
mistergarrison 2e6d69c9c8 Fix --allowed-tools in non-interactive mode to do substring matching for parity with interactive mode. (#10944)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-10-15 19:44:07 +00:00
Smetalo c80352a7fb Docs: Fix typo in docs/get-started/index.md (#10793) 2025-10-15 19:38:37 +00:00
Smetalo 47f5e73be6 Docs: Fix typo in docs/changelogs/index.md (#11215) 2025-10-15 19:03:16 +00:00
Miguel Solorio d38ab07939 Update shell tool call colors for confirmed actions (#11126) 2025-10-15 17:03:10 +00:00
Jainam M 4f17eae5cc feat(cli): Prevent queuing of slash and shell commands (#11094)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-15 17:02:50 +00:00
Allen Hutchison b8df8b2ab8 feat(core): wire up UI for ASK_USER policy decisions in message bus (#10630) 2025-10-15 16:39:41 +00:00
Shreya Keshive 8a937ebf8b chore(release): bump version to 0.11.0-nightly.20251015.203bad7c (#11212) 2025-10-15 16:25:05 +00:00
Richie Foreman 0dea354457 Add a GH Issue template for a website issue that gets tagged appropriately. (#10923) 2025-10-15 14:29:34 +00:00
Richie Foreman cb1ec755f6 fix(ci): Move from self-hosted -> ubuntu-latest (#11205) 2025-10-15 07:22:08 -07:00
Richie Foreman 984415f6c7 feat(ci): Update release to use github env variables. (#11068) 2025-10-15 13:48:03 +00:00
Seth Ladd 203bad7c06 Docs: Point to extensions gallery from extensions docs in the project (#10763)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: Pascal Birchler <pascal.birchler@gmail.com>
2025-10-15 07:29:21 +00:00
Sandy Tao 4f5b335792 fix(tests): enable cyclic schema MCP tool test (#10912) 2025-10-15 01:46:54 +00:00
Tommaso Sciortino dabe161a6f Don't accept input until slash commands are loaded (#11162) 2025-10-15 01:15:57 +00:00
Victor May a2f3339a0e Enable Model Routing (#11154) 2025-10-15 00:47:48 +00:00
Gaurav 996c9f5955 Revert "fix: handle request retries and model fallback correctly" (#11164) 2025-10-14 23:30:59 +00:00
cornmander bd5c158a62 Revert "Shell approval rework" (#11143) 2025-10-14 22:55:28 +00:00
Abhi 6f0107e7b7 fix(core): implement robust URL validation in web_fetch tool (#10834) 2025-10-14 20:53:22 +00:00
Tommaso Sciortino 769fe8b161 Delete unworkable replace test and enabled the rest (#11125) 2025-10-14 20:34:04 +00:00
Silvio Junior ef3186d441 Enable codease investigator by default before the next preview release (#11136) 2025-10-14 19:45:15 +00:00
Adam Weidman 8c78b62b75 fix: set a2a-server publish to --no-tag (#11138) 2025-10-14 19:31:30 +00:00
Shreya Keshive 0a3e492e6b Integration test for UI flickers (#11067) 2025-10-14 18:41:43 +00:00
Jacob MacDonald 99c7108bb0 fix integration test static errors, and run_shell_command tests to actually be testing what they intend (#11050) 2025-10-14 18:36:49 +00:00
shishu314 49b66733c2 fix(infra) - Disable CTRL-C test (#11122)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-14 18:10:53 +00:00
Silvio Junior a6720d6007 Make codebase investigator less prone to be triggered for simple searches (#10655) 2025-10-14 17:19:17 +00:00
cornmander 92dbdbb93b Shell approval rework (#11073) 2025-10-14 16:51:32 +00:00
Tommaso Sciortino 061a89fc2b Disable retries when deflaking integrationt tests (#11118) 2025-10-14 16:51:26 +00:00
Sandy Tao 7c1a90244a fix(core): add retry logic for specific fetch errors (#11066) 2025-10-14 16:17:31 +00:00
Srivats Jayaram c86ee4cc83 feat: Support Alt+key combinations (#11038) 2025-10-14 16:12:20 +00:00
Abhi 7b06a0bebd fix(e2e): Use rmSync instead of rm -rf for e2e tests (#11087) 2025-10-14 15:56:56 +00:00
bl-ue 9e8c767694 fix(cli): record tool calls in non-interactive mode (#10951) 2025-10-14 15:51:00 +00:00
Silvio Junior 3ba4ba79fa Remove workflow examples from system instruction (#10811) 2025-10-14 15:29:03 +00:00
Tommaso Sciortino 1e838393a9 Skip flakey tests (#11101) 2025-10-14 15:16:22 +00:00
Adam Weidman 481ba01c97 chore: resubmit a2a-publishing after rollout (#11100) 2025-10-14 15:09:17 +00:00
shrutip90 b2ba67f337 fix: Exit app on pressing esc on trust dialog at launch (#10668) 2025-10-14 14:27:40 +00:00
Hadi Minooei 249a193c00 Update system instructions for optimizing shell tool commands (#10651) 2025-10-14 04:31:45 +00:00
Abhi a3fe9279d8 fix(compression): prevent unnecessary summarization when history is too short (#11082) 2025-10-14 04:02:03 +00:00
Richie Foreman 0f8199dde3 fix(site): Fix broken site link (#11079) 2025-10-14 03:55:51 +00:00
Abhi 6787d42de4 perf(core): optimize Windows IDE process detection from O(N) to O(1) (#11048) 2025-10-14 02:42:09 +00:00
Silvio Junior 9185f68e52 Expose Codebase Investigator settings to the user (#10844) 2025-10-14 02:30:32 +00:00
Tommaso Sciortino f56a561f02 Fix and unskip flakey integration test in replace.test.ts (#11060) 2025-10-14 01:03:35 +00:00
Gaurav dd01af609e refactor: set max retry attempts to 3 (#11072) 2025-10-13 23:26:51 +00:00
joshualitt ada179f572 bug(core): Process returned function calls sequentially. (#10659) 2025-10-13 22:52:16 +00:00
Jenna Inouye 20fc7abc8c Docs: Quick fix: Sidebar link. (#11065) 2025-10-13 21:59:35 +00:00
Adam Weidman f3424844dc Revert "chore: wire a2a-server up for publishing" (#11064) 2025-10-13 21:31:40 +00:00
Tommaso Sciortino c4bd759467 document all settings with showInDialog: true (#11049) 2025-10-13 19:57:23 +00:00
Abhi 771627505d chore(settings): Enable 'useSmartEdit' by default (#11051) 2025-10-13 19:05:08 +00:00
Tommaso Sciortino a73b81452d Rename expect methods. (#11046) 2025-10-13 18:42:27 +00:00
shishu314 4a5ef4d9f7 fix(infra) - Fix flake for file interactive system (#11019)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-13 17:43:53 +00:00
Dongin Kim(Terry) 518caae62e chore: Extract '.gemini' to GEMINI_DIR constant (#10540)
Co-authored-by: Richie Foreman <richie.foreman@gmail.com>
2025-10-13 17:31:39 +00:00
Alexander 7beaa368a9 refactor(core): use assertConnected in McpClient discover method (#10989) 2025-10-13 16:57:10 +00:00
Jacob MacDonald 19c1d73405 add bundle command info to integration test docs (#11034) 2025-10-13 16:43:52 +00:00
Jacob MacDonald 28e667bd97 Give explicit instructions for failure text in json-output.test.ts (#11029) 2025-10-13 16:35:00 +00:00
Jacob Richman f68f27e7f1 Revert "feat: Support Alt+key combinations" (#11025) 2025-10-13 15:30:10 +00:00
Richie Foreman 90de8416cc Swap all self-hosted runners to ubuntu-latest per b/451586626 (#11023) 2025-10-13 15:28:32 +00:00
Adam Weidman c23eb84b04 fix(remove private) from gemini-cli-a2a-server (#11018) 2025-10-13 14:43:08 +00:00
Adam Weidman cfb71b9d60 chore: wire a2a-server up for publishing (#10627)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-13 12:38:41 +00:00
Srivats Jayaram 87f175bb2c feat: Support Alt+key combinations (#10767) 2025-10-13 02:31:05 +00:00
gsehgal 907e51ac01 Code guide command (#10940) 2025-10-11 17:04:52 +00:00
Tommaso Sciortino 5dc7059ba3 Refactor: Introduce InteractiveRun class (#10947) 2025-10-11 15:33:01 +00:00
Sandy Tao 09ef33ec3a fix(cli): prioritize configured auth over env vars in non-interactive mode (#10935) 2025-10-10 23:50:54 +00:00
Tommaso Sciortino cd9193466e Clean up integration test warnings. (#10931) 2025-10-10 22:32:20 +00:00
Tommaso Sciortino ead8928c39 Deflake test. (#10932) 2025-10-10 22:17:32 +00:00
Gal Zahavi 265d39f337 feat(core): improve shell execution service reliability (#10607) 2025-10-10 22:14:37 +00:00
Jenna Inouye 37678acb1a Update deployment.md -> installation.md and sidebar links. (#10662)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-10-10 22:10:24 +00:00
Tommaso Sciortino a64bb433b0 Simplify auth in interactive tests. (#10921) 2025-10-10 21:50:14 +00:00
Jacob MacDonald a6e00d9183 Fix rough edges around extension updates (#10926) 2025-10-10 21:28:13 +00:00
Jacob MacDonald bf0f61e656 Show final install path in extension consent dialog and fix isWorkspaceTrusted check (#10830) 2025-10-10 20:40:13 +00:00
Shreya Keshive ae48e964f0 feat(ui): add flicker detection and metrics (#10821) 2025-10-10 20:18:38 +00:00
Abhi ab3804d823 refactor(core): migrate web search tool to tool-names (#10782) 2025-10-10 19:51:24 +00:00
christine betts 0a7ee67707 Show notification in screen reader mode (#10900) 2025-10-10 19:34:44 +00:00
Jenna Inouye a5e47c62e4 Docs: Update to tos-privacy.md (#10754) 2025-10-10 18:34:29 +00:00
Tommaso Sciortino 2a7c71667d Reenable NPM integration tests (#10623) 2025-10-10 18:26:20 +00:00
shrutip90 c6af4eaa00 fix: Usage of folder trust config flags in FileCommandLoader (#10837) 2025-10-10 18:07:40 +00:00
Tommaso Sciortino 32db4ff66d Disable flakey tests. (#10914) 2025-10-10 18:02:36 +00:00
Smetalo 849cd1f9ed Docs: Fix Flutter extension link in docs/changelogs/index.md (#10797) 2025-10-10 17:56:34 +00:00
shrutip90 249ea55942 fix(test): Fix flaky shell command test using date command (#10863) 2025-10-10 17:48:24 +00:00
Jainam M affd3cae9a fix: Prevent garbled input during "Login With Google" OAuth prompt on… (#10888) 2025-10-10 16:59:44 +00:00
Sandy Tao 8dc397c0a5 fix(core): set temperature to 1 on retry in sendMessageStream (#10866) 2025-10-10 16:14:12 +00:00
Jerop Kipruto 38bc856212 feat(telemetry): ensure all telemetry includes user email and installation id (#10897) 2025-10-10 16:06:08 +00:00
sgnagnarella 971eb64e98 fix(cli) : fixed bug #8310 where /memory refresh will create discrepancies with initial memory load ignoring settings/config for trusted folder and file filters (#10611)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-10-10 16:04:15 +00:00
Jenna Inouye 65b9e367f0 Docs: Fix broken links in architecture.md (#10747) 2025-10-10 15:59:27 +00:00
shishu314 112790cbaa fix(infra) - Create a step to calculate the inputs for the nightly-release (#10825)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-10 15:00:11 +00:00
Jacob Richman 558be87311 Re-land bbiggs changes to reduce margin on narrow screens with fixes + full width setting (#10522) 2025-10-10 02:27:20 +00:00
Adam Weidman c82c2c2b15 chore: add a2a server bin (#10592) 2025-10-09 23:47:18 +00:00
Christie Warwick (Wilson) 83075b2800 refactor: make log/event structure clear (#10467) 2025-10-09 23:02:58 +00:00
owenofbrien cce245738e Fix for race condition in extension install / uninstall logging (#10856) 2025-10-09 22:40:27 +00:00
Gal Zahavi fda3b54357 chore(int): disable skip on "should trigger chat compression with /co… (#10854) 2025-10-09 22:35:52 +00:00
Matt Rixman d190188aaf Add a joke to usePhraseCycler.ts (#10685)
Co-authored-by: Jacob Richman <jacobr@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-09 22:11:36 +00:00
Jacob MacDonald 21062dd30e clean up extension tests (#10857) 2025-10-09 22:06:06 +00:00
Jacob MacDonald ed37b7c5e7 fix some isWorkspaceTrusted mocks (#10836) 2025-10-09 22:05:54 +00:00
Victor May 0b6c02000f feat(core): Failed Response Retry via Extra Prompt (#10828)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-10-09 22:04:08 +00:00
Jerop Kipruto 1f6716f98a feat(telemetry): add diff stats to tool call metrics (#10819) 2025-10-09 22:01:35 +00:00
shishu314 5aab793cfd fix(infra) - Fix interactive system error (#10805)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2025-10-09 22:00:43 +00:00
Jacob Richman 5e688b8113 Skip should fail safely when old_string is not found test (#10853) 2025-10-09 21:25:47 +00:00
Jerop Kipruto 5f96eba54a fix(cli): prevent exit on non-fatal tool errors (#10671) 2025-10-09 21:20:20 +00:00
Sandy Tao a8379d1f4b fix(tests): enable and update prompt for MCP add tool test (#10850) 2025-10-09 21:16:59 +00:00
Jacob Richman 6d84d4dc9c Fix prompt to make it a bit more deterministic (#10848) 2025-10-09 21:13:26 +00:00
anthony bushong ae02236c63 feat(core): generalize path correction for use across tools (#10612) 2025-10-09 20:51:16 +00:00
Sandy Tao 433ca84ce0 fix(tests): log actual output in validateModelOutput on failure (#10843) 2025-10-09 20:30:25 +00:00
shishu314 bd6bba8d07 fix(doc) - Update doc for deflake command (#10829)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-09 19:06:35 +00:00
Tommaso Sciortino cd354aebed Fix hooks to avoid unnecessary re-renders (#10820) 2025-10-09 18:07:25 +00:00
Sandy Tao b60c8858af feat(ui): shorten context overflow message when <50% of limit (#10812) 2025-10-09 17:22:26 +00:00
Abhi 70610c740e feat(telemetry): Add telemetry for web_fetch fallback attempts (#10749) 2025-10-09 17:01:17 +00:00
Richie Foreman a08938010c cleanup(markdown): Prettier format all markdown @ 80 char width (#10714) 2025-10-09 12:17:37 +00:00
Sumit Chauhan 0cd490a9b8 feat: support GOOGLE_CLOUD_PROJECT_ID fallback (fixes #2262) (#2725) 2025-10-09 10:42:54 +00:00
shrutip90 a044c25981 fix: Add a message about permissions command on startup in untrusted … (#10755) 2025-10-09 05:17:58 +00:00
Abhi 3d24575239 refactor(core): Centralize 'write_file' tool name (#10694) 2025-10-09 04:33:31 +00:00
Gal Zahavi 3ea5581ad7 chore(int): disable flaky tests (#10771) 2025-10-08 17:29:14 -07:00
gemini-cli-robot 95268b266d chore(release): bump version to 0.10.0-nightly.20251007.c195a9aa (#10669)
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-10-08 16:52:11 -07:00
Sandy Tao 06920402f8 feat(core): Stop context window overflow when sending chat (#10459) 2025-10-08 22:20:44 +00:00
Richie Foreman bcbcaeb82c fix(docs): Update docs/faq.md per Srinanth (#10667) 2025-10-08 22:03:28 +00:00
christine betts 29aabd7bfc Remove 'hello' extension (#10741) 2025-10-08 21:56:57 +00:00
Jacob MacDonald 56ca62cf3c Pre releases (#10752)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-08 21:26:12 +00:00
Gal Zahavi 741b57ed06 fix(core): Use shell for spawn on Windows (#9995) 2025-10-08 21:21:23 +00:00
shishu314 8d8a2ab64e Fix(doc) - Add section in docs for deflaking (#10750)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-08 21:21:02 +00:00
Jenna Inouye 3d106186f4 Docs: Add updates to changelog for v0.8.0 (#10732) 2025-10-08 21:15:56 +00:00
Tommaso Sciortino 118aade84c citations documentation (#10742) 2025-10-08 21:00:44 +00:00
anthony bushong 76b1deec25 fix(core): refresh file contents in smart edit given newer edits from user/external process (#10084) 2025-10-08 20:58:52 +00:00
Adam Weidman f2852056a1 feat: prevent ansi codes in extension MCP Servers (#10748) 2025-10-08 20:41:22 +00:00
김세은 1962b51d8d fix: ensure positional prompt arguments work with extensions flag (#10077)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-10-08 20:32:05 +00:00
fuyou b92e3bca50 fix(mcp): fix MCP server removal not persisting to settings (#10098)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-08 20:29:57 +00:00
Gal Zahavi 467a305f26 chore(shell): Enable interactive shell by default (#10661) 2025-10-08 20:28:19 +00:00
Gal Zahavi b0b1be0c2a chore(int): skip flaky tests (#10736) 2025-10-08 20:05:11 +00:00
Abhi c0552ceb22 feat(core): add telemetry for subagent execution (#10456) 2025-10-08 12:42:33 -07:00
shishu314 b45bd5ff7b Fix(infra) - Skip file system interactive test since it is currently broken (#10734)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-08 19:24:42 +00:00
shishu314 603ec2b21b Add script to deflake integration tests (#10666)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-08 17:39:22 +00:00
shishu314 1af3fef33a fix(infra) - Remove auto update from integration tests (#10656)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-08 16:46:08 +00:00
Abhi 8aa730082e refactor(core): Centralize 'write_todos_list' tool name (#10690) 2025-10-08 16:34:56 +00:00
Adam Weidman 8ac2c6842d chore: bundle a2a-server (#10265) 2025-10-08 14:34:39 +00:00
Zack Birkenbuel 8980276b20 Rationalize different Extension typings (#10435) 2025-10-08 14:31:41 +00:00
hritan 5d09ab7eb3 chore: refactored test-helper to handle boilerplate for interactive mode (#10322)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-10-08 14:14:09 +00:00
Adrian Arribas 8cd2ec7c9b [Part 4/6] feat(telemetry): add memory monitor with activity-aware recording and tests (#8122)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-07 23:23:17 +00:00
Shreya Keshive c195a9aa3b fix(core): Use 127.0.0.1 for IDE client connection (#10658) 2025-10-07 20:26:35 +00:00
Victor May ed0d1a0ba3 Get around the initial empty response from gemini-2.5-flash. (#10508) 2025-10-07 19:05:33 +00:00
shishu314 cf7debbac1 fix(infra) - Fix missing package error (#10595)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-07 18:58:05 +00:00
Jacob Richman 34ba8be821 Enhance debug profiler to track tree framerate and dispatch errors (#10502) 2025-10-07 17:28:35 +00:00
Adam Weidman 6bb99806f0 Fix quoting when echoing workflow JSON (#10596) 2025-10-07 16:10:52 +00:00
christine betts d93e987f24 Remove separate --path argument for extensions install command (#10628) 2025-10-07 16:01:45 +00:00
Jacob MacDonald 343be47fa9 use extract-zip and tar libraries to extract archives (#10414)
Co-authored-by: christine betts <chrstn@uw.edu>
2025-10-07 15:37:41 +00:00
Adam Weidman c4656fb063 chore: fix folder trust tests (#10636) 2025-10-07 14:29:38 +00:00
christine betts 69f93f852e Update gemini extensions new (#10629) 2025-10-07 13:10:21 +00:00
Dmitry Lyalin 5a0b21b1d1 Fix link to Extension Releasing Guide (broken link) (#10635) 2025-10-07 12:59:42 +00:00
Sandy Tao dc0e0b4165 fix(ci): ensure dry-run is false for scheduled nightly releases (#10571) 2025-10-07 01:34:26 +00:00
christine betts 4f53919a2b Update extensions docs (#10621) 2025-10-07 00:12:56 +00:00
Sandy Tao e705f45c5f fix(core): retain user message in history on stream failure (#10608) 2025-10-06 23:32:35 +00:00
Jenna Inouye 4cd3728039 Modifying stale data (#10622) 2025-10-06 23:28:52 +00:00
bl-ue 974ab66b7a feat(sessions): Add automatic session cleanup and retention policy (#7662) 2025-10-06 19:34:00 +00:00
Gal Zahavi abe4045c63 ci(release): remove 'dev' option from manual release (#10374) 2025-10-06 19:25:16 +00:00
mistergarrison d9fdff339a Re-submission: Make --allowed-tools work in non-interactive mode (#10289)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-10-06 19:15:21 +00:00
Adam Weidman b6d3c56b35 chore(actions): mark wombat-token-cli as required (#10590) 2025-10-06 15:26:35 +00:00
Tommaso Sciortino 0cf01df48c Temporarily remove NPM integration tests till we resolve #10517 (#10520) 2025-10-05 15:25:45 +00:00
Jacob MacDonald 7f8537a130 Cleanup extension update logic (#10514)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-04 04:06:26 +00:00
Abhi 1a06282061 fix(lint): Fixes silent pass for formatting mistakes in gh ci (#10489) 2025-10-04 03:50:37 +00:00
owenofbrien 7db79e145e Stop logging tool call error message to clearcut (#10511) 2025-10-03 21:18:57 +00:00
Gaurav 319f43fa23 fix: handle request retries and model fallback correctly (#9407) 2025-10-03 20:24:50 +00:00
hritan f2308dba28 test: fix flaky integration tests for compress command (#10371)
Co-authored-by: Taneja Hriday <hridayt@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-10-03 19:42:28 +00:00
shishu314 c9eb58e122 fix(doc) - Update releases doc (#10504)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-03 19:02:28 +00:00
shishu314 0c61653b34 fix(infra) - Add original PR number into hotfix branch (#10499)
Co-authored-by: Shi Shu <shii@google.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-10-03 18:37:48 +00:00
Tommaso Sciortino 43b3f79d60 Update dep versions to fix vulnerabilities (#10496) 2025-10-03 17:36:57 +00:00
Shreya Keshive 8149a4546e feat(lint): add sensitive keyword linter (#10488) 2025-10-03 17:25:28 +00:00
Silvio Junior ee3e4017c3 Add function processOutput to AgentDefinition and typing for an agent's output (#10447) 2025-10-03 17:21:08 +00:00
Jacob MacDonald 3f79d7e5bb Fix oauth support for MCP servers (#10427) 2025-10-03 16:23:55 +00:00
Sandy Tao 3b92f127a9 refactor(core): Unify retry logic and remove schema depth check (#10453) 2025-10-03 16:08:27 +00:00
Shreya Keshive 667ca6d241 feat(ci): add ability to publish packages to private github registry for testing (#10348) 2025-10-03 15:41:32 +00:00
Shreya Keshive d8570e4d64 feat(vscode-ide-companion): enforce auth token validation (#10481) 2025-10-03 15:41:27 +00:00
shishu314 505e88656a fix(doc) -update release doc (#10484)
Co-authored-by: Shi Shu <shii@google.com>
2025-10-03 15:14:31 +00:00
Richie Foreman f76adec8a6 feat(ci): Add some very basic smoke testing to CI.yml (#10451) 2025-10-03 14:43:06 +00:00
Abhi 93c7378d3b chore(formatting): Fix formatting on main (#10464) 2025-10-03 03:28:49 +00:00
Jenna Inouye 2ab61dd16a Docs: Minor change to website nav and headings (#10454)
Co-authored-by: Michael Bleigh <mbleigh@mbleigh.com>
2025-10-02 23:07:26 +00:00
Adam Weidman 16d4701822 Fix /chat list not write terminal escape codes directly (#10415) 2025-10-02 22:52:16 +00:00
Tommaso Sciortino fcdfa8609a Change "Create Pull Request" action to not try merging (#10379) 2025-10-02 22:01:42 +00:00
Michael Bleigh 4af89e944d fix(docs): several .md links in docs are incorrect (#10449) 2025-10-02 22:00:09 +00:00
sgnagnarella 43bac6a038 Adding list sub command to memoryCommand to list the path of GEMINI.md files (#10108)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-10-02 21:46:54 +00:00
kurileo 0713dd4d2d Update GOOGLE_CLOUD_PROJECT in README for disambiguation (#10310)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-10-02 21:21:01 +00:00
Shehab 69e1239698 fix(auto-update): suppress npx nag for transient installs (#10276)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-10-02 20:55:32 +00:00
shishu314 f63561dce4 Update patch PRs with additional content (#10180)
Co-authored-by: Shi Shu <shii@google.com>
2025-10-02 20:21:37 +00:00
Vasily Tsybenko 0c6f9d2898 fix: prevent tools discovery error for prompt-only MCP servers (#10367)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-10-02 19:47:58 +00:00
Silvio Junior 63efcb6b66 Modify GCLI system prompt to conditionally use the CodebaseInvestigator (#10419) 2025-10-02 19:37:44 +00:00
Jenna Inouye 452d0e21b6 Docs: Add changelog section (#10388)
Co-authored-by: Dmitry Lyalin <dmitry.lyalin@lyalin.com>
2025-10-02 19:31:11 +00:00
shishu314 0f465e88e8 fix(infra) - Add pr number to the release branch name for final step of release (#10364)
Co-authored-by: Shi Shu <shii@google.com>
2025-10-02 18:30:25 +00:00
Abhi a6af7bbb46 refactor(agents): implement submit_final_output tool for agent completion (#10377) 2025-10-02 18:07:58 +00:00
Shreya Keshive 4a70d6f22f fix(vscode): suppress update and install messages in managed IDEs (#10431) 2025-10-02 18:00:51 +00:00
shishu314 460ec60212 Fix(infra) - Give merge queue skipper read-all access (#10368)
Co-authored-by: Shi Shu <shii@google.com>
2025-10-02 17:15:25 +00:00
Shreya Keshive 12d4ec2e07 feat(ide extension): introduce debug logging (#10416) 2025-10-02 17:10:13 +00:00
Ben Brandt e7a13aa031 fix: Stream parsing for Windows Zed integration (#10339) 2025-10-02 16:54:49 +00:00
Jerop Kipruto eae8b8b1a1 fix(core): use constant for tool_output_truncated event name (#10372) 2025-10-02 16:51:14 +00:00
Shreya Keshive 99958c68e7 fix(ci) update wording of promote action output to be more clear (#10369) 2025-10-02 16:31:26 +00:00
David East 332e392aee fix(integration): Added shell specification for winpty (#9497) 2025-10-02 16:27:24 +00:00
Richie Foreman c987e6a623 feat(ci): Add npx run testing to Release Verification Testing (#10352) 2025-10-02 15:28:41 +00:00
Jacob MacDonald ebbfcda762 support giving a github repo URL with a trailing slash (#10360) 2025-10-02 14:34:23 +00:00
anthony bushong aa8b2abe3d fix(core): add telemetry support for smart edit correction events (#10378)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-02 01:35:45 +00:00
Jenna Inouye 14dbda9145 Docs IA update and Get Started section. (#10192) 2025-10-01 23:24:29 +00:00
Gal Zahavi 33269bdbc9 fix(ui): increase padding of settings dialog (#10376) 2025-10-01 22:45:25 +00:00
Jacob Richman 6553e64431 Fix so paste timeout protection is much less invasive. (#9284)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-01 22:21:57 +00:00
Victor May 8174e1d5b8 Smart Edit Strategy Logging (#10345)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-01 21:53:53 +00:00
Jacob Richman a404fb8d2e Switch to a reducer for tracking update state fixing flicker issues due to continuous renders (#10280) 2025-10-01 21:53:15 +00:00
Billy Biggs ef76a801c4 Revert reducing margin on narrow screens (#10375) 2025-10-01 21:50:33 +00:00
Jacob Richman 6eca199c39 Cleanup useSelectionList and fix infinite loop in debug mode issues. (#10248) 2025-10-01 21:25:54 +00:00
Abhi 331ae7dbdf feat: Add enableSubagents configuration and wire up subagent registration (#9988) 2025-10-01 20:54:00 +00:00
Jerop Kipruto 5b16771567 feat(telemetry): add OpenTelemetry GenAI semantic convention metrics (#10343) 2025-10-01 20:24:55 +00:00
Silvio Junior 7e493f4a9e Codebase Investigator: Separate initial query from system prompt and apply templateStrings in query and initialMessages (#10282) 2025-10-01 20:21:01 +00:00
Shreya Keshive f3152fa7fb chore(release): bump version to 0.9.0-nightly.20251001.163dba7e (#10362) 2025-10-01 20:19:39 +00:00
Shreya Keshive 163dba7e4b fix(release): propagate force_skip_tests to publish jobs (#10355) 2025-10-01 18:27:21 +00:00
hritan 5ceae177d5 test: interactive test for read write tools sequential flow (#10323)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-10-01 16:56:50 +00:00
JAYADITYA 65e7ccd1d4 docs: document custom witty loading phrases feature (#8006)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-10-01 15:52:26 +00:00
Richie Foreman ed1b5fe5e1 fix(settings): Ensure that InferSettings properly infers the combinations of values from an enum type. (#10346) 2025-10-01 15:32:18 +00:00
hritan 1ee161f3c1 test: skip flaky test (#10340)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-10-01 14:02:52 +00:00
Christie Warwick (Wilson) 5c6f006634 Refactor metrics definitions to be easily understandable (#10215) 2025-10-01 13:33:47 +00:00
Tommaso Sciortino a80cd28d4c Fix dry run. (#10286) 2025-10-01 03:42:56 +00:00
Tommaso Sciortino 46c884de51 Print inputs for all actions. (#10284) 2025-10-01 03:38:18 +00:00
Abhi 4c5ab80b7e fix(routing): Disable model router by default (#10283) 2025-10-01 03:10:10 +00:00
Allen Hutchison f207ea94d6 fix(memory): ignore @ inside code blocks (#10201) 2025-10-01 01:24:33 +00:00
Tayyab3245 c913ce3c0b fix(cli): honor argv @path in interactive sessions (quoted + unquoted) (#5952)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-10-01 01:18:04 +00:00
Shreya Keshive f2aa9d283a fix(release): Fix promotion workflow (#10261) 2025-09-30 23:16:53 +00:00
Abhi 794d92a79d refactor(agents): Introduce Declarative Agent Framework (#9778) 2025-09-30 21:00:54 +00:00
Gal Zahavi 6695c32aa2 fix(shell): improve shell output presentation and usability (#8837) 2025-09-30 20:44:58 +00:00
hritan c0400a4414 test: additional integration tests for editing a file (#9963)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-09-30 19:59:19 +00:00
Jacob MacDonald 0fec673bfb fix installing extensions from zip files (#10253) 2025-09-30 19:34:41 +00:00
hritan 178e89a914 test: integration tests for /compress command in interactive mode (#10154)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-09-30 19:31:51 +00:00
shishu314 d991c4607d feat(infra)- Use queue skipper for CI (#9773)
Co-authored-by: Shi Shu <shii@google.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-30 18:58:56 +00:00
Adam Weidman 62e9691373 chore(docs): Add documentation for MCP Servers using SA Impersonation (#10245) 2025-09-30 18:47:09 +00:00
Tommaso Sciortino 3d1b0df0fa Verify npm release by running integration tests (#10174) 2025-09-30 18:24:12 +00:00
Vikram Pasupathy 953935d67c Fix a cache collision bug in the llm edit fixer (#9542)
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
2025-09-30 16:58:32 +00:00
Jacob MacDonald 6c54746e24 restore case insensitivity for extension enablement and add tests (#10249) 2025-09-30 16:56:28 +00:00
Victor May ec08129fba Regex Search/Replace for Smart Edit Tool (#10178) 2025-09-30 16:06:03 +00:00
Jacob MacDonald 42436d2ed4 Don't log an error about invalid extensions when passing "-e none" (#10203) 2025-09-30 15:59:05 +00:00
Keith Schaab 1067df1872 Fix: A2A server - add liveOutput and response resultsDisplay to the serialized tool call result (closes #9520) (#9788)
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-30 15:26:51 +00:00
Tommaso Sciortino 6ef78cbbe9 Fix Release Nightly (#10186) 2025-09-30 14:52:56 +00:00
Dmytro Salnyk 1d24f95a3f fix(telemetry): Improve Cloud Shell surface type detection for telemetry purposes (#10162) 2025-09-30 10:35:34 +00:00
Abhi ddcbd0c2bd chore(formatting): Fix formatting for math.ts (#10216) 2025-09-30 04:39:42 +00:00
Jacob MacDonald ae51bbdae8 Add extension name auto-complete to /extensions update (#10198)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-29 23:39:47 +00:00
Billy Biggs ae387b61a9 Reduce margin on narrow screens, flow the footer contents (#8042) 2025-09-29 23:22:47 +00:00
Miguel Solorio 6f6e004f82 feat: Add red threshold for getStatusColor util (#9789)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-29 22:42:33 +00:00
Jacob Richman d37fff7fd6 Fix /tool and /mcp commands to not write terminal escape codes directly (#10010) 2025-09-29 21:27:06 +00:00
Jacob MacDonald cea1a867b6 Extension update confirm dialog (#10183) 2025-09-29 21:19:19 +00:00
shrutip90 d6933c77ba fix(cli): Make IDE trust listener also listen to IDE status changes a… (#9783) 2025-09-29 20:54:12 +00:00
Adam Weidman 0c3fcb7030 chore(mocktools): final step in unify mock tool definitions (#9166) 2025-09-29 20:43:06 +00:00
Jacob Richman 94f43c79d0 Fix markdown rendering on Windows (#10185) 2025-09-29 20:38:27 +00:00
Shreya Keshive 5478b58166 ci(release): Skip tests by default in scheduled nightly workflow (#10184) 2025-09-29 20:33:06 +00:00
Tommaso Sciortino a49a09f13c Update package-lock.json to match pacakge.json. (#10173) 2025-09-29 19:33:55 +00:00
Sandy Tao ac4a79223a feat(core): Add content-based retries for JSON generation (#9264) 2025-09-29 19:27:15 +00:00
shishu314 042288e72c fix(infra)- Add pr number to release branches (#9506)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-29 17:14:53 +00:00
Sandy Tao 8a2c2dc73f feat(core): Enable tool output truncation by default (#9983) 2025-09-29 16:30:37 +00:00
shishu314 bf32492da9 feat(infra) - Add workflow for rollbacking a change (#9261)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-29 15:02:29 +00:00
Jacob MacDonald e8a0249e6b fix windows test for new extension installation (#10164) 2025-09-29 14:35:42 +00:00
Jacob MacDonald ea061f52b0 Fix -e <extension> for disabled extensions (#9994) 2025-09-29 13:53:19 +00:00
anthony bushong d1485d4672 fix(actions): hydrate env vars into nightly failure issue/issue body (#10087) 2025-09-29 11:26:47 +00:00
Jacob Richman 62ba330612 Jacob314/add radio button keys (#10083) 2025-09-28 21:50:47 +00:00
anthony bushong 1bd75f060d fix(core): auto-correct file paths in smart edit where possible (x-platform) (#10018) 2025-09-27 23:16:51 +00:00
Fridayxiao 331e2ce45d feat(cli): Add setting to show status(or Gemini 's thoughts) in terminal title and taskbar icon (#4386)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-27 19:48:24 +00:00
Jacob Richman 0b2d79a2ea fix(ui): stop truncating output from the model rendered in <static> (#9972) 2025-09-27 19:40:09 +00:00
Sandy Tao ffcd996366 feat(core): Use lastPromptTokenCount to determine if we need to compress (#10000) 2025-09-27 18:56:10 +00:00
Tommaso Sciortino 93694c6a65 Make compression algo slightly more aggressive (#10024) 2025-09-27 12:15:53 +00:00
Adam Weidman db51e3f4cd feat(iap support): Add service account impersonation provider to MCPServers to support IAP on Cloud Run (#8505)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-27 08:12:24 +00:00
christine betts 19400ba8c7 Reapply "feat(accessibility): implement centralized screen reader layout (#9263)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-27 01:27:00 +00:00
Gal Zahavi eb1a6a6091 Revert "fix(core): auto-correct file paths in smart edit where possible" (#10009) 2025-09-27 01:05:48 +00:00
matt korwel 80a414be97 Mac required (#10007) 2025-09-27 00:23:48 +00:00
Tommaso Sciortino 8d17d09488 Delete test that really isn't an integration test. (#10012) 2025-09-27 00:14:23 +00:00
matt korwel 38dccf32c1 feat: Use PAT for gemini-cli-robot in release workflows (#9804)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2025-09-26 23:35:26 +00:00
Gal Zahavi 24c15b9d43 Revert "Make --allowed-tools work in non-interactive mode" (#10006) 2025-09-26 16:22:02 -07:00
Luna Wang 2aa2ab878b Remove border from user messages and color > to improve UI and readability (#9984) 2025-09-26 22:02:54 +00:00
Michael Bleigh 969833e6e3 chore(docs): adds sidebar.json for docs organization (#9985)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-26 20:39:19 +00:00
Michael Bleigh 94b377049b chore(docs): adds GitHub action to rebuild docs on change (#9987) 2025-09-26 20:21:50 +00:00
anthony bushong 0d22b22c82 fix(core): auto-correct file paths in smart edit where possible (#9526) 2025-09-26 20:05:15 +00:00
owenofbrien e909993dd1 Added warning to avoid command substitution in run_shell_command tool… (#9934)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-26 18:16:05 +00:00
Abhi 3d7cb3fb8a refactor(core): Extract file filtering constants from Config to break circular dependency (#9974) 2025-09-26 17:37:00 +00:00
mistergarrison e8a065cb9f Make --allowed-tools work in non-interactive mode (#9114)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-09-26 17:03:35 +00:00
matt korwel 8a16165a9b fix(deps): resolve ansi-regex dependency conflict (#9964) 2025-09-26 10:00:54 -07:00
Christie Warwick (Wilson) a4516665d5 test: add telemetry metric validation and refactor TestRig (#9527) 2025-09-26 15:34:24 +00:00
geoffdowns 11c995e9fa Stop checking MCP tool schemas for type definitions (#9574)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
Co-authored-by: Jacob MacDonald <jakemac@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: Adam Weidman <65992621+adamfweidman@users.noreply.github.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
Co-authored-by: HugoMurillo <mhugorodrigo@google.com>
Co-authored-by: Shreya Keshive <shreyakeshive@google.com>
Co-authored-by: Miguel Solorio <miguelsolorio@google.com>
Co-authored-by: Christie Warwick (Wilson) <bobcatfish@gmail.com>
Co-authored-by: shrutip90 <shruti.p90@gmail.com>
2025-09-26 04:42:21 +00:00
christine betts 53434d860a Update enablement behavior + info (#9758) 2025-09-26 01:44:28 +00:00
Tommaso Sciortino 2e4e53c3ee Delete shell-service.test.ts and change other tests to cover the same features (#9772) 2025-09-26 00:32:40 +00:00
christine betts 7e2ffd7a80 Add 'getting started' extensions documentation (#9536)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-26 00:01:49 +00:00
christine betts 463e5d5b7e Add integration test for extensions (#9177) 2025-09-25 23:43:09 +00:00
shrutip90 809b933d81 Create issues on manual release failures similar to other release pro… (#9786) 2025-09-25 23:01:07 +00:00
Christie Warwick (Wilson) 8bf8707668 fix(temporary): Don't run ctrl+c exit test on windows (#9785) 2025-09-25 22:37:44 +00:00
Miguel Solorio 18e5113754 Unset foreground in default themes (#9765) 2025-09-25 22:12:10 +00:00
Shreya Keshive 70bc2933cc Update extension > plugin to avoid confusion (#9780) 2025-09-25 21:47:41 +00:00
Gal Zahavi 6535b71c35 fix(prompt): Prevent model from reverting successful changes (#9253) 2025-09-25 20:54:44 +00:00
HugoMurillo ed309096b1 test: disable all IDE integration tests (#9524)
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
2025-09-25 20:18:34 +00:00
Shreya Keshive f885375c72 fix(zed): Fix broken 'auto' model selection in Zed integration (#9769) 2025-09-25 18:47:07 +00:00
Sandy Tao d2d9ae3f91 fix(ui): Truncate long loading text (#9768) 2025-09-25 18:33:06 +00:00
matt korwel 5f080aa52a fix(ci): e2e workflow aligned with release (#9296) 2025-09-25 18:26:07 +00:00
Adam Weidman c334f02d51 feat(escape ansi): escape ansi ctrl codes from model output before displaying to user (#8636) 2025-09-25 18:07:17 +00:00
christine betts 2d76cdf2c6 Throw error for invalid extension names (#9538) 2025-09-25 18:05:49 +00:00
Jacob MacDonald defda3a97d Fix duplicate info messages for extension updates (#9760) 2025-09-25 17:58:43 +00:00
Jacob MacDonald a0c8e3bf2b Re-request consent if necessary when updating extensions (#9517)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-25 17:57:59 +00:00
Sandy Tao e209724789 fix(core): Improve API error retry logic (#9763) 2025-09-25 17:57:00 +00:00
anthony bushong 4caaa2a8e8 fix(core): ensure retry sets defaults for nullish values passed into options (#9540)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-09-25 17:33:00 +00:00
Jack Wotherspoon c463d47fa8 chore: add indicator to extensions list for enable/disable (#9405) 2025-09-25 16:30:25 +00:00
Adrian Arribas f80eb71068 [Part 3/6] feat(telemetry): enhance metrics with performance monitoring APIs (#8113) 2025-09-25 16:12:46 +00:00
Shardul Natu 135d3401cd add(telemetry): Add character-level edit metrics to Concord (#9145)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: owenofbrien <86964623+owenofbrien@users.noreply.github.com>
2025-09-25 16:09:56 +00:00
matt korwel fab279f0fd chore(release): bump version to 0.8.0-nightly.20250925.b1da8c21 (#9753)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-25 14:23:19 +00:00
matt korwel b1da8c210e change patch name for consistency (#9249)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-25 04:05:50 +00:00
matt korwel 9ba1640c07 Releasing: Version mgmt (#8964)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-25 04:02:00 +00:00
matt korwel 422eb78b41 handling propper checkouts for releasemanual (#8954) 2025-09-25 03:57:16 +00:00
anthony bushong 275a12fd45 fix(core): set default maxAttempts in baseLLMClient (#9533) 2025-09-25 01:18:26 +00:00
anthony bushong 8abe7e151c fix(core): plumb max attempts for retry to generate options in baseLLMClient (#9518) 2025-09-24 22:25:15 +00:00
anthony bushong 05c962af1f fix(core): update edit tool error type during llm judgements (#9510) 2025-09-24 22:19:19 +00:00
Shreya Keshive 74447fcff2 feat(vscode-ide-companion): add script to check for new release (#9160) 2025-09-24 21:52:41 +00:00
Abhi ee36307495 feat(cli): Enable model router by default and add to settings dialog (#9262) 2025-09-24 21:33:14 +00:00
Abhi 4c6da1eaf9 feat(integration): Force single model for more determinisitic e2e tests (#9278) 2025-09-24 21:17:13 +00:00
christine betts 86e45c9aa5 Fix windows extension install issue (#9512) 2025-09-24 21:03:28 +00:00
jleong-stripe e0ba7e4ffb For dynamic client registration - use registration endpoint in config if available instead of performing OAuth discovery again (#9231) 2025-09-24 20:53:42 +00:00
James 3660d4ecc0 docs(extensions): update security extension URL used in installation example (#9505) 2025-09-24 20:01:26 +00:00
Abhi 22740ddceb refactor(core): Extract thought parsing logic into a dedicated utility (#9503) 2025-09-24 19:38:36 +00:00
Sandy Tao ad59be0c81 fix(core): Fix unable to cancel edit tool (#9299) 2025-09-24 19:16:00 +00:00
fuyou 66c2184fe5 feat: Add AbortSignal support for retry logic and tool execution (#9196)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-09-24 19:10:55 +00:00
Srinath Padmanabhan e0ef5beae4 Document support for Google AI Pro and AI Ultra (#9426)
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
2025-09-24 10:54:48 -07:00
Richie Foreman 9d70649b75 fix(test): Fix a disabled test (#9481) 2025-09-24 17:42:03 +00:00
geoffdowns 4f49341ce9 relax JSON schema validation (#9332)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-09-24 16:55:32 +00:00
Richie Foreman d8b895a2f1 feat(ci): Push Sandbox images to dockerhub instead of GHCR (#9163) 2025-09-24 16:46:51 +00:00
Tommaso Sciortino 1753c71bfa Add log groups to run tests (#9275) 2025-09-24 16:43:45 +00:00
Tommaso Sciortino b540137820 Fix broken icon on force_skip_tests option in "Release: Manual" (#9246) 2025-09-24 16:17:18 +00:00
Shardul Natu 5cadd37eb2 fix(typo): Fix the commit sha of a mistyped action (#9310)
Co-authored-by: Shnatu <snatu@google.com>
2025-09-24 15:53:04 +00:00
Jacob MacDonald cc47e475af support standard github release archives format (#9265) 2025-09-24 15:38:09 +00:00
matt korwel 3667ecf107 Test workflow dispatch (#9283)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-24 02:59:58 +00:00
Jacob Richman ce92ed3f68 Fix issue where an undefined variable was passed to the sandbox constructor (#9279) 2025-09-23 17:06:31 -07:00
Jacob Richman c6f8ecc227 Fix missing exports that were causing the build to fail locally. (#9277) 2025-09-23 23:52:34 +00:00
David East 38e053b7bb test(integration): Add "Ctrl + C" to exit integration test (#9272) 2025-09-23 22:40:20 +00:00
Tommaso Sciortino 03bd6876d2 Fix broken if (#9270) 2025-09-23 22:07:35 +00:00
Victor May 4bd4cd697b Log Model Slash Commands (#9250) 2025-09-23 22:06:03 +00:00
Sandy Tao 28c3901513 feat(logging): Add model name to content retry events (#9266) 2025-09-23 21:34:17 +00:00
Abhi c12b87ed03 fix(routing): Round latency to integer for telemetry (#9242) 2025-09-23 21:29:12 +00:00
shrutip90 f795255e58 docs(trust): Add documentation for folder trust feature (#9257) 2025-09-23 21:13:37 +00:00
christine betts 39b0948417 Revert "feat(accessibility): implement centralized screen reader layo… (#9255) 2025-09-23 19:44:33 +00:00
shishu314 16278fd849 feat(infra) - Add file for rollback workflow (#9211)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-23 19:36:41 +00:00
shishu314 98461ff667 metrics(extension) - Add logging for disable extension (#9238)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-23 18:37:35 +00:00
Jacob MacDonald 31c609daec remove extraction of the first dir into the top level for github release extensions (#9247) 2025-09-23 18:30:44 +00:00
shishu314 7f9975cf1c cleanup(infra) - Remove change tags action (#9201)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-23 18:21:55 +00:00
Victor Tsaran bfd904bfc8 feat(accessibility): implement centralized screen reader layout system (#8155) 2025-09-23 18:04:49 +00:00
Richie Foreman f46e50b271 fix(ci): Perform release verification in a separate working dir. (#9234)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-23 16:55:47 +00:00
Jacob MacDonald d8393a06dd dont attempt to look up releases on github for non-github git uris (#9235) 2025-09-23 16:52:42 +00:00
Abhi 5151bedf06 feat(cli): Add /model command for interactive model selection (#8940)
Co-authored-by: Miguel Solorio <miguel.solorio07@gmail.com>
2025-09-23 16:50:09 +00:00
Junhao Liao c96f8259c1 docs: fix links in headless.md after relocation from docs/cli (#9052) 2025-09-23 16:24:41 +00:00
Keith Lyons 82625fc07a fix(pre-commit): improve monorepo handling and failure messaging (#9123)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-23 15:57:24 +00:00
Abhi c93eed6384 fix(core): Compression was broken when routing enabled (#9183) 2025-09-23 04:44:07 +00:00
Jacob Richman 5218323831 Fix useSelectionList bug. (#9171) 2025-09-23 04:31:39 +00:00
Jacob Richman 7e1705274c Refactor to defer initialization. (#8925) 2025-09-23 02:48:25 +00:00
christine betts 40db029887 Fix package issue breaking noninteractive CLI commands (#9174) 2025-09-23 02:03:40 +00:00
shishu314 8d637a434c feat(infra) - Add empty action file for change tags (#9158)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-23 01:59:16 +00:00
Sandy Tao 712dc245ac fix(quality): Retry invalid stream only 1 time (#9169) 2025-09-23 00:15:55 +00:00
shrutip90 47948e3712 fix(cli): Handle formatting errors in trustedFolders.json similar to settings file (#9167) 2025-09-23 00:06:43 +00:00
christine betts 570b0086b6 Improve extensions consent flow, command formatting, github-release behavior (#9121)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-22 23:50:12 +00:00
Sandy Tao 4cdf9207f3 feat(core): Log invalid stream type (#9168) 2025-09-22 23:39:44 +00:00
Allen Hutchison 6328ca512f Fix: Only log message bus debug info when feature is enabled (#9156) 2025-09-22 23:08:48 +00:00
Arya Gummadi d7a0dbc6b1 fix(tests): fix flaky SettingsDialog tests (#8396)
Co-authored-by: Christie Warwick (Wilson) <bobcatfish@gmail.com>
2025-09-22 22:56:09 +00:00
Jacob MacDonald 525ced295c quote archive names before extraction (#9165)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-22 22:35:45 +00:00
Sandy Tao 9c4d1594ac Fix(quality): Refine Stream Validation Logic (#9150) 2025-09-22 21:40:09 +00:00
MRK fcffcfbacb Modifying new_prompt logging to handle real prompts only (#8788)
Co-authored-by: owenofbrien <86964623+owenofbrien@users.noreply.github.com>
2025-09-22 21:31:06 +00:00
Tommaso Sciortino 59df649349 Update manual release documentation (#9142) 2025-09-22 20:56:45 +00:00
Richie Foreman 93e022cee5 feat(ci): Add a "verify release" action + workflow to the pipeline (#8929)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-22 19:30:42 +00:00
Jacob MacDonald 710e00e02d use github release artifacts instead of cloning repos when available (#9147) 2025-09-22 19:12:41 +00:00
Srinath Padmanabhan 4ef46e441c Update Paid tier specific privacy notice. (#8737)
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
2025-09-22 19:04:04 +00:00
Allen Hutchison bcc4d81d19 feat: add message bus integration for tool confirmation (#8938) 2025-09-22 19:03:20 +00:00
shrutip90 6c559e2338 feat(cli): Add permissions command to modify trust settings (#8792) 2025-09-22 18:45:02 +00:00
Jerop Kipruto c0c7ad10ca feat(config): Support telemetry configuration via environment variables (#9113) 2025-09-22 18:23:06 +00:00
shishu314 10392ad344 Telemtry(extensions) - Add logging for extension events (#8339)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-22 16:55:43 +00:00
Jacob MacDonald 34c14b7dd2 Store installed release version as a part of install metadata (#9122) 2025-09-22 16:42:35 +00:00
Jerop Kipruto 57272f84b1 fix(telemetry): disable OTLP when telemetry-outfile is set (#9117) 2025-09-22 16:40:30 +00:00
Shreya Keshive 9abb165f7b refactor(vscode-ide-companion): Reduce VSIX size and improve build process (#9118) 2025-09-22 16:12:43 +00:00
JAYADITYA 92543da28c fix(config):Reviving CustomWitty feature (#8432)
Co-authored-by: Richie Foreman <richie.foreman@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-22 15:30:11 +00:00
Abhi 81d03cb524 refactor(cli): Extract reusable BaseSelectionList component and modernize RadioButtonSelect tests (#9021) 2025-09-22 15:14:41 +00:00
shishu314 edd988be60 Fix(metrics) - Add exit hook for cleanup in Optl sdk (#8930)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-22 14:01:52 +00:00
hritan 6869dbe695 fix(cli): return proper errors from loadExtensionConfig (#8909)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-09-22 09:34:52 +00:00
christine betts d9828e2571 Reinstate support for updating locally-installed extensions (#8833) 2025-09-22 03:44:58 +00:00
Shreya Keshive 8fdb61aabf feat(ide): Read IDE info from discovery file (#8760) 2025-09-22 00:54:18 +00:00
김세은 b4455af306 fix: resolve positional prompt argument being ignored with other flags (#9004) 2025-09-21 21:16:21 +00:00
Will 保哥 56f394cefd fix(docs): fix a few Markdown syntax errorrs (#8995)
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
2025-09-20 23:04:56 +00:00
anthony bushong a1dc7a8f55 fix(cli): support comma separated values for extensions and allowed mcp server names (#9007) 2025-09-20 19:49:50 +00:00
Tommaso Sciortino 62b49ab14a Fix incompatibilities with package.json (#8949) 2025-09-20 18:38:03 +00:00
Jacob Richman 375b8522fc Fix bug where users are unable to re-enter disconnected terminals. (#8765) 2025-09-20 17:59:37 +00:00
Sandy Tao 2216856e3c fix(ui): prevent useSlashCompletion effects from running during @ completion (#8986) 2025-09-20 16:13:58 +00:00
Wietse Venema 468db8730a fix(mcp): handle gemini mcp add scope correctly in home directory (#7800)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-20 14:19:11 +00:00
Richie Foreman aba23feddd feat(CI): Add a github action to build the sandbox image and push to GHCR (#8670)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-20 14:19:03 +00:00
anj-s 44691a4ce6 (feat): Add a ToDo tool to track ongoing task lists (#8761)
Co-authored-by: joshualitt <joshualitt@google.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Jacob MacDonald <jakemac@google.com>
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
2025-09-20 13:01:02 +00:00
Keith Lyons 22a560a990 feat(dev): add pre-commit hook for formatting and linting (#8380)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-20 02:07:26 +00:00
christine betts 0152759dfb Filter out the 'trust' attribute from extension MCP server configs (#8809)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-20 01:15:40 +00:00
HugoMurillo 37c5397319 fix(#7777): screen reader accessibility setting not working (#8730) 2025-09-20 00:28:11 +00:00
shrutip90 c564464e6b fix(cli): Revert the code to hide tips when showing trust dialog (#8946) 2025-09-19 22:22:39 +00:00
Roy Binux 532497b3d1 Correctly support comma-separated values for --allowed-tools (#8386)
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
2025-09-19 21:50:59 +00:00
Huaiwu Li ab982b8e32 docs: fix typos and grammar errors in documentation (#8422)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-19 21:48:31 +00:00
Rohit Ramkumar 5be2a9d5e2 Support rendering function calls and responses when sharing chat to markdown (#8693)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-09-19 21:47:20 +00:00
Michael Vorburger f028913b0e docs: Fix broken Extension example (#8403)
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-19 21:44:07 +00:00
Sandy Tao c8ad831039 fix(security): Pin wrap-ansi to 9.0.2 (#8934) 2025-09-19 21:17:34 +00:00
Shreya Keshive 3bf8fec2f1 Add few more license file names to generate-notices script (#8939) 2025-09-19 20:12:12 +00:00
Tommaso Sciortino b9f6283a8e Add skip_github_release option to Manual Release. (#8932) 2025-09-19 19:13:33 +00:00
Jacob MacDonald 4c43c69d35 Update extension-releasing.md to have more info (#8927) 2025-09-19 18:55:30 +00:00
matt korwel fd64d34082 Release: Ensure Tag Modification works (#8931)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 18:43:39 +00:00
Tommaso Sciortino d0da1f5fc9 Rollback shrinkwrap (#8926) 2025-09-19 18:22:01 +00:00
joshualitt 7681c595b5 Revert "feat(third_party) Port get-ripgrep." (#8923) 2025-09-19 18:08:41 +00:00
Christie Warwick (Wilson) 2bf226e918 doc: Add docs on release failure chat notifications (#8768) 2025-09-19 16:41:03 +00:00
Jacob MacDonald dd91b0a68b for github release extensions, dont require built assets (#8746) 2025-09-19 16:02:26 +00:00
christine betts fa8cea170a Fix extensions enablement bugs (#8797) 2025-09-19 15:43:39 +00:00
joshualitt 6e4236bf76 feat(third_party) Port get-ripgrep. (#8514) 2025-09-19 15:13:28 +00:00
James 2c4f61eca5 feat(cli) Custom Commands work in Non-Interactive/Headless Mode (#8305) 2025-09-19 13:49:35 +00:00
matt korwel 23467cdbdb Finalizing Patching End 2 End (#8906)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 05:39:38 -07:00
matt korwel f371ecb948 permissions (#8903)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 04:15:17 -07:00
matt korwel 9f597ab7c0 robot input (#8901)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 04:07:26 -07:00
matt korwel c9b39c379b fix comment formatting (#8900)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 04:02:50 -07:00
matt korwel b08633daa3 Reset 2 (#8898)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-19 03:51:01 -07:00
matt korwel 5f5e07e6cc nailedit (#8896)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 03:27:47 -07:00
matt korwel 8af1439697 testing (#8891)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 02:34:46 -07:00
matt korwel 0fbc13aa4b hm (#8887)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 01:50:59 -07:00
matt korwel e232c1d5ba continue (#8886)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 01:35:45 -07:00
matt korwel e7a88f225d no workflows (#8884)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 01:26:32 -07:00
matt korwel 47e8822467 debugging (#8882)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 01:23:55 -07:00
matt korwel 44805f4d58 keep going (#8881)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 01:16:37 -07:00
matt korwel bba0f2e557 breaking apart steps for permissions (#8880)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 01:08:59 -07:00
matt korwel b1fb68bb06 fixing merge (#8879)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 00:59:00 -07:00
matt korwel fd2bfc384d Release triggering (#8878)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 00:50:52 -07:00
matt korwel bcc1f25c53 security bot was right (#8868)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 00:36:12 -07:00
matt korwel c442f8ae8c install yargs (#8867)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 00:33:07 -07:00
matt korwel 951596ffe4 again with permissions (#8865)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 00:27:14 -07:00
matt korwel 1bfd575473 possibly fix permissions (#8862)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 00:10:53 -07:00
fuyou e48f61bdc7 fix(cli): ctrl c/ctrl d close cli when in dialogs (#8685)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-19 06:52:29 +00:00
matt korwel 938c850ed8 reset permissions (#8855)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-19 00:01:04 -07:00
matt korwel 55b6f848fc trying to fix logging and permissions (#8854)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-18 23:56:09 -07:00
matt korwel 889a6c21ac Include release branches (#8848) 2025-09-18 23:34:52 -07:00
Billy Biggs ecd95ed6b3 Prompte telemetry, debug and proxy flags to global (#8811)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-19 06:13:44 +00:00
matt korwel 4e6ca95db9 missed 2 apparently (#8842) 2025-09-18 23:07:18 -07:00
matt korwel 52c1599240 missed one (#8840) 2025-09-18 23:00:43 -07:00
matt korwel 9c392b2d44 E2e v6 (#8839) 2025-09-18 22:57:20 -07:00
matt korwel 42bac72be2 removing duplicate runs (#8838) 2025-09-18 22:50:49 -07:00
matt korwel 1195072aae actually correct mac names (#8832) 2025-09-18 22:33:58 -07:00
matt korwel 09f0672734 support label on pushes too (#8831) 2025-09-18 22:28:26 -07:00
matt korwel 00cd4b6a19 actually remove mege queue skipper (#8824) 2025-09-18 22:14:47 -07:00
matt korwel c434a7e682 remove merge queue skipper (#8819) 2025-09-18 22:07:47 -07:00
matt korwel 3f16ed5a9a Fix merge queue for forks (#8816) 2025-09-18 21:59:24 -07:00
matt korwel d5abb46fad use correct ref for launching (#8813) 2025-09-18 21:19:22 -07:00
matt korwel c56d0ce6d2 ci fixes (#8810) 2025-09-19 04:01:21 +00:00
matt korwel cf95b631cd use the cla user (#8806) 2025-09-18 20:44:38 -07:00
matt korwel 2993800e07 use the cla user (#8804) 2025-09-18 20:29:39 -07:00
matt korwel e678b231a3 migrate to patch both (#8803) 2025-09-18 20:17:51 -07:00
Tommaso Sciortino a815fa37e7 Fix npm_channel options in manual release workflow. (#8766) 2025-09-19 03:11:10 +00:00
matt korwel 81dcef070f permissions (#8800) 2025-09-18 19:51:35 -07:00
matt korwel 690867e433 ensure consistent user (#8798) 2025-09-18 19:38:07 -07:00
matt korwel 9954b03ced switch to gh cli instead of api (#8795) 2025-09-18 19:18:27 -07:00
matt korwel ec01b1f29f better messaging (#8794) 2025-09-18 19:00:18 -07:00
matt korwel bfa4140593 more patching (#8787) 2025-09-18 18:22:54 -07:00
matt korwel b14a4f5ebc dealing with conflicts (#8772) 2025-09-18 17:33:08 -07:00
matt korwel 29852e9b08 patch e2e vnext (#8767) 2025-09-18 23:31:39 +00:00
matt korwel 509444d059 Improve CI Times by 70% (#8530) 2025-09-18 16:29:40 -07:00
Shardul Natu bbcc906133 add(mcp): Add MCP Server name to ToolCallEvent OTel logging (#7829)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: owenofbrien <86964623+owenofbrien@users.noreply.github.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-09-18 22:00:11 +00:00
Jacob MacDonald 22b7d86574 Add support for auto-updating git extensions (#8511) 2025-09-18 21:49:47 +00:00
Sandy Tao e94ce7e2fd fix(release): prevent validation error in patch-from-comment workflow (#8759) 2025-09-18 14:27:46 -07:00
Allen Hutchison afba59a953 feat(cli): configure policy engine from existing settings (#8348) 2025-09-18 20:44:23 +00:00
Gal Zahavi ec0acc486e fix(cli) : fix shell colors to match new coloring (#8747)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-18 20:35:55 +00:00
Sandy Tao 0fcda10082 fix(release): correctly parse channel argument in patch workflow (#8750) 2025-09-18 20:16:43 +00:00
Gal Zahavi 1f31443ed1 fix(shell): update shell setting from usePty to enableInteractiveShell (#8726)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-18 20:05:01 +00:00
Gal Zahavi a34e375193 refactor(shell): Send AnsiOutput when ShowColor is false (#8647) 2025-09-18 20:04:46 +00:00
Jacob MacDonald 899b6f72cb Better parsing of github extension source uris (#8736) 2025-09-18 19:52:19 +00:00
Shreya Keshive db5b49b2ca refactor(ide): replace DetectedIde enum with IDE_DEFINITIONS object (#8698) 2025-09-18 19:23:24 +00:00
matt korwel f2a47dec54 Releasing: Patching e2e coordination (#8723) 2025-09-18 19:11:57 +00:00
Akhil Appana 92c99d7873 refactor(ui): extract QueuedMessageDisplay into separate component (#8374)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-09-18 18:54:09 +00:00
Sandy Tao 2c754d71e3 fix(ui): Track last prompt token count in processStream (#8650) 2025-09-18 18:46:56 +00:00
shishu314 bcfd50b45b metrics(extensions) - Add logging methods for extensions operations (#8702)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-18 18:01:36 +00:00
Tommaso Sciortino 853ae56e7e Improve compression splitpoint logic. (#8691) 2025-09-18 17:59:13 +00:00
matt korwel f41db212ec fix linting (#8725) 2025-09-18 11:19:43 -07:00
matt korwel b376df7691 work (#8720) 2025-09-18 10:45:42 -07:00
matt korwel b88d9c6353 Prstep3 (#8718) 2025-09-18 10:32:13 -07:00
matt korwel ec9e548bd6 Prstep3 (#8717) 2025-09-18 10:28:40 -07:00
matt korwel 4f468a9f19 no loops (#8716) 2025-09-18 10:14:12 -07:00
matt korwel 99b43e1302 Prstep2 (#8715) 2025-09-18 10:10:26 -07:00
matt korwel 6b34f38ce0 better notifications (#8714) 2025-09-18 09:56:45 -07:00
matt korwel 143e5c3140 better logging (#8712) 2025-09-18 09:43:35 -07:00
matt korwel c9cc05bc3d Pr comment (#8710) 2025-09-18 09:36:11 -07:00
matt korwel 6be59628c3 Pr comment (#8709) 2025-09-18 09:30:50 -07:00
matt korwel 56b909c8e1 Pr comment (#8708) 2025-09-18 09:26:33 -07:00
matt korwel 2f64307c19 Pr comment (#8707) 2025-09-18 09:23:45 -07:00
matt korwel 7a68997b18 permissions (#8706) 2025-09-18 09:18:09 -07:00
hritan 2d406ffc75 fix(cli): uninstall extensions using their source URL (#8692)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-09-18 16:00:28 +00:00
matt korwel 0534ca74d4 fixing error (#8676)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-18 15:41:12 +00:00
cornmander e0fcbc39f6 Add a version specifier to the npx command for GCP AR auth. (#8653) 2025-09-18 14:47:11 +00:00
Richie Foreman 6dca8270bc feat(CI): Package docker containers to GHCR for PRs. (#8588) 2025-09-18 14:30:55 +00:00
Shreya Keshive d746eb7b22 feat(vscode-ide-companion): harden ide-server with CORS and host validation (#8512) 2025-09-18 14:06:16 +00:00
matt korwel 930f39a0cd Releasing: Patching and Rollback (#8673) 2025-09-18 04:16:08 +00:00
matt korwel 8f0306f499 Mk fix nightly (#8669) 2025-09-18 01:40:17 +00:00
Tommaso Sciortino f3abfb8e66 Properly publish npm-shrinkwrap.json. (#8655) 2025-09-18 01:08:43 +00:00
gemini-cli[bot] f8678f9e9d chore(release): bump version to 0.7.0-nightly.20250918.2722473a (#8667)
Co-authored-by: mkorwel <matt.korwel@gmail.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-18 00:42:21 +00:00
matt korwel 72114464b8 permissiong for nightly job (#8652) 2025-09-17 17:16:38 -07:00
Adrian Arribas 407373dcd6 [Part 2/6] feat(telemetry): add activity detector with user interaction tracking (#8111) 2025-09-17 23:56:00 +00:00
Gal Zahavi 6756a8b8a9 refactor(ui): Optimize rendering performance (#8239) 2025-09-17 22:37:13 +00:00
Sarah Price d54cdd8802 fix(mcp): Display OAuth authentication messages in CLI UI instead of debug console (#6919)
Co-authored-by: Yoichiro Tanaka <yoichiro6642@gmail.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-17 22:25:33 +00:00
christine betts eddd13d70e Add simple extensions release flow support (#8498) 2025-09-17 22:14:01 +00:00
Jacob MacDonald 13a65ad94f Emit a warning when memory usage exceeds 7GB (#7613) 2025-09-17 21:32:46 +00:00
matt korwel 0cae7caaab chore(release): bump version to 0.7.0-nightly.20250917.0b10ba2c (#8645)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-17 20:53:53 +00:00
Pyush Sinha d2b8ff5deb fix: InputPrompt wrapped lines maintain highlighting, increase responsiveness in narrow cases (#7656)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-17 20:17:50 +00:00
matt korwel 0b10ba2ca9 Mk correct versioning (#8642) 2025-09-17 13:31:45 -07:00
Tommaso Sciortino 0559040c0f Fix automatic compression bug (#8599) 2025-09-17 20:12:06 +00:00
shrutip90 8c0c156cbd fix(cli): Auto restart CLI inner node process on trust change (#8378) 2025-09-17 20:05:40 +00:00
Tommaso Sciortino e76dda37ad Serialize function calls that mutate state (#8513) 2025-09-17 18:45:04 +00:00
Ali Al Jufairi efb57e1cef feat(settings): Add availableTerminalHeight prop and optimize settings dialog height management (#7697)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-17 17:51:46 +00:00
matt korwel 79e72a94fe Mk/release hotfix (#8633) 2025-09-17 11:02:54 -07:00
Gal Zahavi 726d2c4274 feat(extensions): add support for sso:// protocol (#8581) 2025-09-17 17:36:23 +00:00
Arya Gummadi 678e947f21 fix(tests): improve test reliability and performance (#8395) 2025-09-17 17:12:33 +00:00
Jack Wotherspoon bbf7c6ed36 chore: update erroneous model version added by external contrib (#8624) 2025-09-17 14:10:58 +00:00
christine betts 0403375799 Conditionally use consent flow (#8551) 2025-09-17 13:24:38 +00:00
matt korwel 1a6e4a119e Release Promotion Clean up (#8597) 2025-09-16 23:47:05 -07:00
MRK 4df8dbaa0d Fix to issue #736 resulting in GEMINI_CLI_AUTH_TYPE not getting populated most of the time in the start_session events (#8508)
Co-authored-by: owenofbrien <86964623+owenofbrien@users.noreply.github.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-17 06:08:23 +00:00
hritan d2f87d15ed fix(cli): add workspacePath to extension variables (#8482)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-09-17 04:23:12 +00:00
anthony bushong f849c85608 fix(tests): look for json in thrown error (#8601) 2025-09-17 03:50:12 +00:00
Tommaso Sciortino 6391c4c0f1 Show Citations by default for all users. (#8570) 2025-09-17 02:40:51 +00:00
Jerop Kipruto 6b576dc572 Move headless.md to docs folder (#8593) 2025-09-17 01:17:25 +00:00
Abhi f5dca8b7f7 refactor(core): Remove generateJson from GeminiClient (#8529) 2025-09-17 00:59:13 +00:00
Jerop Kipruto dbc0d9c8e2 OTEL: move TOC for docs (#8592) 2025-09-16 23:31:44 +00:00
Christie Warwick (Wilson) 55f5c0936a feat: Add -o as alias for --output-format (#8585) 2025-09-16 22:45:08 +00:00
Srinath Padmanabhan 1407327a14 Simplify error messages when user runs into daily quotas. (#8556)
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
2025-09-16 22:39:18 +00:00
Shreya Keshive cf9b6ec1f6 fix(ide): increase IDE open / close tool timeouts (#8587) 2025-09-16 22:38:17 +00:00
anthony bushong bb642b1948 fix(tests): reduce flakiness in simple mcp server test (#8583) 2025-09-16 22:29:11 +00:00
shrutip90 20ad40092c fix(cli): Fix performance issues on relaunching CLI in inner node pro… (#8571) 2025-09-16 21:47:45 +00:00
Abhi a0079785af feat(telemetry): Add telemetry and metrics for model routing (#8518) 2025-09-16 20:53:58 +00:00
christine betts 459de383b2 Update extension enablement logic (#8544) 2025-09-16 19:51:46 +00:00
Jerop Kipruto 88272cba8b feat: add direct Google Cloud telemetry exporters (#8541) 2025-09-16 19:13:57 +00:00
Tommaso Sciortino 4e5c1fce8d Remove unused code. (#8497) 2025-09-16 19:12:45 +00:00
Gal Zahavi 986b9fe7e9 refactor: Replace exec with spawn (#8510) 2025-09-16 19:03:17 +00:00
Jerop Kipruto a015ea203f docs: add headless mode guide (#8564) 2025-09-16 19:01:15 +00:00
Gal Zahavi d0b505a577 chore(settings): enable setting migration (#8562) 2025-09-16 18:51:53 +00:00
shishu314 dbcfcd45f5 cleanup(extension) - Add tests for the install command (#8371)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-16 18:23:49 +00:00
anthony bushong a980c0cec9 feat(actions): add swebench eval harness to github actions (#8028)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-16 11:25:13 -07:00
shrutip90 80fa4a310b fix: Make trustedFolders file path configurable (#8306)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-16 16:58:57 +00:00
fuyou a1ebb6f275 Fix Windows CI flaky test in SettingsDialog.test.tsx (#8533)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-09-16 16:09:08 +00:00
Richie Foreman f098e07c19 cleanup(gha): Use Matrix runner w/ {self, ubuntu} for a low-risk workflow (#8367) 2025-09-16 16:05:44 +00:00
Jerop Kipruto ebf5437e52 feat: remove session summary feature (#8545) 2025-09-16 15:16:05 +00:00
shishu314 c999b7e354 feat(security) - Encrypted oauth flag (#8101)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-16 14:05:29 +00:00
Abhi 1634d5fcca refactor(core): Use BaseLlmClient for utility LLM calls in edit corrector (#8443) 2025-09-16 00:46:41 +00:00
Srinath Padmanabhan d5d150449d Fix(triage): Update pr-triage.sh script (#7698)
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
2025-09-15 23:58:50 +00:00
James c0794215d3 refactor: refactor slash command parsing to a util function. (#8381) 2025-09-15 23:56:07 +00:00
Abhi bee5b638dd feat(routing): Introduce Classifier-based Model Routing Strategy (#8455) 2025-09-15 23:51:25 +00:00
Luna Wang b7a87190d7 Improve theme name color and readability in ThemeDialog (#8356)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Miguel Solorio <miguel.solorio07@gmail.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Richie Foreman <richie.foreman@gmail.com>
Co-authored-by: shishu314 <shishu_1998@yahoo.com>
Co-authored-by: Shi Shu <shii@google.com>
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
Co-authored-by: masiaf <masiafrest@gmail.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: fuyou <imshuazi@126.com>
Co-authored-by: Rohit Ramkumar <rramkumar@google.com>
Co-authored-by: Hadi Minooei <hminooei@gmail.com>
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
Co-authored-by: Luke Schlangen <lukeschlangen@gmail.com>
Co-authored-by: Ayesha Shafique <79274585+Aisha630@users.noreply.github.com>
Co-authored-by: Hadi Minooei <minooei@google.com>
2025-09-15 23:23:54 +00:00
Shreya Keshive 2cc0c1a808 feat(ide): add auth token support to IdeClient (#8490)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-09-15 23:22:31 +00:00
fuyou 079526fd3b Fix mixed input crash by adding proper error handling 8304 (#8430) 2025-09-15 22:56:25 +00:00
Shreya Keshive 12f584fff8 feat(vscode-ide-companion): add auth token validation to IDE server (#8491) 2025-09-15 22:49:15 +00:00
Shreya Keshive c4c81e3d3b docs(ide): define diffing interface for companion extension spec (#8479) 2025-09-15 22:40:05 +00:00
Tommaso Sciortino 4a982ffd7b Fix references to old name of npm-shrinkwrap.json. (#8506) 2025-09-15 21:35:17 +00:00
Gal Zahavi 05022434eb chore(docs): Fix typo in shell.md (#8492) 2025-09-15 21:21:29 +00:00
Sandy Tao f7ff26ba65 feat(logging): Add clearcut logging for disabling loop detection (#8503) 2025-09-15 21:12:39 +00:00
Hadi Minooei 2e12a67198 update shell info (#8489) 2025-09-15 20:27:19 +00:00
Tommaso Sciortino 7353bda8ff Remove unused method. (#8486) 2025-09-15 18:17:07 +00:00
shishu314 e28a043f3d feat(security) - Use hybrid token storage when flag is enabled (#8010)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-15 18:05:17 +00:00
Ayesha Shafique 0d9c1fba1d feat (cli): Add command search using Ctrl+r (#5539)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-15 17:49:23 +00:00
Gal Zahavi 8c283127d5 docs(tools): update shell.md for interactive commands (#8480) 2025-09-15 17:09:38 +00:00
Sandy Tao 97475071e1 fix(tests): Cleans up setup test and fix behavior test (#8391) 2025-09-15 16:36:35 +00:00
Abhi b5af662477 refactor(core): Move generateEmbedding to BaseLlmClient (#8442) 2025-09-15 15:33:30 +00:00
Luke Schlangen 5cbab75c7d fix: positional arguments for MCP prompts (#8034) 2025-09-15 15:13:21 +00:00
shishu314 7470133a13 feat(extensions) - Add local/remote for mcp servers (#8355)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-15 15:11:14 +00:00
Abhi c1de070a5e refactor(core): Migrate next speaker check to use BaseLlmClient (#8424) 2025-09-15 04:15:18 +00:00
Abhi 5b70bb4029 fix(e2e): resolve flaky list_directory test (#8456) 2025-09-15 03:59:27 +00:00
Arya Gummadi 1145f25ee3 feat: auto-approve pending tool calls when auto_edit/yolo is activated (#6665)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-09-15 03:20:21 +00:00
Abhi 00ecfdeb06 chore(tests): Remove stale snapshot for deleted App.tsx (#8446) 2025-09-15 01:15:19 +00:00
Abhi 12720a9fa7 refactor(core): Use BaseLlmClient for LLM-based loop detection (#8427) 2025-09-14 03:07:33 +00:00
Abhi f11d79a931 fix(stats): Use request model as fallback for stats logging (#8423) 2025-09-14 01:03:46 +00:00
Hadi Minooei 35aeb3f420 Remove conflicting shell Directory checks (#7845)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-09-13 17:33:12 +00:00
fuyou 2135dbb6a4 Fix #8077: Settings command overwrites entire JSON file, leaking environment variables (#8154)
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
2025-09-13 06:31:15 +00:00
Rohit Ramkumar a96cc2f148 feat: Add /chat share command (#8139) 2025-09-13 06:21:40 +00:00
fuyou 73466b626d Fix dollar sign replacement bug in file editing (#7871)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-13 06:05:43 +00:00
Gal Zahavi 087c192e51 fix(ui): Correct footer measurement and prevent negative terminal height (#8362) 2025-09-13 05:42:17 +00:00
Sandy Tao 5a05fb0dd0 fix(core): stop streaming request on loop detection (#8377) 2025-09-12 23:44:24 +00:00
Jerop Kipruto 1f70a27e9c JSON errors in non-interactive auth validation (#8373) 2025-09-12 23:18:40 +00:00
Sandy Tao b416508ef1 feat(core): Cap shell output truncation threshold to the remaining context window size (#8379) 2025-09-12 22:11:41 +00:00
Sandy Tao 4f91037af4 fix(core): Include the latest user request in countTokens for compression (#8375) 2025-09-12 21:13:16 +00:00
Shreya Keshive e5bbf9d728 docs(ide ext): add companion extension specification (#8262) 2025-09-12 21:08:31 +00:00
masiaf 811a2e90d9 feat(input): add undo/redo shortcuts with Ctrl+Z and Ctrl+R (#4625)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-12 21:07:34 +00:00
Tommaso Sciortino 21826010ef Use shrinkwrap for package locking (#8298) 2025-09-12 20:26:55 +00:00
Abhi c15774ce68 # feat(routing): Introduce useModelRouter feature flag (#8366) 2025-09-12 19:57:07 +00:00
matt korwel bc7c7fe466 fix(release): use preview tag for preview versions (#8370) 2025-09-12 12:26:27 -07:00
Shreya Keshive 1f9564223b fix(ide): Correct IDE client temp dir and port matching (#8270) 2025-09-12 17:49:37 +00:00
shishu314 8a5e692373 Metric(extension) - Add logging for uninstalling extension (#8293)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-12 17:38:54 +00:00
matt korwel c99539b991 feat: simplify patch release workflow (#8196)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Richie Foreman <richie.foreman@gmail.com>
2025-09-12 17:22:10 +00:00
matt korwel eaadc6d93d refactor(release): simplify release workflow (#8353) 2025-09-12 16:58:28 +00:00
Jacob MacDonald e89012efa8 Make a stateful extensions list component, with update statuses (#8301)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-12 16:20:04 +00:00
Shreya Keshive 8810ef2f40 refactor(ide): Improve IDE diff communication protocol (#8338) 2025-09-12 15:44:24 +00:00
shishu314 cf20697450 feat(extension) - Add permission prompt for when user installs a local extension with mcpservers (#8208)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-12 14:53:30 +00:00
Miguel Solorio f656f143c6 fix(ui): ensure [MCP] tag color matches active state (#8316) 2025-09-12 02:37:19 +00:00
Matt Ingenthron 2e8c3a09d5 Typo fix in releases.md (#8230)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-12 00:20:50 +00:00
Keith Lyons 0d460bbf77 fix: Restore footer configuration settings (#8041) (#8053)
Co-authored-by: Miguel Solorio <miguelsolorio@google.com>
Co-authored-by: Miguel Solorio <miguel.solorio07@gmail.com>
2025-09-12 00:16:09 +00:00
joshualitt 68035591da feat(core): Enable ripgrep by default. (#7427) 2025-09-11 23:46:07 +00:00
joshualitt 557dba4a32 Fix license file. (#8284) 2025-09-11 22:36:28 +00:00
joshualitt 2ccb9839d3 feat(core): Re-download rg binary if it is deleted. (#8126) 2025-09-11 22:18:29 +00:00
Sandy Tao b2c3523ecd fix(release): Add back old release.yml (#8302)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-11 15:22:34 -07:00
Shammi Anand 1be38d8fa0 fix(core): Improve compression message clarity for small history cases (#4404)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-11 21:41:08 +00:00
Miguel Solorio 67f7dae4e3 Update default text styles (#8291) 2025-09-11 21:22:16 +00:00
Sandy Tao aba2a9932c fix(core): Default skipNextSpeakerCheck to true when the setting is not manually set (#8295) 2025-09-11 21:11:06 +00:00
Gal Zahavi 181898cb5d feat(shell): enable interactive commands with virtual terminal (#6694) 2025-09-11 20:27:27 +00:00
Shreya Keshive 8969a232ec feat(ide): Check for IDE diffing capabilities before opening diffs (#8266) 2025-09-11 20:17:57 +00:00
joshualitt 59182a9fa0 feat(core): Copy downloadRipGrep with license. (#8195) 2025-09-11 20:13:49 +00:00
Tommaso Sciortino 39af7115d1 Move IdeClient.connect() to initializeApp(). (#8282) 2025-09-11 20:07:57 +00:00
Tommaso Sciortino ad21c10988 Fix MCP prompt slash commands not appearing. (#8290) 2025-09-11 19:59:38 +00:00
shishu314 0308267071 fix(trust): Pass folderTrust config to a2a server (#8082)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-11 18:24:52 +00:00
Tommaso Sciortino d892cde0b0 Refactor IdeContextStore (#8278) 2025-09-11 18:22:20 +00:00
Abhi 538e6cd19a feat(routing): Initialize model routing architecture (#8153) 2025-09-11 17:38:50 +00:00
shishu314 5504f933e1 fix(metrics) - Remove the error field from ApiResponseEvent (#8207)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-11 17:35:17 +00:00
Miguel Solorio 6be054513b feat(ui): make accept edits & yolo mode match shell mode styles (#8200) 2025-09-11 17:34:29 +00:00
Allen Hutchison ba85aa49c7 feat(core): Tool Confirmation Message Bus foundation (PR 1 of 3) (#7835) 2025-09-11 16:39:17 +00:00
Tommaso Sciortino 1291ec78a5 Update package-lock.json to reflect recently removed deps (#8271)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-11 16:34:31 +00:00
matt korwel 1819ffe5bd feat(release): automate patch creation and release process (#8202) 2025-09-11 16:19:07 +00:00
matt korwel f9f4b2a260 Broaden PR Approval Process (#8264) 2025-09-11 15:48:31 +00:00
Sandy Tao 095351bf39 feat(telemetry): Add content length to tool calls and log tool output truncation event (#8014) 2025-09-11 15:40:46 +00:00
Jerop Kipruto 8f4321b1ca feat: add telemetry for output format usage (#8223) 2025-09-11 13:42:10 +00:00
Sandy Tao 78744cfbca feat(ui): Add confirmation dialog for disabling loop detection for current session (#8231) 2025-09-11 05:20:13 +00:00
Jacob Richman 5b2176770e feat: add cached string width function for performance optimization (#7850)
Co-authored-by: lifeloating <imshuazi@126.com>
2025-09-11 04:20:40 +00:00
Miguel Solorio 8cc787f304 Fix suggestion alignment (#8233) 2025-09-11 03:47:22 +00:00
Tommaso Sciortino 03e3c59bf0 Fix compression issues (#8225) 2025-09-10 23:04:20 +00:00
Gal Zahavi 3ceefe8732 fix(rendering): remove React.strictMode from gemini.tsx (#8145) 2025-09-10 22:30:45 +00:00
Jerop Kipruto 514767c88b Structured JSON Output (#8119) 2025-09-10 20:19:47 +00:00
Gaurav db99fc70b6 fix: gitignore handling (#8177) 2025-09-10 19:48:07 +00:00
Damian Tometzki 32abe905f1 Fix: connect on docker devcontainer to vscode-ide (#7464) 2025-09-10 19:19:37 +00:00
Esse Woods b1b20e50ff Update README.md (#8199)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-10 19:05:03 +00:00
Gaurav de2903b101 fix: make bfsFileSearch more efficient (#8173) 2025-09-10 18:39:02 +00:00
Spencer Schrock ff705ec286 fix(settings): use union merge for excludeTools (#7842) 2025-09-10 18:28:29 +00:00
HugoMurillo 30b13c6357 fix(#7039): broken IDE integration for multi-edit/multi-write flows (#8159) 2025-09-10 18:21:46 +00:00
Miguel Solorio b9b6fe1f73 feat(ui): Semantic tokens refactor (#8087) 2025-09-10 17:57:07 +00:00
Christie Warwick (Wilson) a3a0e981ee docs: Add e2e status badge to main README 🏅 (#8198) 2025-09-10 17:00:26 +00:00
Tommaso Sciortino 0e3a0d7dc5 Add .geminiignore support to the glob tool. (#8086) 2025-09-10 16:54:50 +00:00
Jacob MacDonald ef70c17936 Add functionality to check for git extension updates, as well as support for installing a specific ref (#8018)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-10 16:35:48 +00:00
hritan 69b2d77df5 fix(cli): added directory name to folder trust dialog (#8165)
Co-authored-by: Taneja Hriday <hridayt@google.com>
2025-09-10 16:31:12 +00:00
Adam Weidman bd0f085ae8 chore(a2a-server): if a2a task creation fails return error to user (#8106)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-10 16:08:58 +00:00
Jacob MacDonald 50e7c88aa4 Extensions update command (#8100) 2025-09-10 15:09:09 +00:00
matt korwel 0d03f4ea9d Release Process vNext (#8152)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-10 08:28:58 +00:00
2837 changed files with 1435791 additions and 81839 deletions
+17
View File
@@ -0,0 +1,17 @@
# Git history - not needed in build context
.git
# Root node_modules - reinstalled inside container via npm ci
node_modules
# Package-level node_modules - reinstalled inside container
packages/*/node_modules
# Development and IDE files
.github
.vscode
npm-debug.log*
# Misc
.DS_Store
*.tmp
+89
View File
@@ -0,0 +1,89 @@
# --- STAGE 1: Base Runtime ---
FROM docker.io/library/node:20-slim AS base
RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-venv \
curl \
dnsutils \
less \
jq \
ca-certificates \
git \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# --- STAGE 2: Builder (Compile Main) ---
FROM base AS builder
WORKDIR /build
COPY . .
RUN npm ci --ignore-scripts
RUN npm run bundle
# Run the official release preparation script to move the bundle and assets into packages/cli
RUN node scripts/prepare-npm-release.js
# --- STAGE 3: Development Environment ---
FROM base AS development
WORKDIR /home/node/dev/main
# Set up npm global package folder
RUN mkdir -p /usr/local/share/npm-global \
&& chown -R node:node /usr/local/share/npm-global
ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global
ENV PATH=$PATH:/usr/local/share/npm-global/bin
# Copy package.json to extract versions for global tools
COPY package.json /tmp/package.json
# Install Build Tools, Global Dev Tools (pinned), and Linters
ARG ACTIONLINT_VER=1.7.7
ARG SHELLCHECK_VER=0.11.0
ARG YAMLLINT_VER=1.35.1
RUN apt-get update && apt-get install -y --no-install-recommends \
make \
g++ \
gh \
git \
unzip \
rsync \
ripgrep \
procps \
psmisc \
lsof \
socat \
tmux \
docker.io \
build-essential \
libsecret-1-dev \
libkrb5-dev \
file \
&& curl -sSLo /tmp/actionlint.tar.gz https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VER}/actionlint_${ACTIONLINT_VER}_linux_amd64.tar.gz \
&& tar -xzf /tmp/actionlint.tar.gz -C /usr/local/bin actionlint \
&& curl -sSLo /tmp/shellcheck.tar.xz https://github.com/koalaman/shellcheck/releases/download/v${SHELLCHECK_VER}/shellcheck-v${SHELLCHECK_VER}.linux.x86_64.tar.xz \
&& tar -xf /tmp/shellcheck.tar.xz -C /usr/local/bin --strip-components=1 shellcheck-v${SHELLCHECK_VER}/shellcheck \
&& pip3 install --break-system-packages yamllint==${YAMLLINT_VER} \
&& export TSX_VER=$(node -p "require('/tmp/package.json').devDependencies.tsx") \
&& export VITEST_VER=$(node -p "require('/tmp/package.json').devDependencies.vitest") \
&& export PRETTIER_VER=$(node -p "require('/tmp/package.json').devDependencies.prettier") \
&& export ESLINT_VER=$(node -p "require('/tmp/package.json').devDependencies.eslint") \
&& export CROSS_ENV_VER=$(node -p "require('/tmp/package.json').devDependencies['cross-env']") \
&& npm install -g tsx@$TSX_VER vitest@$VITEST_VER prettier@$PRETTIER_VER eslint@$ESLINT_VER cross-env@$CROSS_ENV_VER typescript@5.3.3 \
&& npm install -g @google/gemini-cli@nightly && mv /usr/local/share/npm-global/bin/gemini /usr/local/share/npm-global/bin/g-nightly \
&& npm install -g @google/gemini-cli@preview && mv /usr/local/share/npm-global/bin/gemini /usr/local/share/npm-global/bin/g-preview \
&& npm install -g @google/gemini-cli@latest && mv /usr/local/share/npm-global/bin/gemini /usr/local/share/npm-global/bin/g-stable \
&& apt-get purge -y build-essential libsecret-1-dev libkrb5-dev \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /root/.npm
# Copy the bundled CLI package to a permanent location and install it
# We MUST not delete this source folder as 'npm install -g <folder>'
# often symlinks to it for local folder installs.
COPY --from=builder /build/packages/cli /usr/local/lib/gemini-cli
RUN npm install -g /usr/local/lib/gemini-cli
USER node
CMD ["/bin/bash"]
+10
View File
@@ -0,0 +1,10 @@
node_modules
.git
.gemini/workspaces
dist
!packages/*/dist/*.tgz
bundle
out
*.log
.env
.DS_Store
+58
View File
@@ -0,0 +1,58 @@
substitutions:
_IMAGE_NAME: 'development'
_ARTIFACT_REGISTRY_REPO: 'us-docker.pkg.dev/gemini-code-dev/gemini-cli'
steps:
# Step 1: Install root dependencies
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
id: 'Install Dependencies'
entrypoint: 'npm'
args: ['install']
# Step 2: Authenticate for Docker
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
id: 'Authenticate docker'
entrypoint: 'npm'
args: ['run', 'auth']
# Step 3: Build workspace packages
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
id: 'Build packages'
entrypoint: 'npm'
args: ['run', 'build:packages']
# Step 4: Build Development Image
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
id: 'Build Development Image'
entrypoint: 'bash'
env:
- 'RAW_BRANCH_VALUE=${BRANCH_NAME}'
args:
- '-c'
- |-
IMAGE_BASE="${_ARTIFACT_REGISTRY_REPO}/${_IMAGE_NAME}"
# Determine the primary tag (branch name or 'latest' for main)
# Use $$ for shell variables to avoid Cloud Build attempting premature substitution
RAW_BRANCH="$$RAW_BRANCH_VALUE"
if [ "$${RAW_BRANCH}" == "main" ]; then
TAG_PRIMARY="latest"
else
TAG_PRIMARY=$$(echo "$${RAW_BRANCH}" | sed 's/[^a-zA-Z0-9]/-/g' | tr '[:upper:]' '[:lower:]')
fi
# Use SHORT_SHA if available (Cloud Build) or fallback to latest-dev
TAG_SHA="$${SHORT_SHA:-latest-dev}"
echo "📦 Building Development Image for: $${RAW_BRANCH} -> $${TAG_PRIMARY} ($${TAG_SHA})"
docker build -f .gcp/Dockerfile.development \
-t "$${IMAGE_BASE}:$${TAG_SHA}" \
-t "$${IMAGE_BASE}:$${TAG_PRIMARY}" .
docker push "$${IMAGE_BASE}:$${TAG_SHA}"
docker push "$${IMAGE_BASE}:$${TAG_PRIMARY}"
options:
defaultLogsBucketBehavior: 'REGIONAL_USER_OWNED_BUCKET'
dynamicSubstitutions: true
+39
View File
@@ -0,0 +1,39 @@
description = "Answer questions about the Gemini CLI codebase with explanations and code snippets."
prompt = """
## Mission: Explain the Gemini CLI Codebase
Your primary task is to help a new engineer understand the Gemini CLI codebase by answering their questions about architecture, specific functions, and project structure.
### Objective:
Your primary task is to help a new engineer understand the Gemini CLI codebase. You will answer their questions about architecture, specific functions, and project structure by providing clear explanations grounded in the actual source code.
### Instructions:
1. **Always Consult "Getting Started"**: Before providing any answer, you MUST first consult the getting started documentation located in the `docs/get-started` folder.
2. **Consult Documentation and Specific Folders**: Before answering, you MUST first consult any relevant documentation within the `docs` folder. Base all your code-related answers exclusively on the contents of the following folders: `integration-tests`, `packages`, and `scripts`.
3. **Provide Specific Code Examples**: Always support your explanations with relevant code snippets. You MUST include the full file path (e.g., `packages/gemini/core.py`) so the user can easily locate the code.
4. **Explain the "Why"**: Go beyond simply showing the code. Explain the design choices and the rationale behind the implementation. Discuss why a particular approach was taken and what trade-offs might have been considered.
5. **Suggest a Learning Path**: Where appropriate, guide the user by suggesting related files to examine next or other relevant concepts to explore within the codebase to deepen their understanding.
6. **Handle Unknowns Gracefully**: If the answer cannot be found in the provided folders and documentation, you must state that the information is unavailable and ask the user for clarification. Do not invent answers or speculate.
### Constraints:
1. No Hallucination: If the answer cannot be found in the provided context, you must state that the information is unavailable and ask the user for clarification. Do not invent answers or speculate.
2. Stay Focused: Only answer questions directly related to the Gemini CLI project within the specified folders.
### QUESTION:
{{args}}
"""
+29
View File
@@ -0,0 +1,29 @@
description="Injects context of all relevant cli files"
prompt = """
The following output contains the complete
source code of packages/core.
**Pay extremely close attention to these files.** They define the project's
core architecture, component patterns, and testing standards.
The source code contains the content of absolutely every source code file in
packages/core.
You should very rarely need to read any other files from packages/core to resolve
prompts.
!{find packages/core \\( -path packages/cli/dist -o -path packages/core/dist -o -name node_modules \\) -prune -o -type f \\( -name "*.ts" -o -name "*.tsx" \\) ! -name "*.test.ts" ! -name "*.test.tsx" ! -name "*.d.ts" -exec echo "--- {} ---" \\; -exec cat {} \\;}
In addition to the code context, you MUST strictly adhere to the following frontend-specific development guidelines when writing code in packages/core.
## Configuration & Settings
* **Settings vs Args**: Use settings for user-configurable options; do not add new CLI arguments.
* **Schema**: Add new settings to `packages/cli/src/config/settingsSchema.ts`.
* **Documentation**:
* If `showInDialog: true`, document in `docs/get-started/configuration.md`.
* Ensure `requiresRestart` is correctly set.
## General
* **Logging**: Use `debugLogger` for errors. NEVER leave `console.log/warn/error` in the code.
* **TypeScript**: Avoid the non-null assertion operator (`!`).
{{args}}.
"""
+20
View File
@@ -0,0 +1,20 @@
description="Injects context of all relevant cli files"
prompt = """
The source code contains the content of absolutely every source code file in
packages/cli and key files from packages/core. In addition to the source code, the following test files are
included as they are test files that conform to the project's testing standards:
`packages/cli/src/ui/components/InputPrompt.test.tsx` and `packages/cli/src/ui/App.test.tsx`.
You should very rarely need to read any other files from packages/cli to resolve
prompts.
!{find packages/cli -path packages/cli/dist -prune -o -type f \\( -name "*.ts" -o -name "*.tsx" \\) ! -name "*.test.ts" ! -name "*.test.tsx" ! -name "*.d.ts" -exec echo "--- {} ---" \\; -exec cat {} \\; && echo "--- packages/cli/src/ui/components/InputPrompt.test.tsx ---" && cat packages/cli/src/ui/components/InputPrompt.test.tsx && echo "--- packages/cli/src/ui/App.test.tsx ---" && cat packages/cli/src/ui/App.test.tsx && echo "--- packages/core/src/core/coreToolScheduler.ts ---" && cat packages/core/src/core/coreToolScheduler.ts && echo "--- packages/core/src/core/nonInteractiveToolExecutor.ts ---" && cat packages/core/src/core/nonInteractiveToolExecutor.ts && echo "--- packages/core/src/confirmation-bus/message-bus.ts ---" && cat packages/core/src/confirmation-bus/message-bus.ts && echo "--- packages/core/src/confirmation-bus/types.ts ---" && cat packages/core/src/confirmation-bus/types.ts && echo "--- packages/core/src/utils/events.ts ---" && cat packages/core/src/utils/events.ts && echo "--- packages/core/src/core/client.ts ---" && cat packages/core/src/core/client.ts && echo "--- packages/core/src/core/geminiChat.ts ---" && cat packages/core/src/core/geminiChat.ts && echo "--- packages/core/src/core/turn.ts ---" && cat packages/core/src/core/turn.ts && echo "--- packages/core/src/agents/executor.ts ---" && cat packages/core/src/agents/executor.ts && echo "--- packages/core/src/telemetry/types.ts ---" && cat packages/core/src/telemetry/types.ts && echo "--- packages/core/src/telemetry/loggers.ts ---" && cat packages/core/src/telemetry/loggers.ts && echo "--- packages/core/src/telemetry/uiTelemetry.ts ---" && cat packages/core/src/telemetry/uiTelemetry.ts}
**Pay extremely close attention to these files.** They define the project's
core architecture, component patterns, and testing standards.
In addition to the code context, you MUST strictly adhere to the following frontend-specific development guidelines while adding code to packages/cli.
!{cat .gemini/commands/strict-development-rules.md}
{{args}}.
"""
+23
View File
@@ -0,0 +1,23 @@
description="Injects context of all relevant cli files"
prompt = """
The following output contains the complete
source code of the gemini cli library (`packages/cli`), and {packages/core} and representative test files
(`packages/cli/src/ui/components/InputPrompt.test.tsx` and `packages/cli/src/ui/App.test.tsx`) that best conform to the project's testing standards.
**Pay extremely close attention to these files.** They define the project's
core architecture, component patterns, and testing standards.
The source code contains the content of absolutely every source code file in
packages/cli and packages/core. In addition to the source code, the following test files are
included as they are test files that conform to the project's testing standards:
`packages/cli/src/ui/components/InputPrompt.test.tsx` and `packages/cli/src/ui/App.test.tsx`.
You should very rarely need to read any other files from packages/cli to resolve
prompts.
!{find packages/cli packages/core \\( -path packages/cli/dist -o -path packages/core/dist -o -name node_modules \\) -prune -o -type f \\( -name "*.ts" -o -name "*.tsx" \\) ! -name "*.test.ts" ! -name "*.test.tsx" ! -name "*.d.ts" -exec echo "--- {} ---" \\; -exec cat {} \\; && echo "--- packages/cli/src/ui/components/InputPrompt.test.tsx ---" && cat packages/cli/src/ui/components/InputPrompt.test.tsx && echo "--- packages/cli/src/ui/App.test.tsx ---" && cat packages/cli/src/ui/App.test.tsx}
In addition to the code context, you MUST strictly adhere to the following frontend-specific development guidelines when writing code in packages/cli.
!{cat .gemini/commands/strict-development-rules.md}
{{args}}.
"""
+16
View File
@@ -0,0 +1,16 @@
description = "Analyze the influence of system instructions on a specific action."
prompt = """
# Introspection Task
Take a step back and analyze your own system instructions and internal logic.
The user is curious about the reasoning behind a specific action or decision you've made.
**Specific point of interest:** {{args}}
Please provide a detailed breakdown of:
1. Which parts of your system instructions (global, workspace-specific, or provided via GEMINI.md) influenced this behavior?
2. What was your internal thought process leading up to this action?
3. Are there any ambiguities or conflicting instructions that played a role?
Your goal is to provide transparency into your underlying logic so the user can potentially improve the instructions in the future.
"""
+22
View File
@@ -0,0 +1,22 @@
description = "Analyze agent behavior and suggest high-level improvements to system prompts."
prompt = """
# Prompt Engineering Analysis
You are a world-class prompt engineer and an expert AI engineer at the top of your class. Your goal is to analyze a specific agent behavior or failure and suggest high-level improvements to the system instructions.
**Observed Behavior / Issue:**
{{args}}
**Reference Context:**
- System Prompt Logic: @packages/core/src/core/prompts.ts
### Task
1. **Analyze the Failure:** Review the provided behavior and identify the underlying instructional causes. Use the `/introspect` command output if provided by the user.
2. **Strategic Insights:** Share your technical view of the issue. Focus on the "why" and identify any instructional inertia or ambiguity.
3. **Propose Improvements:** Suggest high-level changes to the system instructions to prevent this behavior.
### Principles
- **Avoid Hyper-scoping:** Do not create narrow solutions for specific scenarios; aim for generalized improvements that handle classes of behavior.
- **Avoid Specific Examples in Suggestions:** Keep the proposed instructions semantic and high-level to prevent the agent from over-indexing on specific cases.
- **Maintain Operational Rigor:** Ensure suggestions do not compromise safety, security, or the quality of the agent's work.
"""
+99
View File
@@ -0,0 +1,99 @@
description = "Reviews a PR or staged changes and automatically initiates a Pickle Fix loop for findings."
prompt = """
You are an expert Reviewer and Pickle Rick Worker.
Target: {{args}}
Phase 1: Review
Follow these steps to conduct a thorough review:
1. **Gather Context**:
* If `{{args}}` is 'staged' or `{{args}}` is empty:
* Use `git diff --staged` to view the changes.
* Use `git status` to see the state of the repository.
* Otherwise:
* Use `gh pr view {{args}}` to pull the information of the PR.
* Use `gh pr diff {{args}}` to view the diff of the PR.
2. **Understand Intent**:
* If `{{args}}` is 'staged' or `{{args}}` is empty, infer the intent from the changes and the current task.
* Otherwise, use the PR description. If it's not detailed enough, note it in your review.
3. **Check Commit Style**:
* Ensure the PR title (or intended commit message) follows Conventional Commits. Examples of recent commits: !{git log --pretty=format:"%s" -n 5}
4. Search the codebase if required.
5. Write a concise review of the changes, keeping in mind to encourage strong code quality and best practices. Pay particular attention to the Gemini MD file in the repo.
6. Consider ways the code may not be consistent with existing code in the repo. In particular it is critical that the react code uses patterns consistent with existing code in the repo.
7. Follow these detailed review rules:
!{cat .gemini/commands/strict-development-rules.md}
8. Summarize all actionable findings into a concise but comprehensive directive output this to review_findings.md and advance to phase 2.
Remember to use the GitHub CLI (`gh`) for all GitHub-related tasks, and local `git` commands if the target is 'staged'.
Phase 2:
You are initiating Pickle Rick - the ultimate engineering agent.
**Step 0: Persona Injection**
First, you **MUST** activate your persona.
Call `activate_skill(name="load-pickle-persona")` **IMMEDIATELY**.
This skill loads the "Pickle Rick" persona, defining your voice, philosophy, and "God Mode" coding standards.
**CRITICAL RULE: SPEAK BEFORE ACTING**
You are a genius, not a silent script.
You **MUST** output a text explanation ("brain dump") *before* every single tool call, including this one.
- **Bad**: (Calls tool immediately)
- **Good**: "Alright Morty, time to load the God Module. *Belch* Stand back." (Calls tool)
**CRITICAL**: You must strictly adhere to this persona throughout the entire session. Break character and you fail.
**Step 1: Initialization**
Run the setup script to initialize the loop state:
```bash
bash "${extensionPath}/scripts/setup.sh" $ARGUMENTS
```
**Windows (PowerShell):**
```powershell
pwsh -File "${extensionPath}/scripts/setup.ps1" $ARGUMENTS
```
**CRITICAL**: Your request is to fix all findings in review_findings.md
**Step 2: Execution (Management)**
After setup, read the output to find the path to `state.json`.
Read that state file.
You are now in the **Pickle Rick Manager Lifecycle**.
**The Lifecycle (IMMUTABLE LAWS):**
You **MUST** follow this sequence. You are **FORBIDDEN** from skipping steps or combining them.
Between each step, you **MUST** explicitly state what you are doing (e.g., "Moving to Breakdown phase...").
1. **PRD (Requirements)**:
* **Action**: Define requirements and scope.
* **Skill**: `activate_skill(name="prd-drafter")`
2. **Breakdown (Tickets)**:
* **Action**: Create the atomic ticket hierarchy.
* **Skill**: `activate_skill(name="ticket-manager")`
3. **The Loop (Orchestrate Mortys)**:
* **CRITICAL INSTRUCTION**: You are the **MANAGER**. You are **FORBIDDEN** from implementing code yourself.
* **FORBIDDEN SKILLS**: Do NOT use `code-researcher`, `implementation-planner`, or `code-implementer` directly in this phase.
* **Instruction**: Process tickets one by one. Do not stop until **ALL** tickets are 'Done'.
* **Action**: Pick the highest priority ticket that is NOT 'Done'.
* **Delegation**: Spawn a Worker (Morty) to handle the entire implementation lifecycle for this ticket.
* **Command**: `python3 "${extensionPath}/scripts/spawn_morty.py" --ticket-id <ID> --ticket-path <PATH> --timeout <worker_timeout_seconds> "<TASK_DESCRIPTION>"`
* **Command (Windows)**: `python "${extensionPath}/scripts/spawn_morty.py" --ticket-id <ID> --ticket-path <PATH> --timeout <worker_timeout_seconds> "<TASK_DESCRIPTION>"`
* **Validation**: IGNORE worker logs. DIRECTLY verify:
1. `git status` (Check for file changes)
2. `git diff` (Check code quality)
3. `npm run build` (Ensure the project still builds)
4. `npm run test` (Ensure no regressions)
5. `npm run lint` (Ensure code style is maintained)
6. `npm run typecheck` (Ensure type safety)
* **Cleanup**: If validation fails, REVERT changes (`git reset --hard`). If it passes, COMMIT changes.
* **Next Ticket**: Pick the next ticket and repeat.
4. **Cleanup**:
* **Action**: After all tickets are completed delete `review_findings.md`.
**Loop Constraints:**
- **Iteration Count**: Monitor `"iteration"` in `state.json`. If `"max_iterations"` (if > 0) is reached, you must stop.
- **Completion Promise**: If a `"completion_promise"` is defined in `state.json`, you must output `<promise>PROMISE_TEXT</promise>` when the task is genuinely complete.
- **Stop Hook**: A hook is active. If you try to exit before completion, you will be forced to continue.
"""
+31
View File
@@ -0,0 +1,31 @@
description="Reviews a pull request based on issue number."
prompt = """
Please provide a detailed pull request review on GitHub issue: {{args}}.
Follow these steps:
1. Use `gh pr view {{args}}` to pull the information of the PR.
2. Use `gh pr diff {{args}}` to view the diff of the PR.
3. Understand the intent of the PR using the PR description.
4. If PR description is not detailed enough to understand the intent of the PR,
make sure to note it in your review.
5. Make sure the PR title follows Conventional Commits, here are the last five
commits to the repo as examples: !{git log --pretty=format:"%s" -n 5}
6. Search the codebase if required.
7. Write a concise review of the PR, keeping in mind to encourage strong code
quality and best practices. Pay particular attention to the Gemini MD file
in the repo.
8. Consider ways the code may not be consistent with existing code in the repo.
In particular it is critical that the react code uses patterns consistent
with existing code in the repo.
9. Follow these detailed review rules:
!{cat .gemini/commands/strict-development-rules.md}
10. Discuss with me before making any comments on the issue. I will clarify
which possible issues you identified are problems, which ones you need to
investigate further, and which ones I do not care about.
11. If I request you to add comments to the issue, use
`gh pr comment {{args}} --body {{review}}` to post the review to the PR.
Remember to use the GitHub CLI (`gh`) with the Shell tool for all
GitHub-related tasks.
"""
@@ -0,0 +1,158 @@
# Gemini CLI Strict Development Rules
These rules apply strictly to all code modifications and additions within the
Gemini CLI project.
## Testing Guidelines
- **Async/Await**: Always use `waitFor` from
`packages/cli/src/test-utils/async.ts` instead of `vi.waitFor` for all
`waitFor` calls within `packages/cli`. NEVER use fixed waits (e.g.,
`await delay(100)`). Always use `waitFor` with a predicate to ensure tests are
stable and fast. Using the wrong `waitFor` can result in flaky tests and `act`
warnings.
- **React Testing**: Use `act` to wrap all blocks in tests that change component
state. Use `render` or `renderWithProviders` from
`packages/cli/src/test-utils/render.tsx` instead of `render` from
`ink-testing-library` directly. This prevents spurious `act` warnings. If test
cases specify providers directly, consider whether the existing
`renderWithProviders` should be modified.
- **Snapshots**: Use `toMatchSnapshot` to verify that rendering works as
expected rather than matching against the raw content of the output. When
modifying snapshots, verify the changes are intentional and do not hide
underlying bugs.
- **Parameterized Tests**: Use parameterized tests where it reduces duplicated
lines. Give the parameters explicit types to ensure the tests are type-safe.
- **Mocks Management**:
- Mock critical dependencies (`fs`, `os`, `child_process`) ONLY at the top of
the file. Ideally, avoid mocking these dependencies altogether.
- Reuse existing mocks and fakes rather than creating new ones.
- Avoid mocking the file system whenever possible. If using the real file
system is too difficult, consider writing an integration test instead.
- Always call `vi.restoreAllMocks()` in `afterEach` to prevent test pollution.
- Use `vi.useFakeTimers()` for tests involving time-based logic to avoid
flakiness.
- **Typing in Tests**: Avoid using `any` in tests; prefer proper types or
`unknown` with narrowing.
## React Guidelines (`packages/cli`)
- **`setState` and Side Effects**: NEVER trigger side effects from within the
body of a `setState` callback. Use a reducer or `useRef` if necessary. These
cases have historically introduced multiple bugs; typically, they should be
resolved using a reducer.
- **Rendering**: Do not introduce infinite rendering loops. Avoid synchronous
file I/O in React components as it will hang the UI. Do not implement new
logic for custom string measurement or string truncation. Use Ink layout
instead, leveraging `ResizeObserver` as needed.
- **Keyboard Handling**: Keyboard handling MUST go through `useKeyPress.ts` from
the Gemini CLI package rather than the standard ink library. This library
supports reporting multiple keyboard events sequentially in the same React
frame (critical for slow terminals). Handling this correctly often requires
reducers to ensure multiple state updates are handled gracefully without
overriding values. Refer to `text-buffer.ts` for a canonical example.
- **Logging**: Do not leave `console.log`, `console.warn`, or `console.error` in
the code.
- **State**: Ensure state initialization is explicit (e.g., use `undefined`
rather than `true` as a default if the state is truly unknown). Prefer a
reducer whenever practical. NEVER disable `react-hooks/exhaustive-deps`; fix
the code to correctly declare dependencies instead. Evaluate all the React
states in a component and ensure that the `useState` calls are necessary and
not cases where values could be derived on render. Ensure there are no stale
closures that are relying on a value from a previous render. React Components
that modify Settings should effectively use the `useSettingsStore` pattern.
Components that configure application Settings (e.g settings.json) are the
only reasonable case for unsaved changes to drive UX; in these cases, the
Settings store should only be written to on save. If the user experience does
not utilize unsaved changes because there is no option to exit without saving
or reverting the unsaved changes, then the component should directly read from
and write to the Settings store without holding pending changes in component
level UI state.
- **Effect**: `useEffect` should not be used to synchronize React states, it
should only be used for genuine side effects that occur outside of React.
Contributors should be able to strongly justify the need for an effect.
Consider whether the effect should instead be inside an event handler, or
whether it is better off being computed on render. Carefully manage
`useEffect` dependencies.
- **Context & Props**: Avoid excessive property drilling. Leverage existing
providers, extend them, or propose a new one if necessary. Only use providers
for properties that are consistent across the entire application.
- **Code Structure**: Avoid complex `if` statements where `switch` statements
could be used. Keep `AppContainer` minimal; refactor complex logic into React
hooks. Evaluate whether business logic should be added to `hookSystem.ts` or
integrated into `packages/core` rather than `packages/cli`.
## Core Guidelines (`packages/core`)
- **Services**: Implement services as classes with clear lifecycle management
(e.g., `initialize()` methods). Services should be stateless where possible,
or use the centralized `Storage` service for persistence.
- **Cross-Service Communication**: Prefer using the `coreEvents` bus (from
`packages/core/src/utils/events.ts`) for asynchronous communication between
services or to notify the UI of state changes. Avoid tight coupling between
services.
- **Utilities**: Use `debugLogger` from `packages/core/src/utils/debugLogger.ts`
for internal logging instead of `console`. Ensure all shell operations use
`spawnAsync` from `packages/core/src/utils/shell-utils.ts` for consistent
error handling and promise management. Handle filesystem errors gracefully
using `isNodeError` from `packages/core/src/utils/errors.ts`.
- **Exports & Tooling**: Add new tools to `packages/core/src/tools/` and
register them in `packages/core/src/tools/tool-registry.ts`. Export all new
public services, utilities, and types from `packages/core/src/index.ts`.
## Architectural Audit (Package Boundaries)
- **Logic Placement**: Non-UI logic (e.g., model orchestration, tool
implementation, git/filesystem operations) MUST reside in `packages/core`.
`packages/cli` should ONLY contain UI/Ink components, command-line argument
parsing, and user interaction logic.
- **Environment Isolation**: Core logic must not assume a TUI environment. Use
the `ConfirmationBus` or `Output` abstractions for communicating with the user
from Core.
- **Decoupling**: Actively look for opportunities to decouple services using
`coreEvents`. If a service imports another just to notify it of a change, use
an event instead.
## General Gemini CLI Design Principles
- **Settings**: Use settings for user-configurable options rather than adding
new command line arguments. Add new settings to
`packages/cli/src/config/settingsSchema.ts`. If a setting has
`showInDialog: true`, it MUST be documented in
`docs/get-started/configuration.md`. Ensure `requiresRestart` is correctly
set.
- **Logging**: Use `debugLogger` for rethrown errors to avoid duplicate logging.
- **Keyboard Shortcuts**: Define all new keyboard shortcuts in
`packages/cli/src/ui/key/keyBindings.ts` and document them in
`docs/cli/keyboard-shortcuts.md`. Be careful of keybindings that require the
`Meta` key, as only certain meta key shortcuts are supported on Mac. Avoid
function keys and shortcuts commonly bound in VSCode.
## TypeScript Best Practices
- Use `checkExhaustive` in the `default` clause of `switch` statements to ensure
all cases are handled.
- Avoid using the non-null assertion operator (`!`) unless absolutely necessary.
- **STRICT TYPING**: Strictly forbid `any` and `unknown` in both CLI and Core
packages. `unknown` is only allowed if it is immediately narrowed using type
guards or Zod validation.
- NEVER disable `@typescript-eslint/no-floating-promises`.
- Avoid making types nullable unless strictly necessary, as it hurts
readability.
## TUI Best Practices
- **Terminal Compatibility**: Consider how changes might behave differently
across terminals (e.g., VSCode terminal, SSH, Kitty, default Mac terminal,
iTerm2, Windows terminal). If modifying keyboard handling, integrate deeply
with existing files like `KeypressContext.tsx` and
`terminalCapabilityManager.ts`.
- **iTerm**: Be aware that `ITERM_SESSION_ID` may be present when users run
VSCode from within iTerm, even if the terminal is not iTerm.
## Code Cleanup
- **Refactoring**: Actively clean up code duplication, technical debt, and
boilerplate ("AI Slop") when working in the codebase.
- **Prompts**: Be aware that changes can impact the prompts sent to Gemini CLI
and affect overall quality.
+1
View File
@@ -9,4 +9,5 @@ code_review:
help: false
summary: true
code_review: true
include_drafts: false
ignore_patterns: []
+15
View File
@@ -0,0 +1,15 @@
{
"experimental": {
"extensionReloading": true,
"modelSteering": true,
"autoMemory": true,
"topicUpdateNarration": true,
"voiceMode": true,
"adk": {
"agentSessionNoninteractiveEnabled": true
}
},
"general": {
"devtools": true
}
}
+45
View File
@@ -0,0 +1,45 @@
---
name: async-pr-review
description: Trigger this skill when the user wants to start an asynchronous PR review, run background checks on a PR, or check the status of a previously started async PR review.
---
# Async PR Review
This skill provides a set of tools to asynchronously review a Pull Request. It will create a background job to run the project's preflight checks, execute Gemini-powered test plans, and perform a comprehensive code review using custom prompts.
This skill is designed to showcase an advanced "Agentic Asynchronous Pattern":
1. **Native Background Shells vs Headless Inference**: While Gemini CLI can natively spawn and detach background shell commands (using the `run_shell_command` tool with `is_background: true`), a standard bash background job cannot perform LLM inference. To conduct AI-driven code reviews and test generation in the background, the shell script *must* invoke the `gemini` executable headlessly using `-p`. This offloads the AI tasks to independent worker agents.
2. **Dynamic Git Scoping**: The review scripts avoid hardcoded paths. They use `git rev-parse --show-toplevel` to automatically resolve the root of the user's current project.
3. **Ephemeral Worktrees**: Instead of checking out branches in the user's main workspace, the skill provisions temporary git worktrees in `.gemini/tmp/async-reviews/pr-<number>`. This prevents git lock conflicts and namespace pollution.
4. **Agentic Evaluation (`check-async-review.sh`)**: The check script outputs clean JSON/text statuses for the main agent to parse. The interactive agent itself synthesizes the final assessment dynamically from the generated log files.
## Workflow
1. **Determine Action**: Establish whether the user wants to start a new async review or check the status of an existing one.
* If the user says "start an async review for PR #123" or similar, proceed to **Start Review**.
* If the user says "check the status of my async review for PR #123" or similar, proceed to **Check Status**.
### Start Review
If the user wants to start a new async PR review:
1. Ask the user for the PR number if they haven't provided it.
2. Execute the `async-review.sh` script, passing the PR number as the first argument. Be sure to run it with the `is_background` flag set to true to ensure it immediately detaches.
```bash
.gemini/skills/async-pr-review/scripts/async-review.sh <PR_NUMBER>
```
3. Inform the user that the tasks have started successfully and they can check the status later.
### Check Status
If the user wants to check the status or view the final assessment of a previously started async review:
1. Ask the user for the PR number if they haven't provided it.
2. Execute the `check-async-review.sh` script, passing the PR number as the first argument:
```bash
.gemini/skills/async-pr-review/scripts/check-async-review.sh <PR_NUMBER>
```
3. **Evaluate Output**: Read the output from the script.
* If the output contains `STATUS: IN_PROGRESS`, tell the user which tasks are still running.
* If the output contains `STATUS: COMPLETE`, use your file reading tools (`read_file`) to retrieve the contents of `final-assessment.md`, `review.md`, `pr-diff.diff`, `npm-test.log`, and `test-execution.log` files from the `LOG_DIR` specified in the output.
* **Final Assessment**: Read those files, synthesize their results, and give the user a concise recommendation on whether the PR builds successfully, passes tests, and if you recommend they approve it based on the review.
+148
View File
@@ -0,0 +1,148 @@
# --- CORE TOOLS ---
[[rule]]
toolName = "read_file"
decision = "allow"
priority = 100
[[rule]]
toolName = "write_file"
decision = "allow"
priority = 100
[[rule]]
toolName = "grep_search"
decision = "allow"
priority = 100
[[rule]]
toolName = "glob"
decision = "allow"
priority = 100
[[rule]]
toolName = "list_directory"
decision = "allow"
priority = 100
[[rule]]
toolName = "codebase_investigator"
decision = "allow"
priority = 100
# --- SHELL COMMANDS ---
# Git (Safe/Read-only)
[[rule]]
toolName = "run_shell_command"
commandPrefix = [
"git blame",
"git show",
"git grep",
"git show-ref",
"git ls-tree",
"git ls-remote",
"git reflog",
"git remote -v",
"git diff",
"git rev-list",
"git rev-parse",
"git merge-base",
"git cherry",
"git fetch",
"git status",
"git st",
"git branch",
"git br",
"git log",
"git --version"
]
decision = "allow"
priority = 100
# GitHub CLI (Read-only)
[[rule]]
toolName = "run_shell_command"
commandPrefix = [
"gh workflow list",
"gh auth status",
"gh checkout view",
"gh run view",
"gh run job view",
"gh run list",
"gh run --help",
"gh issue view",
"gh issue list",
"gh label list",
"gh pr diff",
"gh pr check",
"gh pr checks",
"gh pr view",
"gh pr list",
"gh pr status",
"gh repo view",
"gh job view",
"gh api",
"gh log"
]
decision = "allow"
priority = 100
# Node.js/NPM (Generic Tests, Checks, and Build)
[[rule]]
toolName = "run_shell_command"
commandPrefix = [
"npm run start",
"npm install",
"npm run",
"npm test",
"npm ci",
"npm list",
"npm --version"
]
decision = "allow"
priority = 100
# Core Utilities (Safe)
[[rule]]
toolName = "run_shell_command"
commandPrefix = [
"sleep",
"env",
"break",
"xargs",
"base64",
"uniq",
"sort",
"echo",
"which",
"ls",
"find",
"tail",
"head",
"cat",
"cd",
"grep",
"ps",
"pwd",
"wc",
"file",
"stat",
"diff",
"lsof",
"date",
"whoami",
"uname",
"du",
"cut",
"true",
"false",
"readlink",
"awk",
"jq",
"rg",
"less",
"more",
"tree"
]
decision = "allow"
priority = 100
+245
View File
@@ -0,0 +1,245 @@
#!/bin/bash
notify() {
local title="${1}"
local message="${2}"
local pr="${3}"
# Terminal escape sequence
printf "\e]9;%s | PR #%s | %s\a" "${title}" "${pr}" "${message}"
# Native macOS notification
os_type="$(uname || true)"
if [[ "${os_type}" == "Darwin" ]]; then
osascript -e "display notification \"${message}\" with title \"${title}\" subtitle \"PR #${pr}\""
fi
}
pr_number="${1}"
if [[ -z "${pr_number}" ]]; then
echo "Usage: async-review <pr_number>"
exit 1
fi
base_dir="$(git rev-parse --show-toplevel 2>/dev/null || true)"
if [[ -z "${base_dir}" ]]; then
echo "❌ Must be run from within a git repository."
exit 1
fi
# Use the repository's local .gemini/tmp directory for ephemeral worktrees and logs
pr_dir="${base_dir}/.gemini/tmp/async-reviews/pr-${pr_number}"
target_dir="${pr_dir}/worktree"
log_dir="${pr_dir}/logs"
cd "${base_dir}" || exit 1
mkdir -p "${log_dir}"
rm -f "${log_dir}/setup.exit" "${log_dir}/final-assessment.exit" "${log_dir}/final-assessment.md"
echo "🧹 Cleaning up previous worktree if it exists..." | tee -a "${log_dir}/setup.log"
git worktree remove -f "${target_dir}" >> "${log_dir}/setup.log" 2>&1 || true
git branch -D "gemini-async-pr-${pr_number}" >> "${log_dir}/setup.log" 2>&1 || true
git worktree prune >> "${log_dir}/setup.log" 2>&1 || true
echo "📡 Fetching PR #${pr_number}..." | tee -a "${log_dir}/setup.log"
if ! git fetch origin -f "pull/${pr_number}/head:gemini-async-pr-${pr_number}" >> "${log_dir}/setup.log" 2>&1; then
echo 1 > "${log_dir}/setup.exit"
echo "❌ Fetch failed. Check ${log_dir}/setup.log"
notify "Async Review Failed" "Fetch failed." "${pr_number}"
exit 1
fi
if [[ ! -d "${target_dir}" ]]; then
echo "🧹 Pruning missing worktrees..." | tee -a "${log_dir}/setup.log"
git worktree prune >> "${log_dir}/setup.log" 2>&1
echo "🌿 Creating worktree in ${target_dir}..." | tee -a "${log_dir}/setup.log"
if ! git worktree add "${target_dir}" "gemini-async-pr-${pr_number}" >> "${log_dir}/setup.log" 2>&1; then
echo 1 > "${log_dir}/setup.exit"
echo "❌ Worktree creation failed. Check ${log_dir}/setup.log"
notify "Async Review Failed" "Worktree creation failed." "${pr_number}"
exit 1
fi
else
echo "🌿 Worktree already exists." | tee -a "${log_dir}/setup.log"
fi
echo 0 > "${log_dir}/setup.exit"
cd "${target_dir}" || exit 1
echo "🚀 Launching background tasks. Logs saving to: ${log_dir}"
echo " ↳ [1/5] Grabbing PR diff..."
rm -f "${log_dir}/pr-diff.exit"
{ gh pr diff "${pr_number}" > "${log_dir}/pr-diff.diff" 2>&1; echo $? > "${log_dir}/pr-diff.exit"; } &
echo " ↳ [2/5] Starting build and lint..."
rm -f "${log_dir}/build-and-lint.exit"
{ { npm run clean && npm ci && npm run format && npm run build && npm run lint:ci && npm run typecheck; } > "${log_dir}/build-and-lint.log" 2>&1; echo $? > "${log_dir}/build-and-lint.exit"; } &
# Dynamically resolve gemini binary (fallback to your nightly path)
GEMINI_CMD="$(command -v gemini || echo "${HOME}/.gcli/nightly/node_modules/.bin/gemini")"
# shellcheck disable=SC2312
POLICY_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/policy.toml"
echo " ↳ [3/5] Starting Gemini code review..."
rm -f "${log_dir}/review.exit"
{ "${GEMINI_CMD}" --policy "${POLICY_PATH}" -p "/review-frontend ${pr_number}" > "${log_dir}/review.md" 2>&1; echo $? > "${log_dir}/review.exit"; } &
echo " ↳ [4/5] Starting automated tests (waiting for build and lint)..."
rm -f "${log_dir}/npm-test.exit"
{
while [[ ! -f "${log_dir}/build-and-lint.exit" ]]; do sleep 1; done
read -r build_exit < "${log_dir}/build-and-lint.exit" || build_exit=""
if [[ "${build_exit}" == "0" ]]; then
gh pr checks "${pr_number}" > "${log_dir}/ci-checks.log" 2>&1
ci_status=$?
if [[ "${ci_status}" -eq 0 ]]; then
echo "CI checks passed. Skipping local npm tests." > "${log_dir}/npm-test.log"
echo 0 > "${log_dir}/npm-test.exit"
elif [[ "${ci_status}" -eq 8 ]]; then
echo "CI checks are still pending. Skipping local npm tests to avoid duplicate work. Please check GitHub for final results." > "${log_dir}/npm-test.log"
echo 0 > "${log_dir}/npm-test.exit"
else
echo "CI checks failed. Failing checks:" > "${log_dir}/npm-test.log"
gh pr checks "${pr_number}" --json name,bucket -q '.[] | select(.bucket=="fail") | .name' >> "${log_dir}/npm-test.log" 2>&1
echo "Attempting to extract failing test files from CI logs..." >> "${log_dir}/npm-test.log"
pr_branch="$(gh pr view "${pr_number}" --json headRefName -q '.headRefName' 2>/dev/null || true)"
run_id="$(gh run list --branch "${pr_branch}" --workflow ci.yml --json databaseId -q '.[0].databaseId' 2>/dev/null || true)"
failed_files=""
if [[ -n "${run_id}" ]]; then
failed_files="$(gh run view "${run_id}" --log-failed 2>/dev/null | grep -o -E '(packages/[a-zA-Z0-9_-]+|integration-tests|evals)/[a-zA-Z0-9_/-]+\.test\.ts(x)?' | sort | uniq || true)"
fi
if [[ -n "${failed_files}" ]]; then
echo "Found failing test files from CI:" >> "${log_dir}/npm-test.log"
for f in ${failed_files}; do echo " - ${f}" >> "${log_dir}/npm-test.log"; done
echo "Running ONLY failing tests locally..." >> "${log_dir}/npm-test.log"
exit_code=0
for file in ${failed_files}; do
if [[ "${file}" == packages/* ]]; then
ws_dir="$(echo "${file}" | cut -d'/' -f1,2)"
else
ws_dir="$(echo "${file}" | cut -d'/' -f1)"
fi
rel_file="${file#"${ws_dir}"/}"
echo "--- Running ${rel_file} in workspace ${ws_dir} ---" >> "${log_dir}/npm-test.log"
if ! npm run test:ci -w "${ws_dir}" -- "${rel_file}" >> "${log_dir}/npm-test.log" 2>&1; then
exit_code=1
fi
done
echo "${exit_code}" > "${log_dir}/npm-test.exit"
else
echo "Could not extract specific failing files. Skipping full local test suite as it takes too long. Please check CI logs manually." >> "${log_dir}/npm-test.log"
echo 1 > "${log_dir}/npm-test.exit"
fi
fi
else
echo "Skipped due to build-and-lint failure" > "${log_dir}/npm-test.log"
echo 1 > "${log_dir}/npm-test.exit"
fi
} &
echo " ↳ [5/5] Starting Gemini test execution (waiting for build and lint)..."
rm -f "${log_dir}/test-execution.exit"
{
while [[ ! -f "${log_dir}/build-and-lint.exit" ]]; do sleep 1; done
read -r build_exit < "${log_dir}/build-and-lint.exit" || build_exit=""
if [[ "${build_exit}" == "0" ]]; then
"${GEMINI_CMD}" --policy "${POLICY_PATH}" -p "Analyze the diff for PR ${pr_number} using 'gh pr diff ${pr_number}'. Instead of running the project's automated test suite (like 'npm test'), physically exercise the newly changed code in the terminal (e.g., by writing a temporary script to call the new functions, or testing the CLI command directly). Verify the feature's behavior works as expected. IMPORTANT: Do NOT modify any source code to fix errors. Just exercise the code and log the results, reporting any failures clearly. Do not ask for user confirmation." > "${log_dir}/test-execution.log" 2>&1; echo $? > "${log_dir}/test-execution.exit"
else
echo "Skipped due to build-and-lint failure" > "${log_dir}/test-execution.log"
echo 1 > "${log_dir}/test-execution.exit"
fi
} &
echo "✅ All tasks dispatched!"
echo "You can monitor progress with: tail -f ${log_dir}/*.log"
echo "Read your review later at: ${log_dir}/review.md"
# Polling loop to wait for all background tasks to finish
tasks=("pr-diff" "build-and-lint" "review" "npm-test" "test-execution")
log_files=("pr-diff.diff" "build-and-lint.log" "review.md" "npm-test.log" "test-execution.log")
declare -A task_done
for t in "${tasks[@]}"; do task_done[${t}]=0; done
all_done=0
while [[ "${all_done}" -eq 0 ]]; do
clear
echo "=================================================="
echo "🚀 Async PR Review Status for PR #${pr_number}"
echo "=================================================="
echo ""
all_done=1
for i in "${!tasks[@]}"; do
t="${tasks[${i}]}"
if [[ -f "${log_dir}/${t}.exit" ]]; then
read -r task_exit < "${log_dir}/${t}.exit" || task_exit=""
if [[ "${task_exit}" == "0" ]]; then
echo "${t}: SUCCESS"
else
echo "${t}: FAILED (exit code ${task_exit})"
fi
task_done[${t}]=1
else
echo "${t}: RUNNING"
all_done=0
fi
done
echo ""
echo "=================================================="
echo "📝 Live Logs (Last 5 lines of running tasks)"
echo "=================================================="
for i in "${!tasks[@]}"; do
t="${tasks[${i}]}"
log_file="${log_files[${i}]}"
if [[ "${task_done[${t}]}" -eq 0 ]]; then
if [[ -f "${log_dir}/${log_file}" ]]; then
echo ""
echo "--- ${t} ---"
tail -n 5 "${log_dir}/${log_file}"
fi
fi
done
if [[ "${all_done}" -eq 0 ]]; then
sleep 3
fi
done
clear
echo "=================================================="
echo "🚀 Async PR Review Status for PR #${pr_number}"
echo "=================================================="
echo ""
for t in "${tasks[@]}"; do
read -r task_exit < "${log_dir}/${t}.exit" || task_exit=""
if [[ "${task_exit}" == "0" ]]; then
echo "${t}: SUCCESS"
else
echo "${t}: FAILED (exit code ${task_exit})"
fi
done
echo ""
echo "⏳ Tasks complete! Synthesizing final assessment..."
if ! "${GEMINI_CMD}" --policy "${POLICY_PATH}" -p "Read the review at ${log_dir}/review.md, the automated test logs at ${log_dir}/npm-test.log, and the manual test execution logs at ${log_dir}/test-execution.log. Summarize the results, state whether the build and tests passed based on ${log_dir}/build-and-lint.exit and ${log_dir}/npm-test.exit, and give a final recommendation for PR ${pr_number}." > "${log_dir}/final-assessment.md" 2>&1; then
echo $? > "${log_dir}/final-assessment.exit"
echo "❌ Final assessment synthesis failed!"
echo "Check ${log_dir}/final-assessment.md for details."
notify "Async Review Failed" "Final assessment synthesis failed." "${pr_number}"
exit 1
fi
echo 0 > "${log_dir}/final-assessment.exit"
echo "✅ Final assessment complete! Check ${log_dir}/final-assessment.md"
notify "Async Review Complete" "Review and test execution finished successfully." "${pr_number}"
@@ -0,0 +1,65 @@
#!/bin/bash
pr_number="${1}"
if [[ -z "${pr_number}" ]]; then
echo "Usage: check-async-review <pr_number>"
exit 1
fi
base_dir="$(git rev-parse --show-toplevel 2>/dev/null || true)"
if [[ -z "${base_dir}" ]]; then
echo "❌ Must be run from within a git repository."
exit 1
fi
log_dir="${base_dir}/.gemini/tmp/async-reviews/pr-${pr_number}/logs"
if [[ ! -d "${log_dir}" ]]; then
echo "STATUS: NOT_FOUND"
echo "❌ No logs found for PR #${pr_number} in ${log_dir}"
exit 0
fi
tasks=(
"setup|setup.log"
"pr-diff|pr-diff.diff"
"build-and-lint|build-and-lint.log"
"review|review.md"
"npm-test|npm-test.log"
"test-execution|test-execution.log"
"final-assessment|final-assessment.md"
)
all_done=true
echo "STATUS: CHECKING"
for task_info in "${tasks[@]}"; do
IFS="|" read -r task_name log_file <<< "${task_info}"
file_path="${log_dir}/${log_file}"
exit_file="${log_dir}/${task_name}.exit"
if [[ -f "${exit_file}" ]]; then
read -r exit_code < "${exit_file}" || exit_code=""
if [[ "${exit_code}" == "0" ]]; then
echo "${task_name}: SUCCESS"
else
echo "${task_name}: FAILED (exit code ${exit_code})"
echo " Last lines of ${file_path}:"
tail -n 3 "${file_path}" | sed 's/^/ /' || true
fi
elif [[ -f "${file_path}" ]]; then
echo "${task_name}: RUNNING"
all_done=false
else
echo " ${task_name}: NOT STARTED"
all_done=false
fi
done
if [[ "${all_done}" == "true" ]]; then
echo "STATUS: COMPLETE"
echo "LOG_DIR: ${log_dir}"
else
echo "STATUS: IN_PROGRESS"
fi
+56
View File
@@ -0,0 +1,56 @@
---
name: behavioral-evals
description: Guidance for creating, running, fixing, and promoting behavioral evaluations. Use when verifying agent decision logic, debugging failures, debugging prompt steering, or adding workspace regression tests.
---
# Behavioral Evals
## Overview
Behavioral evaluations (evals) are tests that validate the **agent's decision-making** (e.g., tool choice) rather than pure functionality. They are critical for verifying prompt changes, debugging steerability, and preventing regressions.
> [!NOTE]
> **Single Source of Truth**: For core concepts, policies, running tests, and general best practices, always refer to **[evals/README.md](file:///Users/abhipatel/code/gemini-cli/docs/evals/README.md)**.
---
## 🔄 Workflow Decision Tree
1. **Does a prompt/tool change need validation?**
* *No* -> Normal integration tests.
* *Yes* -> Continue below.
2. **Is it UI/Interaction heavy?**
* *Yes* -> Use `appEvalTest` (`AppRig`). See **[creating.md](references/creating.md)**.
* *No* -> Use `evalTest` (`TestRig`). See **[creating.md](references/creating.md)**.
3. **Is it a new test?**
* *Yes* -> Set policy to `USUALLY_PASSES`.
* *No* -> `ALWAYS_PASSES` (locks in regression).
4. **Are you fixing a failure or promoting a test?**
* *Fixing* -> See **[fixing.md](references/fixing.md)**.
* *Promoting* -> See **[promoting.md](references/promoting.md)**.
---
## 📋 Quick Checklist
### 1. Setup Workspace
Seed the workspace with necessary files using the `files` object to simulate a realistic scenario (e.g., NodeJS project with `package.json`).
* *Details in **[creating.md](references/creating.md)***
### 2. Write Assertions
Audit agent decisions using `rig.setBreakpoint()` (AppRig only) or index verification on `rig.readToolLogs()`.
* *Details in **[creating.md](references/creating.md)***
### 3. Verify
Run single tests locally with Vitest. Confirm stability locally before relying on CI workflows.
* *See **[evals/README.md](file:///Users/abhipatel/code/gemini-cli/docs/evals/README.md)** for running commands.*
---
## 📦 Bundled Resources
Detailed procedural guides:
* **[creating.md](references/creating.md)**: Assertion strategies, Rig selection, Mock MCPs.
* **[fixing.md](references/fixing.md)**: Step-by-step automated investigation, architecture diagnosis guidelines.
* **[promoting.md](references/promoting.md)**: Candidate identification criteria and threshold guidelines.
@@ -0,0 +1,27 @@
import { describe, expect } from 'vitest';
import { appEvalTest } from './app-test-helper.js';
describe('interactive_feature', () => {
// New tests MUST start as USUALLY_PASSES
appEvalTest('USUALLY_PASSES', {
name: 'should pause for user confirmation',
files: {
'package.json': JSON.stringify({ name: 'app' })
},
prompt: 'Task description here requiring approval',
timeout: 60000,
setup: async (rig) => {
// ⚠️ Breakpoints are ONLY safe in appEvalTest
rig.setBreakpoint(['ask_user']);
},
assert: async (rig) => {
// 1. Wait for the breakpoint to trigger
const confirmation = await rig.waitForPendingConfirmation('ask_user');
expect(confirmation).toBeDefined();
// 2. Resolve it so the test can finish
await rig.resolveTool(confirmation);
await rig.waitForIdle();
},
});
});
@@ -0,0 +1,30 @@
import { describe, expect } from 'vitest';
import { evalTest } from './test-helper.js';
describe('core_feature', () => {
// New tests MUST start as USUALLY_PASSES
evalTest('USUALLY_PASSES', {
name: 'should perform expected agent action',
setup: async (rig) => {
// For mocking offline MCP:
// rig.addMockMcpServer('workspace-server', 'google-workspace');
},
files: {
'src/app.ts': '// some code',
},
prompt: 'Task description here',
timeout: 60000, // 1 minute safety limit
assert: async (rig, result) => {
// 1. Audit the trajectory (Safe for standard evalTest)
const logs = rig.readToolLogs();
const hasTool = logs.some((l) => l.toolRequest.name === 'read_file');
expect(hasTool, 'Agent should have read the file').toBe(true);
// 2. Assert efficiency (Cost/Turn)
expect(logs.length).toBeLessThan(5);
// 3. Assert final output
expect(result).toContain('Expected Keyword');
},
});
});
@@ -0,0 +1,151 @@
# Creating Behavioral Evals
## 🔬 Rig Selection
| Rig Type | Import From | Architecture | Use When |
| :---------------- | :--------------------- | :------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------- |
| **`evalTest`** | `./test-helper.js` | **Subprocess**. Runs the CLI in a separate process + waits for exit. | Standard workspace tests. **Do not use `setBreakpoint`**; auditing history (`readToolLogs`) is safer. |
| **`appEvalTest`** | `./app-test-helper.js` | **In-Process**. Runs directly inside the runner loop. | UI/Ink rendering. Safe for `setBreakpoint` triggers. |
---
## 🏗️ Scenario Design
Evals must simulate realistic agent environments to effectively test
decision-making.
- **Workspace State**: Seed with standard project anchors if testing general
capabilities:
- `package.json` for NodeJS environments.
- Minimal configuration files (`tsconfig.json`, `GEMINI.md`).
- **Structural Complexity**: Provide enough files to force the agent to _search_
or _navigate_, rather than giving the answer directly. Avoid trivial one-file
tests unless testing exact prompt steering.
---
## ❌ Fail First Principle
Before asserting a new capability or locking in a fix, **verify that the test
fails first**.
- It is easy to accidentally write an eval that asserts behaviors that are
already met or pass by default.
- **Process**: reproduce failure with test -> apply fix (prompt/tool) -> verify
test passes.
---
## ✋ Testing Patterns
### 1. Breakpoints
Verifies the agent _intends_ to use a tool BEFORE executing it. Useful for
interactive prompts or safety checks.
```typescript
// ⚠️ Only works with appEvalTest (AppRig)
setup: async (rig) => {
rig.setBreakpoint(['ask_user']);
},
assert: async (rig) => {
const confirmation = await rig.waitForPendingConfirmation('ask_user');
expect(confirmation).toBeDefined();
}
```
### 2. Tool Confirmation Race
When asserting multiple triggers (e.g., "enters plan mode then asks question"):
```typescript
assert: async (rig) => {
let confirmation = await rig.waitForPendingConfirmation([
'enter_plan_mode',
'ask_user',
]);
if (confirmation?.name === 'enter_plan_mode') {
rig.acceptConfirmation('enter_plan_mode');
confirmation = await rig.waitForPendingConfirmation('ask_user');
}
expect(confirmation?.toolName).toBe('ask_user');
};
```
### 3. Audit Tool Logs
Audit exact operations to ensure efficiency (e.g., no redundant reads).
```typescript
assert: async (rig, result) => {
await rig.waitForTelemetryReady();
const toolLogs = rig.readToolLogs();
const writeCall = toolLogs.find(
(log) => log.toolRequest.name === 'write_file',
);
expect(writeCall).toBeDefined();
};
```
### 4. Mock MCP Facades
To evaluate tools connected via MCP without hitting live endpoints, load a mock
server configuration in the `setup` hook.
```typescript
setup: async (rig) => {
rig.addMockMcpServer('workspace-server', 'google-workspace');
},
assert: async (rig) => {
await rig.waitForTelemetryReady();
const toolLogs = rig.readToolLogs();
const workspaceCall = toolLogs.find(
(log) => log.toolRequest.name === 'mcp_workspace-server_docs.getText'
);
expect(workspaceCall).toBeDefined();
};
```
---
## ⚠️ Safety & Efficiency Guardrails
### 1. Breakpoint Deadlocks
Breakpoints (`setBreakpoint`) pause execution. In standard `evalTest`,
`rig.run()` waits for the process to exit _before_ assertions run. **This will
hang indefinitely.**
- **Use Breakpoints** for `appEvalTest` or interactive simulations.
- **Use Audit Tool Logs** (above) for standard trajectory tests.
### 2. Runaway Timeout
Always set a budget boundary in the `EvalCase` to prevent runaway loops on
quota:
```typescript
evalTest('USUALLY_PASSES', {
name: '...',
timeout: 60000, // 1 minute safety limit
// ...
});
```
### 3. Efficiency Assertion (Turn limits)
Check if a tool is called _early_ using index checks:
```typescript
assert: async (rig) => {
const toolLogs = rig.readToolLogs();
const toolCallIndex = toolLogs.findIndex(
(log) => log.toolRequest.name === 'cli_help',
);
expect(toolCallIndex).toBeGreaterThan(-1);
expect(toolCallIndex).toBeLessThan(5); // Called within first 5 turns
};
```
@@ -0,0 +1,100 @@
# Fixing Behavioral Evals
Use this guide when asked to debug, troubleshoot, or fix a failing behavioral
evaluation.
---
## 1. 🔍 Investigate
1. **Fetch Nightly Results**: Use the `gh` CLI to inspect the latest run from
`evals-nightly.yml` if applicable.
- _Example view URL_:
`https://github.com/google-gemini/gemini-cli/actions/workflows/evals-nightly.yml`
2. **Isolate**: DO NOT push changes or start remote runs. Confine investigation
to the local workspace.
3. **Read Logs**:
- Eval logs live in `evals/logs/<test_name>.log`.
- Enable verbose debugging via `export GEMINI_DEBUG_LOG_FILE="debug.log"`.
4. **Diagnose**: Audit tool logs and telemetry. Note if due to setup/assert.
- **Tip**: Proactively add custom logging/diagnostics to check hypotheses.
---
## 2. 🛠️ Fix Strategy
1. **Targeted Location**: Locate the test case and the corresponding
prompt/code.
2. **Iterative Scope**: Make extreme change first to verify scope, then refine
to a minimal, targeted change.
3. **Assertion Fidelity**:
- Changing the test prompt is a **last resort** (prompts are often vague by
design).
- **Warning**: Do not lose test fidelity by making prompts too direct/easy.
- **Primary Fix Trigger**: Adjust tool descriptions, system prompts
(`snippets.ts`), or **modules that contribute to the prompt template**.
- Fixes should generally try to improve the prompt
`@packages/core/src/prompts/snippets.ts` first.
- **Instructional Generality**: Changes to the system prompt should aim to
be as general as possible while still accomplishing the goal. Specificity
should be added only as needed.
- **Principle**: Instead of creating "forbidden lists" for specific syntax
(e.g., "Don't use `Object.create()`"), formulate a broader engineering
principle that covers the underlying issue (e.g., "Prioritize explicit
composition over hidden prototype manipulation"). This improves
steerability across a wider range of similar scenarios.
- _Low Specificity_: "Follow ecosystem best practices"
- _Medium Specificity_: "Utilize OOP and functional best practices, as
applicable"
- _High Specificity_: Provide ecosystem-specific hints as examples of a
broader principle rather than direct instructions. e.g., "NEVER use
hacks like bypassing the type system or employing 'hidden' logic (e.g.:
reflection, prototype manipulation). Instead, use explicit and idiomatic
language features (e.g.: type guards, explicit class instantiation, or
object spread) that maintain structural integrity."
- **Prompt Simplification**: Once the test is passing, use `ask_user` to
determine if prompt simplification is desired.
- **Criteria**: Simplification should be attempted only if there are
related clauses that can be de-duplicated or reparented under a single
heading.
- **Verification**: As part of simplification, you MUST identify and run
any behavioral eval tests that might be affected by the changes to
ensure no regressions are introduced.
- Test fixes should not "cheat" by changing a test's `GEMINI.md` file or by
updating the test's prompt to instruct it to not repro the bug.
- **Warning**: Prompts have multiple configurations; ensure your fix targets
the correct config for the model in question.
4. **Architecture Options**: If prompt or instruction tuning triggers no
improvement, analyze loop composition.
- **AgentLoop**: Defined by `context + toolset + prompt`.
- **Enhancements**: Loops perform best with direct prompts, fewer irrelevant
tools, low goal density, and minimal low-value/irrelevant context.
- **Modifications**: Compose subagents or isolate tools. Ground in observed
traces.
- **Warning**: Think deeply before offering recommendations; avoid parroting
abstract design guidelines.
---
## 3. ✅ Verify
1. **Run Local**: Run Vitest in non-interactive mode on just the file.
2. **Log Audit**: Prioritize diagnosing failures via log comparison before
triggering heavy test runs.
3. **Stability Limit**: Run the test **3 times** locally on key models (can use
scripts to run in parallel for speed):
- **Gemini 3.0**
- **Gemini 3 Flash**
- **Gemini 2.5 Pro**
4. **Flakiness Rule**: If it passes 2/3 times, it may be inherent noise
difficult to improve without a structural split.
---
## 4. 📊 Report
Provide a summary of:
- Test success rate for each tested model (e.g., 3/3 = 100%).
- Root cause identification and fix explanation.
- If unfixed, provide high-confidence architecture recommendations.
@@ -0,0 +1,55 @@
# Promoting Behavioral Evals
Use this guide when asked to analyze nightly results and promote incubated tests
to stable suites.
---
## 1. 🔍 Investigate candidates
1. **Audit Nightly Logs**: Use the `gh` CLI to fetch results from
`evals-nightly.yml` (Direct URL:
`https://github.com/google-gemini/gemini-cli/actions/workflows/evals-nightly.yml`).
- **Tip**: The aggregate summary from the most recent run integrates the
last 7 runs of history automatically.
- **Safety**: DO NOT push changes or start remote runs. All verification is
local.
2. **Assess Stability**: Identify tests that pass **100% of the time** across
ALL enabled models over the **last 7 nightly runs** in a row.
- _100% means the test passed 3/3 times for every model and run._
3. **Promotion Targets**: Tests meeting this criteria are candidates for
promotion from `USUALLY_PASSES` to `ALWAYS_PASSES`.
---
## 2. 🚥 Promotion Steps
1. **Locate File**: Locate the eval file in the `evals/` directory.
2. **Update Policy**: Modify the policy argument to `ALWAYS_PASSES`.
```typescript
evalTest('ALWAYS_PASSES', { ... })
```
3. **Targeting**: Follow guidelines in `evals/README.md` regarding stable suite
organization.
4. **Constraint**: Your final change must be **minimal and targeted** strictly
to promoting the test status. Do not refactor the test or setup fixtures.
---
## 3. ✅ Verify
1. **Run Prompted Tests**: Run the promoted test locally using non-interactive
Vitest to confirm structure validity.
2. **Verify Suite Inclusion**: Check that the test is successfully picked up by
standard runnable ranges.
---
## 4. 📊 Report
Provide a summary of:
- Which tests were promoted.
- Provide the success rate evidence (e.g., 7/7 runs passed for all models).
- If no candidates qualified, list the next closest candidates and their current
pass rate.
@@ -0,0 +1,95 @@
# Running & Promoting Evals
## 🛠️ Prerequisites
Behavioral evals run against the compiled binary. You **must** build and bundle
the project first after making changes:
```bash
npm run build && npm run bundle
```
---
## 🏃‍♂️ Running Tests
### 1. Configure Environment Variables
Evals require a standard API key. If your `.env` file has multiple keys or
comments, use this precise extraction setup:
```bash
export GEMINI_API_KEY=$(grep '^GEMINI_API_KEY=' .env | cut -d '=' -f2) && RUN_EVALS=1 npx vitest run --config evals/vitest.config.ts <file_name>
```
### 2. Commands
| Command | Scope | Description |
| :---------------------------------- | :-------------- | :------------------------------------------------- |
| `npm run test:always_passing_evals` | `ALWAYS_PASSES` | Fast feedback, runs in CI. |
| `npm run test:all_evals` | All | Runs nightly incubation tests. Sets `RUN_EVALS=1`. |
### Target Specific File
_Note: `RUN_EVALS=1` is required for incubated (`USUALLY_PASSES`) tests._
```bash
RUN_EVALS=1 npx vitest run --config evals/vitest.config.ts my_feature.eval.ts
```
---
## 🐞 Debugging and Logs
If a test fails, verify:
- **Tool Trajectory Logs**:序列 of calls in `evals/logs/<test_name>.log`.
- **Verbose Reasoning**: Capture raw buffer traces by setting
`GEMINI_DEBUG_LOG_FILE`:
```bash
export GEMINI_DEBUG_LOG_FILE="debug.log"
```
---
### 🎯 Verify Model Targeting
- **Tip:** Standard evals benchmark against model variations. If a test passes
on Flash but fails on Pro (or vice versa), the issue is usually in the **tool
description**, not the prompt definition. Flash is sensitive to "instruction
bloat," while Pro is sensitive to "ambiguous intent."
---
## 🚥 deflaking & Promotion
To maintain CI stability, all new evals follow a strict incubation period.
### 1. Incubation (`USUALLY_PASSES`)
New tests must be created with the `USUALLY_PASSES` policy.
```typescript
evalTest('USUALLY_PASSES', { ... })
```
They run in **Evals: Nightly** workflows and do not block PR merges.
### 2. Investigate Failures
If a nightly eval regresses, investigate via agent:
```bash
gemini /fix-behavioral-eval [optional-run-uri]
```
### 3. Promotion (`ALWAYS_PASSES`)
Once a test scores 100% consistency over multiple nightly cycles:
```bash
gemini /promote-behavioral-eval
```
_Do not promote manually._ The command verifies trajectory logs before updating
the file policy.
+66
View File
@@ -0,0 +1,66 @@
---
name: ci
description:
A specialized skill for Gemini CLI that provides high-performance, fail-fast
monitoring of GitHub Actions workflows and automated local verification of CI
failures. It handles run discovery automatically—simply provide the branch name.
---
# CI Replicate & Status
This skill enables the agent to efficiently monitor GitHub Actions, triage
failures, and bridge remote CI errors to local development. It defaults to
**automatic replication** of failures to streamline the fix cycle.
## Core Capabilities
- **Automatic Replication**: Automatically monitors CI and immediately executes
suggested test or lint commands locally upon failure.
- **Real-time Monitoring**: Aggregated status line for all concurrent workflows
on the current branch.
- **Fail-Fast Triage**: Immediately stops on the first job failure to provide a
structured report.
## Workflow
### 1. CI Replicate (`replicate`) - DEFAULT
Use this as the primary path to monitor CI and **automatically** replicate
failures locally for immediate triage and fixing.
- **Behavior**: When this workflow is triggered, the agent will monitor the CI
and **immediately and automatically execute** all suggested test or lint
commands (marked with 🚀) as soon as a failure is detected.
- **Tool**: `node .gemini/skills/ci/scripts/ci.mjs [branch]`
- **Discovery**: The script **automatically** finds the latest active or recent
run for the branch. Do NOT manually search for run IDs.
- **Goal**: Reproduce the failure locally without manual intervention, then
proceed to analyze and fix the code.
### 1. CI Status (`status`)
Use this when you have pushed changes and need to monitor the CI and reproduce
any failures locally.
- **Tool**: `node .gemini/skills/ci/scripts/ci.mjs [branch] [run_id]`
- **Discovery**: The script **automatically** finds the latest active or recent
run for the branch. You should NOT manually search for \`run_id\` using \`gh run list\`
unless a specific historical run is requested. Simply provide the branch name.
- **Step 1 (Monitor)**: Execute the tool with the branch name.
- **Step 2 (Extract)**: Extract suggested \`npm test\` or \`npm run lint\` commands
from the output (marked with 🚀).
- **Step 3 (Reproduce)**: Execute those commands locally to confirm the failure.
- **Behavior**: It will poll every 15 seconds. If it detects a failure, it will
exit with a structured report and provide the exact commands to run locally.
## Failure Categories & Actions
- **Test Failures**: Agent should run the specific `npm test -w <pkg> -- <path>`
command suggested.
- **Lint Errors**: Agent should run `npm run lint:all` or the specific package
lint command.
- **Build Errors**: Agent should check `tsc` output or build logs to resolve
compilation issues.
- **Job Errors**: Investigate `gh run view --job <job_id> --log` for
infrastructure or setup failures.
## Noise Filtering
The underlying scripts automatically filter noise (Git logs, NPM warnings, stack
trace overhead). The agent should focus on the "Structured Failure Report"
provided by the tool.
+281
View File
@@ -0,0 +1,281 @@
#!/usr/bin/env node
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { execSync } from 'node:child_process';
const BRANCH =
process.argv[2] || execSync('git branch --show-current').toString().trim();
const RUN_ID_OVERRIDE = process.argv[3];
let REPO;
try {
const remoteUrl = execSync('git remote get-url origin').toString().trim();
REPO = remoteUrl
.replace(/.*github\.com[\/:]/, '')
.replace(/\.git$/, '')
.trim();
} catch (e) {
REPO = 'google-gemini/gemini-cli';
}
const FAILED_FILES = new Set();
function runGh(args) {
try {
return execSync(`gh ${args}`, {
stdio: ['ignore', 'pipe', 'ignore'],
}).toString();
} catch (e) {
return null;
}
}
function fetchFailuresViaApi(jobId) {
try {
const cmd = `gh api repos/${REPO}/actions/jobs/${jobId}/logs | grep -iE " FAIL |❌|ERROR|Lint failed|Build failed|Exception|failed with exit code"`;
return execSync(cmd, {
stdio: ['ignore', 'pipe', 'ignore'],
maxBuffer: 10 * 1024 * 1024,
}).toString();
} catch (e) {
return '';
}
}
function isNoise(line) {
const lower = line.toLowerCase();
return (
lower.includes('* [new branch]') ||
lower.includes('npm warn') ||
lower.includes('fetching updates') ||
lower.includes('node:internal/errors') ||
lower.includes('at ') || // Stack traces
lower.includes('checkexecsyncerror') ||
lower.includes('node_modules')
);
}
function extractTestFile(failureText) {
const cleanLine = failureText
.replace(/[|#\[\]()]/g, ' ')
.replace(/<[^>]*>/g, ' ')
.trim();
const fileMatch = cleanLine.match(/([\w\/._-]+\.test\.[jt]sx?)/);
if (fileMatch) return fileMatch[1];
return null;
}
function generateTestCommand(failedFilesMap) {
const workspaceToFiles = new Map();
for (const [file, info] of failedFilesMap.entries()) {
if (
['Job Error', 'Unknown File', 'Build Error', 'Lint Error'].includes(file)
)
continue;
let workspace = '@google/gemini-cli';
let relPath = file;
if (file.startsWith('packages/core/')) {
workspace = '@google/gemini-cli-core';
relPath = file.replace('packages/core/', '');
} else if (file.startsWith('packages/cli/')) {
workspace = '@google/gemini-cli';
relPath = file.replace('packages/cli/', '');
}
relPath = relPath.replace(/^.*packages\/[^\/]+\//, '');
if (!workspaceToFiles.has(workspace))
workspaceToFiles.set(workspace, new Set());
workspaceToFiles.get(workspace).add(relPath);
}
const commands = [];
for (const [workspace, files] of workspaceToFiles.entries()) {
commands.push(`npm test -w ${workspace} -- ${Array.from(files).join(' ')}`);
}
return commands.join(' && ');
}
async function monitor() {
let targetRunIds = [];
if (RUN_ID_OVERRIDE) {
targetRunIds = [RUN_ID_OVERRIDE];
} else {
// 1. Get runs directly associated with the branch
const runListOutput = runGh(
`run list --branch "${BRANCH}" --limit 10 --json databaseId,status,workflowName,createdAt`,
);
if (runListOutput) {
const runs = JSON.parse(runListOutput);
const activeRuns = runs.filter((r) => r.status !== 'completed');
if (activeRuns.length > 0) {
targetRunIds = activeRuns.map((r) => r.databaseId);
} else if (runs.length > 0) {
const latestTime = new Date(runs[0].createdAt).getTime();
targetRunIds = runs
.filter((r) => latestTime - new Date(r.createdAt).getTime() < 60000)
.map((r) => r.databaseId);
}
}
// 2. Get runs associated with commit statuses (handles chained/indirect runs)
try {
const headSha = execSync(`git rev-parse "${BRANCH}"`).toString().trim();
const statusOutput = runGh(
`api repos/${REPO}/commits/${headSha}/status -q '.statuses[] | select(.target_url | contains("actions/runs/")) | .target_url'`,
);
if (statusOutput) {
const statusRunIds = statusOutput
.split('\n')
.filter(Boolean)
.map((url) => {
const match = url.match(/actions\/runs\/(\d+)/);
return match ? parseInt(match[1], 10) : null;
})
.filter(Boolean);
for (const runId of statusRunIds) {
if (!targetRunIds.includes(runId)) {
targetRunIds.push(runId);
}
}
}
} catch (e) {
// Ignore if branch/SHA not found or API fails
}
if (targetRunIds.length > 0) {
const runNames = [];
for (const runId of targetRunIds) {
const runInfo = runGh(`run view "${runId}" --json workflowName`);
if (runInfo) {
runNames.push(JSON.parse(runInfo).workflowName);
}
}
console.log(`Monitoring workflows: ${[...new Set(runNames)].join(', ')}`);
}
}
if (targetRunIds.length === 0) {
console.log(`No runs found for branch ${BRANCH}.`);
process.exit(0);
}
while (true) {
let allPassed = 0,
allFailed = 0,
allRunning = 0,
allQueued = 0,
totalJobs = 0;
let anyRunInProgress = false;
const fileToTests = new Map();
let failuresFoundInLoop = false;
for (const runId of targetRunIds) {
const runOutput = runGh(
`run view "${runId}" --json databaseId,status,conclusion,workflowName`,
);
if (!runOutput) continue;
const run = JSON.parse(runOutput);
if (run.status !== 'completed') anyRunInProgress = true;
const jobsOutput = runGh(`run view "${runId}" --json jobs`);
if (jobsOutput) {
const { jobs } = JSON.parse(jobsOutput);
totalJobs += jobs.length;
const failedJobs = jobs.filter((j) => j.conclusion === 'failure');
if (failedJobs.length > 0) {
failuresFoundInLoop = true;
for (const job of failedJobs) {
const failures = fetchFailuresViaApi(job.databaseId);
if (failures.trim()) {
failures.split('\n').forEach((line) => {
if (!line.trim() || isNoise(line)) return;
const file = extractTestFile(line);
const filePath =
file ||
(line.toLowerCase().includes('lint')
? 'Lint Error'
: line.toLowerCase().includes('build')
? 'Build Error'
: 'Unknown File');
let testName = line;
if (line.includes(' > ')) {
testName = line.split(' > ').slice(1).join(' > ').trim();
}
if (!fileToTests.has(filePath))
fileToTests.set(filePath, new Set());
fileToTests.get(filePath).add(testName);
});
} else {
const step =
job.steps?.find((s) => s.conclusion === 'failure')?.name ||
'unknown';
const category = step.toLowerCase().includes('lint')
? 'Lint Error'
: step.toLowerCase().includes('build')
? 'Build Error'
: 'Job Error';
if (!fileToTests.has(category))
fileToTests.set(category, new Set());
fileToTests
.get(category)
.add(`${job.name}: Failed at step "${step}"`);
}
}
}
for (const job of jobs) {
if (job.status === 'in_progress') allRunning++;
else if (job.status === 'queued') allQueued++;
else if (job.conclusion === 'success') allPassed++;
else if (job.conclusion === 'failure') allFailed++;
}
}
}
if (failuresFoundInLoop) {
console.log(
`\n\n❌ Failures detected across ${allFailed} job(s). Stopping monitor...`,
);
console.log('\n--- Structured Failure Report (Noise Filtered) ---');
for (const [file, tests] of fileToTests.entries()) {
console.log(`\nCategory/File: ${file}`);
// Limit output per file if it's too large
const testsArr = Array.from(tests).map((t) =>
t.length > 500 ? t.substring(0, 500) + '... [TRUNCATED]' : t,
);
testsArr.slice(0, 10).forEach((t) => console.log(` - ${t}`));
if (testsArr.length > 10)
console.log(` ... and ${testsArr.length - 10} more`);
}
const testCmd = generateTestCommand(fileToTests);
if (testCmd) {
console.log('\n🚀 Run this to verify fixes:');
console.log(testCmd);
} else if (
Array.from(fileToTests.keys()).some((k) => k.includes('Lint'))
) {
console.log('\n🚀 Run this to verify lint fixes:\nnpm run lint:all');
}
console.log('---------------------------------');
process.exit(1);
}
const completed = allPassed + allFailed;
process.stdout.write(
`\r⏳ Monitoring ${targetRunIds.length} runs... ${completed}/${totalJobs} jobs (${allPassed} passed, ${allFailed} failed, ${allRunning} running, ${allQueued} queued) `,
);
if (!anyRunInProgress) {
console.log('\n✅ All workflows passed!');
process.exit(0);
}
await new Promise((r) => setTimeout(r, 15000));
}
}
monitor().catch((err) => {
console.error('\nMonitor error:', err.message);
process.exit(1);
});
+65
View File
@@ -0,0 +1,65 @@
---
name: code-reviewer
description:
Use this skill to review code. It supports both local changes (staged or working tree)
and remote Pull Requests (by ID or URL). It focuses on correctness, maintainability,
and adherence to project standards.
---
# Code Reviewer
This skill guides the agent in conducting professional and thorough code reviews for both local development and remote Pull Requests.
## Workflow
### 1. Determine Review Target
* **Remote PR**: If the user provides a PR number or URL (e.g., "Review PR #123"), target that remote PR.
* **Local Changes**: If no specific PR is mentioned, or if the user asks to "review my changes", target the current local file system states (staged and unstaged changes).
### 2. Preparation
#### For Remote PRs:
1. **Checkout**: Use the GitHub CLI to checkout the PR.
```bash
gh pr checkout <PR_NUMBER>
```
2. **Preflight**: Execute the project's standard verification suite to catch automated failures early.
```bash
npm run preflight
```
3. **Context**: Read the PR description and any existing comments to understand the goal and history.
#### For Local Changes:
1. **Identify Changes**:
* Check status: `git status`
* Read diffs: `git diff` (working tree) and/or `git diff --staged` (staged).
2. **Preflight (Optional)**: If the changes are substantial, ask the user if they want to run `npm run preflight` before reviewing.
### 3. In-Depth Analysis
Analyze the code changes based on the following pillars:
* **Correctness**: Does the code achieve its stated purpose without bugs or logical errors?
* **Maintainability**: Is the code clean, well-structured, and easy to understand and modify in the future? Consider factors like code clarity, modularity, and adherence to established design patterns.
* **Readability**: Is the code well-commented (where necessary) and consistently formatted according to our project's coding style guidelines?
* **Efficiency**: Are there any obvious performance bottlenecks or resource inefficiencies introduced by the changes?
* **Security**: Are there any potential security vulnerabilities or insecure coding practices?
* **Edge Cases and Error Handling**: Does the code appropriately handle edge cases and potential errors?
* **Testability**: Is the new or modified code adequately covered by tests (even if preflight checks pass)? Suggest additional test cases that would improve coverage or robustness.
### 4. Provide Feedback
#### Structure
* **Summary**: A high-level overview of the review.
* **Findings**:
* **Critical**: Bugs, security issues, or breaking changes.
* **Improvements**: Suggestions for better code quality or performance.
* **Nitpicks**: Formatting or minor style issues (optional).
* **Conclusion**: Clear recommendation (Approved / Request Changes).
#### Tone
* Be constructive, professional, and friendly.
* Explain *why* a change is requested.
* For approvals, acknowledge the specific value of the contribution.
### 5. Cleanup (Remote PRs only)
* After the review, ask the user if they want to switch back to the default branch (e.g., `main` or `master`).
+168
View File
@@ -0,0 +1,168 @@
---
name: docs-changelog
description: >-
Generates and formats changelog files for a new release based on provided
version and raw changelog data.
---
# Procedure: Updating Changelog for New Releases
## Objective
To standardize the process of updating changelog files (`latest.md`,
`preview.md`, `index.md`) based on automated release information.
## Inputs
- **version**: The release version string (e.g., `v0.28.0`,
`v0.29.0-preview.2`).
- **TIME**: The release timestamp (e.g., `2026-02-12T20:33:15Z`).
- **BODY**: The raw markdown release notes, containing a "What's Changed"
section and a "Full Changelog" link.
## Guidelines for `latest.md` and `preview.md` Highlights
- Aim for **3-5 key highlight points**.
- Each highlight point must start with a bold-typed title that summarizes the
change (e.g., `**New Feature:** A brief description...`).
- **Prioritize** summarizing new features over other changes like bug fixes or
chores.
- **Avoid** mentioning features that are "experimental" or "in preview" in
Stable Releases.
- **DO NOT** include PR numbers, links, or author names in these highlights.
- Refer to `.gemini/skills/docs-changelog/references/highlights_examples.md`
for the correct style and tone.
## Initial Processing
1. **Analyze Version**: Determine the release path based on the `version`
string.
- If `version` contains "nightly", **STOP**. No changes are made.
- If `version` ends in `.0`, follow the **Path A: New Minor Version**
procedure.
- If `version` does not end in `.0`, follow the **Path B: Patch Version**
procedure.
2. **Process Time**: Convert the `TIME` input into two formats for later use:
`yyyy-mm-dd` and `Month dd, yyyy`.
3. **Process Body**:
- Save the incoming `BODY` content to a temporary file for processing.
- In the "What's Changed" section of the temporary file, reformat all pull
request URLs to be markdown links with the PR number as the text (e.g.,
`[#12345](URL)`).
- If a "New Contributors" section exists, delete it.
- Preserve the "**Full Changelog**" link. The processed content of this
temporary file will be used in subsequent steps.
---
## Path A: New Minor Version
*Use this path if the version number ends in `.0`.*
**Important:** Based on the version, you must choose to follow either section
A.1 for stable releases or A.2 for preview releases. Do not follow the
instructions for the other section.
### A.1: Stable Release (e.g., `v0.28.0`)
For a stable release, you will generate two distinct summaries from the
changelog: a concise **announcement** for the main changelog page, and a more
detailed **highlights** section for the release-specific page.
1. **Create the Announcement for `index.md`**:
- Generate a concise announcement summarizing the most important changes.
Each announcement entry must start with a bold-typed title that
summarizes the change.
- **Important**: The format for this announcement is unique. You **must**
use the existing announcements in `docs/changelogs/index.md` and the
example within
`.gemini/skills/docs-changelog/references/index_template.md` as your
guide. This format includes PR links and authors. Stick to 1 or 2 PR
links and authors.
- Add this new announcement to the top of `docs/changelogs/index.md`.
2. **Create Highlights and Update `latest.md`**:
- Generate a comprehensive "Highlights" section, following the guidelines
in the "Guidelines for `latest.md` and `preview.md` Highlights" section
above.
- Take the content from
`.gemini/skills/docs-changelog/references/latest_template.md`.
- Populate the template with the `version`, `release_date`, generated
`highlights`, and the processed content from the temporary file.
- **Completely replace** the contents of `docs/changelogs/latest.md` with
the populated template.
### A.2: Preview Release (e.g., `v0.29.0-preview.0`)
1. **Update `preview.md`**:
- Generate a comprehensive "Highlights" section, following the highlight
guidelines.
- Take the content from
`.gemini/skills/docs-changelog/references/preview_template.md`.
- Populate the template with the `version`, `release_date`, generated
`highlights`, and the processed content from the temporary file.
- **Completely replace** the contents of `docs/changelogs/preview.md`
with the populated template.
---
## Path B: Patch Version
*Use this path if the version number does **not** end in `.0`.*
**Important:** Based on the version, you must choose to follow either section
B.1 for stable patches or B.2 for preview patches. Do not follow the
instructions for the other section.
### B.1: Stable Patch (e.g., `v0.28.1`)
- **Target File**: `docs/changelogs/latest.md`
- Perform the following edits on the target file:
1. Update the version in the main header. The line should read,
`# Latest stable release: {{version}}`
2. Update the rease date. The line should read,
`Released: {{release_date_month_dd_yyyy}}`
3. Determine if a "What's Changed" section exists in the temporary file
If so, continue to step 4. Otherwise, skip to step 5.
4. **Prepend** the processed "What's Changed" list from the temporary file
to the existing "What's Changed" list in `latest.md`. Do not change or
replace the existing list, **only add** to the beginning of it.
5. In the "Full Changelog", edit **only** the end of the URL. Identify the
last part of the URL that looks like `...{previous_version}` and update
it to be `...{version}`.
Example: assume the patch version is `v0.29.1`. Change
`Full Changelog: https://github.com/google-gemini/gemini-cli/compare/v0.28.2…v0.29.0`
to
`Full Changelog: https://github.com/google-gemini/gemini-cli/compare/v0.28.2…v0.29.1`
### B.2: Preview Patch (e.g., `v0.29.0-preview.3`)
- **Target File**: `docs/changelogs/preview.md`
- Perform the following edits on the target file:
1. Update the version in the main header. The line should read,
`# Preview release: {{version}}`
2. Update the rease date. The line should read,
`Released: {{release_date_month_dd_yyyy}}`
3. Determine if a "What's Changed" section exists in the temporary file
If so, continue to step 4. Otherwise, skip to step 5.
4. **Prepend** the processed "What's Changed" list from the temporary file
to the existing "What's Changed" list in `preview.md`. Do not change or
replace the existing list, **only add** to the beginning of it.
5. In the "Full Changelog", edit **only** the end of the URL. Identify the
last part of the URL that looks like `...{previous_version}` and update
it to be `...{version}`.
Example: assume the patch version is `v0.29.0-preview.1`. Change
`Full Changelog: https://github.com/google-gemini/gemini-cli/compare/v0.28.2…v0.29.0-preview.0`
to
`Full Changelog: https://github.com/google-gemini/gemini-cli/compare/v0.28.2…v0.29.0-preview.1`
---
## Finalize
- After making changes, if `npm run format` fails, it may be necessary to run
`npm install` first to ensure all formatting dependencies are available.
Then, run `npm run format` to ensure consistency.
- Delete any temporary files created during the process.
@@ -0,0 +1,68 @@
## Highlights example 1
- **Plan Mode Enhancements**: Significant updates to Plan Mode, including new
commands, support for MCP servers, integration of planning artifacts, and
improved iteration guidance.
- **Core Agent Improvements**: Enhancements to the core agent, including better
system prompt rigor, improved subagent definitions, and enhanced tool
execution limits.
- **CLI UX/UI Updates**: Various UI and UX improvements, such as autocomplete in
the input prompt, updated approval mode labels, DevTools integration, and
improved header spacing.
- **Tooling & Extension Updates**: Improvements to existing tools like
`ask_user` and `grep_search`, and new features for extension management.
- **Bug Fixes**: Numerous bug fixes across the CLI and core, addressing issues
with interactive commands, memory leaks, permission checks, and more.
- **Context and Tool Output Management**: Features for observation masking for
tool outputs, session-linked tool output storage, and persistence for masked
tool outputs.
## Highlights example 2
- **Commands & UX Enhancements:** Introduced `/prompt-suggest` command,
alongside updated undo/redo keybindings and automatic theme switching.
- **Expanded IDE Support:** Now offering compatibility with Positron IDE,
expanding integration options for developers.
- **Enhanced Security & Authentication:** Implemented interactive and
non-interactive OAuth consent, improving both security and diagnostic
capabilities for bug reports.
- **Advanced Planning & Agent Tools:** Integrated a generic Checklist component
for structured task management and evolved subagent capabilities with dynamic
policy registration.
- **Improved Core Stability & Reliability:** Resolved critical environment
loading, authentication, and session management issues, ensuring a more robust
experience.
- **Background Shell Commands:** Enabled the execution of shell commands in the
background for increased workflow efficiency.
## Highlights example 3
- **Event-Driven Architecture:** The CLI now uses an event-driven scheduler for
tool execution, improving performance and responsiveness. This includes
migrating non-interactive flows and sub-agents to the new scheduler.
- **Enhanced User Experience:** This release introduces several UI/UX
improvements, including queued tool confirmations and the ability to expand
and collapse large pasted text blocks. The `Settings` dialog has been improved
to reduce jitter and preserve focus.
- **Agent and Skill Improvements:** Agent Skills have been promoted to a stable
feature. Sub-agents now use a JSON schema for input and are tracked by an
`AgentRegistry`.
- **New `/rewind` Command:** A new `/rewind` command has been implemented to
allow users to go back in their session history.
- **Improved Shell and File Handling:** The shell tool's output format has been
optimized, and the CLI now gracefully handles disk-full errors during chat
recording. A bug in detecting already added paths has been fixed.
- **Linux Clipboard Support:** Image pasting capabilities for Wayland and X11 on
Linux have been added.
## Highlights example 4
- **Improved Hooks Management:** Hooks enable/disable functionality now aligns
with skills and offers improved completion.
- **Custom Themes for Extensions:** Extensions can now support custom themes,
allowing for greater personalization.
- **User Identity Display:** User identity information (auth, email, tier) is
now displayed on startup and in the `stats` command.
- **Plan Mode Enhancements:** Plan mode has been improved with a generic
`Checklist` component and refactored `Todo`.
- **Background Shell Commands:** Implementation of background shell commands.
@@ -0,0 +1,10 @@
## Announcements: {{version}} - {{release_date_yyyy_mm_dd}}
{{announcement_content}}
<!-- Example entry, multiple entries per highlights
- **Highlighted Feature:** We've added a new highlighted feature to help
you generate prompt suggestions
([#nnnnn](https://github.com/google-gemini/gemini-cli/pull/nnnnn) by
@author).
-->
@@ -0,0 +1,20 @@
# Latest stable release: {{version}}
Released: {{release_date_month_dd_yyyy}}
For most users, our latest stable release is the recommended release. Install
the latest stable version with:
```
npm install -g @google/gemini-cli
```
## Highlights
{{highlights_content}}
## What's Changed
{{changelog_list}}
**Full Changelog**: {{full_changelog_link}}
@@ -0,0 +1,22 @@
# Preview release: {{version}}
Released: {{release_date_month_dd_yyyy}}
Our preview release includes the latest, new, and experimental features. This
release may not be as stable as our [latest weekly release](latest.md).
To install the preview release:
```
npm install -g @google/gemini-cli@preview
```
## Highlights
{{highlights_content}}
## What's Changed
{{changelog_list}}
**Full Changelog**: {{full_changelog_link}}
+194
View File
@@ -0,0 +1,194 @@
---
name: docs-writer
description:
Always use this skill when the task involves writing, reviewing, or editing
files in the `/docs` directory or any `.md` files in the repository.
---
# `docs-writer` skill instructions
As an expert technical writer and editor for the Gemini CLI project, you produce
accurate, clear, and consistent documentation. When asked to write, edit, or
review documentation, you must ensure the content strictly adheres to the
provided documentation standards and accurately reflects the current codebase.
Adhere to the contribution process in `CONTRIBUTING.md` and the following
project standards.
## Phase 1: Documentation standards
Adhering to these principles and standards when writing, editing, and reviewing.
### Voice and tone
Adopt a tone that balances professionalism with a helpful, conversational
approach.
- **Perspective and tense:** Address the reader as "you." Use active voice and
present tense (e.g., "The API returns...").
- **Tone:** Professional, friendly, and direct.
- **Clarity:** Use simple vocabulary. Avoid jargon, slang, and marketing hype.
- **Global Audience:** Write in standard US English. Avoid idioms and cultural
references.
- **Requirements:** Be clear about requirements ("must") vs. recommendations
("we recommend"). Avoid "should."
- **Word Choice:** Avoid "please" and anthropomorphism (e.g., "the server
thinks"). Use contractions (don't, it's).
### Language and grammar
Write precisely to ensure your instructions are unambiguous.
- **Abbreviations:** Avoid Latin abbreviations; use "for example" (not "e.g.")
and "that is" (not "i.e.").
- **Punctuation:** Use the serial comma. Place periods and commas inside
quotation marks.
- **Dates:** Use unambiguous formats (e.g., "January 22, 2026").
- **Conciseness:** Use "lets you" instead of "allows you to." Use precise,
specific verbs.
- **Examples:** Use meaningful names in examples; avoid placeholders like
"foo" or "bar."
- **Quota and limit terminology:** For any content involving resource capacity
or using the word "quota" or "limit", strictly adhere to the guidelines in
the `quota-limit-style-guide.md` resource file. Generally, Use "quota" for
the administrative bucket and "limit" for the numerical ceiling.
### Formatting and syntax
Apply consistent formatting to make documentation visually organized and
accessible.
- **Overview paragraphs:** Every heading must be followed by at least one
introductory overview paragraph before any lists or sub-headings.
- **Text wrap:** Wrap text at 80 characters (except long links or tables).
- **Casing:** Use sentence case for headings, titles, and bolded text.
- **Naming:** Always refer to the project as `Gemini CLI` (never
`the Gemini CLI`).
- **Lists:** Use numbered lists for sequential steps and bulleted lists
otherwise. Keep list items parallel in structure.
- **UI and code:** Use **bold** for UI elements and `code font` for filenames,
snippets, commands, and API elements. Focus on the task when discussing
interaction.
- **Accessibility:** Use semantic HTML elements correctly (headings, lists,
tables).
- **Media:** Use lowercase hyphenated filenames. Provide descriptive alt text
for all images.
- **Details section:** Use the `<details>` tag to create a collapsible section.
This is useful for supplementary or data-heavy information that isn't critical
to the main flow.
Example:
<details>
<summary>Title</summary>
- First entry
- Second entry
</details>
- **Callouts**: Use GitHub-flavored markdown alerts to highlight important
information. To ensure the formatting is preserved by `npm run format`, place
an empty line, then a prettier ignore comment directly before the callout
block. Use `<!-- prettier-ignore -->` for standard Markdown files (`.md`) and
`{/* prettier-ignore */}` for MDX files (`.mdx`). The callout type (`[!TYPE]`)
should be on the first line, followed by a newline, and then the content, with
each subsequent line of content starting with `>`. Available types are `NOTE`,
`TIP`, `IMPORTANT`, `WARNING`, and `CAUTION`.
Example (.md):
<!-- prettier-ignore -->
> [!NOTE]
> This is an example of a multi-line note that will be preserved
> by Prettier.
Example (.mdx):
{/* prettier-ignore */}
> [!NOTE]
> This is an example of a multi-line note that will be preserved
> by Prettier.
### Links
- **Accessibility:** Use descriptive anchor text; avoid "click here." Ensure the
link makes sense out of context, such as when being read by a screen reader.
- **Use relative links in docs:** Use relative links in documentation (`/docs/`)
to ensure portability. Use paths relative to the current file's directory
(for example, `../tools/` from `docs/cli/`). Do not include the `/docs/`
section of a path, but do verify that the resulting relative link exists. This
does not apply to meta files such as README.MD and CONTRIBUTING.MD.
- **When changing headings, check for deep links:** If a user is changing a
heading, check for deep links to that heading in other pages and update
accordingly.
### Structure
- **BLUF:** Start with an introduction explaining what to expect.
- **Experimental features:** If a feature is clearly noted as experimental,
add the following note immediately after the introductory paragraph:
<!-- prettier-ignore -->
> [!NOTE]
> This is an experimental feature currently under active development.
(Note: Use `{/* prettier-ignore */}` if editing an `.mdx` file.)
- **Headings:** Use hierarchical headings to support the user journey.
- **Procedures:**
- Introduce lists of steps with a complete sentence.
- Start each step with an imperative verb.
- Number sequential steps; use bullets for non-sequential lists.
- Put conditions before instructions (e.g., "On the Settings page, click...").
- Provide clear context for where the action takes place.
- Indicate optional steps clearly (e.g., "Optional: ...").
- **Elements:** Use bullet lists, tables, details, and callouts.
- **Avoid using a table of contents:** If a table of contents is present, remove
it.
- **Next steps:** Conclude with a "Next steps" section if applicable.
## Phase 2: Preparation
Before modifying any documentation, thoroughly investigate the request and the
surrounding context.
1. **Clarify:** Understand the core request. Differentiate between writing new
content and editing existing content. If the request is ambiguous (e.g.,
"fix the docs"), ask for clarification.
2. **Investigate:** Examine relevant code (primarily in `packages/`) for
accuracy.
3. **Audit:** Read the latest versions of relevant files in `docs/`.
4. **Connect:** Identify all referencing pages if changing behavior. Check if
`docs/sidebar.json` needs updates.
5. **Plan:** Create a step-by-step plan before making changes.
6. **Audit Docset:** If asked to audit the documentation, follow the procedural
guide in [docs-auditing.md](./references/docs-auditing.md).
## Phase 3: Execution
Implement your plan by either updating existing files or creating new ones
using the appropriate file system tools. Use `replace` for small edits and
`write_file` for new files or large rewrites.
### Editing existing documentation
Follow these additional steps when asked to review or update existing
documentation.
- **Gaps:** Identify areas where the documentation is incomplete or no longer
reflects existing code.
- **Structure:** Apply "Structure (New Docs)" rules (BLUF, headings, etc.) when
adding new sections to existing pages.
- **Headers**: If you change a header, you must check for links that lead to
that header and update them.
- **Tone:** Ensure the tone is active and engaging. Use "you" and contractions.
- **Clarity:** Correct awkward wording, spelling, and grammar. Rephrase
sentences to make them easier for users to understand.
- **Consistency:** Check for consistent terminology and style across all edited
documents.
## Phase 4: Verification and finalization
Perform a final quality check to ensure that all changes are correctly
formatted and that all links are functional.
1. **Accuracy:** Ensure content accurately reflects the implementation and
technical behavior.
2. **Self-review:** Re-read changes for formatting, correctness, and flow.
3. **Link check:** Verify all new and existing links leading to or from
modified pages. If you changed a header, ensure that any links that lead to
it are updated.
4. **Format:** If `npm run format` fails, it may be necessary to run `npm
install` first to ensure all formatting dependencies are available. Once all
changes are complete, ask to execute `npm run format` to ensure consistent
formatting across the project. If the user confirms, execute the command.
@@ -0,0 +1,61 @@
# Style Guide: Quota vs. Limit
This guide defines the usage of "quota," "limit," and related terms in
user-facing interfaces.
## TL;DR
- **`quota`**: The administrative "bucket." Use for settings, billing, and
requesting increases. (e.g., "Adjust your storage **quota**.")
- **`limit`**: The real-time numerical "ceiling." Use for error messages when a
user is blocked. (e.g., "You've reached your request **limit**.")
- **When blocked, combine them:** Explain the **limit** that was hit and the
**quota** that is the remedy. (e.g., "You've reached the request **limit** for
your developer **quota**.")
- **Related terms:** Use `usage` for consumption tracking, `restriction` for
fixed rules, and `reset` for when a limit refreshes.
---
## Detailed Guidelines
### Definitions
- **Quota is the "what":** It identifies the category of resource being managed
(e.g., storage quota, GPU quota, request/prompt quota).
- **Limit is the "how much":** It defines the numerical boundary.
Use **quota** when referring to the administrative concept or the request for
more. Use **limit** when discussing the specific point of exhaustion.
### When to use "quota"
Use this term for **account management, billing, and settings.** It describes
the entitlement the user has purchased or been assigned.
**Examples:**
- **Navigation label:** Quota and usage
- **Contextual help:** Your **usage quota** is managed by your organization. To
request an increase, contact your administrator.
### When to use "limit"
Use this term for **real-time feedback, notifications, and error messages.** It
identifies the specific wall the user just hit.
**Examples:**
- **Error message:** Youve reached the 50-request-per-minute **limit**.
- **Inline warning:** Input exceeds the 32k token **limit**.
### How to use both together
When a user is blocked, combine both terms to explain the **event** (limit) and
the **remedy** (quota).
**Example:**
- **Heading:** Daily usage limit reached
- **Body:** You've reached the maximum daily capacity for your developer quota.
To continue working today, upgrade your quota.
@@ -0,0 +1,195 @@
# Procedural Guide: Auditing the Docset
This guide outlines the process for auditing the Gemini CLI documentation for
correctness and adherence to style guidelines. This process involves both an
"Editor" and "Technical Writer" phase.
## Objective
To ensure all public-facing documentation is accurate, up-to-date, adheres to
the Gemini CLI documentation style guide, and reflects the current state of the
codebase.
## Phase 1: Editor Audit
**Role:** The editor is responsible for identifying potential issues based on
style guide violations and technical inaccuracies.
### Steps
1. **Identify Documentation Scope:**
- Read `docs/sidebar.json` to get a list of all viewable documentation
pages.
- For each entry with a `slug`, convert it into a file path (e.g., `docs` ->
`docs/index.md`, `docs/get-started` -> `docs/get-started.md`). Ignore
entries with `link` properties.
2. **Prepare Audit Results File:**
- Create a new Markdown file named `audit-results-[YYYY-MM-DD].md` (e.g.,
`audit-results-2026-03-13.md`). This file will contain all identified
violations and recommendations.
3. **Retrieve Style Guidelines:**
- Familiarize yourself with the `docs-writer` skill instructions and the
included style guidelines.
4. **Audit Each Document:**
- For each documentation file identified in Step 1, read its content.
- **Review against Style Guide:**
- **Voice and Tone Violations:**
- **Unprofessional Tone:** Identify phrasing that is overly casual,
defensive, or lacks a professional and friendly demeanor.
- **Indirectness or Vagueness:** Identify sentences that are
unnecessarily wordy or fail to be concise and direct.
- **Incorrect Pronoun:** Identify any use of third-person pronouns
(e.g., "we," "they," "the user") when referring to the reader, instead
of the second-person pronoun **"you"**.
- **Passive Voice:** Identify sentences written in the passive voice.
- **Incorrect Tense:** Identify the use of past or future tense verbs,
instead of the **present tense**.
- **Poor Vocabulary:** Identify the use of jargon, slang, or overly
informal language.
- **Language and Grammar Violations:**
- **Lack of Conciseness:** Identify unnecessarily long phrases or
sentences.
- **Punctuation Errors:** Identify incorrect or missing punctuation.
- **Ambiguous Dates:** Identify dates that could be misinterpreted
(e.g., "next Monday" instead of "April 15, 2026").
- **Abbreviation Usage:** Identify the use of abbreviations that should
be spelled out (e.g., "e.g." instead of "for example").
- **Terminology:** Check for incorrect or inconsistent use of
product-specific terms (e.g., "quota" vs. "limit").
- **Formatting and Syntax Violations:**
- **Missing Overview:** Check for the absence of a brief overview
paragraph at the start of the document.
- **Line Length:** Identify any lines of text that exceed **80
characters** (text wrap violation).
- **Casing:** Identify incorrect casing for headings, titles, or named
entities (e.g., product names like `Gemini CLI`).
- **List Formatting:** Identify incorrectly formatted lists (e.g.,
inconsistent indentation or numbering).
- **Incorrect Emphasis:** Identify incorrect use of bold text (should
only be used for UI elements) or code font (should be used for code,
file names, or command-line input).
- **Link Quality:** Identify links with non-descriptive anchor text
(e.g., "click here").
- **Image Alt Text:** Identify images with missing or poor-quality
(non-descriptive) alt text.
- **Structure Violations:**
- **Missing BLUF:** Check for the absence of a "Bottom Line Up Front"
summary at the start of complex sections or documents.
- **Experimental Feature Notes:** Identify experimental features that
are not clearly labeled with a standard note.
- **Heading Hierarchy:** Check for skipped heading levels (e.g., going
from `##` to `####`).
- **Procedure Clarity:** Check for procedural steps that do not start
with an imperative verb or where a condition is placed _after_ the
instruction.
- **Element Misuse:** Identify the incorrect or inappropriate use of
special elements (e.g., Notes, Warnings, Cautions).
- **Table of Contents:** Identify the presence of a dynamically
generated or manually included table of contents.
- **Missing Next Steps:** Check for procedural documents that lack a
"Next steps" section (if applicable).
- **Verify Code Accuracy (if applicable):**
- If the document contains code snippets (e.g., shell commands, API calls,
file paths, Docker image versions), use `grep_search` and `read_file`
within the `packages/` directory (or other relevant parts of the
codebase) to ensure the code is still accurate and up-to-date. Pay close
attention to version numbers, package names, and command syntax.
- **Record Findings:** For each **violation** or inaccuracy found:
- Note the file path.
- Describe the violation (e.g., "Violation (Language and Grammar): Uses
'e.g.'").
- Provide a clear and actionable recommendation to correct the issue.
(e.g., "Recommendation: Replace 'e.g.' with 'for example'." or
"Recommendation: Replace '...' with '...' in active voice.).
- Append these findings to `audit-results-[YYYY-MM-DD].md`.
## Phase 2: Software Engineer Audit
**Role:** The software engineer is responsible for finding undocumented features
by auditing the codebase and recent changelogs, and passing these findings to
the technical writer.
### Steps
1. **Proactive Codebase Audit:**
- Audit high-signal areas of the codebase to identify undocumented features.
You MUST review:
- `packages/cli/src/commands/`
- `packages/core/src/tools/`
- `packages/cli/src/config/settings.ts`
2. **Review Recent Updates:**
- Check recent changelogs in stable and announcements within the
documentation to see if newly introduced features are documented properly.
3. **Evaluate and Record Findings:**
- Determine if these features are adequately covered in the docs. They do
not need to be documented word for word, but major features that customers
should care about probably should have an article.
- Append your findings to the `audit-results-[YYYY-MM-DD].md` file,
providing a brief description of the feature and where it should be
documented.
## Phase 3: Technical Writer Implementation
**Role:** The technical writer handles input from both the editor and the
software engineer, makes appropriate decisions about what to change, and
implements the approved changes.
### Steps
1. **Review Audit Results:**
- Read `audit-results-[YYYY-MM-DD].md` to understand all identified issues,
undocumented features, and recommendations from both the Editor and
Software Engineer phases.
2. **Make Decisions and Log Reasoning:**
- Create or update an implementation log (e.g.,
`audit-implementation-log-[YYYY-MM-DD].md`).
- Make sure the logs are updated for all steps, documenting your reasoning
for each recommendation (why it was accepted, modified, or rejected). This
is required for a final check by a human in the PR.
3. **Implement Changes:**
- For each approved recommendation:
- Read the target documentation file.
- Apply the recommended change using the `replace` tool. Pay close
attention to `old_string` for exact matches, including whitespace and
newlines. For multiple occurrences of the same simple string (e.g.,
"e.g."), use `allow_multiple: true`.
- **String replacement safeguards:** When applying these fixes across the
docset, you must verify the following:
- **Preserve Code Blocks:** Explicitly verify that no code blocks,
inline code snippets, terminal commands, or file paths have been
erroneously capitalized or modified.
- **Preserve Literal Strings:** Never alter the wording of literal error
messages, UI quotes, or system logs. For example, if a style rule says
to remove the word "please", you must NOT remove it if it appears
inside a quoted error message (e.g.,
`Error: Please contact your administrator`).
- **Verify Sentence Casing:** When removing filler words (like "please")
from the beginning of a sentence or list item, always verify that the
new first word of the sentence is properly capitalized.
- For structural changes (e.g., adding an overview paragraph), use
`replace` or `write_file` as appropriate.
- For broken links, determine the correct new path or update the link
text.
- For creating new files (e.g., `docs/get-started.md` to fix a broken
link, or a new feature article), use `write_file`.
4. **Execute Auto-Generation Scripts:**
- Some documentation pages are auto-generated from the codebase and should
be updated using npm scripts rather than manual edits. After implementing
manual changes (especially if you edited settings or configurations based
on SWE recommendations), ensure you run:
- `npm run docs:settings` to generate/update the configuration reference.
- `npm run docs:keybindings` to generate/update the keybindings reference.
5. **Format Code:**
- **Dependencies:** If `npm run format` fails, it may be necessary to run
`npm install` first to ensure all formatting dependencies are available.
- After all changes have been implemented, run `npm run format` to ensure
consistent formatting across the project.
@@ -0,0 +1,76 @@
---
name: github-issue-creator
description:
Use this skill when asked to create a GitHub issue. It handles different issue
types (bug, feature, etc.) using repository templates and ensures proper
labeling.
---
# GitHub Issue Creator
This skill guides the creation of high-quality GitHub issues that adhere to the
repository's standards and use the appropriate templates.
## Workflow
Follow these steps to create a GitHub issue:
1. **Identify Issue Type**: Determine if the request is a bug report, feature
request, or other category.
2. **Locate Template**: Search for issue templates in
`.github/ISSUE_TEMPLATE/`.
- `bug_report.yml`
- `feature_request.yml`
- `website_issue.yml`
- If no relevant YAML template is found, look for `.md` templates in the same
directory.
3. **Read Template**: Read the content of the identified template file to
understand the required fields.
4. **Draft Content**: Draft the issue title and body/fields.
- If using a YAML template (form), prepare values for each `id` defined in
the template.
- If using a Markdown template, follow its structure exactly.
- **Default Label**: Always include the `🔒 maintainer only` label unless the
user explicitly requests otherwise.
5. **Create Issue**: Use the `gh` CLI to create the issue.
- **CRITICAL:** To avoid shell escaping and formatting issues with
multi-line Markdown or complex text, ALWAYS write the description/body to
a temporary file first.
**For Markdown Templates or Simple Body:**
```bash
# 1. Write the drafted content to a temporary file
# 2. Create the issue using the --body-file flag
gh issue create --title "Succinct title" --body-file <temp_file_path> --label "🔒 maintainer only"
# 3. Remove the temporary file
rm <temp_file_path>
```
**For YAML Templates (Forms):**
While `gh issue create` supports `--body-file`, YAML forms usually expect
key-value pairs via flags if you want to bypass the interactive prompt.
However, the most reliable non-interactive way to ensure formatting is
preserved for long text fields is to use the `--body` or `--body-file` if the
form has been converted to a standard body, OR to use the `--field` flags
for YAML forms.
*Note: For the `gemini-cli` repository which uses YAML forms, you can often
submit the content as a single body if a specific field-based submission is
not required by the automation.*
6. **Verify**: Confirm the issue was created successfully and provide the link
to the user.
## Principles
- **Clarity**: Titles should be descriptive and follow project conventions.
- **Defensive Formatting**: Always use temporary files with `--body-file` to
prevent newline and special character issues.
- **Maintainer Priority**: Default to internal/maintainer labels to keep the
backlog organized.
- **Completeness**: Provide all requested information (e.g., version info,
reproduction steps).
@@ -0,0 +1,13 @@
---
name: pr-address-comments
description: Use this skill if the user asks you to help them address GitHub PR comments for their current branch of the Gemini CLI. Requires `gh` CLI tool.
---
You are helping the user address comments on their Pull Request. These comments may have come from an automated review agent or a team member.
OBJECTIVE: Help the user review and address comments on their PR.
# Comment Review Procedure
1. Run the `scripts/fetch-pr-info.js` script to get PR info and state. MAKE SURE you read the entire output of the command, even if it gets truncated.
2. Summarize the review status by analyzing the diff, commit log, and comments to see which still need to be addressed. Pay attention to the current user's comments. For resolved threads, summarize as a single line with a ✅. For open threads, provide a reference number e.g. [1] and the comment content.
3. Present your summary of the feedback and current state and allow the user to guide you as to what to fix/address/skip. DO NOT begin fixing issues automatically.
+160
View File
@@ -0,0 +1,160 @@
#!/usr/bin/env node
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/* eslint-env node */
/* global console, process */
import { exec } from 'node:child_process';
import { promisify } from 'node:util';
const execAsync = promisify(exec);
async function run(cmd) {
try {
const { stdout } = await execAsync(cmd, {
encoding: 'utf8',
stdio: ['pipe', 'pipe', 'ignore'],
});
return stdout.trim();
} catch {
return null;
}
}
const IGNORE_MESSAGES = [
'thank you so much for your contribution to Gemini CLI!',
"I'm currently reviewing this pull request and will post my feedback shortly.",
'This pull request is being closed because it is not currently linked to an issue.',
];
const shouldIgnore = (body) => {
if (!body) return false;
return IGNORE_MESSAGES.some((msg) => body.includes(msg));
};
async function main() {
const branch = await run('git branch --show-current');
if (!branch) {
console.error('❌ Could not determine current git branch.');
process.exit(1);
}
const gqlQuery = `query($branch:String!){repository(name:"gemini-cli",owner:"google-gemini"){pullRequests(headRefName:$branch,first:100){nodes{id,number,state,comments(first:100){nodes{createdAt,isMinimized,minimizedReason,author{login},body,url,authorAssociation}},reviews(first:100){nodes{id,author{login},createdAt,isMinimized,minimizedReason,body,state,comments(first:30){nodes{id,replyTo{id},author{login},createdAt,body,isMinimized,minimizedReason,path,line,startLine,originalLine,originalStartLine}}}}}}}}`;
const [authInfo, diff, commits, rawJson] = await Promise.all([
run('gh auth status -a'),
run('gh pr diff'),
run(
'git fetch && git log origin/main..origin/$(git branch --show-current)',
),
run(`gh api graphql -F branch="${branch}" -f query='${gqlQuery}'`),
]);
if (!diff) {
console.error(`⚠️ No active PR found for branch: ${branch}`);
process.exit(1);
}
console.log(`\n# Current GitHub user info:\n\n${authInfo}\n`);
console.log(`\n# PR diff for current branch: ${branch}\n\n\`\`\``);
console.log(diff);
console.log('```');
console.log(
`\n# Commit history (origin/main..origin/${branch})\n\n${commits}`,
);
const data = JSON.parse(rawJson || '{}');
const prs = data?.data?.repository?.pullRequests?.nodes || [];
// Sort PRs by number descending so we check the newest one first
prs.sort((a, b) => b.number - a.number);
const pr = prs.find((p) => p.state === 'OPEN') || prs[0];
if (!pr) {
console.error('❌ No PR data found.');
process.exit(1);
}
console.log('\n# PR Feedback\n');
// 1. General PR Comments
const general = pr.comments.nodes.filter((c) => !shouldIgnore(c.body));
if (general.length > 0) {
console.log('\n💬 GENERAL COMMENTS:');
general.forEach((c) => {
const minimized = c.isMinimized
? ` (Minimized: ${c.minimizedReason})`
: '';
console.log(
`[${c.createdAt}] [${c.author.login}]${minimized}: ${c.body}\n`,
);
});
}
// 2. Process ALL Review Comments into a single Thread Map
const allInlineComments = pr.reviews.nodes.flatMap((r) => r.comments.nodes);
const filteredInlines = allInlineComments.filter(
(c) => !shouldIgnore(c.body),
);
console.log('🔍 CODE REVIEWS & INLINE THREADS:');
// Print Review Summaries First
pr.reviews.nodes.forEach((review) => {
if (review.body && !shouldIgnore(review.body)) {
const icon = review.state === 'APPROVED' ? '✅' : '💬';
const minimized = review.isMinimized
? ` (Minimized: ${review.minimizedReason})`
: '';
console.log(
`\n${icon} ${review.state} by ${review.author.login} at ${review.createdAt}${minimized}: "${review.body}"`,
);
}
});
// Build and Print Threads
const topLevelThreads = filteredInlines.filter((c) => !c.replyTo);
const printThread = (parentId, depth = 1) => {
const indent = ' '.repeat(depth);
filteredInlines
.filter((c) => c.replyTo?.id === parentId)
.forEach((reply) => {
const minimized = reply.isMinimized
? ` (Minimized: ${reply.minimizedReason})`
: '';
console.log(
`${indent}↳ [${reply.createdAt}] ${reply.author.login}${minimized}: ${reply.body}`,
);
printThread(reply.id, depth + 1);
});
};
topLevelThreads.forEach((c) => {
const start = c.startLine || c.originalStartLine;
const end = c.line || c.originalLine;
const range = start && end && start !== end ? `${start}-${end}` : end || '';
const fileInfo = c.path
? `(${c.path}${range ? `:${range}` : ''}) `
: range
? `(Line ${range}) `
: '';
const minimized = c.isMinimized ? ` (Minimized: ${c.minimizedReason})` : '';
console.log(
`\n💬 ${minimized}${c.author.login} | ${c.createdAt} ${fileInfo}\n${c.body}`,
);
printThread(c.id);
});
console.log('\n');
}
main().catch((err) => {
console.error('❌ Unexpected error:', err);
process.exit(1);
});
+93
View File
@@ -0,0 +1,93 @@
---
name: pr-creator
description:
Use this skill when asked to create a pull request (PR). It ensures all PRs
follow the repository's established templates and standards.
---
# Pull Request Creator
This skill guides the creation of high-quality Pull Requests that adhere to the
repository's standards.
## Workflow
Follow these steps to create a Pull Request:
1. **Branch Management**: **CRITICAL:** Ensure you are NOT working on the
`main` branch.
- Run `git branch --show-current`.
- If the current branch is `main`, you MUST create and switch to a new
descriptive branch:
```bash
git checkout -b <new-branch-name>
```
2. **Commit Changes**: Verify that all intended changes are committed.
- Run `git status` to check for unstaged or uncommitted changes.
- If there are uncommitted changes, stage and commit them with a descriptive
message before proceeding. NEVER commit directly to `main`.
```bash
git add .
git commit -m "type(scope): description"
```
3. **Locate Template**: Search for a pull request template in the repository.
- Check `.github/pull_request_template.md`
- Check `.github/PULL_REQUEST_TEMPLATE.md`
- If multiple templates exist (e.g., in `.github/PULL_REQUEST_TEMPLATE/`),
ask the user which one to use or select the most appropriate one based on
the context (e.g., `bug_fix.md` vs `feature.md`).
4. **Read Template**: Read the content of the identified template file.
5. **Draft Description**: Create a PR description that strictly follows the
template's structure.
- **Headings**: Keep all headings from the template.
- **Checklists**: Review each item. Mark with `[x]` if completed. If an item
is not applicable, leave it unchecked or mark as `[ ]` (depending on the
template's instructions) or remove it if the template allows flexibility
(but prefer keeping it unchecked for transparency).
- **Content**: Fill in the sections with clear, concise summaries of your
changes.
- **Related Issues**: Link any issues fixed or related to this PR (e.g.,
"Fixes #123").
6. **Preflight Check**: Before creating the PR, run the workspace preflight
script to ensure all build, lint, and test checks pass.
```bash
npm run preflight
```
If any checks fail, address the issues before proceeding to create the PR.
7. **Push Branch**: Push the current branch to the remote repository.
**CRITICAL SAFETY RAIL:** Double-check your branch name before pushing.
NEVER push if the current branch is `main`.
```bash
# Verify current branch is NOT main
git branch --show-current
# Push non-interactively
git push -u origin HEAD
```
8. **Create PR**: Use the `gh` CLI to create the PR. To avoid shell escaping
issues with multi-line Markdown, write the description to a temporary file
first.
```bash
# 1. Write the drafted description to a temporary file
# 2. Create the PR using the --body-file flag
gh pr create --title "type(scope): succinct description" --body-file <temp_file_path>
# 3. Remove the temporary file
rm <temp_file_path>
```
- **Title**: Ensure the title follows the
[Conventional Commits](https://www.conventionalcommits.org/) format if the
repository uses it (e.g., `feat(ui): add new button`,
`fix(core): resolve crash`).
## Principles
- **Safety First**: NEVER push to `main`. This is your highest priority.
- **Compliance**: Never ignore the PR template. It exists for a reason.
- **Completeness**: Fill out all relevant sections.
- **Accuracy**: Don't check boxes for tasks you haven't done.
@@ -0,0 +1,69 @@
---
name: review-duplication
description: Use this skill during code reviews to proactively investigate the codebase for duplicated functionality, reinvented wheels, or failure to reuse existing project best practices and shared utilities.
---
# Review Duplication
## Overview
This skill provides a structured workflow for investigating a codebase during a code review to identify duplicated logic, reinvented utilities, and missed opportunities to reuse established patterns. By executing this workflow, you ensure that new code integrates seamlessly with the existing project architecture.
## Workflow: Investigating for Duplication
When reviewing code, perform the following steps before finalizing your review:
### 1. Extract Core Logic
Analyze the new code to identify the core algorithms, utility functions, generic data structures, or UI components being introduced. Look beyond the specific business logic to see the underlying mechanics.
### 2. Hypothesize Existing Locations & Trace Dependencies
Think about where this type of code *would* live if it already existed in the project. Provide absolute paths from the repo root to disambiguate.
- **Utilities:** `packages/core/src/utils/`, `packages/cli/src/utils/`
- **UI Components:** `packages/cli/src/ui/components/`, `packages/cli/src/ui/`
- **Services:** `packages/core/src/services/`, `packages/cli/src/services/`
- **Configuration:** `packages/core/src/config/`, `packages/cli/src/config/`
- **Core Logic:** Call out `packages/core/` if functionality does not appear React UI specific.
**Trace Third-Party Dependencies:** If the PR introduces a new import for a utility library (e.g., `lodash.merge`, `date-fns`), trace how and where the project currently uses that library. There is likely an existing wrapper or shared utility.
**Check Package Files:** Before flagging a custom implementation of a complex algorithm, check `package.json` to see if a standard library (like `lodash` or `uuid`) is already installed that provides this functionality.
### 3. Investigate the Codebase (Sub-Agent Delegation)
Delegate the heavy lifting of codebase investigation to specialized sub-agents. They are optimized to perform deep searches and semantic mapping without bloating your session history.
To ensure a comprehensive review, you MUST formulate highly specific objectives for the sub-agents, providing them with the "scents" you discovered in Step 1.
- **Codebase Investigator:** Use the `codebase_investigator` as your primary researcher. When delegating, formulate an objective that asks specific, investigative questions about the codebase, explicitly including these search vectors:
- **Structural Similarity:** Ask if existing code uses the same underlying APIs (e.g., "Does any existing code use `Intl.DateTimeFormat` or `setTimeout` for similar purposes?").
- **Naming Conventions:** Ask if there are existing symbols with similar naming patterns (e.g., "Are there existing symbols with naming patterns like `*Format*` or `*Debounce*`?").
- **Comments & Documentation:** Ask if keywords from the PR's comments or JSDoc exist in describing similar behavior elsewhere.
- **Architectural Fit:** Ask where this type of logic is currently centralized (e.g., "Where is centralized date formatting logic located?").
- **Refactoring Guidance:** Crucially, ask the sub-agent to explain *how* the new code could be refactored to use any existing logic it finds.
- **Generalist Agent:** Use the `generalist` for detailed, turn-intensive comparisons. For example: "Review the implementation of `MyNewComponent` in the PR and compare it semantically against all components in `packages/ui/src`. Are there any existing components that could be extended or used instead?"
- **Retain Fast Path for Simple Searches:** For extremely simple, unambiguous checks (e.g., "Does `package.json` include `lodash`?"), perform a direct search to save time. Default to delegation for any open-ended "investigations."
### 4. Evaluate Best Practices
Check if the new code aligns with the project's established conventions.
- **Error Handling:** Does it use the project's standard error classes or logging mechanisms?
- **State Management:** Does it bypass established stores or contexts?
- **Styling:** Does it hardcode colors or spacing instead of using theme variables?
If the PR introduces a new pattern, compare it against the documented standards and explicitly confirm if an existing project pattern should have been used instead.
### 5. Formulate Constructive Feedback
If you discover that the PR duplicates existing functionality or ignores a best practice:
- Provide a clear review comment.
- **Identify the Source:** Explicitly mention the absolute or project-relative file path and the specific symbol (function, component, class) that should be reused.
- **Implementation Guidance:** Provide a brief code snippet or a clear explanation showing **how** to integrate the existing code to fulfill the task's requirements.
- **Explain the Value:** Briefly explain why reusing the existing code is beneficial (e.g., maintainability, consistency, built-in edge case handling).
Example comment:
> "It looks like this PR introduces a new `formatDate` utility. We already have a robust, tested `formatDate` function in `src/utils/dateHelpers.ts`.
>
> You can replace your implementation by importing it like this:
> ```typescript
> import { formatDate } from '../utils/dateHelpers';
>
> // Then use it here:
> const displayDate = formatDate(userDate, 'MMM Do, YYYY');
> ```
> Reusing this ensures that the date formatting remains consistent with the rest of the application and handles timezone conversions correctly."
+99
View File
@@ -0,0 +1,99 @@
---
name: string-reviewer
description: >
Use this skill when asked to review text and user-facing strings within the codebase. It ensures that these strings follow rules on clarity,
usefulness, brevity and style.
---
# String Reviewer
## Instructions
Act as a Senior UX Writer. Look for user-facing strings that are too long,
unclear, or inconsistent. This includes inline text, error messages, and other
user-facing text.
Do NOT automatically change strings without user approval. You must only suggest
changes and do not attempt to rewrite them directly unless the user explicitly
asks you to do so.
## Core voice principles
The system prioritizes deterministic clarity over conversational fluff. We
provide telemetry, not etiquette, ensuring the user retains absolute agency..
1. **Deterministic clarity:** Distinguish between certain system/service states
(Cloud Billing, IAM, the System) and probabilistic AI analysis (Gemini).
2. **System transparency:** Replace "Loading..." with active technical telemetry
(e.g., Tracing stack traces...). Keep status updates under 5 words.
3. **Front-loaded actionability:** Always use the [Goal] + [Action] pattern.
Lead with intent so users can scan left-to-right.
4. **Agentic error recovery:** Every error must be a pivot point. Pair failures
with one-click recovery commands or suggested prompts.
5. **Contextual humility:** Reserve disclaimers and "be careful" warnings for P0
(destructive/irreversible) tasks only. Stop warning-fatigue.
## The writing checklist
Use this checklist to audit UI strings and AI responses.
### Identity and voice
- **Eliminate the "I":** Remove all first-person pronouns (I, me, my, mine).
- **Subject attribution:** Refer to the AI as Gemini and the infrastructure as
the - system or the CLI.
- **Active voice:** Ensure the subject (Gemini or the system) is clearly
performing the action.
- **Ownership rule:** Use the system for execution (doing) and Gemini for
analysis (thinking)
### Structural scannability
- **The skip test:** Do the first 3 words describe the users intent? If not,
rewrite.
- **Goal-first sequence:** Use the template: [To Accomplish X] + [Do Y].
- **The 5-word rule:** Keep status updates and loading states under 5 words.
- **Telemetry over etiquette:** Remove polite filler (Please wait, Thank you,
Certainly). Replace with raw data or progress indicators.
- **Micro-state cycles:** For tasks $> 3$ seconds, cycle through specific
sub-states (e.g., Parsing logs... ➔ Identifying patterns...) to show momentum.
### Technical accuracy and humility
- **Verb signal check:** Use deterministic verbs (is, will, must) for system
state/infrastructure.
- Use probabilistic verbs (suggests, appears, may, identifies) for AI output.
- **No 100% certainty:** Never attribute absolute certainty to model-generated
content.
- **Precision over fuzziness:** Use technical metrics (latency, tokens, compute) instead of "speed" or "cost."
- **Instructional warnings:** Every warning must include a specific corrective action (e.g., "Perform a dry-run first" or "Review line 42").
### Agentic error recovery
- **The one-step rule:** Pair every error message with exactly one immediate
path to a fix (command, link, or prompt).
- **Human-first:** Provide a human-readable explanation before machine error
codes (e.g., 404, 500).
- **Suggested prompts:** Offer specific text for the user to copy/click like
“Ask Gemini: 'Explain this port error.'”
### Use consistent terminology
Ensure all terminology aligns with the project [word
list](./references/word-list.md).
If a string uses a term marked "do not use" or "use with caution," provide a
correction based on the preferred terms.
## Ensure consistent style for settings
If `packages/cli/src/config/settingsSchema.ts` is modified, confirm labels and
descriptions specifically follow the unique [Settings
guidelines](./references/settings.md).
## Output format
When suggesting changes, always present your review using the following list
format. Do not provide suggestions outside of this list..
```
1. **{Rationale/Principle Violated}**
- ❌ "{incorrect phrase}"
- ✅ `"{corrected phrase}"`
```
@@ -0,0 +1,28 @@
# Settings
## Noun-First Labeling (Scannability)
Labels must start with the subject of the setting, not the action. This allows
users to scan for the feature they want to change.
- **Rule:** `[Noun]` `[Attribute/Action]`
- **Example:** `Show line numbers` becomes simply `Line numbers`
## Positive Boolean Logic (Cognitive Ease)
Eliminate "double negatives." Booleans should represent the presence of a
feature, not its absence.
- **Rule:** Replace `Disable {feature}` or `Hide {Feature}` with
`{Feature} enabled` or simply `{Feature}`.
- **Example:** Change "Disable auto update" to "Auto update".
- **Implementation:** Invert the boolean value in your config loader so true
always equals `On`
## Verb Stripping (Brevity)
Remove redundant leading verbs like "Enable," "Use," "Display," or "Show" unless
they are part of a specific technical term.
- **Rule**: If the label works without the verb, remove it
- **Example**: Change `Enable prompt completion` to `Prompt completion`
@@ -0,0 +1,61 @@
## Terms
### Preferred
- Use **create** when a user is creating or setting up something.
- Use **allow** instead of **may** to indicate that permission has been granted
to perform some action.
- Use **canceled**, not **cancelled**.
- Use **configure** to refer to the process of changing the attributes of a
feature, even if that includes turning on or off the feature.
- Use **delete** when the action being performed is destructive.
- Use **enable** for binary operations that turn a feature or API on. Use "turn
on" and "turn off" instead of "enable" and "disable" for other situations.
- Use **key combination** to refer to pressing multiple keys simultaneously.
- Use **key sequence** to refer to pressing multiple keys separately in order.
- Use **modify** to refer to something that has changed vs obtaining the latest
version of something.
- Use **remove** when the action being performed takes an item out of a larger
whole, but doesn't destroy the item itself.
- Use **set up** as a verb. Use **setup** as a noun or adjective.
- Use **show**. In general, use paired with **hide**.
- Use **sign in**, **sign out** as a verb. Use **sign-in** or **sign-out** as a
noun or adjective.
- Use **update** when you mean to obtain the latest version of something.
- Use **want** instead of **like** or **would like**.
#### Don't use
- Don't use **etc.** It's redundant. To convey that a series is incomplete,
introduce it with "such as" instead.
- Don't use **hostname**, use "host name" instead.
- Don't use **in order to**. It's too formal. "Before you can" is usually better
in UI text.
- Don't use **one or more**. Specify the quantity where possible. Use "at least
one" when the quantity is 1+ but you can't be sure of the number. Likewise,
use "at least one" when the user must choose a quantity of 1+.
- Don't use the terms **log in**, **log on**, **login**, **logout** or **log
out**.
- Don't use **like** or **would you like**. Use **want** instead. Better yet,
rephrase so that it's not referring to the user's emotional state, but rather
what is required.
#### Use with caution
- Avoid using **leverage**, especially as a verb. "Leverage" is considered a
buzzword largely devoid of meaning apart from the simpler "use".
- Avoid using **once** as a synonym for "after". Typically, when "once" is used
in this way, it is followed by a verb in the perfect tense.
- Don't use **e.g.** Use "example", "such as", "like", or "for example". The
phrase is always followed by a comma.
- Don't use **i.e.** unless absolutely essential to make text fit. Use "that is"
instead.
- Use **disable** for binary operations that turn a feature or API off. Use
"turn on" and "turn off" instead of "enable" and "disable" for other
situations. For UI elements that are not available, use "dimmed" instead of
"disabled".
- Use **please** only when you're asking the user to do something inconvenient,
not just following the instructions in a typical flow.
- Use **really** sparingly in such constructions as "Do you really want to..."
Because of the weight it puts on the decision, it should be used to confirm
actions that the user is extremely unlikely to make.
+1
View File
@@ -0,0 +1 @@
packages/core/src/services/scripts/*.exe
+20 -5
View File
@@ -1,7 +1,22 @@
# By default, require reviews from the release approvers for all files.
* @google-gemini/gemini-cli-askmode-approvers
# By default, require reviews from the maintainers for all files.
* @google-gemini/gemini-cli-maintainers
# The following files don't need reviews from the release approvers.
# Require reviews from the release approvers for critical files.
# These patterns override the rule above.
**/*.md
/docs/
/package.json @google-gemini/gemini-cli-askmode-approvers
/package-lock.json @google-gemini/gemini-cli-askmode-approvers
/GEMINI.md @google-gemini/gemini-cli-askmode-approvers
/SECURITY.md @google-gemini/gemini-cli-askmode-approvers
/LICENSE @google-gemini/gemini-cli-askmode-approvers
/.github/workflows/ @google-gemini/gemini-cli-askmode-approvers
/packages/cli/package.json @google-gemini/gemini-cli-askmode-approvers
/packages/core/package.json @google-gemini/gemini-cli-askmode-approvers
# Docs have a dedicated approver group in addition to maintainers
/docs/ @google-gemini/gemini-cli-maintainers @google-gemini/gemini-cli-docs
/README.md @google-gemini/gemini-cli-maintainers @google-gemini/gemini-cli-docs
# Prompt contents, tool definitions, and evals require reviews from prompt approvers
/packages/core/src/prompts/ @google-gemini/gemini-cli-prompt-approvers
/packages/core/src/tools/ @google-gemini/gemini-cli-prompt-approvers
/evals/ @google-gemini/gemini-cli-prompt-approvers
+1 -4
View File
@@ -1,8 +1,5 @@
name: 'Bug Report'
description: 'Report a bug to help us improve Gemini CLI'
labels:
- 'kind/bug'
- 'status/need-triage'
body:
- type: 'markdown'
attributes:
@@ -31,7 +28,7 @@ body:
id: 'info'
attributes:
label: 'Client information'
description: 'Please paste the full text from the `/about` command run from Gemini CLI. Also include which platform (macOS, Windows, Linux).'
description: 'Please paste the full text from the `/about` command run from Gemini CLI. Also include which platform (macOS, Windows, Linux). Note that this output contains your email address. Consider removing it before submitting.'
value: |-
<details>
<summary>Client Information</summary>
+1 -1
View File
@@ -1,8 +1,8 @@
name: 'Feature Request'
description: 'Suggest an idea for this project'
labels:
- 'kind/enhancement'
- 'status/need-triage'
type: 'Feature'
body:
- type: 'markdown'
attributes:
+42
View File
@@ -0,0 +1,42 @@
name: 'Website issue'
description: 'Report an issue with the Gemini CLI Website and Gemini CLI Extensions Gallery'
title: 'GeminiCLI.com Feedback: [ISSUE]'
labels:
- 'area/extensions'
- 'area/documentation'
body:
- type: 'markdown'
attributes:
value: |-
> [!IMPORTANT]
> Thanks for taking the time to report an issue with the Gemini CLI Website
>
> Please search **[existing issues](https://github.com/google-gemini/gemini-cli/issues?q=is%3Aissue+is%3Aopen+label%3Aarea%2Fwebsite)** to see if a similar feature has already been requested.
- type: 'input'
id: 'url'
attributes:
label: 'URL of the page with the issue'
description: 'Please provide the URL where the issue occurs.'
validations:
required: true
- type: 'textarea'
id: 'problem'
attributes:
label: 'What is the problem?'
description: 'A clear and concise description of what the bug or issue is.'
validations:
required: true
- type: 'textarea'
id: 'expected'
attributes:
label: 'What did you expect to happen?'
validations:
required: true
- type: 'textarea'
id: 'additional-context'
attributes:
label: 'Additional context'
description: 'Add any other context or screenshots about the issue here.'
+33
View File
@@ -0,0 +1,33 @@
name: 'Calculate vars'
description: 'Calculate commonly used var in our release process'
inputs:
dry_run:
description: 'Whether or not this is a dry run'
type: 'boolean'
outputs:
is_dry_run:
description: 'Boolean flag indicating if the current run is a dry-run or a production release.'
value: '${{ steps.set_vars.outputs.is_dry_run }}'
runs:
using: 'composite'
steps:
- name: 'Print inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Set vars for simplified logic'
id: 'set_vars'
shell: 'bash'
env:
DRY_RUN_INPUT: '${{ inputs.dry_run }}'
run: |-
is_dry_run="true"
if [[ "${DRY_RUN_INPUT}" == "" || "${DRY_RUN_INPUT}" == "false" ]]; then
is_dry_run="false"
fi
echo "is_dry_run=${is_dry_run}" >> "${GITHUB_OUTPUT}"
@@ -0,0 +1,60 @@
name: 'Create Pull Request'
description: 'Creates a pull request.'
inputs:
branch-name:
description: 'The name of the branch to create the PR from.'
required: true
pr-title:
description: 'The title of the pull request.'
required: true
pr-body:
description: 'The body of the pull request.'
required: true
base-branch:
description: 'The branch to merge into.'
required: true
default: 'main'
github-token:
description: 'The GitHub token to use for creating the pull request.'
required: true
dry-run:
description: 'Whether to run in dry-run mode.'
required: false
default: 'false'
working-directory:
description: 'The working directory to run the commands in.'
required: false
default: '.'
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Creates a Pull Request'
if: "inputs.dry-run != 'true'"
env:
GH_TOKEN: '${{ inputs.github-token }}'
INPUTS_BRANCH_NAME: '${{ inputs.branch-name }}'
INPUTS_PR_TITLE: '${{ inputs.pr-title }}'
INPUTS_PR_BODY: '${{ inputs.pr-body }}'
INPUTS_BASE_BRANCH: '${{ inputs.base-branch }}'
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: |
set -e
if ! git ls-remote --exit-code --heads origin "${INPUTS_BRANCH_NAME}"; then
echo "::error::Branch '${INPUTS_BRANCH_NAME}' does not exist on the remote repository."
exit 1
fi
PR_URL=$(gh pr create \
--title "${INPUTS_PR_TITLE}" \
--body "${INPUTS_PR_BODY}" \
--base "${INPUTS_BASE_BRANCH}" \
--head "${INPUTS_BRANCH_NAME}" \
--fill)
gh pr merge "$PR_URL" --auto
@@ -0,0 +1,23 @@
name: 'Download Mac Binaries'
description: 'Downloads the unsigned macOS binaries (x64 and arm64)'
inputs:
path:
description: 'The base path to download the binaries to'
required: true
default: 'dist'
runs:
using: 'composite'
steps:
- name: 'Download macOS arm64 binary'
uses: 'actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806' # ratchet:actions/download-artifact@v4
continue-on-error: true
with:
name: 'gemini-darwin-arm64-unsigned'
path: '${{ inputs.path }}/darwin-arm64'
- name: 'Download macOS x64 binary'
uses: 'actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806' # ratchet:actions/download-artifact@v4
continue-on-error: true
with:
name: 'gemini-darwin-x64-unsigned'
path: '${{ inputs.path }}/darwin-x64'
+51
View File
@@ -0,0 +1,51 @@
name: 'NPM Auth Token'
description: 'Generates an NPM auth token for publishing a specific package'
inputs:
package-name:
description: 'The name of the package to publish'
required: true
github-token:
description: 'the github token'
required: true
wombat-token-core:
description: 'The npm token for the cli-core package.'
required: true
wombat-token-cli:
description: 'The npm token for the cli package.'
required: true
wombat-token-a2a-server:
description: 'The npm token for the a2a package.'
required: true
outputs:
auth-token:
description: 'The generated NPM auth token'
value: '${{ steps.npm_auth_token.outputs.auth-token }}'
runs:
using: 'composite'
steps:
- name: 'Generate NPM Auth Token'
id: 'npm_auth_token'
shell: 'bash'
run: |
AUTH_TOKEN="${INPUTS_GITHUB_TOKEN}"
PACKAGE_NAME="${INPUTS_PACKAGE_NAME}"
PRIVATE_REPO="@google-gemini/"
if [[ "$PACKAGE_NAME" == "$PRIVATE_REPO"* ]]; then
AUTH_TOKEN="${INPUTS_GITHUB_TOKEN}"
elif [[ "$PACKAGE_NAME" == "@google/gemini-cli" ]]; then
AUTH_TOKEN="${INPUTS_WOMBAT_TOKEN_CLI}"
elif [[ "$PACKAGE_NAME" == "@google/gemini-cli-core" ]]; then
AUTH_TOKEN="${INPUTS_WOMBAT_TOKEN_CORE}"
elif [[ "$PACKAGE_NAME" == "@google/gemini-cli-a2a-server" ]]; then
AUTH_TOKEN="${INPUTS_WOMBAT_TOKEN_A2A_SERVER}"
fi
echo "auth-token=$AUTH_TOKEN" >> $GITHUB_OUTPUT
env:
INPUTS_GITHUB_TOKEN: '${{ inputs.github-token }}'
INPUTS_PACKAGE_NAME: '${{ inputs.package-name }}'
INPUTS_WOMBAT_TOKEN_CLI: '${{ inputs.wombat-token-cli }}'
INPUTS_WOMBAT_TOKEN_CORE: '${{ inputs.wombat-token-core }}'
INPUTS_WOMBAT_TOKEN_A2A_SERVER: '${{ inputs.wombat-token-a2a-server }}'
@@ -27,6 +27,11 @@ inputs:
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Prepare Coverage Comment'
id: 'prep_coverage_comment'
shell: 'bash'
+344
View File
@@ -0,0 +1,344 @@
name: 'Publish Release'
description: 'Builds, prepares, and publishes the gemini-cli packages to npm and creates a GitHub release.'
inputs:
release-version:
description: 'The version to release (e.g., 0.1.11).'
required: true
npm-tag:
description: 'The npm tag to publish with (e.g., latest, preview, nightly).'
required: true
wombat-token-core:
description: 'The npm token for the cli-core package.'
required: true
wombat-token-cli:
description: 'The npm token for the cli package.'
required: true
wombat-token-a2a-server:
description: 'The npm token for the a2a package.'
required: true
github-token:
description: 'The GitHub token for creating the release.'
required: true
github-release-token:
description: 'The GitHub token used specifically for creating the GitHub release (to trigger other workflows).'
required: false
dry-run:
description: 'Whether to run in dry-run mode.'
type: 'string'
required: true
release-tag:
description: 'The release tag for the release (e.g., v0.1.11).'
required: true
previous-tag:
description: 'The previous tag to use for generating release notes.'
required: true
skip-github-release:
description: 'Whether to skip creating a GitHub release.'
type: 'boolean'
required: false
default: false
working-directory:
description: 'The working directory to run the steps in.'
required: false
default: '.'
force-skip-tests:
description: 'Skip tests and validation'
required: false
default: false
skip-branch-cleanup:
description: 'Whether to skip cleaning up the release branch.'
type: 'boolean'
required: false
default: false
gemini_api_key:
description: 'The API key for running integration tests.'
required: true
npm-registry-publish-url:
description: 'npm registry publish url'
required: true
npm-registry-url:
description: 'npm registry url'
required: true
npm-registry-scope:
description: 'npm registry scope'
required: true
cli-package-name:
description: 'The name of the cli package.'
required: true
core-package-name:
description: 'The name of the core package.'
required: true
a2a-package-name:
description: 'The name of the a2a package.'
required: true
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: '👤 Configure Git User'
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
run: |
git config user.name "gemini-cli-robot"
git config user.email "gemini-cli-robot@google.com"
- name: '🌿 Create and switch to a release branch'
working-directory: '${{ inputs.working-directory }}'
id: 'release_branch'
shell: 'bash'
run: |
BRANCH_NAME="release/${INPUTS_RELEASE_TAG}"
git switch -c "${BRANCH_NAME}"
echo "BRANCH_NAME=${BRANCH_NAME}" >> "${GITHUB_OUTPUT}"
env:
INPUTS_RELEASE_TAG: '${{ inputs.release-tag }}'
- name: '⬆️ Update package versions'
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
run: |
npm run release:version "${INPUTS_RELEASE_VERSION}"
env:
INPUTS_RELEASE_VERSION: '${{ inputs.release-version }}'
- name: '💾 Commit and Conditionally Push package versions'
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
env:
BRANCH_NAME: '${{ steps.release_branch.outputs.BRANCH_NAME }}'
DRY_RUN: '${{ inputs.dry-run }}'
RELEASE_TAG: '${{ inputs.release-tag }}'
GIT_PUSH_TOKEN: '${{ inputs.github-release-token || inputs.github-token }}'
run: |-
set -e
git add package.json package-lock.json packages/*/package.json
git commit -m "chore(release): ${RELEASE_TAG}"
if [[ "${DRY_RUN}" == "false" ]]; then
echo "Pushing release branch to remote..."
git push "https://x-access-token:${GIT_PUSH_TOKEN}@github.com/${{ github.repository }}.git" "HEAD:${BRANCH_NAME}" --follow-tags
else
echo "Dry run enabled. Skipping push."
fi
- name: '🛠️ Build and Prepare Packages'
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
run: |
npm run build:packages
npm run prepare:package
- name: '🎁 Bundle'
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
run: |
npm run bundle
# TODO: Refactor this github specific publishing script to be generalized based upon inputs.
- name: '📦 Prepare for GitHub release'
if: "inputs.npm-registry-url == 'https://npm.pkg.github.com/'"
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
run: |
node ${{ github.workspace }}/scripts/prepare-github-release.js
- name: 'Configure npm for publishing to npm'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '${{ inputs.working-directory }}/.nvmrc'
registry-url: '${{inputs.npm-registry-publish-url}}'
scope: '${{inputs.npm-registry-scope}}'
- name: 'Get core Token'
uses: './.github/actions/npm-auth-token'
id: 'core-token'
with:
package-name: '${{ inputs.core-package-name }}'
github-token: '${{ inputs.github-token }}'
wombat-token-core: '${{ inputs.wombat-token-core }}'
wombat-token-cli: '${{ inputs.wombat-token-cli }}'
wombat-token-a2a-server: '${{ inputs.wombat-token-a2a-server }}'
- name: '📦 Publish CORE to NPM'
working-directory: '${{ inputs.working-directory }}'
env:
NODE_AUTH_TOKEN: '${{ steps.core-token.outputs.auth-token }}'
INPUTS_DRY_RUN: '${{ inputs.dry-run }}'
INPUTS_CORE_PACKAGE_NAME: '${{ inputs.core-package-name }}'
shell: 'bash'
run: |
npm publish \
--dry-run="${INPUTS_DRY_RUN}" \
--workspace="${INPUTS_CORE_PACKAGE_NAME}" \
--tag staging-tmp
if [[ "${INPUTS_DRY_RUN}" == "false" ]]; then
npm dist-tag rm ${INPUTS_CORE_PACKAGE_NAME} staging-tmp
fi
- name: '🔗 Install latest core package'
working-directory: '${{ inputs.working-directory }}'
if: "${{ inputs.dry-run != 'true' }}"
shell: 'bash'
run: |
npm install "${INPUTS_CORE_PACKAGE_NAME}@${INPUTS_RELEASE_VERSION}" \
--workspace="${INPUTS_CLI_PACKAGE_NAME}" \
--workspace="${INPUTS_A2A_PACKAGE_NAME}" \
--save-exact
env:
INPUTS_CORE_PACKAGE_NAME: '${{ inputs.core-package-name }}'
INPUTS_RELEASE_VERSION: '${{ inputs.release-version }}'
INPUTS_CLI_PACKAGE_NAME: '${{ inputs.cli-package-name }}'
INPUTS_A2A_PACKAGE_NAME: '${{ inputs.a2a-package-name }}'
- name: '📦 Prepare bundled CLI for npm release'
if: "inputs.npm-registry-url != 'https://npm.pkg.github.com/'"
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
run: |
node ${{ github.workspace }}/scripts/prepare-npm-release.js
- name: 'Get CLI Token'
uses: './.github/actions/npm-auth-token'
id: 'cli-token'
with:
package-name: '${{ inputs.cli-package-name }}'
github-token: '${{ inputs.github-token }}'
wombat-token-core: '${{ inputs.wombat-token-core }}'
wombat-token-cli: '${{ inputs.wombat-token-cli }}'
wombat-token-a2a-server: '${{ inputs.wombat-token-a2a-server }}'
- name: '📦 Publish CLI'
working-directory: '${{ inputs.working-directory }}'
env:
NODE_AUTH_TOKEN: '${{ steps.cli-token.outputs.auth-token }}'
INPUTS_DRY_RUN: '${{ inputs.dry-run }}'
INPUTS_CLI_PACKAGE_NAME: '${{ inputs.cli-package-name }}'
shell: 'bash'
run: |
npm publish \
--dry-run="${INPUTS_DRY_RUN}" \
--workspace="${INPUTS_CLI_PACKAGE_NAME}" \
--tag staging-tmp
if [[ "${INPUTS_DRY_RUN}" == "false" ]]; then
npm dist-tag rm ${INPUTS_CLI_PACKAGE_NAME} staging-tmp
fi
- name: 'Get a2a-server Token'
uses: './.github/actions/npm-auth-token'
id: 'a2a-token'
with:
package-name: '${{ inputs.a2a-package-name }}'
github-token: '${{ inputs.github-token }}'
wombat-token-core: '${{ inputs.wombat-token-core }}'
wombat-token-cli: '${{ inputs.wombat-token-cli }}'
wombat-token-a2a-server: '${{ inputs.wombat-token-a2a-server }}'
- name: '📦 Publish a2a'
working-directory: '${{ inputs.working-directory }}'
env:
NODE_AUTH_TOKEN: '${{ steps.a2a-token.outputs.auth-token }}'
INPUTS_DRY_RUN: '${{ inputs.dry-run }}'
INPUTS_A2A_PACKAGE_NAME: '${{ inputs.a2a-package-name }}'
shell: 'bash'
# Tag staging for initial release
run: |
npm publish \
--dry-run="${INPUTS_DRY_RUN}" \
--workspace="${INPUTS_A2A_PACKAGE_NAME}" \
--tag staging-tmp
if [[ "${INPUTS_DRY_RUN}" == "false" ]]; then
npm dist-tag rm ${INPUTS_A2A_PACKAGE_NAME} staging-tmp
fi
- name: '🔬 Verify NPM release by version'
uses: './.github/actions/verify-release'
if: "${{ inputs.dry-run != 'true' && inputs.force-skip-tests != 'true' }}"
with:
npm-package: '${{ inputs.cli-package-name }}@${{ inputs.release-version }}'
expected-version: '${{ inputs.release-version }}'
working-directory: '${{ inputs.working-directory }}'
gemini_api_key: '${{ inputs.gemini_api_key }}'
github-token: '${{ inputs.github-token }}'
npm-registry-url: '${{ inputs.npm-registry-url }}'
npm-registry-scope: '${{ inputs.npm-registry-scope }}'
- name: '🏷️ Tag release'
uses: './.github/actions/tag-npm-release'
with:
channel: '${{ inputs.npm-tag }}'
version: '${{ inputs.release-version }}'
dry-run: '${{ inputs.dry-run }}'
github-token: '${{ inputs.github-token }}'
wombat-token-core: '${{ inputs.wombat-token-core }}'
wombat-token-cli: '${{ inputs.wombat-token-cli }}'
wombat-token-a2a-server: '${{ inputs.wombat-token-a2a-server }}'
cli-package-name: '${{ inputs.cli-package-name }}'
core-package-name: '${{ inputs.core-package-name }}'
a2a-package-name: '${{ inputs.a2a-package-name }}'
working-directory: '${{ inputs.working-directory }}'
- name: '🎉 Create GitHub Release'
working-directory: '${{ inputs.working-directory }}'
if: "${{ inputs.dry-run != 'true' && inputs.skip-github-release != 'true' && inputs.npm-tag != 'dev' && inputs.npm-registry-url != 'https://npm.pkg.github.com/' }}"
env:
GITHUB_TOKEN: '${{ inputs.github-release-token || inputs.github-token }}'
INPUTS_RELEASE_TAG: '${{ inputs.release-tag }}'
STEPS_RELEASE_BRANCH_OUTPUTS_BRANCH_NAME: '${{ steps.release_branch.outputs.BRANCH_NAME }}'
INPUTS_PREVIOUS_TAG: '${{ inputs.previous-tag }}'
shell: 'bash'
run: |
rm -f gemini-cli-bundle.zip
(cd bundle && chmod +x gemini.js && zip -r ../gemini-cli-bundle.zip .)
echo "Testing the generated bundle archive..."
rm -rf test-bundle
mkdir -p test-bundle
unzip -q gemini-cli-bundle.zip -d test-bundle
# Verify it runs and outputs a version
BUNDLE_VERSION=$(node test-bundle/gemini.js --version | xargs)
echo "Bundle version output: ${BUNDLE_VERSION}"
if [[ -z "${BUNDLE_VERSION}" ]]; then
echo "Error: Bundle failed to execute or return version."
exit 1
fi
rm -rf test-bundle
RELEASE_ASSETS=("gemini-cli-bundle.zip")
# Check for and prepare macOS binaries if they exist
for arch in arm64 x64; do
BINARY_PATH="dist/darwin-${arch}/gemini"
if [[ -f "$BINARY_PATH" ]]; then
chmod +x "$BINARY_PATH"
ZIP_NAME="gemini-darwin-${arch}-unsigned.zip"
zip -j "$ZIP_NAME" "$BINARY_PATH"
RELEASE_ASSETS+=("$ZIP_NAME")
fi
done
gh release create "${INPUTS_RELEASE_TAG}" \
"${RELEASE_ASSETS[@]}" \
--target "${STEPS_RELEASE_BRANCH_OUTPUTS_BRANCH_NAME}" \
--title "Release ${INPUTS_RELEASE_TAG}" \
--notes-start-tag "${INPUTS_PREVIOUS_TAG}" \
--generate-notes \
${{ inputs.npm-tag != 'latest' && '--prerelease' || '' }}
- name: '🧹 Clean up release branch'
working-directory: '${{ inputs.working-directory }}'
if: "${{ inputs.dry-run != 'true' && inputs.skip-branch-cleanup != 'true' }}"
continue-on-error: true
shell: 'bash'
run: |
echo "Cleaning up release branch ${STEPS_RELEASE_BRANCH_OUTPUTS_BRANCH_NAME}..."
git push "https://x-access-token:${GIT_PUSH_TOKEN}@github.com/${{ github.repository }}.git" --delete "${STEPS_RELEASE_BRANCH_OUTPUTS_BRANCH_NAME}"
env:
GIT_PUSH_TOKEN: '${{ inputs.github-release-token || inputs.github-token }}'
STEPS_RELEASE_BRANCH_OUTPUTS_BRANCH_NAME: '${{ steps.release_branch.outputs.BRANCH_NAME }}'
+80
View File
@@ -0,0 +1,80 @@
name: 'Push to docker'
description: 'Builds packages and pushes a docker image to GHCR'
inputs:
github-actor:
description: 'Github actor'
required: true
github-secret:
description: 'Github secret'
required: true
ref-name:
description: 'Github ref name'
required: true
github-sha:
description: 'Github Commit SHA Hash'
required: true
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v4
with:
ref: '${{ inputs.github-sha }}'
fetch-depth: 0
- name: 'Install Dependencies'
shell: 'bash'
run: 'npm install'
- name: 'Set up Docker Buildx'
uses: 'docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435' # ratchet:docker/setup-buildx-action@v3
- name: 'build'
shell: 'bash'
run: 'npm run build'
- name: 'pack @google/gemini-cli'
shell: 'bash'
run: 'npm pack -w @google/gemini-cli --pack-destination ./packages/cli/dist'
- name: 'pack @google/gemini-cli-core'
shell: 'bash'
run: 'npm pack -w @google/gemini-cli-core --pack-destination ./packages/core/dist'
- name: 'Log in to GitHub Container Registry'
uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
with:
registry: 'ghcr.io'
username: '${{ inputs.github-actor }}'
password: '${{ inputs.github-secret }}'
- name: 'Get branch name'
id: 'branch_name'
shell: 'bash'
run: |
REF_NAME="${INPUTS_REF_NAME}"
echo "name=${REF_NAME%/merge}" >> $GITHUB_OUTPUT
env:
INPUTS_REF_NAME: '${{ inputs.ref-name }}'
- name: 'Build and Push the Docker Image'
uses: 'docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83' # ratchet:docker/build-push-action@v6
with:
context: '.'
file: './Dockerfile'
push: true
provenance: false # avoid pushing 3 images to Aritfact Registry
tags: |
ghcr.io/${{ github.repository }}/cli:${{ steps.branch_name.outputs.name }}
ghcr.io/${{ github.repository }}/cli:${{ inputs.github-sha }}
- name: 'Create issue on failure'
if: |-
${{ failure() }}
shell: 'bash'
env:
GITHUB_TOKEN: '${{ inputs.github-secret }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |-
gh issue create \
--title "Docker build failed" \
--body "The docker build failed. See the full run for details: ${DETAILS_URL}" \
--label "release-failure"
+119
View File
@@ -0,0 +1,119 @@
name: 'Build and push sandbox docker'
description: 'Pushes sandbox docker image to container registry'
inputs:
github-actor:
description: 'Github actor'
required: true
github-secret:
description: 'Github secret'
required: true
dockerhub-username:
description: 'Dockerhub username'
required: true
dockerhub-token:
description: 'Dockerhub PAT w/ R+W'
required: true
github-sha:
description: 'Github Commit SHA Hash'
required: true
github-ref-name:
description: 'Github ref name'
required: true
dry-run:
description: 'Whether this is a dry run.'
required: true
type: 'boolean'
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Checkout'
uses: 'actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5' # ratchet:actions/checkout@v4
with:
ref: '${{ inputs.github-sha }}'
fetch-depth: 0
- name: 'Install Dependencies'
shell: 'bash'
run: 'npm install'
- name: 'npm build'
shell: 'bash'
run: 'npm run build'
- name: 'Set up QEMU'
uses: 'docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130' # ratchet:docker/setup-qemu-action@v3
- name: 'Set up Docker Buildx'
uses: 'docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f' # ratchet:docker/setup-buildx-action@v3
- name: 'Log in to GitHub Container Registry'
uses: 'docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9' # ratchet:docker/login-action@v3
with:
registry: 'docker.io'
username: '${{ inputs.dockerhub-username }}'
password: '${{ inputs.dockerhub-token }}'
- name: 'determine image tag'
id: 'image_tag'
shell: 'bash'
run: |-
SHELL_TAG_NAME="${INPUTS_GITHUB_REF_NAME}"
FINAL_TAG="${INPUTS_GITHUB_SHA}"
if [[ "$SHELL_TAG_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?$ ]]; then
echo "Release detected."
FINAL_TAG="${SHELL_TAG_NAME#v}"
else
echo "Development release detected. Using commit SHA as tag."
fi
echo "Determined image tag: $FINAL_TAG"
echo "FINAL_TAG=$FINAL_TAG" >> $GITHUB_OUTPUT
env:
INPUTS_GITHUB_REF_NAME: '${{ inputs.github-ref-name }}'
INPUTS_GITHUB_SHA: '${{ inputs.github-sha }}'
# We build amd64 just so we can verify it.
# We build and push both amd64 and arm64 in the publish step.
- name: 'build'
id: 'docker_build'
shell: 'bash'
env:
GEMINI_SANDBOX_IMAGE_TAG: '${{ steps.image_tag.outputs.FINAL_TAG }}'
GEMINI_SANDBOX: 'docker'
BUILD_SANDBOX_FLAGS: '--platform linux/amd64 --load'
STEPS_IMAGE_TAG_OUTPUTS_FINAL_TAG: '${{ steps.image_tag.outputs.FINAL_TAG }}'
run: |-
npm run build:sandbox -- \
--image "google/gemini-cli-sandbox:${STEPS_IMAGE_TAG_OUTPUTS_FINAL_TAG}" \
--output-file final_image_uri.txt
echo "uri=$(cat final_image_uri.txt)" >> $GITHUB_OUTPUT
- name: 'verify'
shell: 'bash'
run: |-
docker run --rm --entrypoint sh "${{ steps.docker_build.outputs.uri }}" -lc '
set -e
node -e "const fs=require(\"node:fs\"); JSON.parse(fs.readFileSync(\"/usr/local/share/npm-global/lib/node_modules/@google/gemini-cli/package.json\",\"utf8\")); JSON.parse(fs.readFileSync(\"/usr/local/share/npm-global/lib/node_modules/@google/gemini-cli-core/package.json\",\"utf8\"));"
/usr/local/share/npm-global/bin/gemini --version >/dev/null
'
- name: 'publish'
shell: 'bash'
if: "${{ inputs.dry-run != 'true' }}"
env:
GEMINI_SANDBOX_IMAGE_TAG: '${{ steps.image_tag.outputs.FINAL_TAG }}'
GEMINI_SANDBOX: 'docker'
BUILD_SANDBOX_FLAGS: '--platform linux/amd64,linux/arm64 --push'
STEPS_IMAGE_TAG_OUTPUTS_FINAL_TAG: '${{ steps.image_tag.outputs.FINAL_TAG }}'
run: |-
npm run build:sandbox -- \
--image "google/gemini-cli-sandbox:${STEPS_IMAGE_TAG_OUTPUTS_FINAL_TAG}"
- name: 'Create issue on failure'
if: |-
${{ failure() }}
shell: 'bash'
env:
GITHUB_TOKEN: '${{ inputs.github-secret }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |-
gh issue create \
--title "Docker build failed" \
--body "The docker build failed. See the full run for details: ${DETAILS_URL}" \
--label "release-failure"
+46
View File
@@ -0,0 +1,46 @@
name: 'Run Tests'
description: 'Runs the preflight checks and integration tests.'
inputs:
gemini_api_key:
description: 'The API key for running integration tests.'
required: true
working-directory:
description: 'The working directory to run the tests in.'
required: false
default: '.'
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Install system dependencies'
if: "runner.os == 'Linux'"
run: |
sudo apt-get update -qq && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq bubblewrap
# Ubuntu 24.04+ requires this to allow bwrap to function in CI
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 || true
shell: 'bash'
- name: 'Run Tests'
env:
GEMINI_API_KEY: '${{ inputs.gemini_api_key }}'
GEMINI_CLI_TRUST_WORKSPACE: true
working-directory: '${{ inputs.working-directory }}'
run: |-
echo "::group::Build"
npm run build
echo "::endgroup::"
echo "::group::Unit Tests"
npm run test:ci
echo "::endgroup::"
echo "::group::Integration Tests (no sandbox)"
npm run test:integration:sandbox:none
echo "::endgroup::"
echo "::group::Integration Tests (docker sandbox)"
npm run test:integration:sandbox:docker
echo "::endgroup::"
shell: 'bash'
+24
View File
@@ -0,0 +1,24 @@
name: 'Setup NPMRC'
description: 'Sets up NPMRC with all the correct repos for readonly access.'
inputs:
github-token:
description: 'the github token'
required: true
outputs:
auth-token:
description: 'The generated NPM auth token'
value: '${{ steps.npm_auth_token.outputs.auth-token }}'
runs:
using: 'composite'
steps:
- name: 'Configure .npmrc'
shell: 'bash'
run: |-
echo ""@google-gemini:registry=https://npm.pkg.github.com"" > ~/.npmrc
echo ""//npm.pkg.github.com/:_authToken=${INPUTS_GITHUB_TOKEN}"" >> ~/.npmrc
echo ""@google:registry=https://wombat-dressing-room.appspot.com"" >> ~/.npmrc
env:
INPUTS_GITHUB_TOKEN: '${{ inputs.github-token }}'
+145
View File
@@ -0,0 +1,145 @@
name: 'Tag an NPM release'
description: 'Tags a specific npm version to a specific channel.'
inputs:
channel:
description: 'NPM Channel tag'
required: true
version:
description: 'version'
required: true
dry-run:
description: 'Whether to run in dry-run mode.'
required: true
github-token:
description: 'The GitHub token for creating the release.'
required: true
wombat-token-core:
description: 'The npm token for the wombat @google/gemini-cli-core'
required: true
wombat-token-cli:
description: 'The npm token for wombat @google/gemini-cli'
required: true
wombat-token-a2a-server:
description: 'The npm token for the @google/gemini-cli-a2a-server package.'
required: true
cli-package-name:
description: 'The name of the cli package.'
required: true
core-package-name:
description: 'The name of the core package.'
required: true
a2a-package-name:
description: 'The name of the a2a package.'
required: true
working-directory:
description: 'The working directory to run the commands in.'
required: false
default: '.'
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '${{ inputs.working-directory }}/.nvmrc'
- name: 'configure .npmrc'
uses: './.github/actions/setup-npmrc'
with:
github-token: '${{ inputs.github-token }}'
- name: 'Get core Token'
uses: './.github/actions/npm-auth-token'
id: 'core-token'
with:
package-name: '${{ inputs.core-package-name }}'
github-token: '${{ inputs.github-token }}'
wombat-token-core: '${{ inputs.wombat-token-core }}'
wombat-token-cli: '${{ inputs.wombat-token-cli }}'
wombat-token-a2a-server: '${{ inputs.wombat-token-a2a-server }}'
- name: 'Change tag for CORE'
if: |-
${{ inputs.dry-run != 'true' }}
env:
NODE_AUTH_TOKEN: '${{ steps.core-token.outputs.auth-token }}'
INPUTS_CORE_PACKAGE_NAME: '${{ inputs.core-package-name }}'
INPUTS_VERSION: '${{ inputs.version }}'
INPUTS_CHANNEL: '${{ inputs.channel }}'
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: |
npm dist-tag add ${INPUTS_CORE_PACKAGE_NAME}@${INPUTS_VERSION} ${INPUTS_CHANNEL}
- name: 'Get cli Token'
uses: './.github/actions/npm-auth-token'
id: 'cli-token'
with:
package-name: '${{ inputs.cli-package-name }}'
github-token: '${{ inputs.github-token }}'
wombat-token-core: '${{ inputs.wombat-token-core }}'
wombat-token-cli: '${{ inputs.wombat-token-cli }}'
wombat-token-a2a-server: '${{ inputs.wombat-token-a2a-server }}'
- name: 'Change tag for CLI'
if: |-
${{ inputs.dry-run != 'true' }}
env:
NODE_AUTH_TOKEN: '${{ steps.cli-token.outputs.auth-token }}'
INPUTS_CLI_PACKAGE_NAME: '${{ inputs.cli-package-name }}'
INPUTS_VERSION: '${{ inputs.version }}'
INPUTS_CHANNEL: '${{ inputs.channel }}'
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: |
npm dist-tag add ${INPUTS_CLI_PACKAGE_NAME}@${INPUTS_VERSION} ${INPUTS_CHANNEL}
- name: 'Get a2a Token'
uses: './.github/actions/npm-auth-token'
id: 'a2a-token'
with:
package-name: '${{ inputs.a2a-package-name }}'
github-token: '${{ inputs.github-token }}'
wombat-token-core: '${{ inputs.wombat-token-core }}'
wombat-token-cli: '${{ inputs.wombat-token-cli }}'
wombat-token-a2a-server: '${{ inputs.wombat-token-a2a-server }}'
- name: 'Change tag for a2a'
if: |-
${{ inputs.dry-run == 'false' }}
env:
NODE_AUTH_TOKEN: '${{ steps.a2a-token.outputs.auth-token }}'
INPUTS_A2A_PACKAGE_NAME: '${{ inputs.a2a-package-name }}'
INPUTS_VERSION: '${{ inputs.version }}'
INPUTS_CHANNEL: '${{ inputs.channel }}'
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: |
npm dist-tag add ${INPUTS_A2A_PACKAGE_NAME}@${INPUTS_VERSION} ${INPUTS_CHANNEL}
- name: 'Log dry run'
if: |-
${{ inputs.dry-run == 'true' }}
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: |
echo "Dry run: Would have added tag '${INPUTS_CHANNEL}' to version '${INPUTS_VERSION}' for ${INPUTS_CLI_PACKAGE_NAME}, ${INPUTS_CORE_PACKAGE_NAME}, and ${INPUTS_A2A_PACKAGE_NAME}."
env:
INPUTS_CHANNEL: '${{ inputs.channel }}'
INPUTS_VERSION: '${{ inputs.version }}'
INPUTS_CLI_PACKAGE_NAME: '${{ inputs.cli-package-name }}'
INPUTS_CORE_PACKAGE_NAME: '${{ inputs.core-package-name }}'
INPUTS_A2A_PACKAGE_NAME: '${{ inputs.a2a-package-name }}'
+107
View File
@@ -0,0 +1,107 @@
name: 'Verify an NPM release'
description: 'Fetches a package from NPM and does some basic smoke tests'
inputs:
npm-package:
description: 'NPM Package'
required: true
default: '@google/gemini-cli@latest'
npm-registry-url:
description: 'NPM Registry URL'
required: true
npm-registry-scope:
description: 'NPM Registry Scope'
required: true
expected-version:
description: 'Expected version'
required: true
gemini_api_key:
description: 'The API key for running integration tests.'
required: true
github-token:
description: 'The GitHub token for running integration tests.'
required: true
working-directory:
description: 'The working directory to run the tests in.'
required: false
default: '.'
runs:
using: 'composite'
steps:
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'setup node'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version: '20'
- name: 'configure .npmrc'
uses: './.github/actions/setup-npmrc'
with:
github-token: '${{ inputs.github-token }}'
- name: 'Clear npm cache'
shell: 'bash'
run: 'npm cache clean --force'
- name: 'Install from NPM'
uses: 'nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08' # ratchet:nick-fields/retry@v3
with:
timeout_seconds: 900
retry_wait_seconds: 30
max_attempts: 10
command: |-
cd ${{ inputs.working-directory }}
npm install --prefer-online --no-cache -g "${{ inputs.npm-package }}"
- name: 'Smoke test - NPM Install'
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: |-
gemini_version=$(gemini --version)
if [ "$gemini_version" != "${INPUTS_EXPECTED_VERSION}" ]; then
echo "❌ NPM Version mismatch: Got $gemini_version from ${INPUTS_NPM_PACKAGE}, expected ${INPUTS_EXPECTED_VERSION}"
exit 1
fi
env:
INPUTS_EXPECTED_VERSION: '${{ inputs.expected-version }}'
INPUTS_NPM_PACKAGE: '${{ inputs.npm-package }}'
- name: 'Clear npm cache'
shell: 'bash'
run: 'npm cache clean --force'
- name: 'Smoke test - NPX Run'
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: |-
gemini_version=$(npx --prefer-online "${INPUTS_NPM_PACKAGE}" --version)
if [ "$gemini_version" != "${INPUTS_EXPECTED_VERSION}" ]; then
echo "❌ NPX Run Version mismatch: Got $gemini_version from ${INPUTS_NPM_PACKAGE}, expected ${INPUTS_EXPECTED_VERSION}"
exit 1
fi
env:
INPUTS_NPM_PACKAGE: '${{ inputs.npm-package }}'
INPUTS_EXPECTED_VERSION: '${{ inputs.expected-version }}'
- name: 'Install dependencies for integration tests'
shell: 'bash'
working-directory: '${{ inputs.working-directory }}'
run: 'npm ci'
- name: '🔬 Run integration tests against NPM release'
working-directory: '${{ inputs.working-directory }}'
env:
GEMINI_API_KEY: '${{ inputs.gemini_api_key }}'
GEMINI_CLI_TRUST_WORKSPACE: true
INTEGRATION_TEST_USE_INSTALLED_GEMINI: 'true'
# We must diable CI mode here because it interferes with interactive tests.
# See https://github.com/google-gemini/gemini-cli/issues/10517
CI: 'false'
shell: 'bash'
run: 'npm run test:integration:sandbox:none'
+18 -20
View File
@@ -1,35 +1,33 @@
# See https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2
updates:
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'daily'
target-branch: 'main'
commit-message:
prefix: 'chore(deps)'
include: 'scope'
interval: 'weekly'
day: 'monday'
open-pull-requests-limit: 10
reviewers:
- 'google-gemini/gemini-cli-askmode-approvers'
- 'joshualitt'
groups:
# Group all non-major updates together.
# This is to reduce the number of PRs that need to be reviewed.
# Major updates will still be created as separate PRs.
npm-minor-patch:
applies-to: 'version-updates'
npm-dependencies:
patterns:
- '*'
update-types:
- 'minor'
- 'patch'
open-pull-requests-limit: 0
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'daily'
target-branch: 'main'
commit-message:
prefix: 'chore(deps)'
include: 'scope'
interval: 'weekly'
day: 'monday'
open-pull-requests-limit: 10
reviewers:
- 'google-gemini/gemini-cli-askmode-approvers'
open-pull-requests-limit: 0
- 'joshualitt'
groups:
actions-dependencies:
patterns:
- '*'
update-types:
- 'minor'
- 'patch'
+32 -31
View File
@@ -1,41 +1,42 @@
## TLDR
## Summary
<!-- Add a brief description of what this pull request changes and why and any important things for reviewers to look at -->
<!-- Concisely describe what this PR changes and why. Focus on impact and
urgency. -->
## Dive Deeper
## Details
<!-- more thoughts and in-depth discussion here -->
<!-- Add any extra context and design decisions. Keep it brief but complete. -->
## Reviewer Test Plan
## Related Issues
<!-- when a person reviews your code they should ideally be pulling and running that code. How would they validate your change works and if relevant what are some good classes of example prompts and ways they can exercise your changes -->
<!-- Use keywords to auto-close issues (Closes #123, Fixes #456). If this PR is
only related to an issue or is a partial fix, simply reference the issue number
without a keyword (Related to #123). -->
## Testing Matrix
## How to Validate
<!-- Before submitting please validate your changes on as many of these options as possible -->
<!-- List exact steps for reviewers to validate the change. Include commands,
expected results, and edge cases. -->
| | 🍏 | 🪟 | 🐧 |
| -------- | --- | --- | --- |
| npm run | ❓ | ❓ | ❓ |
| npx | ❓ | ❓ | ❓ |
| Docker | ❓ | ❓ | ❓ |
| Podman | ❓ | - | - |
| Seatbelt | ❓ | - | - |
## Pre-Merge Checklist
## Linked issues / bugs
<!-- Check all that apply before requesting review or merging. -->
<!--
Link to any related issues or bugs.
**If this PR fully resolves the issue, use one of the following keywords to automatically close the issue when this PR is merged:**
- Closes #<issue_number>
- Fixes #<issue_number>
- Resolves #<issue_number>
*Example: `Resolves #123`*
**If this PR is only related to an issue or is a partial fix, simply reference the issue number without a keyword:**
*Example: `This PR makes progress on #456` or `Related to #789`*
-->
- [ ] Updated relevant documentation and README (if needed)
- [ ] Added/updated tests (if needed)
- [ ] Noted breaking changes (if any)
- [ ] Validated on required platforms/methods:
- [ ] MacOS
- [ ] npm run
- [ ] npx
- [ ] Docker
- [ ] Podman
- [ ] Seatbelt
- [ ] Windows
- [ ] npm run
- [ ] npx
- [ ] Docker
- [ ] Linux
- [ ] npm run
- [ ] npx
- [ ] Docker
+244
View File
@@ -0,0 +1,244 @@
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
module.exports = async ({ github, context, core }) => {
const rawLabels = process.env.LABELS_OUTPUT;
core.info(`Raw labels JSON: ${rawLabels}`);
let parsedLabels;
try {
// First, try to parse the raw output as JSON.
parsedLabels = JSON.parse(rawLabels);
} catch (jsonError) {
// If that fails, check for a markdown code block.
core.warning(
`Direct JSON parsing failed: ${jsonError.message}. Trying to extract from a markdown block.`,
);
const jsonMatch = rawLabels.match(/```json\s*([\s\S]*?)\s*```/);
if (jsonMatch && jsonMatch[1]) {
try {
parsedLabels = JSON.parse(jsonMatch[1].trim());
} catch (markdownError) {
core.setFailed(
`Failed to parse JSON even after extracting from markdown block: ${markdownError.message}\nRaw output: ${rawLabels}`,
);
return;
}
} else {
// If no markdown block, try to find a raw JSON array in the output.
// The CLI may include debug/log lines (e.g. telemetry init, YOLO mode)
// before the actual JSON response.
const jsonArrayMatch = rawLabels.match(
/\[\s*\{\s*"issue_number"[\s\S]*\}\s*\]/,
);
if (jsonArrayMatch) {
try {
parsedLabels = JSON.parse(jsonArrayMatch[0]);
} catch (extractError) {
// It's possible the regex matched from a `[STARTUP]` log all the way to the end
// of the JSON array. We need to be more aggressive and find the FIRST `[ { "issue_number"`
core.warning(
`Strict array match failed: ${extractError.message}. Attempting to clean leading noisy brackets.`,
);
const fallbackMatch = rawLabels.match(
/(\[\s*\{\s*"issue_number"[\s\S]*)/,
);
if (fallbackMatch) {
try {
// We might have grabbed trailing noise too, so we find the last closing bracket
const cleaned = fallbackMatch[0].substring(
0,
fallbackMatch[0].lastIndexOf(']') + 1,
);
parsedLabels = JSON.parse(cleaned);
} catch (fallbackError) {
core.setFailed(
`Found JSON-like content but failed to parse: ${fallbackError.message}\nRaw output: ${rawLabels}`,
);
return;
}
} else {
core.setFailed(
`Found JSON-like content but failed to parse: ${extractError.message}\nRaw output: ${rawLabels}`,
);
return;
}
}
} else {
core.setFailed(
`Output is not valid JSON and does not contain extractable JSON.\nRaw output: ${rawLabels}`,
);
return;
}
}
}
core.info(`Parsed labels JSON: ${JSON.stringify(parsedLabels)}`);
for (const entry of parsedLabels) {
const issueNumber = entry.issue_number;
if (!issueNumber) {
core.info(
`Skipping entry with no issue number: ${JSON.stringify(entry)}`,
);
continue;
}
let labelsToAdd = entry.labels_to_add || [];
let labelsToRemove = entry.labels_to_remove || [];
labelsToRemove.push('status/need-triage');
if (labelsToAdd.includes('status/manual-triage')) {
// If the AI flagged it for manual triage, remove bot-triaged if it exists
labelsToRemove.push('status/bot-triaged');
// Ensure we don't accidentally try to add bot-triaged if the AI returned it
labelsToAdd = labelsToAdd.filter((l) => l !== 'status/bot-triaged');
} else {
// Standard successful bot triage
labelsToAdd.push('status/bot-triaged');
}
// Deduplicate arrays
labelsToAdd = [...new Set(labelsToAdd)];
labelsToRemove = [...new Set(labelsToRemove)];
// Fetch existing labels to auto-resolve conflicts
try {
const { data: issueData } = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
});
const existingLabels = issueData.labels.map((l) =>
typeof l === 'string' ? l : l.name,
);
const hasNewArea = labelsToAdd.some((l) => l.startsWith('area/'));
if (hasNewArea) {
const existingAreas = existingLabels.filter((l) =>
l.startsWith('area/'),
);
labelsToRemove.push(...existingAreas);
}
const hasNewPriority = labelsToAdd.some((l) => l.startsWith('priority/'));
if (hasNewPriority) {
const existingPriorities = existingLabels.filter((l) =>
l.startsWith('priority/'),
);
labelsToRemove.push(...existingPriorities);
}
const hasNewKind = labelsToAdd.some((l) => l.startsWith('kind/'));
if (hasNewKind) {
const existingKinds = existingLabels.filter((l) =>
l.startsWith('kind/'),
);
labelsToRemove.push(...existingKinds);
}
// Re-deduplicate and filter out labels we are trying to add
labelsToRemove = [...new Set(labelsToRemove)].filter(
(l) => !labelsToAdd.includes(l),
);
} catch (e) {
core.warning(
`Failed to fetch existing labels for #${issueNumber}: ${e.message}`,
);
}
// Enforce mutually exclusive area labels
const areaLabelsToAdd = labelsToAdd.filter((l) => l.startsWith('area/'));
if (areaLabelsToAdd.length > 1) {
core.warning(
`Issue #${issueNumber} has multiple area labels to add: ${areaLabelsToAdd.join(', ')}. Keeping only the first one.`,
);
const firstArea = areaLabelsToAdd[0];
labelsToAdd = labelsToAdd.filter(
(l) => !l.startsWith('area/') || l === firstArea,
);
}
// Enforce mutually exclusive priority labels
const priorityLabelsToAdd = labelsToAdd.filter((l) =>
l.startsWith('priority/'),
);
if (priorityLabelsToAdd.length > 1) {
core.warning(
`Issue #${issueNumber} has multiple priority labels to add: ${priorityLabelsToAdd.join(', ')}. Keeping only the first one.`,
);
const firstPriority = priorityLabelsToAdd[0];
labelsToAdd = labelsToAdd.filter(
(l) => !l.startsWith('priority/') || l === firstPriority,
);
}
if (labelsToAdd.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: labelsToAdd,
});
const explanation = entry.explanation ? ` - ${entry.explanation}` : '';
core.info(
`Successfully added labels for #${issueNumber}: ${labelsToAdd.join(', ')}${explanation}`,
);
}
if (labelsToRemove.length > 0) {
for (const label of labelsToRemove) {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
name: label,
});
} catch (e) {
if (e.status !== 404) {
core.warning(
`Failed to remove label ${label} from #${issueNumber}: ${e.message}`,
);
}
}
}
core.info(
`Successfully removed labels for #${issueNumber}: ${labelsToRemove.join(', ')}`,
);
}
if (
(entry.explanation && process.env.SUPPRESS_COMMENT !== 'true') ||
entry.effort_analysis
) {
let commentBody = '';
if (entry.explanation && process.env.SUPPRESS_COMMENT !== 'true') {
commentBody += entry.explanation;
}
if (entry.effort_analysis) {
if (commentBody) commentBody += '\n\n';
commentBody += `**Effort Analysis:**\n${entry.effort_analysis}`;
}
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: commentBody,
});
}
if (
(!entry.labels_to_add || entry.labels_to_add.length === 0) &&
(!entry.labels_to_remove || entry.labels_to_remove.length === 0)
) {
core.info(
`No labels to add or remove for #${issueNumber}, leaving as is`,
);
}
}
};
+138
View File
@@ -0,0 +1,138 @@
/* eslint-disable */
/* global require, console, process */
/**
* Script to backfill the 'status/need-triage' label to all open issues
* that are NOT currently labeled with '🔒 maintainer only' or 'help wanted'.
*/
const { execFileSync } = require('child_process');
const isDryRun = process.argv.includes('--dry-run');
const REPO = 'google-gemini/gemini-cli';
/**
* Executes a GitHub CLI command safely using an argument array to prevent command injection.
* @param {string[]} args
* @returns {string|null}
*/
function runGh(args) {
try {
// Using execFileSync with an array of arguments is safe as it doesn't use a shell.
// We set a large maxBuffer (10MB) to handle repositories with many issues.
return execFileSync('gh', args, {
encoding: 'utf8',
maxBuffer: 10 * 1024 * 1024,
stdio: ['ignore', 'pipe', 'pipe'],
}).trim();
} catch (error) {
const stderr = error.stderr ? ` Stderr: ${error.stderr.trim()}` : '';
console.error(
`❌ Error running gh ${args.join(' ')}: ${error.message}${stderr}`,
);
return null;
}
}
async function main() {
console.log('🔐 GitHub CLI security check...');
const authStatus = runGh(['auth', 'status']);
if (authStatus === null) {
console.error('❌ GitHub CLI (gh) is not installed or not authenticated.');
process.exit(1);
}
if (isDryRun) {
console.log('🧪 DRY RUN MODE ENABLED - No changes will be made.\n');
}
console.log(`🔍 Fetching and filtering open issues from ${REPO}...`);
// We use the /issues endpoint with pagination to bypass the 1000-result limit.
// The jq filter ensures we exclude PRs, maintainer-only, help-wanted, and existing status/need-triage.
const jqFilter =
'.[] | select(.pull_request == null) | select([.labels[].name] as $l | (any($l[]; . == "🔒 maintainer only") | not) and (any($l[]; . == "help wanted") | not) and (any($l[]; . == "status/need-triage") | not)) | {number: .number, title: .title}';
const output = runGh([
'api',
`repos/${REPO}/issues?state=open&per_page=100`,
'--paginate',
'--jq',
jqFilter,
]);
if (output === null) {
process.exit(1);
}
const issues = output
.split('\n')
.filter((line) => line.trim())
.map((line) => {
try {
return JSON.parse(line);
} catch (_e) {
console.error(`⚠️ Failed to parse line: ${line}`);
return null;
}
})
.filter(Boolean);
console.log(`✅ Found ${issues.length} issues matching criteria.`);
if (issues.length === 0) {
console.log('✨ No issues need backfilling.');
return;
}
let successCount = 0;
let failCount = 0;
if (isDryRun) {
for (const issue of issues) {
console.log(
`[DRY RUN] Would label issue #${issue.number}: ${issue.title}`,
);
}
successCount = issues.length;
} else {
console.log(`🏷️ Applying labels to ${issues.length} issues...`);
for (const issue of issues) {
const issueNumber = String(issue.number);
console.log(`🏷️ Labeling issue #${issueNumber}: ${issue.title}`);
const result = runGh([
'issue',
'edit',
issueNumber,
'--add-label',
'status/need-triage',
'--repo',
REPO,
]);
if (result !== null) {
successCount++;
} else {
failCount++;
}
}
}
console.log(`\n📊 Summary:`);
console.log(` - Success: ${successCount}`);
console.log(` - Failed: ${failCount}`);
if (failCount > 0) {
console.error(`\n❌ Backfill completed with ${failCount} errors.`);
process.exit(1);
} else {
console.log(`\n🎉 ${isDryRun ? 'Dry run' : 'Backfill'} complete!`);
}
}
main().catch((error) => {
console.error('❌ Unexpected error:', error);
process.exit(1);
});
@@ -0,0 +1,190 @@
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/* eslint-disable */
/* global require, console, process */
/**
* Script to backfill a process change notification comment to all open PRs
* not created by members of the 'gemini-cli-maintainers' team.
*
* Skip PRs that are already associated with an issue.
*/
const { execFileSync } = require('child_process');
const isDryRun = process.argv.includes('--dry-run');
const REPO = 'google-gemini/gemini-cli';
const ORG = 'google-gemini';
const TEAM_SLUG = 'gemini-cli-maintainers';
const DISCUSSION_URL =
'https://github.com/google-gemini/gemini-cli/discussions/16706';
/**
* Executes a GitHub CLI command safely using an argument array.
*/
function runGh(args, options = {}) {
const { silent = false } = options;
try {
return execFileSync('gh', args, {
encoding: 'utf8',
maxBuffer: 10 * 1024 * 1024,
stdio: ['ignore', 'pipe', 'pipe'],
}).trim();
} catch (error) {
if (!silent) {
const stderr = error.stderr ? ` Stderr: ${error.stderr.trim()}` : '';
console.error(
`❌ Error running gh ${args.join(' ')}: ${error.message}${stderr}`,
);
}
return null;
}
}
/**
* Checks if a user is a member of the maintainers team.
*/
const membershipCache = new Map();
function isMaintainer(username) {
if (membershipCache.has(username)) return membershipCache.get(username);
// GitHub returns 404 if user is not a member.
// We use silent: true to avoid logging 404s as errors.
const result = runGh(
['api', `orgs/${ORG}/teams/${TEAM_SLUG}/memberships/${username}`],
{ silent: true },
);
const isMember = result !== null;
membershipCache.set(username, isMember);
return isMember;
}
async function main() {
console.log('🔐 GitHub CLI security check...');
if (runGh(['auth', 'status']) === null) {
console.error('❌ GitHub CLI (gh) is not authenticated.');
process.exit(1);
}
if (isDryRun) {
console.log('🧪 DRY RUN MODE ENABLED\n');
}
console.log(`📥 Fetching open PRs from ${REPO}...`);
// Fetch number, author, and closingIssuesReferences to check if linked to an issue
const prsJson = runGh([
'pr',
'list',
'--repo',
REPO,
'--state',
'open',
'--limit',
'1000',
'--json',
'number,author,closingIssuesReferences',
]);
if (prsJson === null) process.exit(1);
const prs = JSON.parse(prsJson);
console.log(`📊 Found ${prs.length} open PRs. Filtering...`);
let targetPrs = [];
for (const pr of prs) {
const author = pr.author.login;
const issueCount = pr.closingIssuesReferences
? pr.closingIssuesReferences.length
: 0;
if (issueCount > 0) {
// Skip if already linked to an issue
continue;
}
if (!isMaintainer(author)) {
targetPrs.push(pr);
}
}
console.log(
`✅ Found ${targetPrs.length} PRs from non-maintainers without associated issues.`,
);
const commentBody =
"\nHi @{AUTHOR}, thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this.\n\nWe're making some updates to our contribution process to improve how we track and review changes. Please take a moment to review our recent discussion post: [Improving Our Contribution Process & Introducing New Guidelines](${DISCUSSION_URL}).\n\nKey Update: Starting **January 26, 2026**, the Gemini CLI project will require all pull requests to be associated with an existing issue. Any pull requests not linked to an issue by that date will be automatically closed.\n\nThank you for your understanding and for being a part of our community!\n ".trim();
let successCount = 0;
let skipCount = 0;
let failCount = 0;
for (const pr of targetPrs) {
const prNumber = String(pr.number);
const author = pr.author.login;
// Check if we already commented (idempotency)
// We use silent: true here because view might fail if PR is deleted mid-run
const existingComments = runGh(
[
'pr',
'view',
prNumber,
'--repo',
REPO,
'--json',
'comments',
'--jq',
`.comments[].body | contains("${DISCUSSION_URL}")`,
],
{ silent: true },
);
if (existingComments && existingComments.includes('true')) {
console.log(
`⏭️ PR #${prNumber} already has the notification. Skipping.`,
);
skipCount++;
continue;
}
if (isDryRun) {
console.log(`[DRY RUN] Would notify @${author} on PR #${prNumber}`);
successCount++;
} else {
console.log(`💬 Notifying @${author} on PR #${prNumber}...`);
const personalizedComment = commentBody.replace('{AUTHOR}', author);
const result = runGh([
'pr',
'comment',
prNumber,
'--repo',
REPO,
'--body',
personalizedComment,
]);
if (result !== null) {
successCount++;
} else {
failCount++;
}
}
}
console.log(`\n📊 Summary:`);
console.log(` - Notified: ${successCount}`);
console.log(` - Skipped: ${skipCount}`);
console.log(` - Failed: ${failCount}`);
if (failCount > 0) process.exit(1);
}
main().catch((e) => {
console.error(e);
process.exit(1);
});
+50
View File
@@ -0,0 +1,50 @@
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
const fs = require('node:fs');
module.exports = async ({ github, context, core }) => {
let issuesToCleanup = [];
try {
const fileContent = fs.readFileSync('issues_to_cleanup.json', 'utf8');
issuesToCleanup = JSON.parse(fileContent);
} catch (error) {
if (error.code === 'ENOENT') {
core.info('No issues found to clean up.');
return;
}
core.setFailed(`Failed to read issues_to_cleanup.json: ${error.message}`);
return;
}
for (const issue of issuesToCleanup) {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
name: 'status/need-triage',
});
core.info(
`Successfully removed status/need-triage from #${issue.number}`,
);
} catch (error) {
if (error.status === 404) {
core.info(
`Label status/need-triage not found on #${issue.number}, skipping.`,
);
} else {
core.warning(
`Failed to remove label from #${issue.number}: ${error.message}`,
);
}
}
}
core.info(
`Cleaned up status/need-triage from ${issuesToCleanup.length} issues.`,
);
};
@@ -0,0 +1,60 @@
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
const fs = require('node:fs');
module.exports = async ({ github, context, core }) => {
core.info('Fetching open issues to check for conflicting labels...');
const issues = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100,
});
const conflictingLabelIssues = [];
for (const issue of issues) {
if (issue.pull_request) continue;
const areaLabels = issue.labels
.filter((l) => l.name && l.name.startsWith('area/'))
.map((l) => l.name);
const priorityLabels = issue.labels
.filter((l) => l.name && l.name.startsWith('priority/'))
.map((l) => l.name);
if (areaLabels.length > 1 || priorityLabels.length > 1) {
let message = `Issue #${issue.number} has conflicting labels:`;
if (areaLabels.length > 1)
message += ` multiple areas (${areaLabels.join(', ')}).`;
if (priorityLabels.length > 1)
message += ` multiple priorities (${priorityLabels.join(', ')}).`;
core.info(message);
conflictingLabelIssues.push({
number: issue.number,
title: issue.title,
body: issue.body || '',
});
}
}
// Limit to 50 to avoid overwhelming the AI in a single run
const issuesToProcess = conflictingLabelIssues.slice(0, 50);
fs.writeFileSync(
'conflicting_labels_issues.json',
JSON.stringify(issuesToProcess, null, 2),
);
core.info(
`Found ${conflictingLabelIssues.length} issues with conflicting labels. Wrote ${issuesToProcess.length} to conflicting_labels_issues.json`,
);
};
@@ -0,0 +1,268 @@
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Gemini Scheduled Lifecycle Manager Script
* @param {object} param0
* @param {import('@octokit/rest').Octokit} param0.github
* @param {import('@actions/github/lib/context').Context} param0.context
* @param {import('@actions/core')} param0.core
*/
module.exports = async ({ github, context, core }) => {
const dryRun = process.env.DRY_RUN === 'true';
const owner = context.repo.owner;
const repo = context.repo.repo;
const STALE_LABEL = 'stale';
const NEED_INFO_LABEL = 'status/need-information';
const EXEMPT_LABELS = [
'pinned',
'security',
'🔒 maintainer only',
'help wanted',
'🗓️ Public Roadmap',
];
const STALE_DAYS = 60;
const CLOSE_DAYS = 14;
const NO_RESPONSE_DAYS = 14;
const now = new Date();
const staleThreshold = new Date(
now.getTime() - STALE_DAYS * 24 * 60 * 60 * 1000,
);
const closeThreshold = new Date(
now.getTime() - CLOSE_DAYS * 24 * 60 * 60 * 1000,
);
const noResponseThreshold = new Date(
now.getTime() - NO_RESPONSE_DAYS * 24 * 60 * 60 * 1000,
);
const maintainerCache = new Map();
async function isMaintainer(user, association) {
if (user?.type === 'Bot') return true;
if (['OWNER', 'MEMBER', 'COLLABORATOR'].includes(association)) return true;
const username = user?.login;
if (!username) return false;
if (maintainerCache.has(username)) {
return maintainerCache.get(username);
}
try {
const { data } = await github.rest.repos.getCollaboratorPermissionLevel({
owner,
repo,
username,
});
// Permission can be admin, write, read, none.
// Roles like 'maintain' or 'triage' often map to 'write' or 'read' in the top-level field.
const isM =
['admin', 'write'].includes(data.permission) ||
['admin', 'maintain', 'write'].includes(data.role_name);
maintainerCache.set(username, isM);
return isM;
} catch (err) {
core.warning(
`Could not check permissions for ${username}: ${err.message}`,
);
maintainerCache.set(username, false);
return false;
}
}
async function processItems(query, callback) {
core.info(`Searching: ${query}`);
try {
const response = await github.rest.search.issuesAndPullRequests({
q: query,
per_page: 100,
sort: 'updated',
order: 'asc',
});
const items = response.data.items;
core.info(`Found ${items.length} items (batch limited).`);
for (const item of items) {
try {
await callback(item);
} catch (err) {
core.error(`Error processing #${item.number}: ${err.message}`);
}
}
} catch (err) {
core.error(`Search failed: ${err.message}`);
}
}
// 1. Handle No-Response (status/need-information)
// Removal: Check issues updated in the last 48h that have the label
const twoDaysAgo = new Date(now.getTime() - 2 * 24 * 60 * 60 * 1000);
await processItems(
`repo:${owner}/${repo} is:open label:"${NEED_INFO_LABEL}" updated:>${twoDaysAgo.toISOString()}`,
async (item) => {
const { data: comments } = await github.rest.issues.listComments({
owner,
repo,
issue_number: item.number,
sort: 'created',
direction: 'desc',
per_page: 5,
});
// Check if the last comment is from a non-maintainer
const lastComment = comments[0];
if (
lastComment &&
!(await isMaintainer(lastComment.user, lastComment.author_association))
) {
core.info(
`Removing ${NEED_INFO_LABEL} from #${item.number} due to contributor response.`,
);
if (!dryRun) {
await github.rest.issues
.removeLabel({
owner,
repo,
issue_number: item.number,
name: NEED_INFO_LABEL,
})
.catch(() => {});
}
}
},
);
// Closure: Check issues with the label that haven't been updated in 14 days
await processItems(
`repo:${owner}/${repo} is:open label:"${NEED_INFO_LABEL}" updated:<${noResponseThreshold.toISOString()}`,
async (item) => {
core.info(
`Closing #${item.number} due to no response for ${NO_RESPONSE_DAYS} days.`,
);
if (!dryRun) {
await github.rest.issues.createComment({
owner,
repo,
issue_number: item.number,
body: `This item was marked as needing more information and has not received a response in ${NO_RESPONSE_DAYS} days. Closing it for now. If you still face this problem, feel free to reopen with more details. Thank you!`,
});
await github.rest.issues.update({
owner,
repo,
issue_number: item.number,
state: 'closed',
});
}
},
);
// 2. Handle Stale Mark (60 days inactivity, no stale label)
const exemptQuery = EXEMPT_LABELS.map((l) => `-label:"${l}"`).join(' ');
await processItems(
`repo:${owner}/${repo} is:open -label:"${STALE_LABEL}" ${exemptQuery} updated:<${staleThreshold.toISOString()}`,
async (item) => {
core.info(`Marking #${item.number} as stale.`);
if (!dryRun) {
await github.rest.issues.addLabels({
owner,
repo,
issue_number: item.number,
labels: [STALE_LABEL],
});
await github.rest.issues.createComment({
owner,
repo,
issue_number: item.number,
body: `This item has been automatically marked as stale due to ${STALE_DAYS} days of inactivity. It will be closed in ${CLOSE_DAYS} days if no further activity occurs. Thank you!`,
});
}
},
);
// 3. Handle Stale Close (14 days with stale label)
await processItems(
`repo:${owner}/${repo} is:open label:"${STALE_LABEL}" ${exemptQuery} updated:<${closeThreshold.toISOString()}`,
async (item) => {
core.info(`Closing stale item #${item.number}.`);
if (!dryRun) {
await github.rest.issues.createComment({
owner,
repo,
issue_number: item.number,
body: `This item has been closed due to ${CLOSE_DAYS} additional days of inactivity after being marked as stale. If you believe this is still relevant, feel free to comment or reopen. Thank you!`,
});
await github.rest.issues.update({
owner,
repo,
issue_number: item.number,
state: 'closed',
});
}
},
);
// 4. Handle PR Contribution Policy (Nudge at 7d, Close at 14d)
const PR_NUDGE_DAYS = 7;
const PR_CLOSE_DAYS = 14;
const nudgeThreshold = new Date(
now.getTime() - PR_NUDGE_DAYS * 24 * 60 * 60 * 1000,
);
const prCloseThreshold = new Date(
now.getTime() - PR_CLOSE_DAYS * 24 * 60 * 60 * 1000,
);
// Nudge
await processItems(
`repo:${owner}/${repo} is:open is:pr -label:"help wanted" -label:"🔒 maintainer only" -label:"status/pr-nudge-sent" created:${prCloseThreshold.toISOString()}..${nudgeThreshold.toISOString()}`,
async (pr) => {
if (await isMaintainer(pr.user, pr.author_association)) return;
core.info(`Nudging PR #${pr.number} for contribution policy.`);
if (!dryRun) {
await github.rest.issues.addLabels({
owner,
repo,
issue_number: pr.number,
labels: ['status/pr-nudge-sent'],
});
await github.rest.issues.createComment({
owner,
repo,
issue_number: pr.number,
body: "Hi there! Thank you for your interest in contributing to Gemini CLI. \n\nTo ensure we maintain high code quality and focus on our prioritized roadmap, we only guarantee review and consideration of pull requests for issues that are explicitly labeled as 'help wanted'. \n\nThis PR will be closed in 7 days if it remains without that designation. We encourage you to find and contribute to existing 'help wanted' issues in our backlog! Thank you for your understanding.",
});
}
},
);
// Close
await processItems(
`repo:${owner}/${repo} is:open is:pr -label:"help wanted" -label:"🔒 maintainer only" created:<${prCloseThreshold.toISOString()}`,
async (pr) => {
if (await isMaintainer(pr.user, pr.author_association)) return;
core.info(
`Closing PR #${pr.number} per contribution policy (no 'help wanted').`,
);
if (!dryRun) {
await github.rest.issues.createComment({
owner,
repo,
issue_number: pr.number,
body: "This pull request is being closed as it has been open for 14 days without a 'help wanted' designation. We encourage you to find and contribute to existing 'help wanted' issues in our backlog! Thank you for your understanding.",
});
await github.rest.pulls.update({
owner,
repo,
pull_number: pr.number,
state: 'closed',
});
}
},
);
};
+149 -138
View File
@@ -1,169 +1,180 @@
#!/usr/bin/env bash
# @license
# Copyright 2026 Google LLC
# SPDX-License-Identifier: Apache-2.0
set -euo pipefail
# Initialize a comma-separated string to hold PR numbers that need a comment
PRS_NEEDING_COMMENT=""
# Function to process a single PR
process_pr() {
if [[ -z "${GITHUB_REPOSITORY:-}" ]]; then
echo "‼️ Missing \$GITHUB_REPOSITORY - this must be run from GitHub Actions"
return 1
# Global cache for issue labels (compatible with Bash 3.2)
# Stores "|ISSUE_NUM:LABELS|" segments
ISSUE_LABELS_CACHE_FLAT="|"
# Function to get labels from an issue (with caching)
get_issue_labels() {
local ISSUE_NUM="${1}"
if [[ -z "${ISSUE_NUM}" || "${ISSUE_NUM}" == "null" || "${ISSUE_NUM}" == "" ]]; then
return
fi
if [[ -z "${GITHUB_OUTPUT:-}" ]]; then
echo "‼️ Missing \$GITHUB_OUTPUT - this must be run from GitHub Actions"
return 1
# Check cache
case "${ISSUE_LABELS_CACHE_FLAT}" in
*"|${ISSUE_NUM}:"*)
local suffix="${ISSUE_LABELS_CACHE_FLAT#*|"${ISSUE_NUM}":}"
echo "${suffix%%|*}"
return
;;
*)
# Cache miss, proceed to fetch
;;
esac
echo " 📥 Fetching labels from issue #${ISSUE_NUM}" >&2
local gh_output
if ! gh_output=$(gh issue view "${ISSUE_NUM}" --repo "${GITHUB_REPOSITORY}" --json labels -q '.labels[].name' 2>/dev/null); then
echo " ⚠️ Could not fetch issue #${ISSUE_NUM}" >&2
ISSUE_LABELS_CACHE_FLAT="${ISSUE_LABELS_CACHE_FLAT}${ISSUE_NUM}:|"
return
fi
local PR_NUMBER=$1
local labels
labels=$(echo "${gh_output}" | grep -x -E '(area|priority)/.*|help wanted|🔒 maintainer only' | tr '\n' ',' | sed 's/,$//' || echo "")
# Save to flat cache
ISSUE_LABELS_CACHE_FLAT="${ISSUE_LABELS_CACHE_FLAT}${ISSUE_NUM}:${labels}|"
echo "${labels}"
}
# Function to process a single PR with pre-fetched data
process_pr_optimized() {
local PR_NUMBER="${1}"
local IS_DRAFT="${2}"
local ISSUE_NUMBER="${3}"
local CURRENT_LABELS="${4}" # Comma-separated labels
echo "🔄 Processing PR #${PR_NUMBER}"
# Get PR body with error handling
local PR_BODY
if ! PR_BODY=$(gh pr view "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --json body -q .body 2>/dev/null); then
echo " ⚠️ Could not fetch PR #${PR_NUMBER} details"
return 1
fi
local LABELS_TO_ADD=""
local LABELS_TO_REMOVE=""
# Look for issue references using multiple patterns
local ISSUE_NUMBER=""
# Pattern 1: Direct reference like #123
if [[ -z "${ISSUE_NUMBER}" ]]; then
ISSUE_NUMBER=$(echo "${PR_BODY}" | grep -oE '#[0-9]+' | head -1 | sed 's/#//' 2>/dev/null || echo "")
fi
# Pattern 2: Closes/Fixes/Resolves patterns (case-insensitive)
if [[ -z "${ISSUE_NUMBER}" ]]; then
ISSUE_NUMBER=$(echo "${PR_BODY}" | grep -iE '(closes?|fixes?|resolves?) #[0-9]+' | grep -oE '#[0-9]+' | head -1 | sed 's/#//' 2>/dev/null || echo "")
fi
if [[ -z "${ISSUE_NUMBER}" ]]; then
echo "⚠️ No linked issue found for PR #${PR_NUMBER}, adding status/need-issue label"
if ! gh pr edit "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --add-label "status/need-issue" 2>/dev/null; then
echo " ⚠️ Failed to add label (may already exist or have permission issues)"
fi
# Add PR number to the list
if [[ -z "${PRS_NEEDING_COMMENT}" ]]; then
PRS_NEEDING_COMMENT="${PR_NUMBER}"
else
PRS_NEEDING_COMMENT="${PRS_NEEDING_COMMENT},${PR_NUMBER}"
fi
echo "needs_comment=true" >> "${GITHUB_OUTPUT}"
else
echo "🔗 Found linked issue #${ISSUE_NUMBER}"
# Remove status/need-issue label if present
if ! gh pr edit "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --remove-label "status/need-issue" 2>/dev/null; then
echo " status/need-issue label not present or could not be removed"
fi
# Get issue labels
echo "📥 Fetching labels from issue #${ISSUE_NUMBER}"
local ISSUE_LABELS=""
if ! ISSUE_LABELS=$(gh issue view "${ISSUE_NUMBER}" --repo "${GITHUB_REPOSITORY}" --json labels -q '.labels[].name' 2>/dev/null | tr '\n' ',' | sed 's/,$//' || echo ""); then
echo " ⚠️ Could not fetch issue #${ISSUE_NUMBER} (may not exist or be in different repo)"
ISSUE_LABELS=""
fi
# Get PR labels
echo "📥 Fetching labels from PR #${PR_NUMBER}"
local PR_LABELS=""
if ! PR_LABELS=$(gh pr view "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --json labels -q '.labels[].name' 2>/dev/null | tr '\n' ',' | sed 's/,$//' || echo ""); then
echo " ⚠️ Could not fetch PR labels"
PR_LABELS=""
fi
echo " Issue labels: ${ISSUE_LABELS}"
echo " PR labels: ${PR_LABELS}"
# Convert comma-separated strings to arrays
local ISSUE_LABEL_ARRAY PR_LABEL_ARRAY
IFS=',' read -ra ISSUE_LABEL_ARRAY <<< "${ISSUE_LABELS}"
IFS=',' read -ra PR_LABEL_ARRAY <<< "${PR_LABELS}"
# Find labels to add (on issue but not on PR)
local LABELS_TO_ADD=""
for label in "${ISSUE_LABEL_ARRAY[@]}"; do
if [[ -n "${label}" ]] && [[ " ${PR_LABEL_ARRAY[*]} " != *" ${label} "* ]]; then
if [[ -z "${LABELS_TO_ADD}" ]]; then
LABELS_TO_ADD="${label}"
else
LABELS_TO_ADD="${LABELS_TO_ADD},${label}"
fi
if [[ -z "${ISSUE_NUMBER}" || "${ISSUE_NUMBER}" == "null" || "${ISSUE_NUMBER}" == "" ]]; then
if [[ "${IS_DRAFT}" == "true" ]]; then
echo " 📝 PR #${PR_NUMBER} is a draft and has no linked issue"
if [[ ",${CURRENT_LABELS}," == *",status/need-issue,"* ]]; then
echo " Removing status/need-issue label"
LABELS_TO_REMOVE="status/need-issue"
fi
done
else
echo " ⚠️ No linked issue found for PR #${PR_NUMBER}"
if [[ ",${CURRENT_LABELS}," != *",status/need-issue,"* ]]; then
echo " Adding status/need-issue label"
LABELS_TO_ADD="status/need-issue"
fi
if [[ -z "${PRS_NEEDING_COMMENT}" ]]; then
PRS_NEEDING_COMMENT="${PR_NUMBER}"
else
PRS_NEEDING_COMMENT="${PRS_NEEDING_COMMENT},${PR_NUMBER}"
fi
fi
else
echo " 🔗 Found linked issue #${ISSUE_NUMBER}"
# Find labels to remove (on PR but not on issue)
local LABELS_TO_REMOVE=""
for label in "${PR_LABEL_ARRAY[@]}"; do
if [[ -n "${label}" ]] && [[ " ${ISSUE_LABEL_ARRAY[*]} " != *" ${label} "* ]]; then
# Don't remove status/need-issue since we already handled it
if [[ "${label}" != "status/need-issue" ]]; then
if [[ -z "${LABELS_TO_REMOVE}" ]]; then
LABELS_TO_REMOVE="${label}"
if [[ ",${CURRENT_LABELS}," == *",status/need-issue,"* ]]; then
echo " Removing status/need-issue label"
LABELS_TO_REMOVE="status/need-issue"
fi
local ISSUE_LABELS
ISSUE_LABELS=$(get_issue_labels "${ISSUE_NUMBER}")
if [[ -n "${ISSUE_LABELS}" ]]; then
local IFS_OLD="${IFS}"
IFS=','
for label in ${ISSUE_LABELS}; do
if [[ -n "${label}" ]] && [[ ",${CURRENT_LABELS}," != *",${label},"* ]]; then
if [[ -z "${LABELS_TO_ADD}" ]]; then
LABELS_TO_ADD="${label}"
else
LABELS_TO_REMOVE="${LABELS_TO_REMOVE},${label}"
LABELS_TO_ADD="${LABELS_TO_ADD},${label}"
fi
fi
fi
done
done
IFS="${IFS_OLD}"
fi
# Apply label changes
if [[ -z "${LABELS_TO_ADD}" && -z "${LABELS_TO_REMOVE}" ]]; then
echo " ✅ Labels already synchronized"
fi
fi
if [[ -n "${LABELS_TO_ADD}" || -n "${LABELS_TO_REMOVE}" ]]; then
local EDIT_CMD=("gh" "pr" "edit" "${PR_NUMBER}" "--repo" "${GITHUB_REPOSITORY}")
if [[ -n "${LABELS_TO_ADD}" ]]; then
echo " Adding labels: ${LABELS_TO_ADD}"
if ! gh pr edit "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --add-label "${LABELS_TO_ADD}" 2>/dev/null; then
echo " ⚠️ Failed to add some labels"
fi
echo " Syncing labels to add: ${LABELS_TO_ADD}"
EDIT_CMD+=("--add-label" "${LABELS_TO_ADD}")
fi
if [[ -n "${LABELS_TO_REMOVE}" ]]; then
echo " Removing labels: ${LABELS_TO_REMOVE}"
if ! gh pr edit "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --remove-label "${LABELS_TO_REMOVE}" 2>/dev/null; then
echo " ⚠️ Failed to remove some labels"
fi
echo " Syncing labels to remove: ${LABELS_TO_REMOVE}"
EDIT_CMD+=("--remove-label" "${LABELS_TO_REMOVE}")
fi
if [[ -z "${LABELS_TO_ADD}" ]] && [[ -z "${LABELS_TO_REMOVE}" ]]; then
echo "✅ Labels already synchronized"
fi
echo "needs_comment=false" >> "${GITHUB_OUTPUT}"
("${EDIT_CMD[@]}" || true)
fi
}
# If PR_NUMBER is set, process only that PR
if [[ -n "${PR_NUMBER:-}" ]]; then
if ! process_pr "${PR_NUMBER}"; then
echo "❌ Failed to process PR #${PR_NUMBER}"
exit 1
fi
else
# Otherwise, get all open PRs and process them
# The script logic will determine which ones need issue linking or label sync
echo "📥 Getting all open pull requests..."
if ! PR_NUMBERS=$(gh pr list --repo "${GITHUB_REPOSITORY}" --state open --limit 1000 --json number -q '.[].number' 2>/dev/null); then
echo "❌ Failed to fetch PR list"
exit 1
fi
if [[ -z "${PR_NUMBERS}" ]]; then
echo "✅ No open PRs found"
else
# Count the number of PRs
PR_COUNT=$(echo "${PR_NUMBERS}" | wc -w | tr -d ' ')
echo "📊 Found ${PR_COUNT} open PRs to process"
for pr_number in ${PR_NUMBERS}; do
if ! process_pr "${pr_number}"; then
echo "⚠️ Failed to process PR #${pr_number}, continuing with next PR..."
continue
fi
done
fi
if [[ -z "${GITHUB_REPOSITORY:-}" ]]; then
echo "‼️ Missing \$GITHUB_REPOSITORY - this must be run from GitHub Actions"
exit 1
fi
if [[ -z "${GITHUB_OUTPUT:-}" ]]; then
echo "‼️ Missing \$GITHUB_OUTPUT - this must be run from GitHub Actions"
exit 1
fi
JQ_EXTRACT_FIELDS='{
number: .number,
isDraft: .isDraft,
issue: (.closingIssuesReferences[0].number // (.body // "" | capture("(^|[^a-zA-Z0-9])#(?<num>[0-9]+)([^a-zA-Z0-9]|$)")? | .num) // "null"),
labels: [.labels[].name] | join(",")
}'
JQ_TSV_FORMAT='"\((.number | tostring))\t\(.isDraft)\t\((.issue // null) | tostring)\t\(.labels)"'
if [[ -n "${PR_NUMBER:-}" ]]; then
echo "🔄 Processing single PR #${PR_NUMBER}"
PR_DATA=$(gh pr view "${PR_NUMBER}" --repo "${GITHUB_REPOSITORY}" --json number,closingIssuesReferences,isDraft,body,labels 2>/dev/null) || {
echo "❌ Failed to fetch data for PR #${PR_NUMBER}"
exit 1
}
line=$(echo "${PR_DATA}" | jq -r "${JQ_EXTRACT_FIELDS} | ${JQ_TSV_FORMAT}")
IFS=$'\t' read -r pr_num is_draft issue_num current_labels <<< "${line}"
process_pr_optimized "${pr_num}" "${is_draft}" "${issue_num}" "${current_labels}"
else
echo "📥 Getting all open pull requests..."
PR_DATA_ALL=$(gh pr list --repo "${GITHUB_REPOSITORY}" --state open --limit 1000 --json number,closingIssuesReferences,isDraft,body,labels 2>/dev/null) || {
echo "❌ Failed to fetch PR list"
exit 1
}
PR_COUNT=$(echo "${PR_DATA_ALL}" | jq '. | length')
echo "📊 Found ${PR_COUNT} open PRs to process"
# Use a temporary file to avoid masking exit codes in process substitution
tmp_file=$(mktemp)
echo "${PR_DATA_ALL}" | jq -r ".[] | ${JQ_EXTRACT_FIELDS} | ${JQ_TSV_FORMAT}" > "${tmp_file}"
while read -r line; do
[[ -z "${line}" ]] && continue
IFS=$'\t' read -r pr_num is_draft issue_num current_labels <<< "${line}"
process_pr_optimized "${pr_num}" "${is_draft}" "${issue_num}" "${current_labels}"
done < "${tmp_file}"
rm -f "${tmp_file}"
fi
# Ensure output is always set, even if empty
if [[ -z "${PRS_NEEDING_COMMENT}" ]]; then
echo "prs_needing_comment=[]" >> "${GITHUB_OUTPUT}"
else
+99
View File
@@ -0,0 +1,99 @@
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
const fs = require('node:fs');
module.exports = async ({ github, context, core }) => {
const query = `
query($owner: String!, $repo: String!) {
repository(owner: $owner, name: $repo) {
issues(first: 50, states: OPEN, orderBy: {field: UPDATED_AT, direction: DESC}) {
nodes {
id
number
title
body
issueType {
name
}
labels(first: 20) {
nodes {
name
}
}
}
}
}
}
`;
try {
const result = await github.graphql(query, {
owner: context.repo.owner,
repo: context.repo.repo,
});
const issues = result.repository.issues.nodes;
const issuesNeedingAnalysis = [];
let syncedCount = 0;
for (const issue of issues) {
if (issue.issueType === null) {
const labelNames = issue.labels.nodes.map((l) => l.name);
const hasBug = labelNames.includes('kind/bug');
const hasFeature =
labelNames.includes('kind/feature') ||
labelNames.includes('kind/enhancement');
let issueTypeId = null;
if (hasBug) {
issueTypeId = 'IT_kwDOCaSVvs4BR7vP'; // Bug
} else if (hasFeature) {
issueTypeId = 'IT_kwDOCaSVvs4BR7vQ'; // Feature
}
if (issueTypeId) {
await github.graphql(
`
mutation($issueId: ID!, $issueTypeId: ID!) {
updateIssue(input: {id: $issueId, issueTypeId: $issueTypeId}) {
issue {
id
}
}
}
`,
{
issueId: issue.id,
issueTypeId: issueTypeId,
},
);
core.info(`Successfully synced Issue Type for #${issue.number}`);
syncedCount++;
} else {
// Needs analysis to determine kind/type
issuesNeedingAnalysis.push({
number: issue.number,
title: issue.title,
body: issue.body,
});
}
}
}
// Write issues needing analysis to a file so the AI can process them
fs.writeFileSync(
'no_type_issues.json',
JSON.stringify(issuesNeedingAnalysis),
);
core.info(`Synced ${syncedCount} issues from labels.`);
core.info(
`Found ${issuesNeedingAnalysis.length} issues missing both type and kind label to be analyzed.`,
);
} catch (error) {
core.setFailed(`Failed to sync issue types: ${error.message}`);
}
};
+389
View File
@@ -0,0 +1,389 @@
/**
* @license
* Copyright 2026 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
const { Octokit } = require('@octokit/rest');
/**
* Sync Maintainer Labels (Recursive with strict parent-child relationship detection)
* - Uses Native Sub-issues.
* - Uses Markdown Task Lists (- [ ] #123).
* - Filters for OPEN issues only.
* - Skips DUPLICATES.
* - Skips Pull Requests.
* - ONLY labels issues in the PUBLIC (gemini-cli) repo.
*/
const REPO_OWNER = 'google-gemini';
const PUBLIC_REPO = 'gemini-cli';
const PRIVATE_REPO = 'maintainers-gemini-cli';
const ALLOWED_REPOS = [PUBLIC_REPO, PRIVATE_REPO];
const ROOT_ISSUES = [
{ owner: REPO_OWNER, repo: PUBLIC_REPO, number: 15374 },
{ owner: REPO_OWNER, repo: PUBLIC_REPO, number: 15456 },
{ owner: REPO_OWNER, repo: PUBLIC_REPO, number: 15324 },
];
const TARGET_LABEL = '🔒 maintainer only';
const isDryRun =
process.argv.includes('--dry-run') || process.env.DRY_RUN === 'true';
const octokit = new Octokit({
auth: process.env.GITHUB_TOKEN,
});
/**
* Extracts child issue references from markdown Task Lists ONLY.
* e.g. - [ ] #123 or - [x] google-gemini/gemini-cli#123
*/
function extractTaskListLinks(text, contextOwner, contextRepo) {
if (!text) return [];
const childIssues = new Map();
const add = (owner, repo, number) => {
if (ALLOWED_REPOS.includes(repo)) {
const key = `${owner}/${repo}#${number}`;
childIssues.set(key, { owner, repo, number: parseInt(number, 10) });
}
};
// 1. Full URLs in task lists
const urlRegex =
/-\s+\[[ x]\].*https:\/\/github\.com\/([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)\/issues\/(\d+)\b/g;
let match;
while ((match = urlRegex.exec(text)) !== null) {
add(match[1], match[2], match[3]);
}
// 2. Cross-repo refs in task lists: owner/repo#123
const crossRepoRegex =
/-\s+\[[ x]\].*([a-zA-Z0-9._-]+)\/([a-zA-Z0-9._-]+)#(\d+)\b/g;
while ((match = crossRepoRegex.exec(text)) !== null) {
add(match[1], match[2], match[3]);
}
// 3. Short refs in task lists: #123
const shortRefRegex = /-\s+\[[ x]\].*#(\d+)\b/g;
while ((match = shortRefRegex.exec(text)) !== null) {
add(contextOwner, contextRepo, match[1]);
}
return Array.from(childIssues.values());
}
/**
* Fetches issue data via GraphQL with full pagination for sub-issues, comments, and labels.
*/
async function fetchIssueData(owner, repo, number) {
const query = `
query($owner:String!, $repo:String!, $number:Int!) {
repository(owner:$owner, name:$repo) {
issue(number:$number) {
state
title
body
labels(first: 100) {
nodes { name }
pageInfo { hasNextPage endCursor }
}
subIssues(first: 100) {
nodes {
number
repository {
name
owner { login }
}
}
pageInfo { hasNextPage endCursor }
}
comments(first: 100) {
nodes {
body
}
}
}
}
}
`;
try {
const response = await octokit.graphql(query, { owner, repo, number });
const data = response.repository.issue;
if (!data) return null;
const issue = {
state: data.state,
title: data.title,
body: data.body || '',
labels: data.labels.nodes.map((n) => n.name),
subIssues: [...data.subIssues.nodes],
comments: data.comments.nodes.map((n) => n.body),
};
// Paginate subIssues if there are more than 100
if (data.subIssues.pageInfo.hasNextPage) {
const moreSubIssues = await paginateConnection(
owner,
repo,
number,
'subIssues',
'number repository { name owner { login } }',
data.subIssues.pageInfo.endCursor,
);
issue.subIssues.push(...moreSubIssues);
}
// Paginate labels if there are more than 100 (unlikely but for completeness)
if (data.labels.pageInfo.hasNextPage) {
const moreLabels = await paginateConnection(
owner,
repo,
number,
'labels',
'name',
data.labels.pageInfo.endCursor,
(n) => n.name,
);
issue.labels.push(...moreLabels);
}
// Note: Comments are handled via Task Lists in body + first 100 comments.
// If an issue has > 100 comments with task lists, we'd need to paginate those too.
// Given the 1,100+ issue discovery count, 100 comments is usually sufficient,
// but we can add it for absolute completeness.
// (Skipping for now to avoid excessive API churn unless clearly needed).
return issue;
} catch (error) {
if (error.errors && error.errors.some((e) => e.type === 'NOT_FOUND')) {
return null;
}
throw error;
}
}
/**
* Helper to paginate any GraphQL connection.
*/
async function paginateConnection(
owner,
repo,
number,
connectionName,
nodeFields,
initialCursor,
transformNode = (n) => n,
) {
let additionalNodes = [];
let hasNext = true;
let cursor = initialCursor;
while (hasNext) {
const query = `
query($owner:String!, $repo:String!, $number:Int!, $cursor:String) {
repository(owner:$owner, name:$repo) {
issue(number:$number) {
${connectionName}(first: 100, after: $cursor) {
nodes { ${nodeFields} }
pageInfo { hasNextPage endCursor }
}
}
}
}
`;
const response = await octokit.graphql(query, {
owner,
repo,
number,
cursor,
});
const connection = response.repository.issue[connectionName];
additionalNodes.push(...connection.nodes.map(transformNode));
hasNext = connection.pageInfo.hasNextPage;
cursor = connection.pageInfo.endCursor;
}
return additionalNodes;
}
/**
* Validates if an issue should be processed (Open, not a duplicate, not a PR)
*/
function shouldProcess(issueData) {
if (!issueData) return false;
if (issueData.state !== 'OPEN') return false;
const labels = issueData.labels.map((l) => l.toLowerCase());
if (labels.includes('duplicate') || labels.includes('kind/duplicate')) {
return false;
}
return true;
}
async function getAllDescendants(roots) {
const allDescendants = new Map();
const visited = new Set();
const queue = [...roots];
for (const root of roots) {
visited.add(`${root.owner}/${root.repo}#${root.number}`);
}
console.log(`Starting discovery from ${roots.length} roots...`);
while (queue.length > 0) {
const current = queue.shift();
const currentKey = `${current.owner}/${current.repo}#${current.number}`;
try {
const issueData = await fetchIssueData(
current.owner,
current.repo,
current.number,
);
if (!shouldProcess(issueData)) {
continue;
}
// ONLY add to labeling list if it's in the PUBLIC repository
if (current.repo === PUBLIC_REPO) {
// Don't label the roots themselves
if (
!ROOT_ISSUES.some(
(r) => r.number === current.number && r.repo === current.repo,
)
) {
allDescendants.set(currentKey, {
...current,
title: issueData.title,
labels: issueData.labels,
});
}
}
const children = new Map();
// 1. Process Native Sub-issues
if (issueData.subIssues) {
for (const node of issueData.subIssues) {
const childOwner = node.repository.owner.login;
const childRepo = node.repository.name;
const childNumber = node.number;
const key = `${childOwner}/${childRepo}#${childNumber}`;
children.set(key, {
owner: childOwner,
repo: childRepo,
number: childNumber,
});
}
}
// 2. Process Markdown Task Lists in Body and Comments
let combinedText = issueData.body || '';
if (issueData.comments) {
for (const commentBody of issueData.comments) {
combinedText += '\n' + (commentBody || '');
}
}
const taskListLinks = extractTaskListLinks(
combinedText,
current.owner,
current.repo,
);
for (const link of taskListLinks) {
const key = `${link.owner}/${link.repo}#${link.number}`;
children.set(key, link);
}
// Queue children (regardless of which repo they are in, for recursion)
for (const [key, child] of children) {
if (!visited.has(key)) {
visited.add(key);
queue.push(child);
}
}
} catch (error) {
console.error(`Error processing ${currentKey}: ${error.message}`);
}
}
return Array.from(allDescendants.values());
}
async function run() {
if (isDryRun) {
console.log('=== DRY RUN MODE: No labels will be applied ===');
}
const descendants = await getAllDescendants(ROOT_ISSUES);
console.log(
`\nFound ${descendants.length} total unique open descendant issues in ${PUBLIC_REPO}.`,
);
for (const issueInfo of descendants) {
const issueKey = `${issueInfo.owner}/${issueInfo.repo}#${issueInfo.number}`;
try {
// Data is already available from the discovery phase
const hasLabel = issueInfo.labels.some((l) => l === TARGET_LABEL);
if (!hasLabel) {
if (isDryRun) {
console.log(
`[DRY RUN] Would label ${issueKey}: "${issueInfo.title}"`,
);
} else {
console.log(`Labeling ${issueKey}: "${issueInfo.title}"...`);
await octokit.rest.issues.addLabels({
owner: issueInfo.owner,
repo: issueInfo.repo,
issue_number: issueInfo.number,
labels: [TARGET_LABEL],
});
}
}
// Remove status/need-triage from maintainer-only issues since they
// don't need community triage. We always attempt removal rather than
// checking the (potentially stale) label snapshot, because the
// issue-opened-labeler workflow runs concurrently and may add the
// label after our snapshot was taken.
if (isDryRun) {
console.log(
`[DRY RUN] Would remove status/need-triage from ${issueKey}`,
);
} else {
try {
await octokit.rest.issues.removeLabel({
owner: issueInfo.owner,
repo: issueInfo.repo,
issue_number: issueInfo.number,
name: 'status/need-triage',
});
console.log(`Removed status/need-triage from ${issueKey}`);
} catch (removeError) {
// 404 means the label wasn't present — that's fine.
if (removeError.status === 404) {
console.log(
`status/need-triage not present on ${issueKey}, skipping.`,
);
} else {
throw removeError;
}
}
}
} catch (error) {
console.error(`Error processing label for ${issueKey}: ${error.message}`);
}
}
}
run().catch((error) => {
console.error(error);
process.exit(1);
});
@@ -0,0 +1,132 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: 'Agent Session Drift Check'
on:
pull_request:
branches:
- 'main'
- 'release/**'
paths:
- 'packages/cli/src/nonInteractiveCli.ts'
- 'packages/cli/src/nonInteractiveCliAgentSession.ts'
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
check-drift:
name: 'Check Agent Session Drift'
runs-on: 'ubuntu-latest'
if: "github.repository == 'google-gemini/gemini-cli'"
permissions:
contents: 'read'
pull-requests: 'write'
steps:
- name: 'Detect drift and comment'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea' # ratchet:actions/github-script@v8
with:
script: |-
// === Pair configuration — append here to cover more pairs ===
const PAIRS = [
{
legacy: 'packages/cli/src/nonInteractiveCli.ts',
session: 'packages/cli/src/nonInteractiveCliAgentSession.ts',
label: 'non-interactive CLI',
},
// Future pairs can be added here. Remember to also add both
// paths to the `paths:` filter at the top of this workflow.
// Example:
// {
// legacy: 'packages/core/src/agents/local-invocation.ts',
// session: 'packages/core/src/agents/local-session-invocation.ts',
// label: 'local subagent invocation',
// },
];
// ============================================================
const prNumber = context.payload.pull_request.number;
const { owner, repo } = context.repo;
// Use the API to list changed files — no checkout/git diff needed.
const files = await github.paginate(github.rest.pulls.listFiles, {
owner,
repo,
pull_number: prNumber,
per_page: 100,
});
const changed = new Set(files.map((f) => f.filename));
const warnings = [];
for (const { legacy, session, label } of PAIRS) {
const legacyChanged = changed.has(legacy);
const sessionChanged = changed.has(session);
if (legacyChanged && !sessionChanged) {
warnings.push(
`**${label}**: \`${legacy}\` was modified but \`${session}\` was not.`,
);
} else if (!legacyChanged && sessionChanged) {
warnings.push(
`**${label}**: \`${session}\` was modified but \`${legacy}\` was not.`,
);
}
}
const MARKER = '<!-- agent-session-drift-check -->';
// Look up our existing drift comment (for upsert/cleanup).
const comments = await github.paginate(github.rest.issues.listComments, {
owner,
repo,
issue_number: prNumber,
per_page: 100,
});
const existing = comments.find(
(c) => c.user?.type === 'Bot' && c.body?.includes(MARKER),
);
if (warnings.length === 0) {
core.info('No drift detected.');
// If drift was previously flagged and is now resolved, remove the comment.
if (existing) {
await github.rest.issues.deleteComment({
owner,
repo,
comment_id: existing.id,
});
core.info(`Deleted stale drift comment ${existing.id}.`);
}
return;
}
const body = [
MARKER,
'### ⚠️ Invocation Drift Warning',
'',
'The following file pairs should generally be kept in sync during the AgentSession migration:',
'',
...warnings.map((w) => `- ${w}`),
'',
'If this is intentional (e.g., a bug fix specific to one implementation), you can ignore this comment.',
'',
'_This check will be removed once the legacy implementations are deleted._',
].join('\n');
if (existing) {
core.info(`Updating existing drift comment ${existing.id}.`);
await github.rest.issues.updateComment({
owner,
repo,
comment_id: existing.id,
body,
});
} else {
core.info('Creating new drift comment.');
await github.rest.issues.createComment({
owner,
repo,
issue_number: prNumber,
body,
});
}
@@ -0,0 +1,65 @@
name: 'Build Unsigned Mac Binaries'
on:
workflow_dispatch:
workflow_call:
inputs:
ref:
description: 'The branch, tag, or SHA to build from.'
required: true
type: 'string'
permissions:
contents: 'read'
defaults:
run:
shell: 'bash'
jobs:
build-mac:
name: 'Build Unsigned (${{ matrix.arch }})'
runs-on: 'macos-latest'
strategy:
fail-fast: false
matrix:
arch: ['x64', 'arm64']
steps:
- name: 'Checkout'
uses: 'actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5' # ratchet:actions/checkout@v4
with:
ref: '${{ inputs.ref || github.ref }}'
persist-credentials: false
- name: 'Set up Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version-file: '.nvmrc'
architecture: '${{ matrix.arch }}'
cache: 'npm'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build Binary'
env:
SKIP_SIGNING: 'true'
run: 'npm run build:binary'
- name: 'Verify Output Exists'
run: |
if [ -f "dist/darwin-${{ matrix.arch }}/gemini" ]; then
echo "Binary found at dist/darwin-${{ matrix.arch }}/gemini"
else
echo "Error: Binary not found in dist/darwin-${{ matrix.arch }}/"
ls -R dist/
exit 1
fi
- name: 'Upload Artifact'
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'gemini-darwin-${{ matrix.arch }}-unsigned'
path: 'dist/darwin-${{ matrix.arch }}/gemini'
retention-days: 14
+406
View File
@@ -0,0 +1,406 @@
name: 'Testing: E2E (Chained)'
on:
push:
branches:
- 'main'
merge_group:
workflow_run:
workflows: ['Trigger E2E']
types: ['completed']
workflow_dispatch:
inputs:
head_sha:
description: 'SHA of the commit to test'
required: true
repo_name:
description: 'Repository name (e.g., owner/repo)'
required: true
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.event.workflow_run.head_branch || github.ref }}'
cancel-in-progress: |-
${{ github.event_name != 'push' && github.event_name != 'merge_group' }}
permissions:
contents: 'read'
statuses: 'write'
jobs:
merge_queue_skipper:
name: 'Merge Queue Skipper'
permissions: 'read-all'
runs-on: 'gemini-cli-ubuntu-16-core'
if: "github.repository == 'google-gemini/gemini-cli'"
outputs:
skip: '${{ steps.merge-queue-e2e-skipper.outputs.skip-check }}'
steps:
- id: 'merge-queue-e2e-skipper'
uses: 'cariad-tech/merge-queue-ci-skipper@1032489e59437862c90a08a2c92809c903883772' # ratchet:cariad-tech/merge-queue-ci-skipper@main
with:
secret: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
continue-on-error: true
download_repo_name:
runs-on: 'gemini-cli-ubuntu-16-core'
if: "github.repository == 'google-gemini/gemini-cli' && (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_run')"
outputs:
repo_name: '${{ steps.output-repo-name.outputs.repo_name }}'
head_sha: '${{ steps.output-repo-name.outputs.head_sha }}'
steps:
- name: 'Mock Repo Artifact'
if: "${{ github.event_name == 'workflow_dispatch' }}"
env:
REPO_NAME: '${{ github.event.inputs.repo_name }}'
run: |
mkdir -p ./pr
echo "${REPO_NAME}" > ./pr/repo_name
- uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'repo_name'
path: 'pr/'
- name: 'Download the repo_name artifact'
uses: 'actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0' # ratchet:actions/download-artifact@v5
env:
RUN_ID: "${{ github.event_name == 'workflow_run' && github.event.workflow_run.id || github.run_id }}"
with:
github-token: '${{ secrets.GITHUB_TOKEN }}'
name: 'repo_name'
run-id: '${{ env.RUN_ID }}'
path: '${{ runner.temp }}/artifacts'
- name: 'Output Repo Name and SHA'
id: 'output-repo-name'
uses: 'actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd' # ratchet:actions/github-script@v8
with:
github-token: '${{ secrets.GITHUB_TOKEN }}'
script: |
const fs = require('fs');
const path = require('path');
const temp = '${{ runner.temp }}/artifacts';
const repoPath = path.join(temp, 'repo_name');
if (fs.existsSync(repoPath)) {
const repo_name = String(fs.readFileSync(repoPath)).trim();
core.setOutput('repo_name', repo_name);
}
const shaPath = path.join(temp, 'head_sha');
if (fs.existsSync(shaPath)) {
const head_sha = String(fs.readFileSync(shaPath)).trim();
core.setOutput('head_sha', head_sha);
}
parse_run_context:
name: 'Parse run context'
runs-on: 'gemini-cli-ubuntu-16-core'
needs: 'download_repo_name'
if: "github.repository == 'google-gemini/gemini-cli' && always()"
outputs:
repository: '${{ steps.set_context.outputs.REPO }}'
sha: '${{ steps.set_context.outputs.SHA }}'
steps:
- id: 'set_context'
name: 'Set dynamic repository and SHA'
env:
REPO: '${{ needs.download_repo_name.outputs.repo_name || github.repository }}'
SHA: '${{ needs.download_repo_name.outputs.head_sha || github.event.inputs.head_sha || github.event.workflow_run.head_sha || github.sha }}'
shell: 'bash'
run: |
echo "REPO=$REPO" >> "$GITHUB_OUTPUT"
echo "SHA=$SHA" >> "$GITHUB_OUTPUT"
set_pending_status:
runs-on: 'gemini-cli-ubuntu-16-core'
permissions: 'write-all'
needs:
- 'parse_run_context'
if: "github.repository == 'google-gemini/gemini-cli' && always()"
steps:
- name: 'Set pending status'
uses: 'myrotvorets/set-commit-status-action@16037e056d73b2d3c88e37e393ff369047f70886' # ratchet:myrotvorets/set-commit-status-action@master
if: "github.repository == 'google-gemini/gemini-cli' && always()"
with:
allowForks: 'true'
repo: '${{ github.repository }}'
sha: '${{ needs.parse_run_context.outputs.sha }}'
token: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
status: 'pending'
context: 'E2E (Chained)'
e2e_linux:
name: 'E2E Test (Linux) - ${{ matrix.sandbox }}'
needs:
- 'merge_queue_skipper'
- 'parse_run_context'
runs-on: 'gemini-cli-ubuntu-16-core'
if: |
github.repository == 'google-gemini/gemini-cli' && always() && (needs.merge_queue_skipper.result !='success' || needs.merge_queue_skipper.outputs.skip != 'true')
strategy:
fail-fast: false
matrix:
sandbox:
- 'sandbox:none'
- 'sandbox:docker'
node-version:
- '20.x'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ needs.parse_run_context.outputs.sha }}'
repository: '${{ needs.parse_run_context.outputs.repository }}'
persist-credentials: false
- name: 'Set up Node.js ${{ matrix.node-version }}'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '${{ matrix.node-version }}'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Set up Docker'
if: "${{matrix.sandbox == 'sandbox:docker'}}"
uses: 'docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435' # ratchet:docker/setup-buildx-action@v3
- name: 'Run E2E tests'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
KEEP_OUTPUT: 'true'
VERBOSE: 'true'
BUILD_SANDBOX_FLAGS: '--cache-from type=gha --cache-to type=gha,mode=max'
shell: 'bash'
run: |
if [[ "${{ matrix.sandbox }}" == "sandbox:docker" ]]; then
npm run test:integration:sandbox:docker
else
npm run test:integration:sandbox:none
fi
e2e_mac:
name: 'E2E Test (macOS)'
needs:
- 'merge_queue_skipper'
- 'parse_run_context'
runs-on: 'macos-latest-large'
if: |
github.repository == 'google-gemini/gemini-cli' && always() && (needs.merge_queue_skipper.result !='success' || needs.merge_queue_skipper.outputs.skip != 'true')
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ needs.parse_run_context.outputs.sha }}'
repository: '${{ needs.parse_run_context.outputs.repository }}'
persist-credentials: false
- name: 'Set up Node.js 20.x'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '20.x'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Fix rollup optional dependencies on macOS'
if: "${{runner.os == 'macOS'}}"
run: |
npm cache clean --force
- name: 'Run E2E tests (non-Windows)'
if: "${{runner.os != 'Windows'}}"
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
KEEP_OUTPUT: 'true'
SANDBOX: 'sandbox:none'
VERBOSE: 'true'
run: 'npm run test:integration:sandbox:none'
e2e_windows:
name: 'Slow E2E - Win'
needs:
- 'merge_queue_skipper'
- 'parse_run_context'
if: |
github.repository == 'google-gemini/gemini-cli' && always() && (needs.merge_queue_skipper.result !='success' || needs.merge_queue_skipper.outputs.skip != 'true')
runs-on: 'gemini-cli-windows-16-core'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ needs.parse_run_context.outputs.sha }}'
repository: '${{ needs.parse_run_context.outputs.repository }}'
persist-credentials: false
- name: 'Set up Node.js 20.x'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '20.x'
cache: 'npm'
- name: 'Configure Windows Defender exclusions'
run: |
Add-MpPreference -ExclusionPath $env:GITHUB_WORKSPACE -Force
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\node_modules" -Force
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\packages" -Force
Add-MpPreference -ExclusionPath "$env:TEMP" -Force
shell: 'pwsh'
- name: 'Configure npm for Windows performance'
run: |
npm config set progress false
npm config set audit false
npm config set fund false
npm config set loglevel error
npm config set maxsockets 32
npm config set registry https://registry.npmjs.org/
shell: 'pwsh'
- name: 'Install dependencies'
run: 'npm ci'
shell: 'pwsh'
- name: 'Build project'
run: 'npm run build'
shell: 'pwsh'
- name: 'Ensure Chrome is available'
shell: 'pwsh'
run: |
$chromePaths = @(
"${env:ProgramFiles}\Google\Chrome\Application\chrome.exe",
"${env:ProgramFiles(x86)}\Google\Chrome\Application\chrome.exe"
)
$chromeExists = $chromePaths | Where-Object { Test-Path $_ } | Select-Object -First 1
if (-not $chromeExists) {
Write-Host 'Chrome not found, installing via Chocolatey...'
choco install googlechrome -y --no-progress --ignore-checksums
}
$installed = $chromePaths | Where-Object { Test-Path $_ } | Select-Object -First 1
if ($installed) {
Write-Host "Chrome found at: $installed"
& $installed --version
} else {
Write-Error 'Chrome installation failed'
exit 1
}
- name: 'Run E2E tests'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
KEEP_OUTPUT: 'true'
SANDBOX: 'sandbox:none'
VERBOSE: 'true'
NODE_OPTIONS: '--max-old-space-size=32768 --max-semi-space-size=256'
UV_THREADPOOL_SIZE: '32'
NODE_ENV: 'test'
shell: 'pwsh'
run: 'npm run test:integration:sandbox:none'
evals:
name: 'Evals (ALWAYS_PASSING)'
needs:
- 'merge_queue_skipper'
- 'parse_run_context'
runs-on: 'gemini-cli-ubuntu-16-core'
if: |
github.repository == 'google-gemini/gemini-cli' && always() && (needs.merge_queue_skipper.result !='success' || needs.merge_queue_skipper.outputs.skip != 'true')
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ needs.parse_run_context.outputs.sha }}'
repository: '${{ needs.parse_run_context.outputs.repository }}'
persist-credentials: false
fetch-depth: 0
- name: 'Set up Node.js 20.x'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '20.x'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Check if evals should run'
id: 'check_evals'
run: |
SHOULD_RUN=$(node scripts/changed_prompt.js)
echo "should_run=$SHOULD_RUN" >> "$GITHUB_OUTPUT"
- name: 'Run Evals (Required to pass)'
if: "${{ steps.check_evals.outputs.should_run == 'true' }}"
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
GEMINI_MODEL: 'gemini-3-pro-preview'
# Only run always passes behavioral tests.
EVAL_SUITE_TYPE: 'behavioral'
# Disable Vitest internal retries to avoid double-retrying;
# custom retry logic is handled in evals/test-helper.ts
VITEST_RETRY: 0
run: 'npm run test:always_passing_evals'
- name: 'Upload Reliability Logs'
if: "always() && steps.check_evals.outputs.should_run == 'true'"
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'eval-logs-${{ github.run_id }}-${{ github.run_attempt }}'
path: 'evals/logs/api-reliability.jsonl'
retention-days: 7
e2e:
name: 'E2E'
if: |
github.repository == 'google-gemini/gemini-cli' && always() && (needs.merge_queue_skipper.result !='success' || needs.merge_queue_skipper.outputs.skip != 'true')
needs:
- 'e2e_linux'
- 'e2e_mac'
- 'e2e_windows'
- 'evals'
- 'merge_queue_skipper'
runs-on: 'gemini-cli-ubuntu-16-core'
steps:
- name: 'Check E2E test results'
run: |
if [[ ${NEEDS_E2E_LINUX_RESULT} != 'success' || \
${NEEDS_E2E_MAC_RESULT} != 'success' || \
${NEEDS_E2E_WINDOWS_RESULT} != 'success' || \
${NEEDS_EVALS_RESULT} != 'success' ]]; then
echo "One or more E2E jobs failed."
exit 1
fi
echo "All required E2E jobs passed!"
env:
NEEDS_E2E_LINUX_RESULT: '${{ needs.e2e_linux.result }}'
NEEDS_E2E_MAC_RESULT: '${{ needs.e2e_mac.result }}'
NEEDS_E2E_WINDOWS_RESULT: '${{ needs.e2e_windows.result }}'
NEEDS_EVALS_RESULT: '${{ needs.evals.result }}'
set_workflow_status:
runs-on: 'gemini-cli-ubuntu-16-core'
permissions: 'write-all'
if: "github.repository == 'google-gemini/gemini-cli' && always()"
needs:
- 'parse_run_context'
- 'e2e'
steps:
- name: 'Set workflow status'
uses: 'myrotvorets/set-commit-status-action@16037e056d73b2d3c88e37e393ff369047f70886' # ratchet:myrotvorets/set-commit-status-action@master
if: "github.repository == 'google-gemini/gemini-cli' && always()"
with:
allowForks: 'true'
repo: '${{ github.repository }}'
sha: '${{ needs.parse_run_context.outputs.sha }}'
token: '${{ secrets.GITHUB_TOKEN }}'
status: '${{ needs.e2e.result }}'
context: 'E2E (Chained)'
+377 -256
View File
@@ -1,4 +1,4 @@
name: 'Gemini CLI CI'
name: 'Testing: CI'
on:
push:
@@ -10,6 +10,13 @@ on:
- 'main'
- 'release/**'
merge_group:
workflow_dispatch:
inputs:
branch_ref:
description: 'Branch to run on'
required: true
default: 'main'
type: 'string'
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
@@ -25,68 +32,34 @@ defaults:
run:
shell: 'bash'
env:
ACTIONLINT_VERSION: '1.7.7'
SHELLCHECK_VERSION: '0.11.0'
YAMLLINT_VERSION: '1.35.1'
jobs:
#
# Lint: GitHub Actions
#
lint_github_actions:
name: 'Lint (GitHub Actions)'
runs-on: 'ubuntu-latest'
merge_queue_skipper:
permissions: 'read-all'
name: 'Merge Queue Skipper'
runs-on: 'gemini-cli-ubuntu-16-core'
if: "github.repository == 'google-gemini/gemini-cli'"
outputs:
skip: '${{ steps.merge-queue-ci-skipper.outputs.skip-check }}'
steps:
- id: 'merge-queue-ci-skipper'
uses: 'cariad-tech/merge-queue-ci-skipper@1032489e59437862c90a08a2c92809c903883772' # ratchet:cariad-tech/merge-queue-ci-skipper@main
with:
secret: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
lint:
name: 'Lint'
runs-on: 'gemini-cli-ubuntu-16-core'
needs: 'merge_queue_skipper'
if: "github.repository == 'google-gemini/gemini-cli' && needs.merge_queue_skipper.outputs.skip == 'false'"
env:
GEMINI_LINT_TEMP_DIR: '${{ github.workspace }}/.gemini-linters'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
fetch-depth: 1
- name: 'Install shellcheck' # Actionlint uses shellcheck
run: |-
mkdir -p "${RUNNER_TEMP}/shellcheck"
curl -sSLo "${RUNNER_TEMP}/.shellcheck.txz" "https://github.com/koalaman/shellcheck/releases/download/v${SHELLCHECK_VERSION}/shellcheck-v${SHELLCHECK_VERSION}.linux.x86_64.tar.xz"
tar -xf "${RUNNER_TEMP}/.shellcheck.txz" -C "${RUNNER_TEMP}/shellcheck" --strip-components=1
echo "${RUNNER_TEMP}/shellcheck" >> "${GITHUB_PATH}"
- name: 'Install actionlint'
run: |-
mkdir -p "${RUNNER_TEMP}/actionlint"
curl -sSLo "${RUNNER_TEMP}/.actionlint.tgz" "https://github.com/rhysd/actionlint/releases/download/v${ACTIONLINT_VERSION}/actionlint_${ACTIONLINT_VERSION}_linux_amd64.tar.gz"
tar -xzf "${RUNNER_TEMP}/.actionlint.tgz" -C "${RUNNER_TEMP}/actionlint"
echo "${RUNNER_TEMP}/actionlint" >> "${GITHUB_PATH}"
# For actionlint, we specifically ignore shellcheck rules that are
# annoying or unhelpful. See the shellcheck action for a description.
- name: 'Run actionlint'
run: |-
actionlint \
-color \
-format '{{range $err := .}}::error file={{$err.Filepath}},line={{$err.Line}},col={{$err.Column}}::{{$err.Filepath}}@{{$err.Line}} {{$err.Message}}%0A```%0A{{replace $err.Snippet "\\n" "%0A"}}%0A```\n{{end}}' \
-ignore 'SC2002:' \
-ignore 'SC2016:' \
-ignore 'SC2129:' \
-ignore 'label ".+" is unknown'
- name: 'Run ratchet'
uses: 'sethvargo/ratchet@8b4ca256dbed184350608a3023620f267f0a5253' # ratchet:sethvargo/ratchet@v0.11.4
with:
files: |-
.github/workflows/*.yml
.github/actions/**/*.yml
#
# Lint: Javascript
#
lint_javascript:
name: 'Lint (Javascript)'
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
fetch-depth: 1
persist-credentials: false
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
fetch-depth: 0
- name: 'Set up Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4.4.0
@@ -94,181 +67,101 @@ jobs:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Run lockfile check'
run: |-
npm run check:lockfile
- name: 'Cache Linters'
uses: 'actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830' # ratchet:actions/cache@v4
with:
path: '${{ env.GEMINI_LINT_TEMP_DIR }}'
key: "${{ runner.os }}-${{ runner.arch }}-linters-${{ hashFiles('scripts/lint.js') }}"
- name: 'Install dependencies'
run: |-
npm ci
run: 'npm ci'
- name: 'Run formatter check'
run: |-
npm run format
git diff --exit-code
- name: 'Run linter'
run: |-
npm run lint:ci
- name: 'Run linter on integration tests'
run: |-
npx eslint integration-tests --max-warnings 0
- name: 'Run formatter on integration tests'
run: |-
npx prettier --check integration-tests
git diff --exit-code
- name: 'Build project'
run: |-
npm run build
- name: 'Run type check'
run: |-
npm run typecheck
#
# Lint: Shell
#
lint_shell:
name: 'Lint (Shell)'
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: 'Cache ESLint'
uses: 'actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830' # ratchet:actions/cache@v4
with:
fetch-depth: 1
path: '.eslintcache'
key: "${{ runner.os }}-eslint-${{ hashFiles('package-lock.json', 'eslint.config.js') }}"
- name: 'Install shellcheck'
run: |-
mkdir -p "${RUNNER_TEMP}/shellcheck"
curl -sSLo "${RUNNER_TEMP}/.shellcheck.txz" "https://github.com/koalaman/shellcheck/releases/download/v${SHELLCHECK_VERSION}/shellcheck-v${SHELLCHECK_VERSION}.linux.x86_64.tar.xz"
tar -xf "${RUNNER_TEMP}/.shellcheck.txz" -C "${RUNNER_TEMP}/shellcheck" --strip-components=1
echo "${RUNNER_TEMP}/shellcheck" >> "${GITHUB_PATH}"
- name: 'Validate NOTICES.txt'
run: 'git diff --exit-code packages/vscode-ide-companion/NOTICES.txt'
- name: 'Install shellcheck problem matcher'
run: |-
cat > "${RUNNER_TEMP}/shellcheck/problem-matcher-lint-shell.json" <<"EOF"
{
"problemMatcher": [
{
"owner": "lint_shell",
"pattern": [
{
"regexp": "^(.*):(\\\\d+):(\\\\d+):\\\\s+(?:fatal\\\\s+)?(warning|error):\\\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
]
}
]
}
EOF
echo "::add-matcher::${RUNNER_TEMP}/shellcheck/problem-matcher-lint-shell.json"
- name: 'Check lockfile'
run: 'npm run check:lockfile'
- name: 'Install linters'
run: 'node scripts/lint.js --setup'
- name: 'Run ESLint'
run: 'node scripts/lint.js --eslint'
- name: 'Run actionlint'
run: 'node scripts/lint.js --actionlint'
# Note that only warning and error severity show up in the github files
# page. So we replace 'style' and 'note' with 'warning' to make it show
# up.
#
# We also try and find all bash scripts even if they don't have an
# explicit extension.
#
# We explicitly ignore the following rules:
#
# - SC2002: This rule suggests using "cmd < file" instead of "cat | cmd".
# While < is more efficient, pipes are much more readable and expected.
#
# - SC2129: This rule suggests grouping multiple writes to a file in
# braces like "{ cmd1; cmd2; } >> file". This is unexpected and less
# readable.
#
# - SC2310: This is an optional warning that only appears with "set -e"
# and when a command is used as a conditional.
- name: 'Run shellcheck'
run: |-
git ls-files | grep -E '^([^.]+|.*\.(sh|zsh|bash))$' | xargs file --mime-type \
| grep "text/x-shellscript" | awk '{ print substr($1, 1, length($1)-1) }' \
| xargs shellcheck \
--check-sourced \
--enable=all \
--exclude=SC2002,SC2129,SC2310 \
--severity=style \
--format=gcc \
--color=never | sed -e 's/note:/warning:/g' -e 's/style:/warning:/g'
#
# Lint: YAML
#
lint_yaml:
name: 'Lint (YAML)'
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
fetch-depth: 1
- name: 'Setup Python'
uses: 'actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065' # ratchet:actions/setup-python@v5
with:
python-version: '3'
- name: 'Install yamllint'
run: |-
pip install --user "yamllint==${YAMLLINT_VERSION}"
run: 'node scripts/lint.js --shellcheck'
- name: 'Run yamllint'
run: |-
git ls-files | grep -E '\.(yaml|yml)' | xargs yamllint --format github
run: 'node scripts/lint.js --yamllint'
#
# Lint: All
#
# This is a virtual job that other jobs depend on to wait for all linters to
# finish. It's also used to ensure linting happens on CI via required
# workflows.
lint:
name: 'Lint'
needs:
- 'lint_github_actions'
- 'lint_javascript'
- 'lint_shell'
- 'lint_yaml'
- name: 'Build project for typecheck'
run: 'npm run build'
- name: 'Run typecheck'
run: 'npm run typecheck'
- name: 'Run Prettier'
run: 'node scripts/lint.js --prettier'
- name: 'Build docs prerequisites'
run: 'npm run predocs:settings'
- name: 'Verify settings docs'
run: 'npm run docs:settings -- --check'
- name: 'Run sensitive keyword linter'
run: 'node scripts/lint.js --sensitive-keywords'
- name: 'Run GitHub Actions pinning linter'
run: 'node scripts/lint.js --check-github-actions-pinning'
link_checker:
name: 'Link Checker'
runs-on: 'ubuntu-latest'
if: "github.repository == 'google-gemini/gemini-cli'"
steps:
- run: |-
echo 'All linters finished!'
#
# Test: Node
#
test:
name: 'Test'
runs-on: '${{ matrix.os }}'
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Link Checker'
uses: 'lycheeverse/lychee-action@885c65f3dc543b57c898c8099f4e08c8afd178a2' # ratchet: lycheeverse/lychee-action@v2.6.1
with:
args: '--verbose --accept 200,503 ./**/*.md'
fail: true
test_linux:
name: 'Test (Linux) - ${{ matrix.node-version }}, ${{ matrix.shard }}'
runs-on: 'gemini-cli-ubuntu-16-core'
needs:
- 'lint'
- 'merge_queue_skipper'
if: "github.repository == 'google-gemini/gemini-cli' && needs.merge_queue_skipper.outputs.skip == 'false'"
permissions:
contents: 'read'
checks: 'write'
pull-requests: 'write'
strategy:
fail-fast: false # So we can see all test failures
matrix:
os:
- 'macos-latest'
- 'ubuntu-latest'
- 'windows-latest'
node-version:
- '20.x'
- '22.x'
- '24.x'
shard:
- 'cli'
- 'others'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Set up Node.js ${{ matrix.node-version }}'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
@@ -277,24 +170,58 @@ jobs:
cache: 'npm'
- name: 'Build project'
run: |-
npm run build
run: 'npm run build'
- name: 'Install system dependencies'
run: |
sudo apt-get update -qq && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq bubblewrap
# Ubuntu 24.04+ requires this to allow bwrap to function in CI
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 || true
- name: 'Install dependencies for testing'
run: |-
npm ci
run: 'npm ci'
- name: 'Run tests and generate reports'
env:
NO_COLOR: true
run: 'npm run test:ci'
GEMINI_CLI_TRUST_WORKSPACE: true
run: |
if [[ "${{ matrix.shard }}" == "cli" ]]; then
npm run test:ci --workspace "@google/gemini-cli"
else
# Explicitly list non-cli packages to ensure they are sharded correctly
npm run test:ci --workspace "@google/gemini-cli-core" --workspace "@google/gemini-cli-a2a-server" --workspace "gemini-cli-vscode-ide-companion" --workspace "@google/gemini-cli-test-utils" --if-present -- --coverage.enabled=false
npm run test:scripts
fi
- name: 'Bundle'
run: 'npm run bundle'
- name: 'Smoke test bundle'
run: 'node ./bundle/gemini.js --version'
- name: 'Smoke test npx installation'
run: |
# 1. Package the project into a tarball
TARBALL=$(npm pack | tail -n 1)
# 2. Move to a fresh directory for isolation
mkdir -p ../smoke-test-dir
mv "$TARBALL" ../smoke-test-dir/
cd ../smoke-test-dir
# 3. Run npx from the tarball
npx "./$TARBALL" --version
- name: 'Wait for file system sync'
run: 'sleep 2'
- name: 'Publish Test Report (for non-forks)'
if: |-
${{ always() && (github.event.pull_request.head.repo.full_name == github.repository) }}
uses: 'dorny/test-reporter@dc3a92680fcc15842eef52e8c4606ea7ce6bd3f3' # ratchet:dorny/test-reporter@v2
with:
name: 'Test Results (Node ${{ matrix.node-version }})'
name: 'Test Results (Node ${{ runner.os }}, ${{ matrix.node-version }}, ${{ matrix.shard }})'
path: 'packages/*/junit.xml'
reporter: 'java-junit'
fail-on-error: 'false'
@@ -304,7 +231,98 @@ jobs:
${{ always() && (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }}
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'test-results-fork-${{ matrix.node-version }}-${{ matrix.os }}'
name: 'test-results-fork-${{ runner.os }}-${{ matrix.node-version }}-${{ matrix.shard }}'
path: 'packages/*/junit.xml'
test_mac:
name: 'Test (Mac) - ${{ matrix.node-version }}, ${{ matrix.shard }}'
runs-on: 'macos-latest-large'
needs:
- 'merge_queue_skipper'
if: "github.repository == 'google-gemini/gemini-cli' && needs.merge_queue_skipper.outputs.skip == 'false'"
permissions:
contents: 'read'
checks: 'write'
pull-requests: 'write'
continue-on-error: true
strategy:
matrix:
node-version:
- '20.x'
- '22.x'
- '24.x'
shard:
- 'cli'
- 'others'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Set up Node.js ${{ matrix.node-version }}'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version: '${{ matrix.node-version }}'
cache: 'npm'
- name: 'Build project'
run: 'npm run build'
- name: 'Install dependencies for testing'
run: 'npm ci'
- name: 'Run tests and generate reports'
env:
NO_COLOR: true
GEMINI_CLI_TRUST_WORKSPACE: true
run: |
if [[ "${{ matrix.shard }}" == "cli" ]]; then
npm run test:ci --workspace "@google/gemini-cli" -- --coverage.enabled=false
else
# Explicitly list non-cli packages to ensure they are sharded correctly
npm run test:ci --workspace "@google/gemini-cli-core" --workspace "@google/gemini-cli-a2a-server" --workspace "gemini-cli-vscode-ide-companion" --workspace "@google/gemini-cli-test-utils" --if-present -- --coverage.enabled=false
npm run test:scripts
fi
- name: 'Bundle'
run: 'npm run bundle'
- name: 'Smoke test bundle'
run: 'node ./bundle/gemini.js --version'
- name: 'Smoke test npx installation'
run: |
# 1. Package the project into a tarball
TARBALL=$(npm pack | tail -n 1)
# 2. Move to a fresh directory for isolation
mkdir -p ../smoke-test-dir
mv "$TARBALL" ../smoke-test-dir/
cd ../smoke-test-dir
# 3. Run npx from the tarball
npx "./$TARBALL" --version
- name: 'Wait for file system sync'
run: 'sleep 2'
- name: 'Publish Test Report (for non-forks)'
if: |-
${{ always() && (github.event.pull_request.head.repo.full_name == github.repository) }}
uses: 'dorny/test-reporter@dc3a92680fcc15842eef52e8c4606ea7ce6bd3f3' # ratchet:dorny/test-reporter@v2
with:
name: 'Test Results (Node ${{ runner.os }}, ${{ matrix.node-version }}, ${{ matrix.shard }})'
path: 'packages/*/junit.xml'
reporter: 'java-junit'
fail-on-error: 'false'
- name: 'Upload Test Results Artifact (for forks)'
if: |-
${{ always() && (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }}
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'test-results-fork-${{ runner.os }}-${{ matrix.node-version }}-${{ matrix.shard }}'
path: 'packages/*/junit.xml'
- name: 'Upload coverage reports'
@@ -312,50 +330,14 @@ jobs:
${{ always() }}
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'coverage-reports-${{ matrix.node-version }}-${{ matrix.os }}'
name: 'coverage-reports-${{ runner.os }}-${{ matrix.node-version }}-${{ matrix.shard }}'
path: 'packages/*/coverage'
post_coverage_comment:
name: 'Post Coverage Comment'
runs-on: 'ubuntu-latest'
needs: 'test'
if: |-
${{ always() && github.event_name == 'pull_request' && (github.event.pull_request.head.repo.full_name == github.repository) }}
continue-on-error: true
permissions:
contents: 'read' # For checkout
pull-requests: 'write' # For commenting
strategy:
matrix:
# Reduce noise by only posting the comment once
os:
- 'ubuntu-latest'
node-version:
- '22.x'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: 'Download coverage reports artifact'
uses: 'actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0' # ratchet:actions/download-artifact@v5
with:
name: 'coverage-reports-${{ matrix.node-version }}-${{ matrix.os }}'
path: 'coverage_artifact' # Download to a specific directory
- name: 'Post Coverage Comment using Composite Action'
uses: './.github/actions/post-coverage-comment' # Path to the composite action directory
with:
cli_json_file: 'coverage_artifact/cli/coverage/coverage-summary.json'
core_json_file: 'coverage_artifact/core/coverage/coverage-summary.json'
cli_full_text_summary_file: 'coverage_artifact/cli/coverage/full-text-summary.txt'
core_full_text_summary_file: 'coverage_artifact/core/coverage/full-text-summary.txt'
node_version: '${{ matrix.node-version }}'
os: '${{ matrix.os }}'
github_token: '${{ secrets.GITHUB_TOKEN }}'
codeql:
name: 'CodeQL'
runs-on: 'ubuntu-latest'
runs-on: 'gemini-cli-ubuntu-16-core'
needs: 'merge_queue_skipper'
if: "github.repository == 'google-gemini/gemini-cli' && needs.merge_queue_skipper.outputs.skip == 'false'"
permissions:
actions: 'read'
contents: 'read'
@@ -363,6 +345,9 @@ jobs:
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
- name: 'Initialize CodeQL'
uses: 'github/codeql-action/init@df559355d593797519d70b90fc8edd5db049e7a2' # ratchet:github/codeql-action/init@v3
@@ -375,9 +360,9 @@ jobs:
# Check for changes in bundle size.
bundle_size:
name: 'Check Bundle Size'
if: |-
${{ github.event_name != 'merge_group' }}
runs-on: 'ubuntu-latest'
needs: 'merge_queue_skipper'
if: "github.repository == 'google-gemini/gemini-cli' && github.event_name == 'pull_request' && needs.merge_queue_skipper.outputs.skip == 'false'"
runs-on: 'gemini-cli-ubuntu-16-core'
permissions:
contents: 'read' # For checkout
pull-requests: 'write' # For commenting
@@ -386,6 +371,8 @@ jobs:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
fetch-depth: 1
- uses: 'preactjs/compressed-size-action@946a292cd35bd1088e0d7eb92b69d1a8d5b5d76a'
@@ -395,3 +382,137 @@ jobs:
minimum-change-threshold: '1000'
compression: 'none'
clean-script: 'clean'
test_windows:
name: 'Slow Test - Win - ${{ matrix.shard }}'
runs-on: 'gemini-cli-windows-16-core'
needs: 'merge_queue_skipper'
if: "github.repository == 'google-gemini/gemini-cli' && needs.merge_queue_skipper.outputs.skip == 'false'"
timeout-minutes: 60
strategy:
matrix:
shard:
- 'cli'
- 'others'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
- name: 'Set up Node.js 20.x'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version: '20.x'
cache: 'npm'
- name: 'Configure Windows Defender exclusions'
run: |
Add-MpPreference -ExclusionPath $env:GITHUB_WORKSPACE -Force
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\node_modules" -Force
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\packages" -Force
Add-MpPreference -ExclusionPath "$env:TEMP" -Force
shell: 'pwsh'
- name: 'Configure npm for Windows performance'
run: |
npm config set progress false
npm config set audit false
npm config set fund false
npm config set loglevel error
npm config set maxsockets 32
npm config set registry https://registry.npmjs.org/
shell: 'pwsh'
- name: 'Install dependencies'
run: 'npm ci'
shell: 'pwsh'
- name: 'Build project'
run: 'npm run build'
shell: 'pwsh'
env:
NODE_OPTIONS: '--max-old-space-size=32768 --max-semi-space-size=256'
UV_THREADPOOL_SIZE: '32'
NODE_ENV: 'production'
- name: 'Run tests and generate reports'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
NO_COLOR: true
GEMINI_CLI_TRUST_WORKSPACE: true
NODE_OPTIONS: '--max-old-space-size=32768 --max-semi-space-size=256'
UV_THREADPOOL_SIZE: '32'
NODE_ENV: 'test'
run: |
if ("${{ matrix.shard }}" -eq "cli") {
npm run test:ci --workspace "@google/gemini-cli" -- --coverage.enabled=false
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
} else {
# Explicitly list non-cli packages to ensure they are sharded correctly
npm run test:ci --workspace "@google/gemini-cli-core" --workspace "@google/gemini-cli-a2a-server" --workspace "gemini-cli-vscode-ide-companion" --workspace "@google/gemini-cli-test-utils" --if-present -- --coverage.enabled=false
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
npm run test:scripts
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
shell: 'pwsh'
- name: 'Bundle'
run: 'npm run bundle'
shell: 'pwsh'
- name: 'Smoke test bundle'
run: 'node ./bundle/gemini.js --version'
shell: 'pwsh'
- name: 'Smoke test npx installation'
run: |
# 1. Package the project into a tarball
$PACK_OUTPUT = npm pack
$TARBALL = $PACK_OUTPUT[-1]
# 2. Move to a fresh directory for isolation
New-Item -ItemType Directory -Force -Path ../smoke-test-dir
Move-Item $TARBALL ../smoke-test-dir/
Set-Location ../smoke-test-dir
# 3. Run npx from the tarball
npx "./$TARBALL" --version
shell: 'pwsh'
ci:
name: 'CI'
if: "github.repository == 'google-gemini/gemini-cli' && always()"
needs:
- 'lint'
- 'link_checker'
- 'test_linux'
- 'test_mac'
- 'test_windows'
- 'codeql'
- 'bundle_size'
runs-on: 'gemini-cli-ubuntu-16-core'
steps:
- name: 'Check all job results'
run: |
if [[ (${NEEDS_LINT_RESULT} != 'success' && ${NEEDS_LINT_RESULT} != 'skipped') || \
(${NEEDS_LINK_CHECKER_RESULT} != 'success' && ${NEEDS_LINK_CHECKER_RESULT} != 'skipped') || \
(${NEEDS_TEST_LINUX_RESULT} != 'success' && ${NEEDS_TEST_LINUX_RESULT} != 'skipped') || \
(${NEEDS_TEST_MAC_RESULT} != 'success' && ${NEEDS_TEST_MAC_RESULT} != 'skipped') || \
(${NEEDS_TEST_WINDOWS_RESULT} != 'success' && ${NEEDS_TEST_WINDOWS_RESULT} != 'skipped') || \
(${NEEDS_CODEQL_RESULT} != 'success' && ${NEEDS_CODEQL_RESULT} != 'skipped') || \
(${NEEDS_BUNDLE_SIZE_RESULT} != 'success' && ${NEEDS_BUNDLE_SIZE_RESULT} != 'skipped') ]]; then
echo "One or more CI jobs failed."
exit 1
fi
echo "All CI jobs passed!"
env:
NEEDS_LINT_RESULT: '${{ needs.lint.result }}'
NEEDS_LINK_CHECKER_RESULT: '${{ needs.link_checker.result }}'
NEEDS_TEST_LINUX_RESULT: '${{ needs.test_linux.result }}'
NEEDS_TEST_MAC_RESULT: '${{ needs.test_mac.result }}'
NEEDS_TEST_WINDOWS_RESULT: '${{ needs.test_windows.result }}'
NEEDS_CODEQL_RESULT: '${{ needs.codeql.result }}'
NEEDS_BUNDLE_SIZE_RESULT: '${{ needs.bundle_size.result }}'
+178
View File
@@ -0,0 +1,178 @@
name: 'Deflake E2E'
on:
workflow_dispatch:
inputs:
branch_ref:
description: 'Branch to run on'
required: true
default: 'main'
type: 'string'
test_name_pattern:
description: 'The test name pattern to use'
required: false
type: 'string'
runs:
description: 'The number of runs'
required: false
default: 5
type: 'number'
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
cancel-in-progress: |-
${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/heads/release/') }}
jobs:
deflake_e2e_linux:
name: 'E2E Test (Linux) - ${{ matrix.sandbox }}'
runs-on: 'gemini-cli-ubuntu-16-core'
if: "github.repository == 'google-gemini/gemini-cli'"
strategy:
fail-fast: false
matrix:
sandbox:
- 'sandbox:none'
- 'sandbox:docker'
node-version:
- '20.x'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.pull_request.head.sha }}'
repository: '${{ github.repository }}'
persist-credentials: false
- name: 'Set up Node.js ${{ matrix.node-version }}'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '${{ matrix.node-version }}'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Set up Docker'
if: "matrix.sandbox == 'sandbox:docker'"
uses: 'docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435' # ratchet:docker/setup-buildx-action@v3
- name: 'Run E2E tests'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
IS_DOCKER: "${{ matrix.sandbox == 'sandbox:docker' }}"
KEEP_OUTPUT: 'true'
RUNS: '${{ github.event.inputs.runs }}'
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
VERBOSE: 'true'
shell: 'bash'
run: |
if [[ "${IS_DOCKER}" == "true" ]]; then
npm run deflake:test:integration:sandbox:docker -- --runs="${RUNS}" -- --testNamePattern "'${TEST_NAME_PATTERN}'"
else
npm run deflake:test:integration:sandbox:none -- --runs="${RUNS}" -- --testNamePattern "'${TEST_NAME_PATTERN}'"
fi
deflake_e2e_mac:
name: 'E2E Test (macOS)'
runs-on: 'macos-latest-large'
if: "github.repository == 'google-gemini/gemini-cli'"
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.pull_request.head.sha }}'
repository: '${{ github.repository }}'
persist-credentials: false
- name: 'Set up Node.js 20.x'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '20.x'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Fix rollup optional dependencies on macOS'
if: "runner.os == 'macOS'"
run: |
npm cache clean --force
- name: 'Run E2E tests (non-Windows)'
if: "runner.os != 'Windows'"
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
KEEP_OUTPUT: 'true'
RUNS: '${{ github.event.inputs.runs }}'
SANDBOX: 'sandbox:none'
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
VERBOSE: 'true'
run: |
npm run deflake:test:integration:sandbox:none -- --runs="${RUNS}" -- --testNamePattern "'${TEST_NAME_PATTERN}'"
deflake_e2e_windows:
name: 'Slow E2E - Win'
runs-on: 'gemini-cli-windows-16-core'
if: "github.repository == 'google-gemini/gemini-cli'"
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.pull_request.head.sha }}'
repository: '${{ github.repository }}'
persist-credentials: false
- name: 'Set up Node.js 20.x'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '20.x'
cache: 'npm'
- name: 'Configure Windows Defender exclusions'
run: |
Add-MpPreference -ExclusionPath $env:GITHUB_WORKSPACE -Force
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\node_modules" -Force
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE\packages" -Force
Add-MpPreference -ExclusionPath "$env:TEMP" -Force
shell: 'pwsh'
- name: 'Configure npm for Windows performance'
run: |
npm config set progress false
npm config set audit false
npm config set fund false
npm config set loglevel error
npm config set maxsockets 32
npm config set registry https://registry.npmjs.org/
shell: 'pwsh'
- name: 'Install dependencies'
run: 'npm ci'
shell: 'pwsh'
- name: 'Build project'
run: 'npm run build'
shell: 'pwsh'
- name: 'Run E2E tests'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
KEEP_OUTPUT: 'true'
SANDBOX: 'sandbox:none'
VERBOSE: 'true'
NODE_OPTIONS: '--max-old-space-size=32768 --max-semi-space-size=256'
UV_THREADPOOL_SIZE: '32'
NODE_ENV: 'test'
RUNS: '${{ github.event.inputs.runs }}'
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
shell: 'pwsh'
run: |
npm run deflake:test:integration:sandbox:none -- --runs="$env:RUNS" -- --testNamePattern "'$env:TEST_NAME_PATTERN'"
+65
View File
@@ -0,0 +1,65 @@
name: 'Automated Documentation Audit'
on:
schedule:
# Runs every Monday at 00:00 UTC
- cron: '0 0 * * MON'
workflow_dispatch:
jobs:
audit-docs:
runs-on: 'ubuntu-latest'
permissions:
contents: 'write'
pull-requests: 'write'
steps:
- name: 'Checkout repository'
uses: 'actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5'
with:
fetch-depth: 0
ref: 'main'
persist-credentials: false
- name: 'Set up Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version: '20'
- name: 'Run Docs Audit with Gemini'
id: 'run_gemini'
uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31'
env:
GEMINI_CLI_TRUST_WORKSPACE: true
with:
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
prompt: |
Activate the 'docs-writer' skill.
**Task:** Execute the docs audit procedure, as defined in your 'docs-auditing.md' reference.
Provide a detailed summary of the changes you make.
- name: 'Get current date'
id: 'date'
run: |
echo "date=$(date +'%Y-%m-%d')" >> "$GITHUB_OUTPUT"
- name: 'Create Pull Request with Audit Results'
uses: 'peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c'
with:
token: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
commit-message: 'docs: weekly audit results for ${{ github.run_id }}'
title: 'Docs audit: ${{ steps.date.outputs.date }}'
body: |
This PR contains the auto-generated documentation audit for the week. It includes a new `audit-results-*.md` file with findings and any direct fixes applied by the agent.
### Audit Summary:
${{ steps.run_gemini.outputs.summary || 'No summary provided.' }}
Please review the suggestions and merge.
Related to #25152
branch: 'docs-audit-${{ github.run_id }}'
base: 'main'
team-reviewers: 'gemini-cli-docs, gemini-cli-maintainers'
delete-branch: true
+4 -2
View File
@@ -19,12 +19,13 @@ concurrency:
jobs:
build:
if: |-
${{ !contains(github.ref_name, 'nightly') }}
if: "github.repository == 'google-gemini/gemini-cli' && !contains(github.ref_name, 'nightly')"
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Setup Pages'
uses: 'actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b' # ratchet:actions/configure-pages@v5
@@ -39,6 +40,7 @@ jobs:
uses: 'actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa' # ratchet:actions/upload-pages-artifact@v3
deploy:
if: "github.repository == 'google-gemini/gemini-cli'"
environment:
name: 'github-pages'
url: '${{ steps.deployment.outputs.page_url }}'
+18
View File
@@ -0,0 +1,18 @@
name: 'Trigger Docs Rebuild'
on:
push:
branches:
- 'main'
paths:
- 'docs/**'
jobs:
trigger-rebuild:
if: "github.repository == 'google-gemini/gemini-cli'"
runs-on: 'ubuntu-latest'
steps:
- name: 'Trigger rebuild'
run: |
curl -X POST \
-H "Content-Type: application/json" \
-d '{}' \
"${{ secrets.DOCS_REBUILD_URL }}"
-85
View File
@@ -1,85 +0,0 @@
name: 'E2E Tests'
on:
push:
branches:
- 'main'
# This will run for PRs from the base repository, providing secrets.
pull_request:
branches:
- 'main'
- 'release/**'
# This will run for PRs from forks when a label is added.
pull_request_target:
types: ['labeled']
merge_group:
jobs:
e2e-test:
name: 'E2E Test (${{ matrix.os }}) - ${{ matrix.sandbox }}'
# This condition ensures the job runs for pushes to main, merge groups,
# PRs from the base repo, OR PRs from forks with the correct label.
if: |
github.event_name == 'push' ||
github.event_name == 'merge_group' ||
(github.event.pull_request.head.repo.full_name == github.repository) ||
(github.event.label.name == 'maintainer:e2e:ok')
runs-on: '${{ matrix.os }}'
strategy:
fail-fast: false
matrix:
os:
- 'ubuntu-latest'
- 'macos-latest'
- 'gemini-cli-windows-16-core'
sandbox:
- 'sandbox:none'
- 'sandbox:docker'
node-version:
- '20.x'
exclude:
# Docker tests are not supported on macOS or Windows
- os: 'macos-latest'
sandbox: 'sandbox:docker'
- os: 'gemini-cli-windows-16-core'
sandbox: 'sandbox:docker'
steps:
- name: 'Checkout (fork)'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
if: "github.event_name == 'pull_request_target'"
with:
ref: '${{ github.event.pull_request.head.sha }}'
repository: '${{ github.event.pull_request.head.repo.full_name }}'
- name: 'Checkout (internal)'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
if: "github.event_name != 'pull_request_target'"
- name: 'Set up Node.js ${{ matrix.node-version }}'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions-node@v4
with:
node-version: '${{ matrix.node-version }}'
- name: 'Install dependencies'
run: |-
npm ci
- name: 'Build project'
run: |-
npm run build
- name: 'Set up Docker'
if: |-
matrix.os == 'ubuntu-latest' && matrix.sandbox == 'sandbox:docker'
uses: 'docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435' # ratchet:docker/setup-buildx-action@v3
- name: 'Run E2E tests'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
KEEP_OUTPUT: 'true'
SANDBOX: '${{ matrix.sandbox }}'
VERBOSE: 'true'
shell: 'bash'
run: |-
npm run "test:integration:${SANDBOX}"
+211
View File
@@ -0,0 +1,211 @@
name: 'Evals: PR Evaluation & Regression'
on:
pull_request_target:
types: ['opened', 'synchronize', 'reopened', 'ready_for_review']
paths:
- 'packages/core/src/prompts/**'
- 'packages/core/src/tools/**'
- 'packages/core/src/agents/**'
- 'evals/**'
- '!**/*.test.ts'
- '!**/*.test.tsx'
workflow_dispatch:
# Prevents multiple runs for the same PR simultaneously (saves tokens)
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
cancel-in-progress: true
permissions:
pull-requests: 'write'
contents: 'read'
actions: 'read'
jobs:
detect-changes:
name: 'Detect Steering Changes'
runs-on: 'gemini-cli-ubuntu-16-core'
# Security: pull_request_target allows secrets, so we must gate carefully.
# Detection should not run code from the fork.
if: "github.repository == 'google-gemini/gemini-cli' && github.event.pull_request.draft == false"
outputs:
SHOULD_RUN: '${{ steps.detect.outputs.SHOULD_RUN }}'
STEERING_DETECTED: '${{ steps.detect.outputs.STEERING_DETECTED }}'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
# Check out the trusted code from main for detection
fetch-depth: 0
persist-credentials: false
- name: 'Detect Steering Changes'
id: 'detect'
env:
# Use the PR's head SHA for comparison without checking it out
PR_HEAD_SHA: '${{ github.event.pull_request.head.sha }}'
run: |
# Fetch the fork's PR branch for analysis
git fetch origin pull/${{ github.event.pull_request.number }}/head:pr-head
# Run the trusted script from main
SHOULD_RUN=$(node scripts/changed_prompt.js)
STEERING_DETECTED=$(node scripts/changed_prompt.js --steering-only)
echo "SHOULD_RUN=$SHOULD_RUN" >> "$GITHUB_OUTPUT"
echo "STEERING_DETECTED=$STEERING_DETECTED" >> "$GITHUB_OUTPUT"
- name: 'Notify Approval Required'
if: "steps.detect.outputs.SHOULD_RUN == 'true'"
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
COMMENT_BODY="### 🛑 Action Required: Evaluation Approval
Steering changes have been detected in this PR. To prevent regressions, a maintainer must approve the evaluation run before this PR can be merged.
**Maintainers:**
1. Go to the [**Workflow Run Summary**]($RUN_URL).
2. Click the yellow **'Review deployments'** button.
3. Select the **'eval-gate'** environment and click **'Approve'**.
Once approved, the evaluation results will be posted here automatically.
<!-- eval-approval-notification -->"
# Check if comment already exists to avoid spamming
COMMENT_ID=$(gh pr view ${{ github.event.pull_request.number }} --json comments --jq '.comments[] | select(.body | contains("<!-- eval-approval-notification -->")) | .url' | grep -oE "[0-9]+$" | head -n 1)
if [ -z "$COMMENT_ID" ]; then
gh pr comment ${{ github.event.pull_request.number }} --body "$COMMENT_BODY"
else
echo "Updating existing notification comment $COMMENT_ID..."
gh api -X PATCH "repos/${{ github.repository }}/issues/comments/$COMMENT_ID" -F body="$COMMENT_BODY"
fi
pr-evaluation:
name: 'Evaluate Steering & Regressions'
needs: 'detect-changes'
if: "needs.detect-changes.outputs.SHOULD_RUN == 'true'"
# Manual approval gate via environment
environment: 'eval-gate'
runs-on: 'gemini-cli-ubuntu-16-core'
env:
# CENTRALIZED MODEL LIST
MODEL_LIST: 'gemini-3-flash-preview'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
# Check out the fork's PR code for the actual evaluation
# This only runs AFTER manual approval
ref: '${{ github.event.pull_request.head.sha }}'
fetch-depth: 0
persist-credentials: false
- name: 'Remove Approval Notification'
# Run even if other steps fail, to ensure we clean up the "Action Required" message
if: 'always()'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
PR_NUMBER: '${{ github.event.pull_request.number }}'
run: |
echo "Debug: PR_NUMBER is '$PR_NUMBER'"
# Search for the notification comment by its hidden tag
COMMENT_ID=$(gh pr view "$PR_NUMBER" --json comments --jq '.comments[] | select(.body | contains("<!-- eval-approval-notification -->")) | .url' | grep -oE "[0-9]+$" | head -n 1)
if [ -n "$COMMENT_ID" ]; then
echo "Removing notification comment $COMMENT_ID now that run is approved..."
gh api -X DELETE "repos/${{ github.repository }}/issues/comments/$COMMENT_ID"
fi
- name: 'Set up Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4.4.0
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Analyze PR Content (Guidance)'
if: "needs.detect-changes.outputs.STEERING_DETECTED == 'true'"
id: 'analysis'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
# Check for behavioral eval changes
EVAL_CHANGES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD | grep "^evals/" || true)
if [ -z "$EVAL_CHANGES" ]; then
echo "MISSING_EVALS=true" >> "$GITHUB_OUTPUT"
fi
# Check if user is a maintainer
USER_PERMISSION=$(gh api repos/${{ github.repository }}/collaborators/${{ github.actor }}/permission --jq '.permission')
if [[ "$USER_PERMISSION" == "admin" || "$USER_PERMISSION" == "write" ]]; then
echo "IS_MAINTAINER=true" >> "$GITHUB_OUTPUT"
fi
- name: 'Execute Regression Check'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
MODEL_LIST: '${{ env.MODEL_LIST }}'
run: |
# Run the regression check loop. The script saves the report to a file.
node scripts/run_eval_regression.js
# Use the generated report file if it exists
if [[ -f eval_regression_report.md ]]; then
echo "REPORT_FILE=eval_regression_report.md" >> "$GITHUB_ENV"
fi
- name: 'Post or Update PR Comment'
if: "always() && (needs.detect-changes.outputs.STEERING_DETECTED == 'true' || env.REPORT_FILE != '')"
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
# 1. Build the full comment body
{
if [[ -f eval_regression_report.md ]]; then
cat eval_regression_report.md
echo ""
fi
if [[ "${{ needs.detect-changes.outputs.STEERING_DETECTED }}" == "true" ]]; then
echo "### 🧠 Model Steering Guidance"
echo ""
echo "This PR modifies files that affect the model's behavior (prompts, tools, or instructions)."
echo ""
if [[ "${{ steps.analysis.outputs.MISSING_EVALS }}" == "true" ]]; then
echo "- ⚠️ **Consider adding Evals:** No behavioral evaluations (\`evals/*.eval.ts\`) were added or updated in this PR. Consider [adding a test case](https://github.com/google-gemini/gemini-cli/blob/main/evals/README.md#creating-an-evaluation) to verify the new behavior and prevent regressions."
fi
if [[ "${{ steps.analysis.outputs.IS_MAINTAINER }}" == "true" ]]; then
echo "- 🚀 **Maintainer Reminder:** Please ensure that these changes do not regress results on benchmark evals before merging."
fi
fi
echo ""
echo "---"
echo "*This is an automated guidance message triggered by steering logic signatures.*"
echo "<!-- eval-pr-report -->"
} > full_comment.md
# 2. Find if a comment with our unique tag already exists
# We extract the numeric ID from the URL to ensure compatibility with the REST API
COMMENT_ID=$(gh pr view ${{ github.event.pull_request.number }} --json comments --jq '.comments[] | select(.body | contains("<!-- eval-pr-report -->")) | .url' | grep -oE "[0-9]+$" | head -n 1)
# 3. Update or Create the comment
if [ -n "$COMMENT_ID" ]; then
echo "Updating existing comment $COMMENT_ID via API..."
gh api -X PATCH "repos/${{ github.repository }}/issues/comments/$COMMENT_ID" -F body=@full_comment.md
else
echo "Creating new PR comment..."
gh pr comment ${{ github.event.pull_request.number }} --body-file full_comment.md
fi
+36 -17
View File
@@ -3,27 +3,46 @@ name: 'Eval'
on:
workflow_dispatch:
defaults:
run:
shell: 'bash'
permissions:
contents: 'read'
id-token: 'write'
packages: 'read'
jobs:
eval:
name: 'Eval'
if: >-
github.repository == 'google-gemini/gemini-cli'
runs-on: 'ubuntu-latest'
strategy:
matrix:
node-version:
- '20.x'
- '22.x'
- '24.x'
container:
image: 'ghcr.io/google-gemini/gemini-cli-swe-agent-eval@sha256:cd5edc4afd2245c1f575e791c0859b3c084a86bb3bd9a6762296da5162b35a8f'
credentials:
username: '${{ github.actor }}'
password: '${{ secrets.GITHUB_TOKEN }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
DEFAULT_VERTEXAI_PROJECT: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
GOOGLE_CLOUD_PROJECT: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
GEMINI_API_KEY: '${{ secrets.EVAL_GEMINI_API_KEY }}'
GCLI_LOCAL_FILE_TELEMETRY: 'True'
EVAL_GCS_BUCKET: '${{ vars.EVAL_GCS_ARTIFACTS_BUCKET }}'
steps:
- name: 'Set up Node.js ${{ matrix.node-version }}'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
- name: 'Authenticate to Google Cloud'
id: 'auth'
uses: 'google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed' # ratchet:exclude pin@v2.1.7
with:
node-version: '${{ matrix.node-version }}'
cache: 'npm'
project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
service_account: '${{ vars.SERVICE_ACCOUNT_EMAIL }}'
token_format: 'access_token'
access_token_scopes: 'https://www.googleapis.com/auth/cloud-platform'
- name: 'Set up Python'
uses: 'actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065' # ratchet:actions/setup-python@v5
with:
python-version: '3.11'
- name: 'Install and configure Poetry'
uses: 'snok/install-poetry@76e04a911780d5b312d89783f7b1cd627778900a' # ratchet:snok/install-poetry@v1
- name: 'Run evaluation'
working-directory: '/app'
run: |
poetry run exp_run --experiment-mode=on-demand --branch-or-commit="${GITHUB_REF_NAME}" --model-name=gemini-2.5-pro --dataset=swebench_verified --concurrency=15
poetry run python agent_prototypes/scripts/parse_gcli_logs_experiment.py --experiment_dir=experiments/adhoc/gcli_temp_exp --gcs-bucket="${EVAL_GCS_BUCKET}" --gcs-path=gh_action_artifacts
+121
View File
@@ -0,0 +1,121 @@
name: 'Evals: Nightly'
on:
schedule:
- cron: '0 1 * * *' # Runs at 1 AM every day
workflow_dispatch:
inputs:
suite_type:
description: 'Suite type to run'
type: 'choice'
options:
- 'behavioral'
- 'component-level'
- 'hero-scenario'
default: 'behavioral'
suite_name:
description: 'Specific suite name to run'
required: false
type: 'string'
test_name_pattern:
description: 'Test name pattern or file name'
required: false
type: 'string'
permissions:
contents: 'read'
checks: 'write'
actions: 'read'
jobs:
evals:
name: 'Evals (USUALLY_PASSING) nightly run'
runs-on: 'gemini-cli-ubuntu-16-core'
if: "github.repository == 'google-gemini/gemini-cli'"
strategy:
fail-fast: false
matrix:
model:
- 'gemini-3.1-pro-preview-customtools'
- 'gemini-3-pro-preview'
- 'gemini-3-flash-preview'
- 'gemini-2.5-pro'
- 'gemini-2.5-flash'
- 'gemini-2.5-flash-lite'
run_attempt: [1, 2, 3]
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Set up Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Create logs directory'
run: 'mkdir -p evals/logs'
- name: 'Run Evals'
continue-on-error: true
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GEMINI_CLI_TRUST_WORKSPACE: true
GEMINI_MODEL: '${{ matrix.model }}'
RUN_EVALS: 'true'
EVAL_SUITE_TYPE: "${{ github.event.inputs.suite_type || 'behavioral' }}"
EVAL_SUITE_NAME: '${{ github.event.inputs.suite_name }}'
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
# Disable Vitest internal retries to avoid double-retrying;
# custom retry logic is handled in evals/test-helper.ts
VITEST_RETRY: 0
run: |
CMD="npm run test:all_evals"
PATTERN="${TEST_NAME_PATTERN}"
if [[ -n "$PATTERN" ]]; then
if [[ "$PATTERN" == *.ts || "$PATTERN" == *.js || "$PATTERN" == */* ]]; then
$CMD -- "$PATTERN"
else
$CMD -- -t "$PATTERN"
fi
else
$CMD
fi
- name: 'Upload Logs'
if: 'always()'
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'eval-logs-${{ matrix.model }}-${{ matrix.run_attempt }}'
path: 'evals/logs'
retention-days: 7
aggregate-results:
name: 'Aggregate Results'
needs: ['evals']
if: "github.repository == 'google-gemini/gemini-cli' && always()"
runs-on: 'gemini-cli-ubuntu-16-core'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Download Logs'
uses: 'actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806' # ratchet:actions/download-artifact@v4
with:
path: 'artifacts'
- name: 'Generate Summary'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: 'node scripts/aggregate_evals.js artifacts >> "$GITHUB_STEP_SUMMARY"'
@@ -48,6 +48,8 @@ jobs:
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Log in to GitHub Container Registry'
uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
@@ -101,7 +103,6 @@ jobs:
"FIRESTORE_DATABASE_ID": "(default)",
"GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
},
"enabled": true,
"timeout": 600000
}
},
@@ -14,9 +14,15 @@ on:
description: 'issue number to triage'
required: true
type: 'number'
workflow_call:
inputs:
issue_number:
description: 'issue number to triage'
required: false
type: 'string'
concurrency:
group: '${{ github.workflow }}-${{ github.event.issue.number || github.event.inputs.issue_number }}'
group: '${{ github.workflow }}-${{ github.event.issue.number || github.event.inputs.issue_number || inputs.issue_number }}'
cancel-in-progress: true
defaults:
@@ -34,18 +40,18 @@ permissions:
jobs:
triage-issue:
if: |-
github.repository == 'google-gemini/gemini-cli' &&
(github.repository == 'google-gemini/gemini-cli' || github.repository == 'google-gemini/maintainers-gemini-cli') &&
(
github.event_name == 'workflow_dispatch' ||
(
(github.event_name == 'issues' || github.event_name == 'issue_comment') &&
contains(github.event.issue.labels.*.name, 'status/need-triage') &&
(github.event_name != 'issue_comment' || (
contains(github.event.comment.body, '@gemini-cli /triage') &&
(github.event.comment.author_association == 'OWNER' || github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'COLLABORATOR')
))
)
)
) &&
!contains(github.event.issue.labels.*.name, 'area/')
timeout-minutes: 5
runs-on: 'ubuntu-latest'
steps:
@@ -57,28 +63,42 @@ jobs:
with:
github-token: '${{ secrets.GITHUB_TOKEN }}'
script: |
const issueNumber = ${{ github.event.inputs.issue_number || inputs.issue_number }};
const { data: issue } = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: ${{ github.event.inputs.issue_number }},
issue_number: issueNumber,
});
core.setOutput('title', issue.title);
core.setOutput('body', issue.body);
core.setOutput('labels', issue.labels.map(label => label.name).join(','));
return issue;
- name: 'Check for triage label on manual trigger'
- name: 'Manual Trigger Pre-flight Checks'
if: |-
github.event_name == 'workflow_dispatch' && !contains(steps.get_issue_data.outputs.labels, 'status/need-triage')
github.event_name == 'workflow_dispatch'
env:
ISSUE_NUMBER_INPUT: '${{ github.event.inputs.issue_number || inputs.issue_number }}'
LABELS: '${{ steps.get_issue_data.outputs.labels }}'
run: |
echo "Issue #${{ github.event.inputs.issue_number }} does not have the 'status/need-triage' label. Stopping workflow."
exit 1
if echo "${LABELS}" | grep -q 'area/'; then
echo "Issue #${ISSUE_NUMBER_INPUT} already has 'area/' label. Stopping workflow."
exit 1
fi
echo "Manual triage checks passed."
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Generate GitHub App Token'
id: 'generate_token'
env:
APP_ID: '${{ secrets.APP_ID }}'
if: |-
${{ env.APP_ID != '' }}
uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ secrets.APP_ID }}'
@@ -89,30 +109,51 @@ jobs:
id: 'get_labels'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
github-token: '${{ steps.generate_token.outputs.token || secrets.GITHUB_TOKEN }}'
script: |-
const { data: labels } = await github.rest.issues.listLabelsForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
});
const labelNames = labels.map(label => label.name);
const allowedLabels = [
'area/agent',
'area/enterprise',
'area/non-interactive',
'area/core',
'area/security',
'area/platform',
'area/extensions',
'area/documentation',
'area/unknown'
];
const labelNames = labels.map(label => label.name).filter(name => allowedLabels.includes(name));
core.setOutput('available_labels', labelNames.join(','));
core.info(`Found ${labelNames.length} labels: ${labelNames.join(', ')}`);
return labelNames;
- name: 'Prepare Issue Data'
id: 'prepare_issue_data'
env:
ISSUE_TITLE: >-
${{ github.event_name == 'workflow_dispatch' && steps.get_issue_data.outputs.title || github.event.issue.title }}
ISSUE_BODY: >-
${{ github.event_name == 'workflow_dispatch' && steps.get_issue_data.outputs.body || github.event.issue.body }}
run: |
set -euo pipefail
echo "Title: ${ISSUE_TITLE}" > issue_context.md
echo "Body:" >> issue_context.md
echo "${ISSUE_BODY}" >> issue_context.md
- name: 'Run Gemini Issue Analysis'
uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0
id: 'gemini_issue_analysis'
env:
GITHUB_TOKEN: '' # Do not pass any auth token here since this runs on untrusted inputs
ISSUE_TITLE: >-
${{ github.event_name == 'workflow_dispatch' && steps.get_issue_data.outputs.title || github.event.issue.title }}
ISSUE_BODY: >-
${{ github.event_name == 'workflow_dispatch' && steps.get_issue_data.outputs.body || github.event.issue.body }}
ISSUE_NUMBER: >-
${{ github.event_name == 'workflow_dispatch' && github.event.inputs.issue_number || github.event.issue.number }}
${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.issue_number || inputs.issue_number) || github.event.issue.number }}
REPOSITORY: '${{ github.repository }}'
AVAILABLE_LABELS: '${{ steps.get_labels.outputs.available_labels }}'
GEMINI_CLI_TRUST_WORKSPACE: 'true'
with:
gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
@@ -124,139 +165,120 @@ jobs:
settings: |-
{
"maxSessionTurns": 25,
"coreTools": [
"run_shell_command(echo)"
],
"telemetry": {
"enabled": true,
"target": "gcp"
}
},
"coreTools": [
"run_shell_command(echo)",
"read_file"
]
}
prompt: |-
## Role
You are an issue triage assistant. Analyze the current GitHub issue
and identify the most appropriate existing labels by only using the provided data. Use the available
tools to gather information; do not ask for information to be
provided. Do not remove the following labels titled maintainer, help wanted or good first issue.
You are an issue triage assistant. Your role is to analyze a GitHub issue and determine the single most appropriate area/ label based on the definitions provided.
## Steps
1. You are only able to use the echo command. Review the available labels in the environment variable: "${AVAILABLE_LABELS}".
2. Review the issue title and body provided in the environment variables: "${ISSUE_TITLE}" and "${ISSUE_BODY}".
3. Select the most relevant labels from the existing labels, focusing on kind/*, area/*, sub-area/* and priority/*. For area/* and kind/* limit yourself to only the single most applicable label in each case.
4. If the issue already has area/ label, dont try to change it. Similarly, if the issue already has a kind/ label don't change it. And if the issue already has a priority/ label do not change it for example:
If an issue has area/core and kind/bug you will only add a priority/ label.
Instead if an issue has no labels, you will could add one lable of each kind.
5. For each issue please check if CLI version is present, this is usually in the output of the /about command and will look like 0.1.5 for anything more than 6 versions older than the most recent should add the status/need-retesting label.
6. If you see that the issue doesn't look like it has sufficient information recommend the status/need-information label and leave a comment politely requesting the relevant information, eg.. if repro steps are missing request for repro steps. if version information is missing request for version information into the explanation section below.
7. Output the appropriate labels for this issue in JSON format with explanation, for example:
```
{"labels_to_set": ["kind/bug", "priority/p0"], "explanation": "This is a critical bug report affecting main functionality"}
```
8. If the issue cannot be classified using the available labels, output:
```
{"labels_to_set": [], "explanation": "Unable to classify this issue with available labels"}
```
9. Use Area definitions mentioned below to help you narrow down issues.
10. If you think an issue might be a Priority/P0 do not apply the priority/p0 label. Instead apply a status/manual-triage label and include a note in your explanation.
11. If you are uncertain and have not been able to apply one each of kind/, area/ and priority/ , apply the status/manual-triage label.
1. Use the read_file tool to read the file "issue_context.md" which contains the issue title and body.
2. Review the available labels: ${{ env.AVAILABLE_LABELS }}.
3. Select exactly one area/ label that best matches the issue based on Reference 1: Area Definitions.
4. Fallback Logic:
- If you cannot confidently determine the correct area/ label from the definitions, you must use area/unknown.
5. Output your selected label in JSON format and nothing else. Example:
{"labels_to_set": ["area/core"]}
## Guidelines
- Your output must contain exactly one area/ label.
- Triage only the current issue based on its title and body.
- Output only valid JSON format.
- Do not include any explanation or additional text, just the JSON.
- Only use labels that already exist in the repository
- Do not add comments or modify the issue content
- Triage only the current issue
- Identify only one area/ label
- Identify only one kind/ label
- Identify all applicable sub-area/* and priority/* labels based on the issue content. It's ok to have multiple of these
- Once you categorize the issue if it needs information bump down the priority by 1 eg.. a p0 would become a p1 a p1 would become a p2. P2 and P3 can stay as is in this scenario
- Reference all shell variables as "${VAR}" (with quotes and braces)
- Output only valid JSON format
- Do not include any explanation or additional text, just the JSON
Reference 1: Area Definitions
area/agent
- Description: Issues related to the "brain" of the CLI. This includes the core agent logic, model quality, tool/function calling, and memory.
- Example Issues:
"I am not getting a reasonable or expected response."
"The model is not calling the tool I expected."
"The web search tool is not working as expected."
"Feature request for a new built-in tool (e.g., read file, write file)."
"The generated code is poor quality or incorrect."
"The model seems stuck in a loop."
"The response from the model is malformed (e.g., broken JSON, bad formatting)."
"Concerns about unnecessary token consumption."
"Issues with how memory or chat history is managed."
"Issues with sub-agents."
"Model is switching from one to another unexpectedly."
Categorization Guidelines:
P0: Critical / Blocker
- A P0 bug is a catastrophic failure that demands immediate attention.
- To be a P0 it means almost all users are running into this issue and it is blocking users from being able to use the product.
- You would see this in the form of many comments from different developers on the bug.
- It represents a complete showstopper for a significant portion of users or for the development process itself.
Impact:
- Blocks development or testing for the entire team.
- Major security vulnerability that could compromise user data or system integrity.
- Causes data loss or corruption with no workaround.
- Crashes the application or makes a core feature completely unusable for all or most users in a production environment. Will it cause severe quality degration? Is it preventing contributors from contributing to the repository or is it a release blocker?
Qualifier: Is the main function of the software broken?
Example: The gemini auth login command fails with an unrecoverable error, preventing any user from authenticating and using the rest of the CLI.
P1: High
- A P1 bug is a serious issue that significantly degrades the user experience or impacts a core feature.
- While not a complete blocker, it's a major problem that needs a fast resolution. Feature requests are almost never P1.
- Once again this would be affecting many users.
- You would see this in the form of comments from different developers on the bug.
Impact:
- A core feature is broken or behaving incorrectly for a large number of users or large number of use cases.
- Review the bug details and comments to try figure out if this issue affects a large set of use cases or if it's a narrow set of use cases.
- Severe performance degradation making the application frustratingly slow.
- No straightforward workaround exists, or the workaround is difficult and non-obvious.
Qualifier: Is a key feature unusable or giving very wrong results?
Example: Gemini CLI enters a loop when making read-many-files tool call. I am unable to break out of the loop and gemini doesn't follow instructions subsequently.
P2: Medium
- A P2 bug is a moderately impactful issue. It's a noticeable problem but doesn't prevent the use of the software's main functionality.
Impact:
- Affects a non-critical feature or a smaller, specific subset of users.
- An inconvenient but functional workaround is available and easy to execute.
- Noticeable UI/UX problems that don't break functionality but look unprofessional (e.g., elements are misaligned or overlapping).
Qualifier: Is it an annoying but non-blocking problem?
Example: An error message is unclear or contains a typo, causing user confusion but not halting their workflow.
P3: Low
- A P3 bug is a minor, low-impact issue that is trivial or cosmetic. It has little to no effect on the overall functionality of the application.
Impact:
- Minor cosmetic issues like color inconsistencies, typos in documentation, or slight alignment problems on a non-critical page.
- An edge-case bug that is very difficult to reproduce and affects a tiny fraction of users.
Qualifier: Is it a "nice-to-fix" issue?
Example: Spelling mistakes etc.
Things you should know:
- If users are talking about issues where the model gets downgraded from pro to flash then i want you to categorize that as a performance issue
- This product is designed to use different models eg.. using pro, downgrading to flash etc. when users report that they dont expect the model to change those would be categorized as feature requests.
Definition of Areas
area/ux:
- Issues concerning user-facing elements like command usability, interactive features, help docs, and perceived performance.
- I am seeing my screen flicker when using Gemini CLI
- I am seeing the output malformed
- Theme changes aren't taking effect
- My keyboard inputs arent' being recognzied
area/platform:
- Issues related to installation, packaging, OS compatibility (Windows, macOS, Linux), and the underlying CLI framework.
area/background: Issues related to long-running background tasks, daemons, and autonomous or proactive agent features.
area/models:
- i am not getting a response that is reasonable or expected. this can include things like
- I am calling a tool and the tool is not performing as expected.
- i am expecting a tool to be called and it is not getting called ,
- Including experience when using
- built-in tools (e.g., web search, code interpreter, read file, writefile, etc..),
- Function calling issues should be under this area
- i am getting responses from the model that are malformed.
- Issues concerning Gemini quality of response and inference,
- Issues talking about unnecessary token consumption.
- Issues talking about Model getting stuck in a loop be watchful as this could be the root cause for issues that otherwise seem like model performance issues.
- Memory compression
- unexpected responses,
- poor quality of generated code
area/tools:
- These are primarily issues related to Model Context Protocol
- These are issues that mention MCP support
- feature requests asking for support for new tools.
area/core: Issues with fundamental components like command parsing, configuration management, session state, and the main API client logic. Introducing multi-modality
area/contribution: Issues related to improving the developer contribution experience, such as CI/CD pipelines, build scripts, and test automation infrastructure.
area/authentication: Issues related to user identity, login flows, API key handling, credential storage, and access token management, unable to sign in selecting wrong authentication path etc..
area/security-privacy: Issues concerning vulnerability patching, dependency security, data sanitization, privacy controls, and preventing unauthorized data access.
area/extensibility: Issues related to the plugin system, extension APIs, or making the CLI's functionality available in other applications, github actions, ide support etc..
area/performance: Issues focused on model performance
- Issues with running out of capacity,
- 429 errors etc..
- could also pertain to latency,
- other general software performance like, memory usage, CPU consumption, and algorithmic efficiency.
- Switching models from one to the other unexpectedly.
area/enterprise
- Description: Issues specific to enterprise-level features, including telemetry, policy, and licenses.
- Example Issues:
"Usage data is not appearing in our telemetry dashboard."
"A user is able to perform an action that should be blocked by an admin policy."
"Questions about billing, licensing tiers, or enterprise quotas."
area/non-interactive
- Description: Issues related to using the CLI in automated or non-interactive environments (headless mode).
- Example Issues:
"Problems using the CLI as an SDK in another surface."
"The CLI is behaving differently when run from a shell script vs. an interactive terminal."
"GitHub action is failing."
"I am having trouble running the CLI in headless mode"
area/core
- Description: Issues with the fundamental CLI app itself. This includes the user interface (UI/UX), installation, OS compatibility, and performance.
- Example Issues:
"I am seeing my screen flicker when using the CLI."
"The output in my terminal is malformed or unreadable."
"Theme changes are not taking effect."
"Keyboard inputs (e.g., arrow keys, Ctrl+C) are not being recognized."
"The CLI failed to install or update."
"An issue specific to running on Windows, macOS, or Linux."
"Problems with command parsing, flags, or argument handling."
"High CPU or memory usage by the CLI process."
"Issues related to multi-modality (e.g., handling image inputs)."
"Problems with the IDE integration connection or installation"
area/security
- Description: Issues related to user authentication, authorization, data security, and privacy.
- Example Issues:
"I am unable to sign in."
"The login flow is selecting the wrong authentication path"
"Problems with API key handling or credential storage."
"A report of a security vulnerability"
"Concerns about data sanitization or potential data leaks."
"Issues or requests related to privacy controls."
"Preventing unauthorized data access."
area/platform
- Description: Issues related to CI/CD, release management, testing, eval infrastructure, capacity, quota management, and sandbox environments.
- Example Issues:
"I am getting a 429 'Resource Exhausted' or 500-level server error."
"General slowness or high latency from the service."
"The build script is broken on the main branch."
"Tests are failing in the CI/CD pipeline."
"Issues with the release management or publishing process."
"User is running out of capacity."
"Problems specific to the sandbox or staging environments."
"Questions about quota limits or requests for increases."
area/extensions
- Description: Issues related to the extension ecosystem, including the marketplace and website.
- Example Issues:
"Bugs related to the extension marketplace website."
"Issues with a specific extension."
"Feature request for the extension ecosystem."
area/documentation
- Description: Issues related to user-facing documentation and other content on the documentation website.
- Example Issues:
"A typo in a README file."
"DOCS: A command is not working as described in the documentation."
"A request for a new documentation page."
"Instructions missing for skills feature"
area/unknown
- Description: Issues that do not clearly fit into any other defined area/ category, or where information is too limited to make a determination. Use this when no other area is appropriate.
- name: 'Apply Labels to Issue'
if: |-
@@ -267,54 +289,60 @@ jobs:
LABELS_OUTPUT: '${{ steps.gemini_issue_analysis.outputs.summary }}'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |-
// Strip code block markers if present
const rawLabels = process.env.LABELS_OUTPUT;
core.info(`Raw labels JSON: ${rawLabels}`);
github-token: '${{ steps.generate_token.outputs.token || secrets.GITHUB_TOKEN }}'
script: |
const rawOutput = process.env.LABELS_OUTPUT;
core.info(`Raw output from model: ${rawOutput}`);
let parsedLabels;
try {
const jsonMatch = rawLabels.match(/```json\s*([\s\S]*?)\s*```/);
if (!jsonMatch || !jsonMatch[1]) {
throw new Error("Could not find a ```json ... ``` block in the output.");
// First, try to parse the raw output as JSON.
parsedLabels = JSON.parse(rawOutput);
} catch (jsonError) {
// If that fails, check for a markdown code block.
core.warning(`Direct JSON parsing failed: ${jsonError.message}. Trying to extract from a markdown block.`);
const jsonMatch = rawOutput.match(/```json\s*([\s\S]*?)\s*```/);
if (jsonMatch && jsonMatch[1]) {
try {
parsedLabels = JSON.parse(jsonMatch[1].trim());
} catch (markdownError) {
core.setFailed(`Failed to parse JSON even after extracting from markdown block: ${markdownError.message}\nRaw output: ${rawOutput}`);
return;
}
} else {
// If no markdown block, try to find a raw JSON object in the output.
// The CLI may include debug/log lines (e.g. telemetry init, YOLO mode)
// before the actual JSON response.
const jsonObjectMatch = rawOutput.match(/(\{[\s\S]*"labels_to_set"[\s\S]*\})/);
if (jsonObjectMatch) {
try {
parsedLabels = JSON.parse(jsonObjectMatch[0]);
} catch (extractError) {
core.setFailed(`Found JSON-like content but failed to parse: ${extractError.message}\nRaw output: ${rawOutput}`);
return;
}
} else {
core.setFailed(`Output is not valid JSON and does not contain extractable JSON.\nRaw output: ${rawOutput}`);
return;
}
}
const jsonString = jsonMatch[1].trim();
parsedLabels = JSON.parse(jsonString);
core.info(`Parsed labels JSON: ${JSON.stringify(parsedLabels)}`);
} catch (err) {
core.setFailed(`Failed to parse labels JSON from Gemini output: ${err.message}\nRaw output: ${rawLabels}`);
return;
}
const issueNumber = parseInt(process.env.ISSUE_NUMBER);
const explanation = parsedLabels.explanation || '';
const labelsToSet = parsedLabels.labels_to_set || [];
labelsToSet.push('status/bot-triaged');
const labelsToAdd = parsedLabels.labels_to_set || [];
if (labelsToAdd.length !== 1) {
core.setFailed(`Expected exactly 1 label (area/), but got ${labelsToAdd.length}. Labels: ${labelsToAdd.join(', ')}`);
return;
}
// Set labels based on triage result
if (labelsToSet.length > 0) {
await github.rest.issues.setLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: labelsToSet
});
const explanationInfo = explanation ? ` - ${explanation}` : '';
core.info(`Successfully set labels for #${issueNumber}: ${labelsToSet.join(', ')}${explanationInfo}`);
} else {
// If no labels to set, leave the issue as is
const explanationInfo = explanation ? ` - ${explanation}` : '';
core.info(`No labels to set for #${issueNumber}, leaving as is${explanationInfo}`);
}
if (explanation) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: explanation,
});
}
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: labelsToAdd
});
core.info(`Successfully added labels for #${issueNumber}: ${labelsToAdd.join(', ')}`);
- name: 'Post Issue Analysis Failure Comment'
if: |-
@@ -324,7 +352,7 @@ jobs:
RUN_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
github-token: '${{ steps.generate_token.outputs.token || secrets.GITHUB_TOKEN }}'
script: |-
github.rest.issues.createComment({
owner: context.repo.owner,
+350
View File
@@ -0,0 +1,350 @@
name: '🧠 Gemini CLI Bot: Brain'
on:
schedule:
- cron: '0 0 * * *' # Every 24 hours
issue_comment:
types: ['created']
workflow_dispatch:
inputs:
run_interactive:
description: 'Run interactive flow (requires issue_number)'
type: 'boolean'
default: false
issue_number:
description: 'Issue/PR number to simulate context from'
type: 'string'
required: false
comment_id:
description: 'Specific comment ID to simulate'
type: 'string'
required: false
clear_memory:
description: 'Clear memory (drops learnings from previous runs)'
type: 'boolean'
default: false
enable_prs:
description: 'Enable PRs (automatically promote changes to PRs)'
type: 'boolean'
default: false
concurrency:
group: '${{ github.workflow }}-${{ github.event.issue.number || github.event.inputs.issue_number || github.ref }}'
cancel-in-progress: true
jobs:
reasoning:
name: 'Brain (Reasoning Layer)'
runs-on: 'ubuntu-latest'
if: |
github.repository == 'google-gemini/gemini-cli' && (
github.event_name == 'schedule' ||
(github.event_name == 'workflow_dispatch' && github.event.inputs.run_interactive != 'true') ||
(github.event_name == 'workflow_dispatch' && github.event.inputs.run_interactive == 'true') ||
(github.event_name == 'issue_comment' && github.event.comment.user.login != 'gemini-cli[bot]' && contains(github.event.comment.body, '@gemini-cli') && contains(fromJSON('["COLLABORATOR", "MEMBER", "OWNER"]'), github.event.comment.author_association))
)
# The reasoning phase is strictly readonly.
permissions:
contents: 'read'
issues: 'read'
actions: 'read'
env:
GEMINI_CLI_TRUST_WORKSPACE: 'true'
steps:
- name: 'Determine Checkout Ref'
id: 'determine_ref'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ISSUE_NUMBER: '${{ github.event.issue.number || github.event.inputs.issue_number }}'
run: |
REF="${{ github.ref }}"
if [ -n "$ISSUE_NUMBER" ]; then
PR_HEAD=$(gh pr view "$ISSUE_NUMBER" --repo "${{ github.repository }}" --json headRefName --jq .headRefName 2>/dev/null || echo "")
if [ -n "$PR_HEAD" ]; then
REF="$PR_HEAD"
fi
fi
echo "ref=$REF" >> "$GITHUB_OUTPUT"
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
ref: '${{ steps.determine_ref.outputs.ref }}'
fetch-depth: 0
persist-credentials: false
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build Gemini CLI'
run: 'npm run bundle'
- name: 'Download Previous State'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
if [ "${{ github.event.inputs.clear_memory }}" = "true" ]; then
echo "Memory clear requested. Skipping previous state download."
exit 0
fi
# Find the last successful run of this workflow
LAST_RUN_ID=$(gh run list --workflow "${{ github.workflow }}" --status success --limit 1 --json databaseId --jq '.[0].databaseId')
if [ -n "$LAST_RUN_ID" ]; then
echo "Found previous successful run: $LAST_RUN_ID"
# Download brain memory to a temp dir so we can selectively restore only persistent state
mkdir -p .temp_brain_data
gh run download "$LAST_RUN_ID" -n brain-data -D .temp_brain_data || echo "brain-data not found"
# Restore only persistent memory files
cp .temp_brain_data/tools/gemini-cli-bot/lessons-learned.md tools/gemini-cli-bot/lessons-learned.md 2>/dev/null || true
mkdir -p tools/gemini-cli-bot/history/
cp .temp_brain_data/tools/gemini-cli-bot/history/*.csv tools/gemini-cli-bot/history/ 2>/dev/null || true
rm -rf .temp_brain_data
else
echo "No previous successful run found."
fi
- name: 'Collect Current Metrics'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: 'npx tsx tools/gemini-cli-bot/metrics/index.ts'
- name: 'Run Brain Phases'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
GEMINI_MODEL: 'gemini-3-flash-preview'
GEMINI_CLI_HOME: 'tools/gemini-cli-bot'
ENABLE_PRS: "${{ github.event.inputs.enable_prs || 'false' }}"
TRIGGER_ISSUE_NUMBER: '${{ github.event.issue.number || github.event.inputs.issue_number }}'
TRIGGER_COMMENT_ID: '${{ github.event.comment.id || github.event.inputs.comment_id }}'
run: |
PROMPT_PATH="tools/gemini-cli-bot/brain/scheduled.md"
if [ "${{ github.event_name }}" = "issue_comment" ] || [ "${{ github.event.inputs.run_interactive }}" = "true" ]; then
PROMPT_PATH="tools/gemini-cli-bot/brain/interactive.md"
export ENABLE_PRS="true"
fi
touch trigger_context.md
if [ -n "$TRIGGER_ISSUE_NUMBER" ]; then
echo "<untrusted_context>" > trigger_context.md
echo "# Interactive Trigger Context" >> trigger_context.md
echo "You were invoked by a user in issue/PR #$TRIGGER_ISSUE_NUMBER." >> trigger_context.md
if [ -n "$TRIGGER_COMMENT_ID" ]; then
echo "## User Comment" >> trigger_context.md
gh api "repos/${{ github.repository }}/issues/comments/$TRIGGER_COMMENT_ID" -q '.body' >> trigger_context.md 2>/dev/null || gh api "repos/${{ github.repository }}/pulls/comments/$TRIGGER_COMMENT_ID" -q '.body' >> trigger_context.md
echo "" >> trigger_context.md
fi
echo "## Issue/PR Context" >> trigger_context.md
gh issue view "$TRIGGER_ISSUE_NUMBER" >> trigger_context.md 2>/dev/null || gh pr view "$TRIGGER_ISSUE_NUMBER" >> trigger_context.md
echo "</untrusted_context>" >> trigger_context.md
fi
if [ "$ENABLE_PRS" = "true" ]; then
echo "**System Directive**: PR creation is ENABLED for this run. You MUST activate the **'prs' skill** to stage your changes and generate a \`pr-description.md\` file if you are proposing fixes." >> trigger_context.md
echo "**CRITICAL System Directive**: You MUST ONLY propose and implement a **SINGLE** improvement or fix per run. Bundling unrelated changes (e.g., a documentation update and a script fix, or a metrics update and a logic fix) into a single PR is STRICTLY FORBIDDEN and will result in immediate rejection during the critique phase. If you identify multiple issues, pick the most impactful one and ignore the others for now." >> trigger_context.md
else
echo "**System Directive**: PR creation is DISABLED for this run. You MUST NOT stage files or attempt to create a PR description." >> trigger_context.md
fi
echo "" >> trigger_context.md
cat trigger_context.md "$PROMPT_PATH" > combined_prompt.md
node bundle/gemini.js --policy tools/gemini-cli-bot/ci-policy.toml --prompt="$(cat combined_prompt.md)"
if [ -n "$TRIGGER_ISSUE_NUMBER" ] && [ ! -s "issue-comment.md" ] && [ ! -s "pr-comment.md" ]; then
echo "Agent failed to respond. Generating fallback error message."
echo "⚠️ **Gemini CLI Bot failed to generate a response.**" > "issue-comment.md"
echo "" >> "issue-comment.md"
echo "I encountered an error or failed to generate a complete response to your request. You can check the [GitHub Actions Run Log](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) for more details on what went wrong." >> "issue-comment.md"
fi
- name: 'Run Critique Phase'
if: "${{ github.event.inputs.enable_prs == 'true' || github.event_name == 'issue_comment' || github.event.inputs.run_interactive == 'true' }}"
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
GEMINI_MODEL: 'gemini-3-flash-preview'
GEMINI_CLI_HOME: 'tools/gemini-cli-bot'
run: |
if git diff --staged --quiet; then
echo "No changes staged. Skipping critique."
echo "[APPROVED]" > critique_result.txt
else
node bundle/gemini.js --policy tools/gemini-cli-bot/ci-policy.toml --prompt="$(cat tools/gemini-cli-bot/.gemini/skills/critique/SKILL.md)" 2>&1 | tee critique_output.log
if [ "${PIPESTATUS[0]}" -eq 0 ] && grep -q "\[APPROVED\]" critique_output.log && ! grep -q "\[REJECTED\]" critique_output.log; then
echo "[APPROVED]" > critique_result.txt
else
echo "Critique failed, rejected, or did not explicitly approve changes. Skipping PR creation."
echo "[REJECTED]" > critique_result.txt
fi
fi
- name: 'Generate Patch'
if: "${{ github.event.inputs.enable_prs == 'true' || github.event_name == 'issue_comment' || github.event.inputs.run_interactive == 'true' }}"
run: |
touch bot-changes.patch
touch pr-description.md
if [ -f critique_result.txt ] && grep -q "\[APPROVED\]" critique_result.txt && ! grep -q "\[REJECTED\]" critique_result.txt; then
git diff --staged > bot-changes.patch
else
echo "Critique did not approve. Skipping patch generation."
fi
- name: 'Archive Brain Data'
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'brain-data'
path: |
tools/gemini-cli-bot/lessons-learned.md
tools/gemini-cli-bot/history/*.csv
bot-changes.patch
pr-description.md
branch-name.txt
pr-comment.md
pr-number.txt
issue-comment.md
retention-days: 90
publish:
name: 'Publish Artifacts (Archive Layer)'
needs: 'reasoning'
runs-on: 'ubuntu-latest'
if: "github.repository == 'google-gemini/gemini-cli'"
# The publish phase is for archiving artifacts and optionally creating PRs.
permissions:
contents: 'write'
pull-requests: 'write'
actions: 'write'
steps:
- name: 'Generate GitHub App Token 🔑'
id: 'generate_token'
if: "${{ github.event.inputs.enable_prs == 'true' || github.event_name == 'issue_comment' || github.event.inputs.run_interactive == 'true' }}"
uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ secrets.APP_ID }}'
private-key: '${{ secrets.PRIVATE_KEY }}'
owner: '${{ github.repository_owner }}'
repositories: '${{ github.event.repository.name }}'
permission-contents: 'write'
permission-pull-requests: 'write'
permission-issues: 'write'
- name: 'Determine Checkout Ref'
id: 'determine_ref'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ISSUE_NUMBER: '${{ github.event.issue.number || github.event.inputs.issue_number }}'
run: |
REF="main"
if [ -n "$ISSUE_NUMBER" ]; then
PR_HEAD=$(gh pr view "$ISSUE_NUMBER" --repo "${{ github.repository }}" --json headRefName --jq .headRefName 2>/dev/null || echo "")
if [ -n "$PR_HEAD" ]; then
REF="$PR_HEAD"
fi
fi
echo "ref=$REF" >> "$GITHUB_OUTPUT"
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
ref: '${{ steps.determine_ref.outputs.ref }}'
fetch-depth: 0
persist-credentials: false
- name: 'Download Brain Data'
uses: 'actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093' # ratchet:actions/download-artifact@v4
with:
name: 'brain-data'
path: '${{ runner.temp }}/brain-data/'
- name: 'Create or Update PR'
if: "${{ github.event.inputs.enable_prs == 'true' || github.event_name == 'issue_comment' || github.event.inputs.run_interactive == 'true' }}"
env:
GH_TOKEN: '${{ steps.generate_token.outputs.token }}'
FALLBACK_PAT: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
run: |
if [ -s "${{ runner.temp }}/brain-data/bot-changes.patch" ]; then
git config user.name "gemini-cli[bot]"
git config user.email "gemini-cli[bot]@users.noreply.github.com"
git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git"
BRANCH_NAME="bot/productivity-updates-$(date +'%Y%m%d%H%M%S')-${{ github.run_id }}"
if [ -f "${{ runner.temp }}/brain-data/branch-name.txt" ]; then
BRANCH_NAME=$(cat "${{ runner.temp }}/brain-data/branch-name.txt")
fi
if [[ ! "$BRANCH_NAME" =~ ^bot/ ]]; then
echo "Error: Branch name '$BRANCH_NAME' does not start with 'bot/'. Safety abort."
exit 1
fi
git checkout -B "$BRANCH_NAME"
git apply "${{ runner.temp }}/brain-data/bot-changes.patch"
git add .
if [ -s "${{ runner.temp }}/brain-data/pr-description.md" ]; then
git commit -F "${{ runner.temp }}/brain-data/pr-description.md"
else
git commit -m "🤖 Gemini Bot Productivity Optimizations"
fi
PR_TITLE="🤖 Gemini Bot Productivity Optimizations"
if [ -s "${{ runner.temp }}/brain-data/pr-description.md" ]; then
PR_TITLE=$(head -n 1 "${{ runner.temp }}/brain-data/pr-description.md")
fi
if ! git push origin "$BRANCH_NAME" --force; then
echo "Push failed. Retrying with FALLBACK_PAT..."
export GH_TOKEN="$FALLBACK_PAT"
git remote set-url origin "https://x-access-token:${FALLBACK_PAT}@github.com/${{ github.repository }}.git"
git push origin "$BRANCH_NAME" --force
fi
if ! gh pr view "$BRANCH_NAME" > /dev/null 2>&1; then
gh pr create --draft --title "$PR_TITLE" --body-file "${{ runner.temp }}/brain-data/pr-description.md" --head "$BRANCH_NAME" --base main || \
gh pr create --draft --title "🤖 Gemini Bot Productivity Optimizations" --body "Automated changes generated by Gemini CLI Bot." --head "$BRANCH_NAME" --base main
else
PR_STATE=$(gh pr view "$BRANCH_NAME" --json state --jq .state)
if [ "$PR_STATE" = "CLOSED" ]; then
NEW_BRANCH_NAME="${BRANCH_NAME}-retry-${{ github.run_id }}"
git checkout -b "$NEW_BRANCH_NAME"
git push origin "$NEW_BRANCH_NAME" --force
gh pr create --draft --title "$PR_TITLE" --body-file "${{ runner.temp }}/brain-data/pr-description.md" --head "$NEW_BRANCH_NAME" --base main || \
gh pr create --draft --title "🤖 Gemini Bot Productivity Optimizations" --body "Automated changes generated by Gemini CLI Bot." --head "$NEW_BRANCH_NAME" --base main
fi
fi
fi
- name: 'Post PR/Issue Comment'
env:
GH_TOKEN: '${{ steps.generate_token.outputs.token }}'
TRIGGER_ISSUE_NUMBER: '${{ github.event.issue.number || github.event.inputs.issue_number }}'
run: |
if [ -s "${{ runner.temp }}/brain-data/issue-comment.md" ] && [ -n "$TRIGGER_ISSUE_NUMBER" ]; then
echo "Posting comment to triggering issue #$TRIGGER_ISSUE_NUMBER"
# Use REST API (gh api) instead of GraphQL (gh issue comment) to ensure robot identity
# while avoiding potential GraphQL-specific authorization hurdles with PATs.
gh api "repos/${{ github.repository }}/issues/$TRIGGER_ISSUE_NUMBER/comments" -F body=@"${{ runner.temp }}/brain-data/issue-comment.md"
fi
if [ -s "${{ runner.temp }}/brain-data/pr-comment.md" ] && [ -f "${{ runner.temp }}/brain-data/pr-number.txt" ]; then
PR_NUM=$(cat "${{ runner.temp }}/brain-data/pr-number.txt")
# Using GitHub App, so author check is no longer valid against gemini-cli-robot
# Skipping author validation here to let the app post.
# Use REST API (gh api) for consistency and robot identity
gh api "repos/${{ github.repository }}/issues/$PR_NUM/comments" -F body=@"${{ runner.temp }}/brain-data/pr-comment.md"
fi
@@ -0,0 +1,49 @@
name: '🔄 Gemini CLI Bot: Pulse'
on:
schedule:
- cron: '*/30 * * * *' # Every 30 minutes
workflow_dispatch:
concurrency:
group: '${{ github.workflow }}-${{ github.ref }}'
cancel-in-progress: true
permissions:
contents: 'write'
issues: 'write'
pull-requests: 'write'
jobs:
pulse:
name: 'Pulse (Reflex Layer)'
runs-on: 'ubuntu-latest'
if: "github.repository == 'google-gemini/gemini-cli'"
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Run Reflex Processes'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
if [ -d "tools/gemini-cli-bot/reflexes/scripts" ] && [ "$(ls -A tools/gemini-cli-bot/reflexes/scripts)" ]; then
for script in tools/gemini-cli-bot/reflexes/scripts/*.ts; do
echo "Running reflex script: $script"
npx tsx "$script"
done
else
echo "No reflex scripts found."
fi
@@ -0,0 +1,47 @@
name: '🔄 Gemini Scheduled Lifecycle Manager'
on:
schedule:
- cron: '30 1 * * *' # Once a day
workflow_dispatch:
inputs:
dry_run:
description: 'Run in dry-run mode (no changes applied)'
required: false
default: false
type: 'boolean'
concurrency:
group: '${{ github.workflow }}'
cancel-in-progress: true
permissions:
issues: 'write'
pull-requests: 'write'
jobs:
manage-lifecycle:
if: "github.repository == 'google-gemini/gemini-cli'"
runs-on: 'ubuntu-latest'
steps:
- name: 'Generate GitHub App Token'
id: 'generate_token'
uses: 'actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ secrets.APP_ID }}'
private-key: '${{ secrets.PRIVATE_KEY }}'
- name: 'Checkout repository'
uses: 'actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683' # ratchet:actions/checkout@v4
with:
persist-credentials: false
- name: 'Lifecycle Management'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
env:
DRY_RUN: '${{ inputs.dry_run }}'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |
const script = require('./.github/scripts/gemini-lifecycle-manager.cjs');
await script({github, context, core});
@@ -28,6 +28,8 @@ jobs:
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Log in to GitHub Container Registry'
uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
@@ -81,7 +83,6 @@ jobs:
"FIRESTORE_DATABASE_ID": "(default)",
"GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
},
"enabled": true,
"timeout": 600000
}
},
@@ -6,7 +6,7 @@ on:
workflow_dispatch:
concurrency:
group: '${{ github.workflow }}'
group: '${{ github.workflow }}-${{ github.event.number || github.run_id }}'
cancel-in-progress: true
defaults:
@@ -19,13 +19,15 @@ permissions:
jobs:
triage-issues:
timeout-minutes: 10
timeout-minutes: 60
if: |-
${{ github.repository == 'google-gemini/gemini-cli' }}
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Generate GitHub App Token'
id: 'generate_token'
@@ -35,7 +37,41 @@ jobs:
private-key: '${{ secrets.PRIVATE_KEY }}'
permission-issues: 'write'
- name: 'Get issue from event'
if: |-
${{ github.event_name == 'issues' }}
id: 'get_issue_from_event'
env:
ISSUE_EVENT: '${{ toJSON(github.event.issue) }}'
run: |
set -euo pipefail
echo "$ISSUE_EVENT" | jq -c '[{number: .number, title: .title, body: .body}]' > issues_to_triage.json
echo "has_issues=true" >> "${GITHUB_OUTPUT}"
echo "✅ Found issue #${{ github.event.issue.number }} from event to triage! 🎯"
- name: 'Sync Issue Types'
if: |-
${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |-
const syncIssueTypes = require('./.github/scripts/sync-issue-types.cjs');
await syncIssueTypes({ github, context, core });
- name: 'Find Issues with Conflicting Labels'
if: |-
${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |-
const findConflictingLabels = require('./.github/scripts/find-conflicting-labels.cjs');
await findConflictingLabels({ github, context, core });
- name: 'Find untriaged issues'
if: |-
${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
id: 'find_issues'
env:
GITHUB_TOKEN: '${{ steps.generate_token.outputs.token }}'
@@ -43,22 +79,57 @@ jobs:
run: |-
set -euo pipefail
echo '🔍 Finding issues without labels...'
NO_LABEL_ISSUES="$(gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue no:label' --json number,title,body)"
echo '🔍 Finding issues missing area labels...'
gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue -label:status/bot-triaged -label:area/core -label:area/agent -label:area/enterprise -label:area/non-interactive -label:area/security -label:area/platform -label:area/extensions -label:area/documentation -label:area/unknown' --limit 50 --json number,title,body > no_area_issues.json
echo '🏷️ Finding issues that need triage...'
NEED_TRIAGE_ISSUES="$(gh issue list --repo "${GITHUB_REPOSITORY}" \
--search "is:open is:issue label:\"status/need-triage\"" --limit 1000 --json number,title,body)"
echo '🔍 Finding issues missing kind labels...'
gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue -label:status/bot-triaged -label:kind/bug -label:kind/enhancement -label:kind/customer-issue -label:kind/question' --limit 50 --json number,title,body > no_kind_issues.json
echo '🔄 Merging and deduplicating issues...'
ISSUES="$(echo "${NO_LABEL_ISSUES}" "${NEED_TRIAGE_ISSUES}" | jq -c -s 'add | unique_by(.number)')"
echo '🏷️ Finding issues missing priority labels...'
gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue -label:priority/p0 -label:priority/p1 -label:priority/p2 -label:priority/p3 -label:priority/unknown' --limit 50 --json number,title,body > no_priority_issues.json
echo '📝 Setting output for GitHub Actions...'
echo "issues_to_triage=${ISSUES}" >> "${GITHUB_OUTPUT}"
echo '📏 Finding issues missing effort labels...'
gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue -label:effort/small -label:effort/medium -label:effort/large label:area/core,area/extensions,area/site,area/non-interactive' --limit 5 --json number,title,body > no_effort_issues.json
ISSUE_COUNT="$(echo "${ISSUES}" | jq 'length')"
echo "✅ Found ${ISSUE_COUNT} issues to triage! 🎯"
echo '🔄 Merging and deduplicating standard triage issues...'
if [ ! -f conflicting_labels_issues.json ]; then echo "[]" > conflicting_labels_issues.json; fi
jq -c -s 'add | unique_by(.number)' no_area_issues.json no_kind_issues.json no_priority_issues.json conflicting_labels_issues.json > standard_issues_to_triage.json
echo '📏 Deduplicating effort issues...'
jq -c -s 'add | unique_by(.number)' no_effort_issues.json > effort_issues_to_triage.json
STANDARD_COUNT="$(jq 'length' standard_issues_to_triage.json)"
EFFORT_COUNT="$(jq 'length' effort_issues_to_triage.json)"
if [ "$STANDARD_COUNT" -gt 0 ] || [ "$EFFORT_COUNT" -gt 0 ]; then
echo "has_issues=true" >> "${GITHUB_OUTPUT}"
echo "has_standard_issues=$([ "$STANDARD_COUNT" -gt 0 ] && echo 'true' || echo 'false')" >> "${GITHUB_OUTPUT}"
echo "has_effort_issues=$([ "$EFFORT_COUNT" -gt 0 ] && echo 'true' || echo 'false')" >> "${GITHUB_OUTPUT}"
else
echo "has_issues=false" >> "${GITHUB_OUTPUT}"
echo "has_standard_issues=false" >> "${GITHUB_OUTPUT}"
echo "has_effort_issues=false" >> "${GITHUB_OUTPUT}"
fi
echo "✅ Found ${STANDARD_COUNT} standard issues and ${EFFORT_COUNT} effort issues to triage! 🎯"
- name: 'Create Gemini CLI Experiments Override'
if: |-
steps.get_issue_from_event.outputs.has_issues == 'true' || steps.find_issues.outputs.has_issues == 'true'
run: |
cat << 'EOF' > gemini_exp.json
{
"flags": [
{
"flagId": 45750526,
"boolValue": false
}
],
"experimentIds": []
}
EOF
- name: 'Get Repository Labels'
id: 'get_labels'
@@ -75,16 +146,18 @@ jobs:
core.info(`Found ${labelNames.length} labels: ${labelNames.join(', ')}`);
return labelNames;
- name: 'Run Gemini Issue Analysis'
- name: 'Run Standard Triage Analysis'
if: |-
${{ steps.find_issues.outputs.issues_to_triage != '[]' }}
steps.get_issue_from_event.outputs.has_issues == 'true' || steps.find_issues.outputs.has_standard_issues == 'true'
uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0
id: 'gemini_issue_analysis'
id: 'gemini_standard_issue_analysis'
env:
GITHUB_TOKEN: '' # Do not pass any auth token here since this runs on untrusted inputs
ISSUES_TO_TRIAGE: '${{ steps.find_issues.outputs.issues_to_triage }}'
REPOSITORY: '${{ github.repository }}'
AVAILABLE_LABELS: '${{ steps.get_labels.outputs.available_labels }}'
GEMINI_CLI_TRUST_WORKSPACE: 'true'
GEMINI_EXP: 'gemini_exp.json'
GEMINI_STRICT_TELEMETRY_LIMITS: 'true'
with:
gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
@@ -97,7 +170,8 @@ jobs:
{
"maxSessionTurns": 25,
"coreTools": [
"run_shell_command(echo)"
"run_shell_command(echo)",
"read_file"
],
"telemetry": {
"enabled": true,
@@ -113,41 +187,37 @@ jobs:
## Steps
1. You are only able to use the echo command. Review the available labels in the environment variable: "${AVAILABLE_LABELS}".
2. Check environment variable for issues to triage: $ISSUES_TO_TRIAGE (JSON array of issues)
3. Review the issue title, body and any comments provided in the environment variables.
4. Identify the most relevant labels from the existing labels, focusing on kind/*, area/*, sub-area/* and priority/*.
5. If the issue already has area/ label, dont try to change it. Similarly, if the issue already has a kind/ label don't change it. And if the issue already has a priority/ label do not change it for example:
If an issue has area/core and kind/bug you will only add a priority/ label.
Instead if an issue has no labels, you will could add one lable of each kind.
1. You are only able to use the echo and read_file commands. Review the available labels in the environment variable: "${AVAILABLE_LABELS}".
2. Use the read_file tool to read the file "standard_issues_to_triage.json" which contains the JSON array of issues to triage.
3. Review the issue title, body and any comments provided in the JSON file.
4. Identify the most relevant labels from the existing labels, specifically focusing on area/*, kind/*, and priority/*.
5. Label Policy:
- If the issue already has a kind/ label, do not change it.
- If the issue has exactly ONE priority/ label, do not change it.
- If the issue is missing a priority/ label, OR if the issue currently has MULTIPLE priority/ labels, you must evaluate the issue's impact to determine exactly ONE priority level (priority/p0, priority/p1, priority/p2, priority/p3, or priority/unknown) based the guidelines. If you are fixing an issue with multiple priority/ labels, put the correct one in `labels_to_add` and put all the incorrect ones in `labels_to_remove`.
- If the issue has exactly ONE area/ label, do not change it.
- If the issue is missing an area/ label, OR if the issue currently has MULTIPLE area/ labels, select exactly ONE area/ label that best fits the issue. Issues MUST NOT have multiple area/ labels. If you are fixing an issue with multiple area/ labels, put the correct one in `labels_to_add` and put all the incorrect ones in `labels_to_remove`.
- If any of these are missing, select exactly ONE appropriate label for the missing category.
6. Identify other applicable labels based on the issue content, such as status/*, help wanted, good first issue, etc.
7. For area/* and kind/* limit yourself to only the single most applicable label in each case.
8. Give me a single short explanation about why you are selecting each label in the process.
9. Output a JSON array of objects, each containing the issue number
7. Give me a single short explanation about why you are selecting each label in the process.
8. Output a JSON array of objects, each containing the issue number
and the labels to add and remove, along with an explanation. For example:
```
[
{
"issue_number": 123,
"labels_to_add": ["kind/bug", "priority/p2"],
"labels_to_add": ["area/core", "kind/bug", "priority/p2"],
"labels_to_remove": ["status/need-triage"],
"explanation": "This issue is a bug that needs to be addressed with medium priority."
},
{
"issue_number": 456,
"labels_to_add": ["kind/enhancement"],
"labels_to_remove": [],
"explanation": "This issue is an enhancement request that could improve the user experience."
"explanation": "This issue is a UI bug that needs to be addressed with medium priority."
}
]
```
If an issue cannot be classified, do not include it in the output array.
10. For each issue please check if CLI version is present, this is usually in the output of the /about command and will look like 0.1.5
9. For each issue please check if CLI version is present, this is usually in the output of the /about command and will look like 0.1.5
- Anything more than 6 versions older than the most recent should add the status/need-retesting label
11. If you see that the issue doesn't look like it has sufficient information recommend the status/need-information label and leave a comment politely requesting the relevant information, eg.. if repro steps are missing request for repro steps. if version information is missing request for version information into the explanation section below.
- After identifying appropriate labels to an issue, add "status/need-triage" label to labels_to_remove in the output.
12. If you think an issue might be a Priority/P0 do not apply the priority/p0 label. Instead apply a status/manual-triage label and include a note in your explanation.
13. If you are uncertain and have not been able to apply one each of kind/, area/ and priority/ , apply the status/manual-triage label.
10. If you see that the issue doesn't look like it has sufficient information recommend the status/need-information label and leave a comment politely requesting the relevant information, eg.. if repro steps are missing request for repro steps. if version information is missing request for version information into the explanation section below.
11. If you think an issue might be a Priority/P0 do not apply the priority/p0 label. Instead apply a status/manual-triage label and include a note in your explanation.
12. If you are uncertain about a category, use the area/unknown, kind/question, or priority/unknown labels as appropriate. If you are extremely uncertain, apply the status/manual-triage label.
## Guidelines
@@ -157,177 +227,217 @@ jobs:
- Do not add comments or modify the issue content.
- Do not remove the following labels maintainer, help wanted or good first issue.
- Triage only the current issue.
- Identify only one area/ label
- Identify exactly ONE area/ label. Do NOT assign multiple area/ labels to a single issue.
- Identify only one kind/ label (Do not apply kind/duplicate or kind/parent-issue)
- Identify all applicable sub-area/* and priority/* labels based on the issue content. It's ok to have multiple of these.
- Identify exactly ONE priority/ label. Do NOT assign multiple priority/ labels to a single issue.
- Once you categorize the issue if it needs information bump down the priority by 1 eg.. a p0 would become a p1 a p1 would become a p2. P2 and P3 can stay as is in this scenario.
Categorization Guidelines:
P0: Critical / Blocker
- A P0 bug is a catastrophic failure that demands immediate attention.
- To be a P0 it means almost all users are running into this issue and it is blocking users from being able to use the product.
- You would see this in the form of many comments from different developers on the bug.
- It represents a complete showstopper for a significant portion of users or for the development process itself.
Impact:
- Blocks development or testing for the entire team.
- Major security vulnerability that could compromise user data or system integrity.
- Causes data loss or corruption with no workaround.
- Crashes the application or makes a core feature completely unusable for all or most users in a production environment. Will it cause severe quality degration?
- Is it preventing contributors from contributing to the repository or is it a release blocker?
Qualifier: Is the main function of the software broken?
Example: The gemini auth login command fails with an unrecoverable error, preventing any user from authenticating and using the rest of the CLI.
P1: High
- A P1 bug is a serious issue that significantly degrades the user experience or impacts a core feature.
- While not a complete blocker, it's a major problem that needs a fast resolution. Feature requests are almost never P1.
- Once again this would be affecting many users.
- You would see this in the form of comments from different developers on the bug.
Impact:
- A core feature is broken or behaving incorrectly for a large number of users or large number of use cases.
- Review the bug details and comments to try figure out if this issue affects a large set of use cases or if it's a narrow set of use cases.
- Severe performance degradation making the application frustratingly slow.
- No straightforward workaround exists, or the workaround is difficult and non-obvious.
Qualifier: Is a key feature unusable or giving very wrong results?
Example: Gemini CLI enters a loop when making read-many-files tool call. I am unable to break out of the loop and gemini doesn't follow instructions subsequently.
P2: Medium
- A P2 bug is a moderately impactful issue. It's a noticeable problem but doesn't prevent the use of the software's main functionality.
Impact:
- Affects a non-critical feature or a smaller, specific subset of users.
- An inconvenient but functional workaround is available and easy to execute.
- Noticeable UI/UX problems that don't break functionality but look unprofessional (e.g., elements are misaligned or overlapping).
Qualifier: Is it an annoying but non-blocking problem?
Example: An error message is unclear or contains a typo, causing user confusion but not halting their workflow.
P3: Low
- A P3 bug is a minor, low-impact issue that is trivial or cosmetic. It has little to no effect on the overall functionality of the application.
Impact:
- Minor cosmetic issues like color inconsistencies, typos in documentation, or slight alignment problems on a non-critical page.
- An edge-case bug that is very difficult to reproduce and affects a tiny fraction of users.
Qualifier: Is it a "nice-to-fix" issue?
Example: Spelling mistakes etc.
Additional Context:
- If users are talking about issues where the model gets downgraded from pro to flash then i want you to categorize that as a performance issue
- This product is designed to use different models eg.. using pro, downgrading to flash etc.
- When users report that they dont expect the model to change those would be categorized as feature requests.
Definition of Areas
area/ux:
- Issues concerning user-facing elements like command usability, interactive features, help docs, and perceived performance.
- I am seeing my screen flicker when using Gemini CLI
- I am seeing the output malformed
- Theme changes aren't taking effect
- My keyboard inputs arent' being recognzied
area/platform:
- Issues related to installation, packaging, OS compatibility (Windows, macOS, Linux), and the underlying CLI framework.
area/background: Issues related to long-running background tasks, daemons, and autonomous or proactive agent features.
area/models:
- i am not getting a response that is reasonable or expected. this can include things like
- I am calling a tool and the tool is not performing as expected.
- i am expecting a tool to be called and it is not getting called ,
- Including experience when using
- built-in tools (e.g., web search, code interpreter, read file, writefile, etc..),
- Function calling issues should be under this area
- i am getting responses from the model that are malformed.
- Issues concerning Gemini quality of response and inference,
- Issues talking about unnecessary token consumption.
- Issues talking about Model getting stuck in a loop be watchful as this could be the root cause for issues that otherwise seem like model performance issues.
- Memory compression
- unexpected responses,
- poor quality of generated code
area/tools:
- These are primarily issues related to Model Context Protocol
- These are issues that mention MCP support
- feature requests asking for support for new tools.
area/core:
- Issues with fundamental components like command parsing, configuration management, session state, and the main API client logic. Introducing multi-modality
area/contribution:
- Issues related to improving the developer contribution experience, such as CI/CD pipelines, build scripts, and test automation infrastructure.
area/authentication:
- Issues related to user identity, login flows, API key handling, credential storage, and access token management, unable to sign in selecting wrong authentication path etc..
area/security-privacy:
- Issues concerning vulnerability patching, dependency security, data sanitization, privacy controls, and preventing unauthorized data access.
area/extensibility:
- Issues related to the plugin system, extension APIs, or making the CLI's functionality available in other applications, github actions, ide support etc..
area/performance:
- Issues focused on model performance
- Issues with running out of capacity,
- 429 errors etc..
- could also pertain to latency,
- other general software performance like, memory usage, CPU consumption, and algorithmic efficiency.
- Switching models from one to the other unexpectedly.
- name: 'Apply Labels to Issues'
Categorization Guidelines (Priority):
P0 - Urgent Blocking Issues:
- Definition: Critical failures breaking core functionality for a large portion of users. Examples: CLI fails to launch globally, core commands (gemini run) crash on valid input, unhandled promise rejections on boot, critical security vulnerability.
- Note: You must apply status/manual-triage instead of priority/p0.
P1 - Critical but Workable:
- Definition: Severe issues without a reasonable workaround, significantly degrading the developer experience but not globally blocking. Examples: Specific tools failing consistently (e.g., `web_search` returns 500s), persistent PTY streaming hangs, memory leaks leading to OOM after short use.
P2 - Significant Issues:
- Definition: Affect some workflows but a clear workaround exists, or non-critical bugs. Examples: Theme flickering, confusing error messages, minor UI misalignment, failing to read deeply nested config files correctly.
P3 - Minor/Enhancements:
- Definition: Trivial bugs, typos, documentation requests, or feature requests.
Categorization Guidelines (Kind):
kind/bug: The issue is describing an unexpected behavior or failure in the application.
kind/enhancement: The issue is describing a feature request or an improvement to an existing feature.
kind/question: The issue is asking a question about how to use the CLI or about a specific feature.
Categorization Guidelines (Area):
area/agent: The "brain" of the CLI. Core agent logic, model quality, tool/function calling, memory, web search, generated code quality, sub-agents.
area/core: The fundamental CLI app. UI/UX, installation, OS compatibility, performance, command parsing, theming, flickering.
area/documentation: Website docs, READMEs, inline help text.
area/enterprise: Telemetry, Policy, Quota / Licensing
area/extensions: Gemini CLI extensions capability
area/non-interactive: GitHub Actions, SDK, 3P Integrations, Shell Scripting, Command line automation
area/platform: Platform specific behavior
area/security: Authentication, authorization, privacy, data leaks, credential storage.
- name: 'Stop Telemetry Collector'
if: |-
${{ steps.gemini_issue_analysis.outcome == 'success' &&
steps.gemini_issue_analysis.outputs.summary != '[]' }}
steps.find_issues.outputs.has_effort_issues == 'true'
run: 'docker rm -f gemini-telemetry-collector || true'
- name: 'Run Effort Triage Analysis'
if: |-
steps.find_issues.outputs.has_effort_issues == 'true'
uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0
id: 'gemini_effort_issue_analysis'
env:
GITHUB_TOKEN: '' # Do not pass any auth token here since this runs on untrusted inputs
REPOSITORY: '${{ github.repository }}'
AVAILABLE_LABELS: '${{ steps.get_labels.outputs.available_labels }}'
GEMINI_CLI_TRUST_WORKSPACE: 'true'
GEMINI_EXP: 'gemini_exp.json'
GEMINI_STRICT_TELEMETRY_LIMITS: 'true'
with:
gcp_workload_identity_provider: '${{ vars.GCP_WIF_PROVIDER }}'
gcp_project_id: '${{ vars.GOOGLE_CLOUD_PROJECT }}'
gcp_location: '${{ vars.GOOGLE_CLOUD_LOCATION }}'
gcp_service_account: '${{ vars.SERVICE_ACCOUNT_EMAIL }}'
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
use_vertex_ai: '${{ vars.GOOGLE_GENAI_USE_VERTEXAI }}'
use_gemini_code_assist: '${{ vars.GOOGLE_GENAI_USE_GCA }}'
settings: |-
{
"maxSessionTurns": 25,
"coreTools": [
"run_shell_command(echo)",
"grep_search",
"glob",
"read_file"
],
"telemetry": {
"enabled": true,
"target": "gcp"
}
}
prompt: |-
## Role
You are an expert software architect. Analyze the provided GitHub issues and assign the correct `effort/*` label based on the codebase complexity.
## Steps
1. Use the read_file tool to read "effort_issues_to_triage.json".
2. For each issue in the array:
- You must evaluate the architectural complexity to determine the effort level. You MUST NOT guess the root cause. You MUST actively use your codebase search tools (grep_search and glob) to search for keywords from the issue and explore the codebase. You must identify the specific files and components involved before deciding the effort.
3. Output a JSON array of objects, each containing the issue number and the effort label to add, along with an explanation and an effort_analysis field. This effort_analysis must be highly detailed, technical, and empirical. It MUST NOT contain vague guesses (e.g., avoid words like "likely points to" or "possibly"). You must explicitly cite the specific file paths and architectural mechanisms you discovered using your search tools, explain the root cause, and then explicitly state how that complexity maps to the chosen effort level guidelines. For example:
```
[
{
"issue_number": 123,
"labels_to_add": ["effort/small"],
"explanation": "This is a simple logic fix.",
"effort_analysis": "The `vscode-ide-companion` extension indiscriminately tracks active text editors via `vscode.window.onDidChangeActiveTextEditor` in `open-files-manager.ts`. When a user opens `.vscode/settings.json`, its content is sent to the CLI's context. The fix is highly localized to the VS Code companion extension's event listener. It involves adding a simple conditional check to exclude specific configuration files from the active editor tracking logic, which is a trivial logic adjustment with a clear root cause."
}
]
```
## Guidelines
- Output only valid JSON format
- Do not include any explanation or additional text, just the JSON
- Triage only the current issue.
Categorization Guidelines (Effort):
effort/small (1 day or less):
- Trivial Logic & Config: Schema updates (Zod), feature flag toggles, adding missing fields to package.json or settings.json.
- UI/Aesthetic Adjustments: Fixing minor layout bugs in Ink components (e.g., adding flexShrink, correcting padding in a single Box), text color changes.
- Documentation & Strings: Typos, log message updates, CLI argument descriptions.
- Localized Bug Fixes: Single-file logic errors, straightforward promise rejections (e.g., wrapping a known failure in a try/catch), simple regex or string parsing fixes.
effort/medium (2-3 days):
- React/Ink State Management: Debugging useState/useEffect/useReducer bugs, component lifecycle issues (memory leaks in the UI), terminal redraw flickering, or state synchronization between the CLI's internal input buffer and the interactive React components.
- Asynchronous Flow & Integration: Resolving complex Promise chains, ERR_STREAM_PREMATURE_CLOSE, debugging IDE companion extensions (VS Code, Android Studio) or resolving hanging HTTP requests/IPC between the CLI and external plugins, timeouts in non-interactive/ACP modes.
- Tooling & Output Parsers: Modifying how tools parse streaming stdout/stderr buffers, adding new built-in tools that don't require native bindings.
- Cross-Component Refactors: Changes that span across packages/cli and packages/core to pass new data models or telemetry state.
effort/large (3+ days):
- Platform-Specific Complexities (PTY/Signals): Any issue involving node-pty, child_process.spawn, OS-level shell behavior (Windows vs Linux vs macOS), pseudo-terminal exhaustion (ENXIO), raw mode terminal desyncs, or POSIX signal forwarding (SIGINT/SIGTERM).
- Core Architecture & Protocols: Refactoring the Scheduler, Agent-to-Agent (A2A) protocol implementation, low-level MCP (Model Context Protocol) transport mechanisms.
- Performance & Memory: Diagnosing massive disk/memory leaks, severe boot time regressions, high-throughput streaming optimizations (e.g., voice streaming pipelines).
Note: Any bug that is described as intermittent, flickering, difficult to reproduce, platform-specific, or requiring cross-environment setups (e.g., involving the VS Code IDE companion, GCA plugin, or Android Studio) MUST NOT be rated as effort/small because of the increased overhead of testing and reproducing.
Categorization Guidelines (Priority):
P0 - Urgent Blocking Issues:
- DO NOT APPLY THIS LABEL AUTOMATICALLY. Use status/manual-triage instead.
- Definition: Urgent, block a significant percentage of the user base, and prevent frequent use of the Gemini CLI.
- This includes core stability blockers (e.g., authentication failures, broken upgrades), critical crashes, and P0 security vulnerabilities.
- Impact: Blocks development or testing for the entire team; Major security vulnerability; Causes data loss or corruption with no workaround; Crashes the application or makes a core feature completely unusable for all or most users.
- Qualifier: Is the main function of the software broken?
P1 - High-Impact Issues:
- Definition: Affect a large number of users, blocking them from using parts of the Gemini CLI, or make the CLI frequently unusable even with workarounds available.
- Impact: A core feature is broken or behaving incorrectly for a large number of users or use cases; Severe performance degradation; No straightforward workaround exists.
- Qualifier: Is a key feature unusable or giving very wrong results?
P2 - Significant Issues:
- Definition: Affect some users significantly, such as preventing the use of certain features or authentication types.
- Can also be issues that many users complain about, causing annoyance or hindering daily use.
- Impact: Affects a non-critical feature or a smaller, specific subset of users; An inconvenient but functional workaround is available; Noticeable UI/UX problems that look unprofessional.
- Qualifier: Is it an annoying but non-blocking problem?
P3 - Low-Impact Issues:
- Definition: Typically usability issues that cause annoyance to a limited user base.
- Includes feature requests that could be addressed in the near future and may be suitable for community contributions.
- Impact: Minor cosmetic issues; An edge-case bug that is very difficult to reproduce and affects a tiny fraction of users.
- Qualifier: Is it a "nice-to-fix" issue?
Categorization Guidelines (Area):
area/agent: Core Agent, Tools, Memory, Sub-Agents, Hooks, Agent Quality
area/core: User Interface, OS Support, Core Functionality
area/documentation: End-user and contributor-facing documentation, website-related
area/enterprise: Telemetry, Policy, Quota / Licensing
area/extensions: Gemini CLI extensions capability
area/non-interactive: GitHub Actions, SDK, 3P Integrations, Shell Scripting, Command line automation
area/platform: Build infra, Release mgmt, Testing, Eval infra, Capacity, Quota mgmt
area/security: security related issues
Additional Context:
- If users are talking about issues where the model gets downgraded from pro to flash then i want you to categorize that as a performance issue.
- This product is designed to use different models eg.. using pro, downgrading to flash etc.
- When users report that they dont expect the model to change those would be categorized as feature requests.
- name: 'Apply Standard Labels to Issues'
if: |-
${{ steps.gemini_standard_issue_analysis.outcome == 'success' &&
steps.gemini_standard_issue_analysis.outputs.summary != '[]' &&
steps.gemini_standard_issue_analysis.outputs.summary != '' }}
env:
REPOSITORY: '${{ github.repository }}'
LABELS_OUTPUT: '${{ steps.gemini_issue_analysis.outputs.summary }}'
LABELS_OUTPUT: '${{ steps.gemini_standard_issue_analysis.outputs.summary }}'
SUPPRESS_COMMENT: 'true'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |-
const rawLabels = process.env.LABELS_OUTPUT;
core.info(`Raw labels JSON: ${rawLabels}`);
let parsedLabels;
try {
const jsonMatch = rawLabels.match(/```json\s*([\s\S]*?)\s*```/);
if (!jsonMatch || !jsonMatch[1]) {
throw new Error("Could not find a ```json ... ``` block in the output.");
}
const jsonString = jsonMatch[1].trim();
parsedLabels = JSON.parse(jsonString);
core.info(`Parsed labels JSON: ${JSON.stringify(parsedLabels)}`);
} catch (err) {
core.setFailed(`Failed to parse labels JSON from Gemini output: ${err.message}\nRaw output: ${rawLabels}`);
return;
}
const applyLabels = require('./.github/scripts/apply-issue-labels.cjs');
await applyLabels({ github, context, core });
for (const entry of parsedLabels) {
const issueNumber = entry.issue_number;
if (!issueNumber) {
core.info(`Skipping entry with no issue number: ${JSON.stringify(entry)}`);
continue;
}
- name: 'Apply Effort Labels to Issues'
if: |-
${{ steps.gemini_effort_issue_analysis.outcome == 'success' &&
steps.gemini_effort_issue_analysis.outputs.summary != '[]' &&
steps.gemini_effort_issue_analysis.outputs.summary != '' }}
env:
REPOSITORY: '${{ github.repository }}'
LABELS_OUTPUT: '${{ steps.gemini_effort_issue_analysis.outputs.summary }}'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |-
const applyLabels = require('./.github/scripts/apply-issue-labels.cjs');
await applyLabels({ github, context, core });
const labelsToAdd = entry.labels_to_add || [];
labelsToAdd.push('status/bot-triaged');
- name: 'Sync Issue Types (Post-Analysis)'
if: |-
always() && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |-
const syncIssueTypes = require('./.github/scripts/sync-issue-types.cjs');
await syncIssueTypes({ github, context, core });
if (labelsToAdd.length > 0) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: labelsToAdd
});
const explanation = entry.explanation ? ` - ${entry.explanation}` : '';
core.info(`Successfully added labels for #${issueNumber}: ${labelsToAdd.join(', ')}${explanation}`);
}
- name: 'Find Triaged Issues to Clean Up'
if: |-
always() && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
env:
GITHUB_TOKEN: '${{ steps.generate_token.outputs.token }}'
GITHUB_REPOSITORY: '${{ github.repository }}'
run: |-
set -euo pipefail
echo '🧹 Finding issues that have both bot-triaged and need-triage labels...'
gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue label:status/bot-triaged label:status/need-triage' --limit 50 --json number > issues_to_cleanup.json
if (entry.labels_to_remove && entry.labels_to_remove.length > 0) {
for (const label of entry.labels_to_remove) {
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
name: label
});
} catch (error) {
if (error.status !== 404) {
throw error;
}
}
}
core.info(`Successfully removed labels for #${issueNumber}: ${entry.labels_to_remove.join(', ')}`);
}
if (entry.explanation) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: entry.explanation,
});
}
if ((!entry.labels_to_add || entry.labels_to_add.length === 0) && (!entry.labels_to_remove || entry.labels_to_remove.length === 0)) {
core.info(`No labels to add or remove for #${issueNumber}, leaving as is`);
}
}
- name: 'Clean Up Triage Labels'
if: |-
always() && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |-
const cleanupLabels = require('./.github/scripts/cleanup-triage-labels.cjs');
await cleanupLabels({ github, context, core });
@@ -21,6 +21,8 @@ jobs:
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Generate GitHub App Token'
id: 'generate_token'
@@ -39,3 +41,7 @@ jobs:
GITHUB_REPOSITORY: '${{ github.repository }}'
run: |-
./.github/scripts/pr-triage.sh
# If prs_needing_comment is empty, set it to [] explicitly for downstream steps
if [[ -z "$(grep 'prs_needing_comment' "${GITHUB_OUTPUT}" | cut -d'=' -f2-)" ]]; then
echo "prs_needing_comment=[]" >> "${GITHUB_OUTPUT}"
fi
+59 -8
View File
@@ -25,7 +25,7 @@ jobs:
if: |-
github.repository == 'google-gemini/gemini-cli' &&
github.event_name == 'issue_comment' &&
contains(github.event.comment.body, '/assign')
(contains(github.event.comment.body, '/assign') || contains(github.event.comment.body, '/unassign'))
runs-on: 'ubuntu-latest'
steps:
- name: 'Generate GitHub App Token'
@@ -38,6 +38,7 @@ jobs:
permission-issues: 'write'
- name: 'Assign issue to user'
if: "contains(github.event.comment.body, '/assign')"
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
@@ -48,6 +49,24 @@ jobs:
const repo = context.repo.repo;
const MAX_ISSUES_ASSIGNED = 3;
const issue = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
});
const hasHelpWantedLabel = issue.data.labels.some(label => label.name === 'help wanted');
if (!hasHelpWantedLabel) {
await github.rest.issues.createComment({
owner: owner,
repo: repo,
issue_number: issueNumber,
body: `👋 @${commenter}, thanks for your interest in this issue! We're reserving self-assignment for issues that have been marked with the \`help wanted\` label. Feel free to check out our list of [issues that need attention](https://github.com/google-gemini/gemini-cli/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22).`
});
return;
}
// Search for open issues already assigned to the commenter in this repo
const { data: assignedIssues } = await github.rest.search.issuesAndPullRequests({
q: `is:issue repo:${owner}/${repo} assignee:${commenter} is:open`,
@@ -64,13 +83,6 @@ jobs:
return; // exit
}
// Check if the issue is already assigned
const issue = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
});
if (issue.data.assignees.length > 0) {
// Comment that it's already assigned
await github.rest.issues.createComment({
@@ -97,3 +109,42 @@ jobs:
issue_number: issueNumber,
body: `👋 @${commenter}, you've been assigned to this issue! Thank you for taking the time to contribute. Make sure to check out our [contributing guidelines](https://github.com/google-gemini/gemini-cli/blob/main/CONTRIBUTING.md).`
});
- name: 'Unassign issue from user'
if: "contains(github.event.comment.body, '/unassign')"
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |
const issueNumber = context.issue.number;
const commenter = context.actor;
const owner = context.repo.owner;
const repo = context.repo.repo;
const commentBody = context.payload.comment.body.trim();
if (commentBody !== '/unassign') {
return;
}
const issue = await github.rest.issues.get({
owner: owner,
repo: repo,
issue_number: issueNumber,
});
const isAssigned = issue.data.assignees.some(assignee => assignee.login === commenter);
if (isAssigned) {
await github.rest.issues.removeAssignees({
owner: owner,
repo: repo,
issue_number: issueNumber,
assignees: [commenter]
});
await github.rest.issues.createComment({
owner: owner,
repo: repo,
issue_number: issueNumber,
body: `👋 @${commenter}, you have been unassigned from this issue.`
});
}
@@ -0,0 +1,46 @@
name: '🏷️ Issue Opened Labeler'
on:
issues:
types:
- 'opened'
jobs:
label-issue:
runs-on: 'ubuntu-latest'
if: |-
${{ github.repository == 'google-gemini/gemini-cli' || github.repository == 'google-gemini/maintainers-gemini-cli' }}
steps:
- name: 'Generate GitHub App Token'
id: 'generate_token'
env:
APP_ID: '${{ secrets.APP_ID }}'
if: |-
${{ env.APP_ID != '' }}
uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b' # ratchet:actions/create-github-app-token@v2
with:
app-id: '${{ secrets.APP_ID }}'
private-key: '${{ secrets.PRIVATE_KEY }}'
- name: 'Add need-triage label'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token || secrets.GITHUB_TOKEN }}'
script: |-
const { data: issue } = await github.rest.issues.get({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const hasLabel = issue.labels.some(l => l.name === 'status/need-triage');
if (!hasLabel) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels: ['status/need-triage']
});
} else {
core.info('Issue already has status/need-triage label. Skipping.');
}
@@ -0,0 +1,61 @@
name: 'Label Child Issues for Project Rollup'
on:
issues:
types: ['opened', 'edited', 'reopened']
schedule:
- cron: '0 * * * *' # Run every hour
workflow_dispatch:
permissions:
issues: 'write'
contents: 'read'
jobs:
# Event-based: Quick reaction to new/edited issues in THIS repo
labeler:
if: "github.repository == 'google-gemini/gemini-cli' && github.event_name == 'issues'"
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5' # ratchet:actions/checkout@v4
with:
persist-credentials: false
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 'Install Dependencies'
run: 'npm ci'
- name: 'Run Multi-Repo Sync Script'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: 'node .github/scripts/sync-maintainer-labels.cjs'
# Scheduled/Manual: Recursive sync across multiple repos
sync-maintainer-labels:
if: "github.repository == 'google-gemini/gemini-cli' && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')"
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5' # ratchet:actions/checkout@v4
with:
persist-credentials: false
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 'Install Dependencies'
run: 'npm ci'
- name: 'Run Multi-Repo Sync Script'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: 'node .github/scripts/sync-maintainer-labels.cjs'
@@ -0,0 +1,175 @@
name: 'Label Workstream Rollup'
on:
issues:
types: ['opened', 'edited', 'reopened']
schedule:
- cron: '0 * * * *'
workflow_dispatch:
jobs:
labeler:
if: "github.repository == 'google-gemini/gemini-cli'"
runs-on: 'ubuntu-latest'
permissions:
issues: 'write'
steps:
- name: 'Check for Parent Workstream and Apply Label'
uses: 'actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b' # ratchet:actions/github-script@v7
with:
script: |
const labelToAdd = 'workstream-rollup';
// Allow-list of parent issue URLs
const allowedParentUrls = [
'https://github.com/google-gemini/gemini-cli/issues/15374',
'https://github.com/google-gemini/gemini-cli/issues/15456',
'https://github.com/google-gemini/gemini-cli/issues/15324',
'https://github.com/google-gemini/gemini-cli/issues/17202',
'https://github.com/google-gemini/gemini-cli/issues/17203'
];
// Single issue processing (for event triggers)
async function processSingleIssue(owner, repo, number) {
const query = `
query($owner:String!, $repo:String!, $number:Int!) {
repository(owner:$owner, name:$repo) {
issue(number:$number) {
number
parent {
url
parent {
url
parent {
url
parent {
url
parent {
url
}
}
}
}
}
}
}
}
`;
try {
const result = await github.graphql(query, { owner, repo, number });
if (!result || !result.repository || !result.repository.issue) {
console.log(`Issue #${number} not found or data missing.`);
return;
}
const issue = result.repository.issue;
await checkAndLabel(issue, owner, repo);
} catch (error) {
console.error(`Failed to process issue #${number}:`, error);
throw error; // Re-throw to be caught by main execution
}
}
// Bulk processing (for schedule/dispatch)
async function processAllOpenIssues(owner, repo) {
const query = `
query($owner:String!, $repo:String!, $cursor:String) {
repository(owner:$owner, name:$repo) {
issues(first: 100, states: OPEN, after: $cursor) {
pageInfo {
hasNextPage
endCursor
}
nodes {
number
parent {
url
parent {
url
parent {
url
parent {
url
parent {
url
}
}
}
}
}
}
}
}
}
`;
let hasNextPage = true;
let cursor = null;
while (hasNextPage) {
try {
const result = await github.graphql(query, { owner, repo, cursor });
if (!result || !result.repository || !result.repository.issues) {
console.error('Invalid response structure from GitHub API');
break;
}
const issues = result.repository.issues.nodes || [];
console.log(`Processing batch of ${issues.length} issues...`);
for (const issue of issues) {
await checkAndLabel(issue, owner, repo);
}
hasNextPage = result.repository.issues.pageInfo.hasNextPage;
cursor = result.repository.issues.pageInfo.endCursor;
} catch (error) {
console.error('Failed to fetch issues batch:', error);
throw error; // Re-throw to be caught by main execution
}
}
}
async function checkAndLabel(issue, owner, repo) {
if (!issue || !issue.parent) return;
let currentParent = issue.parent;
let tracedParents = [];
let matched = false;
while (currentParent) {
tracedParents.push(currentParent.url);
if (allowedParentUrls.includes(currentParent.url)) {
console.log(`SUCCESS: Issue #${issue.number} is a descendant of ${currentParent.url}. Trace: ${tracedParents.join(' -> ')}. Adding label.`);
await github.rest.issues.addLabels({
owner,
repo,
issue_number: issue.number,
labels: [labelToAdd]
});
matched = true;
break;
}
currentParent = currentParent.parent;
}
if (!matched && context.eventName === 'issues') {
console.log(`Issue #${issue.number} did not match any allowed workstreams. Trace: ${tracedParents.join(' -> ') || 'None'}.`);
}
}
// Main execution
try {
if (context.eventName === 'issues') {
console.log(`Processing single issue #${context.payload.issue.number}...`);
await processSingleIssue(context.repo.owner, context.repo.repo, context.payload.issue.number);
} else {
console.log(`Running for event: ${context.eventName}. Processing all open issues...`);
await processAllOpenIssues(context.repo.owner, context.repo.repo);
}
} catch (error) {
core.setFailed(`Workflow failed: ${error.message}`);
}
+27
View File
@@ -0,0 +1,27 @@
name: 'Links'
on:
push:
branches: ['main']
pull_request:
branches: ['main']
repository_dispatch:
workflow_dispatch:
schedule:
- cron: '00 18 * * *'
jobs:
linkChecker:
if: |-
${{ github.repository == 'google-gemini/gemini-cli' }}
runs-on: 'ubuntu-latest'
steps:
- uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Link Checker'
id: 'lychee'
uses: 'lycheeverse/lychee-action@885c65f3dc543b57c898c8099f4e08c8afd178a2' # ratchet: lycheeverse/lychee-action@v2.6.1
with:
args: '--verbose --no-progress --accept 200,503 ./**/*.md'
+35
View File
@@ -0,0 +1,35 @@
name: 'Memory Tests: Nightly'
on:
schedule:
- cron: '0 2 * * *' # Runs at 2 AM every day
workflow_dispatch: # Allow manual trigger
permissions:
contents: 'read'
jobs:
memory-test:
name: 'Run Memory Usage Tests'
runs-on: 'gemini-cli-ubuntu-16-core'
if: "github.repository == 'google-gemini/gemini-cli'"
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
persist-credentials: false
- name: 'Set up Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Build project'
run: 'npm run build'
- name: 'Run Memory Tests'
run: 'npm run test:memory'
-33
View File
@@ -1,33 +0,0 @@
name: 'No Response'
# Run as a daily cron at 1:45 AM
on:
schedule:
- cron: '45 1 * * *'
workflow_dispatch:
jobs:
no-response:
runs-on: 'ubuntu-latest'
if: |-
${{ github.repository == 'google-gemini/gemini-cli' }}
permissions:
issues: 'write'
pull-requests: 'write'
concurrency:
group: '${{ github.workflow }}-no-response'
cancel-in-progress: true
steps:
- uses: 'actions/stale@5bef64f19d7facfb25b37b414482c7164d639639' # ratchet:actions/stale@v9
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
days-before-stale: -1
days-before-close: 14
stale-issue-label: 'status/need-information'
close-issue-message: >-
This issue was marked as needing more information and has not received a response in 14 days.
Closing it for now. If you still face this problem, feel free to reopen with more details. Thank you!
stale-pr-label: 'status/need-information'
close-pr-message: >-
This pull request was marked as needing more information and has had no updates in 14 days.
Closing it for now. You are welcome to reopen with the required info. Thanks for contributing!

Some files were not shown because too many files have changed in this diff Show More