Compare commits

...

3450 Commits

Author SHA1 Message Date
Christine Betts 675b3d7834 test docs change 2026-02-02 17:20:03 -05: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
christine betts a31830a3cb Ignore workspace extensions in user extensions dir (#8084) 2025-09-10 00:23:46 +00:00
matt korwel 5032b27011 0.4.0 (#8136) 2025-09-10 00:23:44 +00:00
Richie Foreman 76182dbfbf fix(ide companion extension): Don't show the installation confirmation message in Firebase Studio (#8097)
Co-authored-by: Roman Nurik <roman@nurik.net>
2025-09-10 00:20:14 +00:00
Shelakh 7d77f0287d [Part 1/6] feat(telemetry): add rate limiter and high-water mark tracker with tests (#8110) 2025-09-09 22:49:10 +00:00
Shreya Keshive ae20aee837 feat(ide): Update context filtering to be done CLI-side + update port discovery logic (#8107) 2025-09-09 22:47:14 +00:00
Billy Biggs de5a31c3b6 Limit recursion when looking for .gitignore files (#8103)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-09 21:45:37 +00:00
Dylan liu da58b93026 feat: Add reusable EnumSelector UI component (split from #6832) (#7774)
Co-authored-by: hoteye <hoteye@users.noreply.github.com>
Co-authored-by: cornmander <shikhman@google.com>
2025-09-09 21:45:12 +00:00
christine betts 8b40e000d6 Update extensions docs (#8112) 2025-09-09 20:59:18 +00:00
Sandy Tao 54744958fa feat(core): Only summarize long tool output for shell command (#8039) 2025-09-09 20:01:25 +00:00
Shreya Keshive 94187114e9 refactor(ide): extract IDE context types into a separate file (#8037) 2025-09-09 16:16:00 +00:00
christine betts 02f67d3c57 Add clearcut logging for extensions install command (#8057)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-09 16:12:56 +00:00
Allen Hutchison ef9469a417 feat(commands): Add new commands for docs, git, and PR review (#7853) 2025-09-09 12:09:42 +00:00
Abhi 1eaf21f6a2 refactor(core): Introduce LlmUtilityService and promptIdContext (#7952) 2025-09-09 05:14:15 +00:00
christine betts 471cbcd450 Remove org/repo install support (#7815) 2025-09-09 04:59:45 +00:00
Tommaso Sciortino 2b05cf3bb4 Allow users to type while waiting for MCP servers (#8021) 2025-09-08 23:37:36 +00:00
joshualitt f0bbfe5f0a feat(core): Download ripgrep at runtime, if enabled. (#7818) 2025-09-08 21:44:56 +00:00
shrutip90 097b5c734f fix: Restart logic in useFolderTrust hook (#8038) 2025-09-08 21:43:49 +00:00
Tommaso Sciortino c8dfab9ec6 Fix maxOutputTokens compression bug. (#8026) 2025-09-08 21:15:28 +00:00
Abhi f6f2fff724 refactor: Centralize and improve model fallback handling (#7634) 2025-09-08 20:19:52 +00:00
Christie Warwick (Wilson) 9c71d3dd64 Skip bundle_size job for merge_group event (#8032) 2025-09-08 19:58:26 +00:00
Shreya Keshive c244cc86dd fix(ide companion extension): increase payload size (#8029) 2025-09-08 19:10:33 +00:00
Miguel Solorio 7e56cc6515 Move scope settings to new dialog (#7836) 2025-09-08 18:43:58 +00:00
hritan 78142eab55 fix: hide tips when folder trust dialog is open (#7394)
Co-authored-by: Hriday Taneja <hridayt@google.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-09-08 16:41:39 +00:00
Shreya Keshive 1788f04f5c fix(ide): fix crash on windows when null command is returned (#8007)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-08 14:53:28 +00:00
Richie Foreman 009c24a4b8 feat(settings): Add support for settings enum options (#7719) 2025-09-08 14:01:18 +00:00
Keith Lyons 4693137b82 fix(ui): disable input prompt during tool confirmation (#7935)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-07 20:17:20 +00:00
Tommaso Sciortino 6e26c88c2c Pull contentGenerator out of GeminiClient and into Config. (#7825) 2025-09-07 20:00:03 +00:00
Jacob Richman d33defde68 Mention replacements for deprecated settings in settings.json (#7913) 2025-09-07 19:23:57 +00:00
joshualitt d30829116e bug(core): Fix Check Bundle Size github action. (#7833) 2025-09-07 19:04:16 +00:00
Shardul Natu 6a9c2859b7 add(logging): Add OTel logging for counting chars (#7903)
Co-authored-by: Shnatu <snatu@google.com>
2025-09-07 17:41:15 +00:00
DeWitt Clinton 6b4c12eb04 Allow for slash commands to opt-out of autocompletion and /help discovery. (#7847) 2025-09-06 21:16:58 +00:00
Sandy Tao c031f538df chore(release): v0.3.4 (#7902)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-06 20:53:00 +00:00
Tommaso Sciortino 127d9205b8 Fix ctrl-c/esc while Authenticating. (#7879) 2025-09-06 17:34:00 +00:00
Sandy Tao 13d39ef746 Fix(core): Do not retry if last chunk is empty with finishReason previous chunks are good (#7859) 2025-09-06 07:01:21 +00:00
Keith Lyons 885af07ddb feat(ui): Introduce useUI Hook and UIContext (#5488)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-06 05:39:02 +00:00
Sandy Tao fe15b04f33 chore(release): v0.3.3 (#7854)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-06 04:30:24 +00:00
Rinil Kunhiraman d2b5b4f129 feat(ui): improve discoverability of MCP slash commands (#6080)
Co-authored-by: Rinil Kunhiraman <rinilkunhiraman@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-09-06 03:15:40 +00:00
Gaurav a027010097 fix: handle vpc-sc violations in LoadCodeAssist method (#7824) 2025-09-06 02:55:33 +00:00
HYPERXD ee1b395c5c prevent auto-execute on paste and preserve multi-line content in chat input (#5834)
Co-authored-by: HYPERXD <Alish-0x@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-09-06 01:53:53 +00:00
Jacob Richman 81904005fc Fix issues where escape codes could end up on startup in the input prompt (#7267) 2025-09-06 00:18:51 +00:00
Gal Zahavi dfd622e096 fix(ci): fix windows e2e tests (#7749) 2025-09-05 23:54:46 +00:00
Sandy Tao 968e938949 Fix(core): Fix stream validation logic (#7832) 2025-09-05 23:22:54 +00:00
John Thomas 77f795192e refactor: Extract path resolution logic into helper function (#6910) 2025-09-05 22:52:10 +00:00
Sandy Tao dd23c77469 feat(core): Save large tool outputs to a file and return truncated lines (#6240) 2025-09-05 22:37:29 +00:00
Tommaso Sciortino 7239c5cd9a Refactor Authentication Components and Hooks (#7750) 2025-09-05 22:35:41 +00:00
Jacob Richman d8dbe6271f Fix syntax highlighting and rendering issues. (#7759)
Co-authored-by: Miguel Solorio <miguelsolorio@google.com>
2025-09-05 22:29:54 +00:00
DeWitt Clinton c1b8708ef5 Add hidden property to slash commands (#7797) 2025-09-05 20:38:36 +00:00
Gal Zahavi 0e284457be Revert "Fix dollar sign replacement bug in file editing (#7703)" (#7823) 2025-09-05 20:34:02 +00:00
Shreya Keshive 20d0de74e1 Add initial RFC for A2A development-tool extension (#7817)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-05 19:31:42 +00:00
christine betts 69da43eb70 Make 'source' a positional argument in extensions install and set flag to true (#7807) 2025-09-05 18:44:41 +00:00
Nick Salerni a7bfab4d96 fix(token-usage): fix token usage recording for failed API calls (#7667)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-05 18:22:51 +00:00
JAYADITYA 5634be70f1 fix the proQutaDialog (#7647)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-05 16:30:15 +00:00
shrutip90 036f3a7f9c fix: Remove special handling for folderTrust flag (#7755) 2025-09-05 16:10:15 +00:00
shishu314 918ab3c2ec feat(security) - Make oauth token storage implement the shared interface (#7802)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-05 16:08:50 +00:00
shishu314 af52b04e6f Feat(security) - Create a class for Oauth credential (#7745)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-05 14:30:41 +00:00
Srinath Padmanabhan 604a2335dd feat(triage): add status/bot-triaged label after triage (#7765)
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
2025-09-05 13:44:03 +00:00
fuyou 0bc0d23cb3 Fix dollar sign replacement bug in file editing (#7703) 2025-09-05 02:12:57 +00:00
Shreya Keshive aea6230bcc fix(process-utils): fix bug that prevented start-up when running process walking command fails (#7757) 2025-09-04 23:10:33 +00:00
Chen Koki 107537c341 fix(ui): fix drag-and-drop file feature for macOS terminal 2 (#7174)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-09-04 22:06:04 +00:00
Pascal Birchler 34cd554a33 fix: Remove 'node-fetch' from externals (#7752) 2025-09-04 21:48:57 +00:00
matt korwel 4aef2fa5d5 temp disable windows e2e tests (#7746) 2025-09-04 14:14:51 -07:00
Pascal Birchler c38247ed5c Reduce bundle size & check it in CI (#7395) 2025-09-04 21:00:27 +00:00
shishu314 35a841f71a Feat(security) - Make the OAuthTokenStorage non static (#7716)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-04 20:42:47 +00:00
matt korwel e088c06a9a chore(release): v0.3.1 (#7742)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-09-04 12:57:14 -07:00
matt korwel deda119bea Takethree (#7740)
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: christine betts <chrstn@uw.edu>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
Co-authored-by: anthony bushong <agmsb@users.noreply.github.com>
2025-09-04 19:27:51 +00:00
Shardul Natu 2aa25ba87b add(telemetry): Add OTel logging for FileOperationEvent (#7082)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-04 17:20:46 +00:00
Shardul Natu cda4280d74 fix(diffstats): Always return diff stats from EditTool (#7489)
Co-authored-by: Shnatu <snatu@google.com>
2025-09-04 17:20:40 +00:00
Tommaso Sciortino cb43bb9ca4 Use IdeClient directly instead of config.ideClient (#7627) 2025-09-04 16:32:09 +00:00
Jacob MacDonald 45d494a8d8 improve performance of shell commands with lots of output (#7680) 2025-09-04 16:20:24 +00:00
anthony bushong c31e37b30e fix(core): tend to history with dangling function calls/responses (#7692) 2025-09-04 07:24:42 +00:00
Shardul Natu cae4cacd6e rename(telemetry): Update ai_(added|removed)_lines to model_(added|removed)_lines (#7577)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: Billy Biggs <bbiggs@google.com>
2025-09-04 03:54:52 +00:00
Gal Zahavi 3885f7b6ae refactor(setting): Improve settings migration and tool loading (#7445)
Co-authored-by: psinha40898 <pyushsinha20@gmail.com>
2025-09-04 02:23:25 +00:00
Victor May e7a4142b2a Handle cleaning up the response text in the UI when a response stream retry occurs (#7416) 2025-09-04 02:00:16 +00:00
shishu314 b49410e1d0 feat(extension) - Notify users when there is a new version and update it (#7408)
Co-authored-by: Shi Shu <shii@google.com>
Co-authored-by: Shreya <shreyakeshive@google.com>
2025-09-04 01:44:52 +00:00
Paul Irish 931d9fae4c Enhance json configuration docs (#7628)
Co-authored-by: cornmander <shikhman@google.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-09-04 01:27:07 +00:00
christine betts e133acd299 Remove command from extension docs (#7675)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-03 23:19:08 +00:00
shrutip90 cfea46e9d8 fix: Update permissions for trustedFolders.json file to make it more … (#7685) 2025-09-03 23:06:26 +00:00
Silvio Junior 70900799d9 Enable smart edit by default on main (#7679) 2025-09-03 23:04:50 +00:00
Shardul Natu af522f21fb feat(telemetry): Add character counts to diff stats (#7619)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: cornmander <shikhman@google.com>
2025-09-03 22:51:20 +00:00
Allen Hutchison 6bb944f942 feat: Add positional argument for prompt (#7668) 2025-09-03 22:48:54 +00:00
christine betts 987f08a619 Add enforcedAuthType setting (#6564) 2025-09-03 22:33:37 +00:00
matt korwel 5cc23f0cd8 feat/e2e workflow improvements (#7684) 2025-09-03 22:31:35 +00:00
Gal Zahavi 04e6c1d449 fix(settings): Add missing v1 settings to migration map (#7678) 2025-09-03 21:45:52 +00:00
Rahat Ahmed 645133d9dd Fix diff approval race between CLI and IDE (#7609)
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
2025-09-03 20:53:57 +00:00
Arya Gummadi 876d091602 fix(auth): improve Google OAuth error handling and prevent empty error messages (#7539) 2025-09-03 20:51:29 +00:00
Allen Hutchison af99989c91 fix(tests): make read_many_files test more reliable (#7676) 2025-09-03 20:40:19 +00:00
matt korwel 4c38227256 feat: run e2e tests on pull requests (#7659)
Co-authored-by: Adam Weidman <adamfweidman@google.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-09-03 20:14:16 +00:00
Sandy Tao 4b2c990368 fix(core): Fix more logging issues (#7674) 2025-09-03 20:09:38 +00:00
Adam Weidman 3f26f9615c chore(e2e): Stabilize PNG integration test part2 (#7670)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-09-03 19:04:23 +00:00
shrutip90 7c667e100e Override Gemini CLI trust with VScode workspace trust when in IDE (#7433) 2025-09-03 18:44:26 +00:00
Sandy Tao 5ccf46b5a0 Fix(core): Log exact model version from API response (#7666) 2025-09-03 17:56:51 +00:00
Tommaso Sciortino e6e60861e5 Move settings error throwing to loadSettings (#7605) 2025-09-03 17:41:53 +00:00
Jacob MacDonald d2ae869bb4 Simplify MCP server timeout configuration (#7661) 2025-09-03 17:34:32 +00:00
Bryant Chandler 7395ab63ab fix(cli): Correctly pass file filtering settings and add tests (#7239)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-09-03 17:25:52 +00:00
matt korwel dfd0c06153 fix(deps): Add fzf as a direct dependency to CLI (#7658) 2025-09-03 17:14:33 +00:00
JAYADITYA de53b30e69 feat(cli): custom witty message (#7641) 2025-09-03 16:39:04 +00:00
Adam Weidman 50b5c4303e chore(a2a-server): Merge A2A types (#7650) 2025-09-03 16:19:15 +00:00
Sam McCauley 2782af3f57 chore(a2a-server): refactor a2a-server src directory (#7593) 2025-09-03 14:24:48 +00:00
Gaurav abddd2b6ee feat: handle nested gitignore files (#7645)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-03 14:23:27 +00:00
ZHAO Jin-Xiang 93ec574f68 fix: gemini-cli-vscode-ide-companion's package script (#7555) 2025-09-03 13:32:21 +00:00
owenofbrien 044c3a0e14 Log config.useSmartEdit to Clearcut (#7617) 2025-09-03 09:58:47 +00:00
fuyou 5c2bb990d8 fix(gitIgnore): prevent crash/error when processing malformed file paths in GitIgnoreParser (#7553)
Co-authored-by: Srinath Padmanabhan <17151014+srithreepo@users.noreply.github.com>
2025-09-03 06:19:20 +00:00
bl-ue b5dd6f9ea6 feat(sessions): Integrate chat recording into GeminiChat (#6721) 2025-09-03 05:29:07 +00:00
Shreya Keshive c9bd3ecf6a fix(ide): prevent race condition when diff accepted through CLI (#7633) 2025-09-03 04:24:44 +00:00
Adam Weidman cb255a1619 chore(e2e): Stabilize e2e test by adding a more descriptive prompt (#7599) 2025-09-03 04:12:15 +00:00
David East 4d07cb7dba feat(cli): Add support for Ctrl+Backspace to delete a word backward (#7162) 2025-09-03 01:00:41 +00:00
Silvio Junior edb346d4ed Rename smart_edit to replace to align with the EditTool (#7621) 2025-09-03 00:38:59 +00:00
Arya Gummadi d12946ca8c test(auth): improve test environment variable cleanup (#7451)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-03 00:21:43 +00:00
David East 977149af30 fix(a2a-server): Fix flaky test on Windows by awaiting server close (#7616)
Co-authored-by: cornmander <shikhman@google.com>
2025-09-03 00:19:31 +00:00
Jack Wotherspoon 39c35e7d61 chore: improve inclusive-language (#7558) 2025-09-03 00:09:28 +00:00
Deepankar Sharma 5e1651954d Fix Arrow Keys and make Kitty Protocol more robust (#7118) 2025-09-02 23:33:38 +00:00
shishu314 f11322c710 feat(oauth) - Create hybrid storage class (#7610)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-02 23:13:07 +00:00
David East 315d786063 chore(ci): Update GitHub /assign workflow to use advanced search API (#7601) 2025-09-02 22:42:07 +00:00
christine betts 49dfe36cea Fix screen reader config bug (#7615)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-02 21:47:28 +00:00
Sandy Tao 82b6a2f5d1 feat(quality): Skip the next speaker check by default (#7614) 2025-09-02 20:37:44 +00:00
Miguel Solorio 0a7f5be81f Add footer configuration settings (#7419)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-02 17:35:43 +00:00
christine betts 6a581a695f Add gemini extensions link command (#7241)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-02 17:15:42 +00:00
Tommaso Sciortino 997136ae25 Enable citations by default for certain users. (#7438) 2025-09-02 16:36:24 +00:00
Miguel Solorio c29e44848b Add highlights for input /commands and @file/paths (#7165) 2025-09-02 16:21:55 +00:00
shishu314 93820f833f Fix(cli) - Remove Foldertrust Feature Flag (#7420)
Co-authored-by: Shi Shu <shii@google.com>
2025-09-02 16:01:22 +00:00
christine betts 70938eda17 Support installing extensions with org/repo (#7364)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-09-02 15:15:47 +00:00
Abhi 5bac855697 refactor(core): Require model for utility calls (#7566) 2025-09-02 00:28:54 +00:00
Arya Gummadi 4fd1113905 fix(build): allow builds to continue when sandbox detection fails (#7538) 2025-09-01 14:24:11 +00:00
Shreya Keshive 39e7213fc4 fix(ide): use port number for server port file instead of vscode pid (#7368) 2025-09-01 00:56:17 +00:00
Gaurav ee06dd33df update(deps): genai sdk now handles empty GEMINI_API_KEY correctly (#7377) 2025-09-01 00:55:19 +00:00
Gal Zahavi c7c709fb3c fix(int-tests): fix failing integration tests (#7516) 2025-09-01 00:45:12 +00:00
Billy Biggs f331e5d5b6 Merge general settings from different configuration sources (#7528) 2025-09-01 00:44:16 +00:00
Abhi ef2437ba77 fix(release) - make release failures p0 (#7514) 2025-08-31 19:52:14 +00:00
Gal Zahavi c0a3122f5f fix(auth): Fix failing auth test (#7502) 2025-08-31 17:02:38 +00:00
Bryan Morgan 17044876f6 Fix duplicate LOC counting due to diff_stat being passed in multiple places (#7483) 2025-08-31 11:41:28 +00:00
Srinath Padmanabhan 18bb04c80a Update gemini-automated-issue-triage.yml (#7486) 2025-08-30 21:35:15 +00:00
Shardul Natu a167f28ead fix(diffstats): Fix diff stats to correctly capture the edits (#7446)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2025-08-30 20:56:10 +00:00
Srinath Padmanabhan 96707b588e Update Issue Triage (#7469) 2025-08-30 15:43:54 +00:00
Srinath Padmanabhan ab1b74802d fix(workflows): improve issue triage (#7449)
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
2025-08-30 02:47:06 +00:00
shishu314 001009d350 Fix(Cli) - Restart gemini cli on folder trust settings changes (#7413)
Co-authored-by: Shi Shu <shii@google.com>
2025-08-29 20:31:04 +00:00
Adam Weidman 45213103f6 chore(dedup): Mock tools refix (#7418) 2025-08-29 20:08:26 +00:00
Silvio Junior d0c781a549 Smart Edit Tool (#6823) 2025-08-29 19:45:39 +00:00
Noritaka Kobayashi da22deac17 refactor: remove redundant 'undefined' type or '?' (#2691) 2025-08-29 19:33:12 +00:00
hritan 421f989faf fix: show parent name in trust folder confirmation (#7331)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-08-29 19:01:06 +00:00
Davor Racic 175fc3bf03 feat(cli): add fuzzy matching for command suggestions (#6633)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-29 18:38:39 +00:00
Hiroaki Mitsuyoshi 6f91cfa9a3 fix(cli): preserve input history after /clear command (#5890)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-29 18:18:22 +00:00
Richie Foreman 5e5f2dffc0 fix(trust): Respect folder trust setting when reading GEMINI.md (#7409) 2025-08-29 18:12:36 +00:00
Albert Mulà ea844857a2 feat(extension): resolve environment variables in extension configuration (#7213)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-29 17:53:39 +00:00
Manash 3529595e6c fix(core): Fix permissions for oauth_creds.json (#6662) 2025-08-29 17:35:07 +00:00
chen ea21f0fa03 refactor(core): reuse computeNewContent in performAddMemoryEntry (#6689)
Co-authored-by: chen893 <chenshuanglong@fuzhi.ai>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-29 17:35:00 +00:00
christine betts af6a792caa Add flag to update all extensions (#7321) 2025-08-29 17:24:17 +00:00
Lee James 6a9fb6d2ea feat: Add a --session-summary flag (#7347) 2025-08-29 16:53:39 +00:00
christine betts eb13b2a7a1 Fix enable command typo (#7382) 2025-08-29 16:48:57 +00:00
ljxfstorm f80f7b445c Restore missing resolved and integrity of some dependencies and add check of lockfile integrity (#5336)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-08-29 16:43:56 +00:00
Victor Miura 6868cbe7b7 fix(a2a): Don't mutate 'replace' tool args in scheduleToolCalls (#7369)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-08-29 16:32:34 +00:00
Pyush Sinha f2bddfe054 fix: add flash lite with respect to api defaults (#4652)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2025-08-29 16:20:50 +00:00
Andrew Garrett c9e1265de0 Fix backwards-compatibility for allowedTools -> tools.allowed (#7384) 2025-08-29 15:59:20 +00:00
shrutip90 2a0e69d833 fix(trust): Update config.isTrustedFolder (#7373) 2025-08-29 02:41:33 +00:00
Tayyab3245 9037f25df7 fix(core): treat UTF16/32 BOM files as text and decode correctly (#6081)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: jacob314 <jacob314@gmail.com>
2025-08-29 01:13:46 +00:00
Tommaso Sciortino 71ad272a1b Show citations at the end of each turn (#7350) 2025-08-28 23:42:54 +00:00
Allen Hutchison 648ab84b21 feat(cli): deprecate redundant CLI flags (#7360) 2025-08-28 23:22:59 +00:00
JAYADITYA a63e67823d feat: add Pro Quota Dialog (#7094)
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-08-28 22:49:43 +00:00
shrutip90 a0fbe000ee Skip MCP server connections in untrusted folders (#7358) 2025-08-28 22:46:27 +00:00
Gal Zahavi f00cf42f69 docs(config): update documentation for settings structure (#7352) 2025-08-28 22:31:33 +00:00
shishu314 10c6af7e49 Fix(trust) - Disable commands from untrusted directories when useFolderTrust is enabled (#7341)
Co-authored-by: Richie Foreman <richie.foreman@gmail.com>
Co-authored-by: Shi Shu <shii@google.com>
2025-08-28 21:45:47 +00:00
christine betts fe5bb6694e Screen reader updates (#7307) 2025-08-28 20:52:14 +00:00
Richie Foreman 2fc857092e fix(trust): Refuse to load extensions from untrusted workspaces (#7342) 2025-08-28 20:46:45 +00:00
shrutip90 1fc1c2b4e4 fix: Settings in Folder trust hook (#7343) 2025-08-28 19:57:06 +00:00
Pascal Birchler 03bcbcc10d Add MCP loading indicator when initializing Gemini CLI (#6923) 2025-08-28 19:53:56 +00:00
Richie Foreman ecdea602a3 fix(trust): Refuse to load from untrusted process.cwd() sources; Add tests (#7323) 2025-08-28 19:16:07 +00:00
David East cfc63d49ec docs(contributing): add section on self-assigning issues (#7243) 2025-08-28 18:43:26 +00:00
Richie Foreman a2faf34df8 fix(logging): Log NodeJS Version && Make Config.SessionID readonly (#7219) 2025-08-28 18:22:39 +00:00
Richie Foreman dd79e9b84a fix(settings/env): Ensure that loadEnvironment is always called with settings. (#7313) 2025-08-28 17:52:25 +00:00
joshualitt 600151cc2c bug(core): Strip thoughts when loading history. (#7167) 2025-08-28 17:25:13 +00:00
Victor May c35aebe109 Refine stream validation to prevent unnecessary retries (#7278) 2025-08-28 17:21:27 +00:00
Gal Zahavi fb7a34dca4 fix(cli): remove settings migration console logs (#7325) 2025-08-28 16:49:10 +00:00
N. Taylor Mullen 4b60cba66b chore(release): v0.2.2 (#7319) 2025-08-28 09:08:03 -07:00
Davor Racic 92bb34fada fix(process-utils): replace wmic with powershell for windows process (#7087)
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-28 14:09:01 +00:00
shishu314 58f6828833 feat(cli) - Create base class for handling tokens stored in files (#7240)
Co-authored-by: Shi Shu <shii@google.com>
2025-08-28 13:54:12 +00:00
Shreya Keshive 4b400f8c7d fix(ide): polyfill import.meta.url for cjs build (#7279) 2025-08-28 05:12:01 +00:00
Gal Zahavi 5f16541c38 Revert "chore(cleanup): Consolidate MockTool definitions (#7228)" (#7283) 2025-08-28 04:06:50 +00:00
Abhi bfdddcbd99 feat(commands): Enable @file processing in TOML commands (#6716) 2025-08-28 03:22:21 +00:00
Gal Zahavi 529c2649b8 Revert "Move mockTool into test-utils (#7245)" (#7277) 2025-08-28 03:05:47 +00:00
Shardul Natu 539a49bd24 add(telemetry): Add missing telemetry for UserPromptEvent (#6885)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-28 02:17:32 +00:00
Gal Zahavi f22263c9e8 refactor: refactor settings to a nested structure (#7244) 2025-08-28 01:39:45 +00:00
anthony bushong b8a7bfd136 fix(e2e): skip flaky stdin context test (#7264) 2025-08-28 00:00:50 +00:00
anthony bushong 5e84006293 fix(e2e): add missing deps to fix sandbox module not found errors in cli/core (#7256) 2025-08-27 22:23:38 +00:00
Tommaso Sciortino af4fe611ed Fix diff rendering in windows. (#7254) 2025-08-27 22:22:55 +00:00
Richie Foreman cd2e237c73 fix(compression): Discard compression result if it results in more token usage (#7047) 2025-08-27 21:00:45 +00:00
Adam Weidman da7901acaf Move mockTool into test-utils (#7245) 2025-08-27 20:18:15 +00:00
Tommaso Sciortino 19f2a07efa Fix shell argument parsing in windows (#7160) 2025-08-27 19:14:22 +00:00
Allen Hutchison f2092b1ebc fix(bug): correct /about command in bug report template (#7235) 2025-08-27 18:28:50 +00:00
Adam Weidman f0146c8b85 chore(cleanup): Consolidate MockTool definitions (#7228) 2025-08-27 18:18:26 +00:00
shishu314 5cf1c7bf79 feat(cli) - Define base class for token storage (#7221)
Co-authored-by: Shi Shu <shii@google.com>
2025-08-27 17:49:20 +00:00
David East 023053ed92 fix(tests): Fix Firebase Studio to IDE detection tests (#7163) 2025-08-27 17:31:59 +00:00
Gaurav a33293ac60 refactor: improve intermediate result parsing in issue dedup workflow (#7218) 2025-08-27 17:14:38 +00:00
Gaurav 0c1f3acc7d fix: make test more reliable (#7233) 2025-08-27 17:13:38 +00:00
Bryant Chandler 99a28e6b6a fix: Enable disableFuzzySearch config option propagation (#7002)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-27 15:27:41 +00:00
Arya Gummadi 4c3ec1f0cc refactor: centralize tool status symbols in constants (#7054) 2025-08-27 14:54:32 +00:00
Gaurav 83a40ff9d4 fix: unset GEMINI_API_KEY env var if empty (#7214) 2025-08-27 13:20:14 +00:00
anthony bushong ed68f8f03e feat(actions): create initial eval workflow (#7127) 2025-08-27 07:58:49 +00:00
uttamkanodia14 c7fc489005 Log Gemini CLI OS / Process platform in the clearcut (#7086) 2025-08-27 07:29:43 +00:00
N. Taylor Mullen 59cdf5933f chore(release): v0.2.1 (#7200) 2025-08-27 00:04:08 -07:00
christine betts c79f145b37 Add prompt to migrate workspace extensions (#7065)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-27 00:43:02 +00:00
David East be48414518 fix(ci): Fix self assign action permissions (#7130) 2025-08-27 00:25:03 +00:00
David East 2df3480cba fix(cli): make Ctrl+C UI test less flaky (#7166) 2025-08-27 00:06:02 +00:00
cornmander 1baa74ebbf Update build command to set GEMINI_SANDBOX var. (#7159)
Bypassing flaky test.
2025-08-26 20:11:39 -04:00
Lee James 3e74ff71b7 feat(errors): Make errors more informative (#7133) 2025-08-26 23:22:05 +00:00
Miguel Solorio 6fb01ddcc4 Update colors tokens for inputer/footer (#6523) 2025-08-26 22:08:47 +00:00
cornmander 327c5f889d Print error when failing to build sandbox (#7149) 2025-08-26 21:58:33 +00:00
shishu314 366483853e feat(cli) - Define shared interface for storage (#7049)
Co-authored-by: Shi Shu <shii@google.com>
2025-08-26 21:03:11 +00:00
Adam Weidman bfef867ba7 Add a2a-server package to gemini-cli (#6597) 2025-08-26 20:49:25 +00:00
Victor May 08bdd08412 Clearcut Logging of Content Error Metrics (#7099)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-26 19:37:18 +00:00
shishu314 142192ae59 fix(cli) - Add logging for shell errors (#7007)
Co-authored-by: Shi Shu <shii@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-26 19:26:16 +00:00
Jacob Richman df79433bec Downgrade version of ripgrep to the version from 7 months ago without a node 22 dependency (#7132) 2025-08-26 18:58:19 +00:00
cornmander 47417ec05e Fix cloudbuild step. (#7131)
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
2025-08-26 18:55:06 +00:00
Allen Hutchison 231576426c feat(subagent): Enable incremental output streaming (#5819) 2025-08-26 18:53:00 +00:00
Pavel Simakov bdd63ce3e8 Added usage details to /tools command. (#6849)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-26 18:07:12 +00:00
HugoMurillo cf9de689c3 fix(#6392): latest prompt being reloaded when ending a persistent process (#6857)
Co-authored-by: jacob314 <jacob314@gmail.com>
2025-08-26 18:01:31 +00:00
Victor May d340ddae62 Ensure a Strictly Alternating Message History (#6995)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-26 18:00:20 +00:00
shrutip90 4e49ee4c73 Make config non optional in ToolConfirmationMessage (#7083) 2025-08-26 17:02:22 +00:00
Andrew Garrett 52dae2c583 feat(cli): Add --allowed-tools flag to bypass tool confirmation (#2417) (#6453) 2025-08-26 16:17:43 +00:00
Amy He c33a0da1df feat(mcp): Add ODIC fallback to OAuth metadata look up (#6863)
Co-authored-by: cornmander <shikhman@google.com>
2025-08-26 16:06:26 +00:00
christine betts 51bb624d45 Add extensions enable command (#7042)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-26 15:49:00 +00:00
yoshi-taka 0324dc2eb2 chore: unused deps (#7109)
Co-authored-by: cornmander <shikhman@google.com>
2025-08-26 15:20:56 +00:00
Adam Weidman 1fd6a2f0b6 chore: format & imports (#7030) 2025-08-26 14:46:05 +00:00
christine betts dff175c4f4 [extensions] Add disable command (#7001)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-26 14:36:55 +00:00
Mark McDonald d77391b3cd Downgrade branch_protection to log (#2934)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-26 11:24:24 +00:00
Tommaso Sciortino 7e31577813 Standardize exit codes (#7055) 2025-08-26 04:44:45 +00:00
Silvio Junior 415a36a195 Do not call nextSpeakerCheck if there was an error processing the stream. (#7048)
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: shishu314 <shishu_1998@yahoo.com>
Co-authored-by: Shi Shu <shii@google.com>
Co-authored-by: Steven <steventohme59@gmail.com>
Co-authored-by: Pascal Birchler <pascalb@google.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-08-26 04:10:53 +00:00
fuyou 45fff8f9f7 Fix(command): line/block Comments Incorrectly Parsed as Slash Commands (#6957)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-08-26 03:51:27 +00:00
shrutip90 97ce197f38 Treat undefined same as true for isTrustedFolder (#7073) 2025-08-26 02:57:57 +00:00
christine betts b6cca01161 [extensions] Add an initial set of extension variables (#7035)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-26 02:13:16 +00:00
Shreya Keshive 75b1e01bb0 fix(ide): remove noisy error log (#7066) 2025-08-26 01:29:31 +00:00
shrutip90 ae1f67df04 feat: Disable YOLO and AUTO_EDIT modes for untrusted folders (#7041) 2025-08-26 00:30:04 +00:00
Arya Gummadi 2c6794feed fix: resolve three flaky tests (#7058) 2025-08-26 00:27:36 +00:00
Jack Wotherspoon 8075300e34 chore: remove CLI flags all_files and show_memory_usage (#7059) 2025-08-26 00:04:35 +00:00
N. Taylor Mullen ad71cdab4c fix(ci): allow release branches to run (#7060) 2025-08-25 23:39:32 +00:00
Tommaso Sciortino 925d747b9d Revert "feat: add explicit license selection and status visibility (#6751)" (#7057) 2025-08-25 23:16:30 +00:00
Andrew Grigorev d820c2335b fix(core): enable thinking explicitly in flash-lite models (#3033)
Co-authored-by: Lee James <40045512+leehagoodjames@users.noreply.github.com>
2025-08-25 22:30:40 +00:00
owenofbrien cf5e1da69f Added session id logging for non-interactive sessions in debug mode (#7032) 2025-08-25 22:21:00 +00:00
yoshi-taka 28912589d0 unused deps (#4732) 2025-08-25 22:17:48 +00:00
Pascal Birchler 0f031a7f89 Explict imports & exports with type modifier (#3774) 2025-08-25 22:04:53 +00:00
Arya Gummadi 71c090c696 feat: add golden snapshot test for ToolGroupMessage and improve success symbol (#7037) 2025-08-25 21:42:18 +00:00
Arya Gummadi 0a8e941097 fix(telemetry): Update logger tests to handle user email field (#7050) 2025-08-25 21:20:17 +00:00
Abhi db0bf2b71f refactor(cli): Improve Kitty keycode handling and tests (#7046) 2025-08-25 21:14:07 +00:00
Richie Foreman 1b2249fb8f feat(ide): Enable Firebase Studio install now that FS has updated VsCode (#7027) 2025-08-25 21:10:36 +00:00
Jerop Kipruto f719978476 feat: Update GitHub workflow configurations (#7004) 2025-08-25 21:10:20 +00:00
Pascal Birchler ee4feea006 chore: consistently import node modules with prefix (#3013)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-08-25 20:11:27 +00:00
Steven 415d3413c4 feat(telemetry): Add email to telemetry prompt (#6339)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-25 20:06:53 +00:00
shishu314 cd75d94262 Log yolo mode + number of turns (#6055)
Co-authored-by: Shi Shu <shii@google.com>
2025-08-25 20:06:47 +00:00
christine betts f32a54fefc [extensions] Add extensions update command (#6878)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-25 19:41:15 +00:00
Abhi 41ece1a8b7 fix(keyboard): Implement Tab and Backspace handling for Kitty Protocol (#7006) 2025-08-25 18:41:10 +00:00
Shreya Keshive 776627c855 refactor(ide): Improve IDE detection discovery (#6765) 2025-08-25 18:39:57 +00:00
christine betts 0641b1c095 [extensions] Add extensions list command (#6879)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-25 18:27:38 +00:00
Arya Gummadi 4170dbdac3 fix: misaligned right border on tool calls ui and spacing in multiple tool calls ui (#6941) 2025-08-25 18:26:06 +00:00
Antonio Scandurra 7fa592f342 Show error instead of aborting if model fails to call tool (#7005) 2025-08-25 17:58:04 +00:00
christine betts ade703944d [extensions] Add extensions uninstall command (#6877) 2025-08-25 17:40:15 +00:00
christine betts 0bd496bd51 [extensions] Add extension management install command (#6703) 2025-08-25 17:02:10 +00:00
Pascal Birchler 49cce8a15d chore(test): install and configure vitest eslint plugin (#3228)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-08-25 14:21:47 +00:00
Billy Biggs 04953d60c1 Introduce system defaults (vs system overrides) (#6724) 2025-08-25 04:21:22 +00:00
Shardul Natu 1918f4466b add(OTel): Add OTel logging for MalformedJsonEvent (#6912)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: cornmander <shikhman@google.com>
2025-08-25 02:11:41 +00:00
Pascal Birchler bedd1d2c20 Add .prettierignore file (#6914) 2025-08-24 21:01:26 +00:00
Billy Biggs a8cac96cc9 Support JSON schema formats using ajv-formats (#6949) 2025-08-24 16:37:09 +00:00
kookyleo 5bba15b038 fix(cli): Improve proxy test isolation and sandbox path resolution (#6555) 2025-08-23 04:43:03 +00:00
sangwook 494a996ff8 feat(core): share file list patterns between glob and grep tools (#6359)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-23 04:35:00 +00:00
Shreya Keshive f55b294570 Update instructions for patching a release (#6871)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-23 04:15:03 +00:00
Sudheer Tripathi d89f7ea9b5 fix(cli): gemini command stuck in git bash (#6397)
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-23 00:19:20 +00:00
Sandy Tao da73f13d02 fix(core): Skip loop check for dividers (#6893) 2025-08-23 00:08:16 +00:00
Neha Prasad 1a89d18526 fix: slash command completion menu column width and spacing issues (#5797)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-22 23:51:49 +00:00
Deepankar Sharma 53067fda74 Add support for debug logging of keystrokes to investigate #6227 (#6844)
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-22 23:31:55 +00:00
Bryan Morgan fef89f5429 Filter thought parts before passing them to CountToken (#6859)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-22 23:15:37 +00:00
Victor May 5b5290146a Metrics for Retries on Content Errors (#6870)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-22 23:06:29 +00:00
George Smith 33d49291ec fix(cli): Support special characters in sandbox profile path (#2038)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-22 21:36:57 +00:00
Tommaso Sciortino 75822d3506 Change the type of ToolResult.responseParts (#6875) 2025-08-22 21:12:05 +00:00
gbbosak 9a0722625b Fix crash when encountering an included directory which doesn't exist (#6497)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
2025-08-22 20:49:35 +00:00
Agus Zubiaga cfcf14fd06 Support all content types in prompts from Zed (#6756) 2025-08-22 20:10:14 +00:00
Silvio Junior 4c1c6d2b0d Log all parts of a streaming response (#6855) 2025-08-22 20:01:45 +00:00
jason 5030ced9e1 feat: add explicit license selection and status visibility (#6751) 2025-08-22 20:01:01 +00:00
Victor May bb8a23ae80 Retry Message Stream on Empty Chunks (#6777) 2025-08-22 19:43:53 +00:00
Santhosh Kumar 4b79ef877f feat(cli): Allow themes to be specified as file paths (#6828)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-22 19:28:41 +00:00
David East 11119c80f7 feat(ci): add self-assign workflow for issues (#6840) 2025-08-22 19:16:35 +00:00
matt korwel c3cf1c61c1 fix(release): fallback to github.sha when ref is not provided (#6862) 2025-08-22 12:54:08 -07:00
Lee James 240830afac feat(mcp): log include MCP request with error (#6778) 2025-08-22 18:10:30 +00:00
Ahmed Mughal d35abdab99 fix(editors): fix neovim closing when using modify with editor (#5337)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-22 17:57:11 +00:00
joshualitt 76bbbac7ff bug(core): Fix for "no changes" edits. (#6836) 2025-08-22 17:43:19 +00:00
Jacob MacDonald 5de66b4908 feat(mcp): Improve MCP prompt argument parsing (#6779)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-22 17:28:11 +00:00
Swapnaneel Patra f61acf60f6 fix(core): correctly consolidate multi-part text content (#6235)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-22 17:12:10 +00:00
Ben Guo 9c1490e985 fix(copyCommand): provide friendlier error messages for /copy command (#6723)
Co-authored-by: Ben Guo <hundunben@gmail.com>
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-08-22 16:58:35 +00:00
Jerop Kipruto c4a788b7b2 fix invalid json in workflow settings (#6831) 2025-08-22 16:19:07 +00:00
pokutuna 56ad22b39b fix(core): citation markers misplaced in search results containing multibyte characters (#5956)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-22 16:09:16 +00:00
fuyou 3b29f11862 fix(cli): improve stdin handling and add initial state check (#6747) 2025-08-22 15:42:03 +00:00
Arya Gummadi e1d5dc545d fix(checkpointing): improve error handling and messaging for Git issues (#6801) 2025-08-22 15:29:52 +00:00
Victor Miura 31cd35b8c4 fix(tools): Add an end of file list marker to ReadManyFilesTool (#5967)
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-22 15:10:14 +00:00
Nanda Kishore 528227a0f8 feat: Add programming language to CLI events (#6071)
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Adam Weidman <65992621+adamfweidman@users.noreply.github.com>
Co-authored-by: JaeHo Jang <diehreo@gmail.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Victor May <mayvic@google.com>
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
Co-authored-by: joshualitt <joshualitt@google.com>
Co-authored-by: Billy Biggs <bbiggs@google.com>
Co-authored-by: Ricardo Fabbri <rfabbri@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
Co-authored-by: Ben Guo <36952867+HunDun0Ben@users.noreply.github.com>
Co-authored-by: Ben Guo <hundunben@gmail.com>
Co-authored-by: mkusaka <hinoshita1992@gmail.com>
2025-08-22 12:17:32 +00:00
Bryant Chandler 4ced997d63 feat(search): Add option to disable fuzzy search (#6510)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-22 06:31:39 +00:00
fuyou ef46d64ae5 Fix(grep): memory overflow in grep search and enhance test coverage (#5911)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-22 06:10:45 +00:00
mkusaka 51f642f0a9 fix: Ctrl+E should move to current line end, not buffer end (#6729)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-22 04:39:58 +00:00
Ben Guo 348fa6c7c2 fix(console): fix debug icon rendering in "Debug Console" Box (#6737)
Co-authored-by: Ben Guo <hundunben@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-22 04:37:51 +00:00
Shreya Keshive 5be9172ad5 fix(ide): preserve focus when showing diff view (#6795) 2025-08-22 02:24:45 +00:00
Gal Zahavi 14ca687c05 test(integration-tests): isolate user memory from test runs (#6790) 2025-08-22 00:34:13 +00:00
Tommaso Sciortino 15c62bade3 Reuse CoreToolScheduler for nonInteractiveToolExecutor (#6714) 2025-08-21 23:49:12 +00:00
Jacob Richman 29699274bb feat(settings) support editing string settings. (#6732) 2025-08-21 23:43:56 +00:00
christine betts 10286934e6 Introduce initial screen reader mode handling and flag (#6653) 2025-08-21 22:29:15 +00:00
Ricardo Fabbri 679acc45b2 fix(docs): path of chat checkpoints in manual (#6303)
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-21 22:27:23 +00:00
Billy Biggs 2dd15572ea Support IDE connections via stdio MCP (#6417) 2025-08-21 22:00:05 +00:00
joshualitt ec41b8db8e feat(core): Annotate remaining error paths in tools with type. (#6699) 2025-08-21 21:40:18 +00:00
Gaurav 299bf58309 fix: handle extra text in gemini output for dedup workflow (#6771) 2025-08-21 20:40:44 +00:00
Victor May 720eb81890 At Command Race Condition Bugfix For Non-Interactive Mode (#6676) 2025-08-21 18:47:40 +00:00
JaeHo Jang 1e5ead6960 perf(core): parallelize memory discovery file operations performance gain (#5751)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-21 18:21:04 +00:00
Adam Weidman 714b3dab73 chore(lint config): add test-utils to eslint config (#6768) 2025-08-21 18:00:59 +00:00
christine betts 0a7879272d Fix stats display layout (#6758) 2025-08-21 17:56:18 +00:00
christine betts a90ca626d3 Quick fix for enterprise docs (#6753)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-21 14:38:10 +00:00
官余棚 589f5e6823 feat(cli): prompt completion (#4691)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-21 08:04:04 +00:00
shrutip90 ba5309c405 Force restart on trust level change to reload settings (#6713) 2025-08-21 07:38:12 +00:00
Shardul Natu 0242ecd83a fix(metrics): Do not convert numerical metrics to strings (#6701)
Co-authored-by: Shnatu <snatu@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
Co-authored-by: Arya Gummadi <aryagummadi@google.com>
2025-08-21 07:25:42 +00:00
pwrwpw f8f79bf2f7 fix(core): avoid error handling on cancelled requests to prevent crash (#6039)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-21 07:18:30 +00:00
Yoichiro Tanaka 63f9e86bc3 feat(mcp-client): Handle 401 error for httpUrl (#6640) 2025-08-21 07:05:45 +00:00
bonggwan a64394a4fa (fix): Change broken emojis (#6725) 2025-08-21 06:14:29 +00:00
cornmander 16360588d7 Add integration test to confirm environment variable propagation. (#6696) 2025-08-21 01:44:34 +00:00
Allen Hutchison a590a033be test(integration): add failing test for stdin context with prompt (#6158) 2025-08-20 23:52:27 +00:00
Tommaso Sciortino 653267a64f Remove unused attribute (#6661) 2025-08-20 23:13:50 +00:00
Tommaso Sciortino 0193ce77dd Remove unnecessary FileErrorType. (#6697) 2025-08-20 23:13:29 +00:00
cornmander 6eb6560d42 Limit dependabot PRs to security updates (#6657) 2025-08-20 22:24:43 +00:00
Shreya Keshive 0e9b06d5c2 feat(ide): improve IDE installation UX and feedback (#6677) 2025-08-20 21:11:31 +00:00
Shreya Keshive 80ff3cd25e feat(ide ext): Write workspace path to port file (#6659) 2025-08-20 21:09:53 +00:00
Sandy Tao 6aff66f501 feat(core): Handle special characters in file search paths (#6680) 2025-08-20 20:51:49 +00:00
VigneshKumar b4ecdd67ec fix: typos/grammar in roadmap (#6675) 2025-08-20 20:15:54 +00:00
Jacob MacDonald 1738d40745 return the JSON stringified parameters from getDescription for MCP tools and Discovered tools (#6655) 2025-08-20 20:10:02 +00:00
Victor May 4642de2a5c Fixing at command race condition (#6663) 2025-08-20 19:51:31 +00:00
Jacob Richman 52e340a11b Revert "Ignore workspace settings for untrusted folders" (#6672) 2025-08-20 19:49:15 +00:00
hritan fd64d89da0 fix: copy command gets stuck (#6482)
Co-authored-by: Hriday Taneja <hridayt@google.com>
2025-08-20 18:42:42 +00:00
VigneshKumar 716297fb32 fix: typo in readme (#6669) 2025-08-20 18:19:32 +00:00
christine betts 99b1ba9d10 Add enterprise settings docs (#6076) 2025-08-20 17:04:03 +00:00
matt korwel 0e24805806 feat(release): update release process for nightly and preview builds (#6643)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-20 15:50:00 +00:00
Andrii Abramov acedcfb8f7 Fix formatting in README.md (#6621)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-20 14:54:36 +00:00
Lee James 99f03bf364 test(logging): Add tests for default log fields (#6583) 2025-08-20 14:33:25 +00:00
agarwalravikant 6b843ca3a8 Changes to add MCP tool count, and MCP tool name as dimension (#6631)
Co-authored-by: Ravikant Agarwal <ravikantag@google.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-20 14:22:22 +00:00
dependabot[bot] a773d0887c chore(deps)(deps): bump google-github-actions/run-gemini-cli from 0.1.10 to 0.1.11 (#6614)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-20 14:13:20 +00:00
fuyou b6e7796346 docs: Update keyboard shortcuts for input clearing functionality (#6627) 2025-08-20 13:56:53 +00:00
cornmander c668699e77 Add permissions specs to token generation. (#6595) 2025-08-20 05:00:02 +00:00
shrutip90 d250293c2e Ignore workspace settings for untrusted folders (#6606) 2025-08-20 04:20:41 +00:00
cornmander 179f1414da feat: add dependabot configuration (#6604) 2025-08-20 04:02:02 +00:00
matt korwel e5f4d25f5e Update README.md (#6603)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-08-20 03:55:34 +00:00
Yuki Okita 21c6480b65 Refac: Centralize storage file management (#4078)
Co-authored-by: Taylor Mullen <ntaylormullen@google.com>
2025-08-20 01:55:47 +00:00
Jerop Kipruto 1049d38845 feat: update .gitignore in /setup-github (#6591) 2025-08-20 01:53:53 +00:00
Gal Zahavi c93c06711a Update shell service integration tests (#6598) 2025-08-20 01:24:42 +00:00
Arya Gummadi 2a71c10b8a feat: auto-approve compatible pending tools when allow always is selected (#6519) 2025-08-20 01:22:41 +00:00
Blackoutta d587c6f104 Fix IDE Companion Connection in Proxy Environments (#6308)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-20 00:32:08 +00:00
Shreya Keshive 6732665a08 fix(ide): Correctly identify IDE process when run from terminal (#6566) 2025-08-20 00:23:37 +00:00
Arya Gummadi 6505b0c8e1 fix: allow re-auth with another google account (#6544) 2025-08-20 00:06:25 +00:00
Sandy Tao 389102ec0e feat(core): Add --skip-next-speaker-check flag (#6589) 2025-08-19 23:45:13 +00:00
Shardul Natu faff1c2ec7 update(opentelemetry): Upgrade OTel dependencies (#6540)
Co-authored-by: Shnatu <snatu@google.com>
2025-08-19 23:39:59 +00:00
Tommaso Sciortino a01d411c5a Get ToolRegistry from config instead of passing it (#6592) 2025-08-19 23:27:15 +00:00
Gal Zahavi f1575f6d8d feat(core): refactor shell execution to use node-pty (#6491)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-19 23:03:51 +00:00
Tommaso Sciortino 0cc2a1e7ef Remove unnecessary promiuse usage. (#6585) 2025-08-19 22:31:02 +00:00
Yoichiro Tanaka 1244ec6954 docs: Update mcpServers configuration documentation (#6556)
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-08-19 21:47:36 +00:00
Jack Wotherspoon fb5f2987f3 feat(ui): add hideFooter setting to hide footer from UI (#6505) 2025-08-19 21:06:01 +00:00
joshualitt b9cece767d feat(core): Cleanup after migrating tools. (#6199)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-19 20:55:06 +00:00
Jacob Richman 2143731f6e fix(paste) incorrect handling of \\\n in pastes (#6532) 2025-08-19 20:41:08 +00:00
Shreya Keshive ed1fc4ddb3 fix(ide): Fix bug where companion extension was not being installed on Windows correctly (#6576) 2025-08-19 20:25:11 +00:00
fuyou 24858b319a Fix locale-specific date formatting issue in environmentContext.ts (#5889)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-19 20:24:28 +00:00
anj-s 1b9107a8bb Remove checking for a condition just for logging (#6503) 2025-08-19 20:17:42 +00:00
Marat Boshernitsan d543c8339a fix(core): harden user account caching (#6501) 2025-08-19 20:16:06 +00:00
owenofbrien b561d3bbed Log all session metadata (#6423) 2025-08-19 20:06:00 +00:00
HugoMurillo b9cf1ea3ce fix(#5605): .env file loaded after settings are parsed (#6494) 2025-08-19 19:07:42 +00:00
Ramón Medrano Llamas b24c5887c4 feat: restart MCP servers on /mcp refresh (#5479)
Co-authored-by: Brian Ray <62354532+emeryray2002@users.noreply.github.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-08-19 19:03:19 +00:00
Shreya Keshive 4828e4daf1 feat: Add IDE client to /bug & /about if IDE mode is enabled (#6567) 2025-08-19 18:22:21 +00:00
Shreya Keshive 9588aa6ef9 feat: Show /ide subcommands based on connection status instead of ideMode boolean (#6496) 2025-08-19 17:24:58 +00:00
Akhil Appana fde5511c27 feat(ui): implement message queuing during streaming responses (#6049)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-19 16:25:16 +00:00
Arya Gummadi ec0d9f4ff7 fix: add privacy settings hook and tests (#6360) 2025-08-19 06:57:10 +00:00
Arya Gummadi 8f8082fe3d feat: add file change tracking to session metrics (#6094)
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-08-19 05:57:53 +00:00
Arya Gummadi da396bd566 fix: ensure consistent theme behavior between local and CI test runs (#6358)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-19 05:56:46 +00:00
agarwalravikant 58c2925624 Changes to add tool_type as dimension (#6538)
Co-authored-by: Ravikant Agarwal <ravikantag@google.com>
2025-08-19 05:25:47 +00:00
Ali Al Jufairi e290a61a52 fix(settings) : Disable showing statics in the dialog (#5998)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-08-19 03:38:55 +00:00
Ali Al Jufairi 92bb4624c4 feat(settings): enhance settings management with generic setter and display hel… (#6202)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-19 02:28:45 +00:00
bl-ue 36ea986cfe feat(sessions): Introduce core ChatRecordingService for automatic conversation saving (#5221) 2025-08-19 00:39:57 +00:00
Gal Zahavi 6fc68ff8d4 fix(tools): Handle special characters in file paths for glob and read_many_files (#6507)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-18 23:39:05 +00:00
Conrad Irwin fb3ceb0da4 Read and write files through Zed (#6169)
Co-authored-by: Agus Zubiaga <agus@zed.dev>
2025-08-18 22:29:45 +00:00
Arya Gummadi 4394b6ab4f fix(docs): update authentication documentation to reflect available options (#6361)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-18 22:04:01 +00:00
Gaurav 5fe4e02310 fix: GCA creds loading order (#6498) 2025-08-18 21:11:19 +00:00
Jacob MacDonald 3960ccf781 Add MCP Root change notifications (#6502) 2025-08-18 21:09:02 +00:00
Bryant Chandler 465ac9f547 feat(filesearch): Introduce non-recursive file search strategy (#6087)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Bryant Chandler <bryantchandler@chromium.org>
2025-08-18 20:43:24 +00:00
joshualitt d66ddcd82e bug(core): Do not throw validation errors when building tools in nonInteractiveToolExecutor. (#6363) 2025-08-18 20:28:15 +00:00
Billy Biggs 91cd0db2b3 Log start session event through telemetry/loggers (#6431) 2025-08-18 20:03:03 +00:00
Richie Foreman 71f706cf29 feat(client/compression): Log telemetry when compressing chat context. (#6195) 2025-08-18 19:59:13 +00:00
cornmander 1a0cc68e29 Disable failing IDE tests. (#6481) 2025-08-18 17:51:44 +00:00
Shreya Keshive 0215811c4c Revert "Show /ide enable & /ide disable commands based on connection status" (#6486) 2025-08-18 16:42:45 +00:00
Abhi 065eb7897d fix(commands): Respect YOLO mode in custom slash commands (#6441) 2025-08-18 14:34:51 +00:00
uttamkanodia14 88fc6e5861 Sends Gemini CLI Client install id to Vertex and Gemini. (#6217) 2025-08-18 07:06:57 +00:00
fuyou 7b03a64b85 Fix URL truncation in CLI display components #5902 (#5925) 2025-08-18 05:26:34 +00:00
cornmander 133f0230c3 Add vi globals to fix integration tests. (#6445) 2025-08-18 05:17:22 +00:00
Richie Foreman 2998f27f70 chore(compiler): Enable strict property access TS compiler flag. (#6255)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-17 16:43:21 +00:00
cornmander ec1fa954d1 Fix several IDE mode integration tests (#6408)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-17 07:55:39 +00:00
Abhi 33b9bdb11e feat(cli): Introduce arguments for shell execution in custom commands (#5966) 2025-08-17 04:02:54 +00:00
cornmander e7dbc607a5 Fix missing import in ide integration tests. (#6407) 2025-08-17 01:26:12 +00:00
cornmander 5aadb02af0 Fix integration test. (#6403) 2025-08-17 00:08:14 +00:00
Marat Boshernitsan bc60257e22 feat(oauth): Make oauth client a singleton to survive cache failures (#6348) 2025-08-16 05:05:59 +00:00
Jacob Richman 6c1373c332 Revert "Update semantic color tokens" (#6365) 2025-08-16 03:18:31 +00:00
Billy Biggs d57cc0b930 Add support for HTTP OpenTelemetry exporters (#6357) 2025-08-16 01:10:21 +00:00
Sunny Sachanandani 4896c7739f [ide-mode] Fix path delimiter for multi-root workspaces on Windows (#6273)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-15 22:58:31 +00:00
Miguel Solorio 3c0af3654a Update semantic color tokens (#6253)
Co-authored-by: jacob314 <jacob314@gmail.com>
2025-08-15 22:39:54 +00:00
Evan Otero 5246aa11f4 Check for pending tool calls before appending IDE Context (#6317) 2025-08-15 22:04:47 +00:00
Gaurav 80763f5629 fix: handle multiline output in issue dedup workflow (#6338) 2025-08-15 21:33:13 +00:00
Wanlin Du de6c759c28 fix: allow user to use responseSchema as well. (#6336) 2025-08-15 20:59:01 +00:00
Tommaso Sciortino b55f19fdfc use toMatchSnapshot in test (#6344) 2025-08-15 20:31:00 +00:00
Jack Wotherspoon 31b4c76a6b fix: improve robustness of gemini mcp add command (#6332) 2025-08-15 19:36:38 +00:00
Deepankar Sharma f5a5cdd973 fix(input): Handle numpad enter key in kitty protocol terminals (#6341)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-15 19:30:57 +00:00
Brian Ray 2c07dc0757 fixes for oauth spec - adds github oauth support. Resource paramater. (#6281) 2025-08-15 19:14:48 +00:00
Tommaso Sciortino 01b8a7565c Fix shell tool description to be os-specific (#6335) 2025-08-15 19:08:29 +00:00
blanca-delgado-parra 088f074839 Update quota-and-pricing.md to clarify billing (#6092)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Srinath Padmanabhan <srithreepo@google.com>
Co-authored-by: Srinath Padmanabhan <17151014+srithreepo@users.noreply.github.com>
2025-08-15 19:00:13 +00:00
Jacob Richman bd5e49c5ff fix(input) Resolve cases where escape was broken (#6304) 2025-08-15 17:54:00 +00:00
Gal Zahavi 1a2906a8ad Revert #6088 (#6328) 2025-08-15 17:27:33 +00:00
Evan Otero ab1c483cab feat(about): Add the IDE Client's display name to /about (#6311)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-15 16:32:15 +00:00
Hiroaki Mitsuyoshi 72195d5553 fix(ui): Fix hang in chat save confirmation dialog (#6312)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-15 15:46:45 +00:00
joshualitt 8f2fa5a537 feat(core): Migrate MockTools to declarative pattern. (#6197) 2025-08-15 15:44:26 +00:00
LongYinan d2f4e2664e chore: remove duplicated lockfile (#6291)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-15 15:39:58 +00:00
Jacob Richman 32d1ac3ce2 fix(input) ctrl-j support was lost switching to keyBindings.ts (#6305)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-15 15:31:17 +00:00
owenofbrien ddbe65e8c3 Add session id to session summary and /bug template (#6313)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-15 15:15:54 +00:00
Pyush Sinha a92299069d fix: pendingSlashCommandHistoryItems corrected to properly memoize updates (#6282)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-08-15 15:11:43 +00:00
cornmander 41c5195ed3 feat(shell): Include disallowed commands in block reason (#6278)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-15 14:37:49 +00:00
Gaurav a131555c9c fix: update issue dedup workflow (#6275) 2025-08-15 12:51:08 +00:00
Miguel Solorio 2e6c3580df Stylize diff line numbers & characters (#6269) 2025-08-15 06:18:39 +00:00
Jacob Richman 2690123af0 Fix flaky test for SettingsDialog. (#6294) 2025-08-15 06:04:48 +00:00
hritan d46b91e09d fix: console patcher initialised in main (#6252)
Co-authored-by: Hriday Taneja <hridayt@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-15 04:25:27 +00:00
JAYADITYA 93559d65c8 update docs (#6204)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-15 03:15:27 +00:00
Shreya Keshive a84f749310 Show /ide enable & /ide disable commands based on connection status (#6248)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-15 00:22:32 +00:00
Shreya Keshive db347eeee8 IDE integration Gemini command multi-folder support + bump version (#6265)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-15 00:07:06 +00:00
Shreya Keshive cf7e6ff52d Fix license notice generation script to include transitive dependencies (#6272)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-15 00:06:20 +00:00
Jacob Richman 6037cb5d60 Fix bug where RadioButtonSelect treated an omitted isFocus parameter (#6274) 2025-08-14 23:48:54 +00:00
Jacob Richman a5c81e3fe0 Fix flake due to using wait instead of waitFor (#6277) 2025-08-14 23:39:12 +00:00
HugoMurillo 8c0c8d7770 fix(#5340): unable to load chats with weird characters (#5969) 2025-08-14 23:24:57 +00:00
Tommaso Sciortino 1a41ba7daf Prevent writing outside of the workspace roots (#6178)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-14 22:59:37 +00:00
Lee James f47af1607a bug(mcp): catch errors reported by GitHub MCP (#6194) 2025-08-14 22:30:05 +00:00
Jerop Kipruto a01db2cfd5 feat(triage): Improve GitHub issue triage workflows (#6120) 2025-08-14 22:20:43 +00:00
Gal Zahavi 980091cbc2 feat(core): refactor shell execution to use node-pty (#6088) 2025-08-14 20:40:12 +00:00
joshualitt 48af0456c1 feat(core): Migrate web-search, write-file, and discovered-tool. (#6188)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-14 20:28:33 +00:00
christine betts 5c5fc89eb1 [ide-mode] Support multi-folder workspaces (#6177) 2025-08-14 20:12:57 +00:00
Tommaso Sciortino e06d774996 docs: remove reference to Gemini Code Assist for Workspace (#6247) 2025-08-14 18:40:15 +00:00
shrutip90 69c5582723 feat: Show untrusted status in the Footer (#6210)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-14 18:15:48 +00:00
Shreya Keshive 69d666cfaf Fix release notes generation (#6233) 2025-08-14 18:13:13 +00:00
christine betts af93a10a92 [ide-mode] Write port to file in ide-server (#5811)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-14 18:09:19 +00:00
Wietse Venema ec7b84191f feat: Allow combining -p and stdin for prompt input (#4406)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-14 18:08:59 +00:00
Shreya Keshive 798c4d1311 Update IDE integration context toggle shortcut to ctrl+G (#6245) 2025-08-14 17:50:20 +00:00
christine betts 2416a80e9c [ide-mode] Add docs on running the vscode companion extension locally (#6145)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Shreya <shreyakeshive@google.com>
Co-authored-by: Shreya Keshive <skeshive@gmail.com>
2025-08-14 17:47:36 +00:00
joshualitt ef54f720de bug(cli): Exclude only specific tests. (#6244) 2025-08-14 17:35:34 +00:00
Kamal Raj Sekar 4973e7e1e0 /chat save command saves empty conversations with only system context (#6121)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-14 16:30:30 +00:00
Richie Foreman 8bebaedad4 chore(vscode): Add eslint as a recommended extension (#6196) 2025-08-14 16:14:02 +00:00
christine betts d6403c67ee [ide-mode] Suggest the extension name in the installation messages (#6182) 2025-08-14 14:57:36 +00:00
Jerop Kipruto 2fc1ef7d59 Docs: update overview of Gemini CLI GitHub Actions (#6198) 2025-08-14 14:46:32 +00:00
Shreya Keshive e74dc4d0e0 Update versioning script to also bump version for companion extension so they stay in sync (#6075) 2025-08-14 14:30:16 +00:00
owenofbrien dd55a82a28 Log CLI version and git commit hash (v2) (#6176) 2025-08-14 10:12:26 +00:00
matt korwel 3e004048cf chore(release): v0.1.21 (#6207)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-08-14 06:14:25 +00:00
Gaurav 055fe46d21 docs: update how to use vertex AI auth with ADC (#6193) 2025-08-14 04:01:11 +00:00
Sandy Tao c63185dae7 feat(deps): Update @google/genai to 1.13.0 (#6184) 2025-08-14 02:12:11 +00:00
Jacob Richman 342820cf5e Fix/emoji support (#6187)
Co-authored-by: elasticdotventures <brianh@elastic.ventures>
2025-08-14 00:33:01 +00:00
Allen Hutchison 6d01ba65a2 refactor: remove modelCheck feature (#6185) 2025-08-14 00:25:45 +00:00
Richie Foreman 514e883af1 chore(gemini.md): Make the checkExhaustive helper section more brief/direct (#6181) 2025-08-13 22:59:46 +00:00
Richie Foreman d6f74ea2f0 chore(telemetry): Add various surface detection to determineSurface for logging. (#6074)
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-13 21:45:53 +00:00
Jacob Richman 501b78f303 Update Ink version (#6175) 2025-08-13 21:40:04 +00:00
Gaurav f9a1e8eb6f fix: use server-returned project for gca free tier auth (#6113) 2025-08-13 21:04:58 +00:00
Richie Foreman 2dbd5ecdc8 chore(cli/slashcommands): Add status enum to SlashCommandEvent telemetry (#6166) 2025-08-13 20:37:08 +00:00
Sandy Tao 61047173a8 fix(core): Discard thought signature when switching from Gemini API Key to OAuth (#6090)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-13 20:33:04 +00:00
Richie Foreman a90aeb3d8f chore(build/compiler): Enable a bunch of strict TS compiler options. (#6138) 2025-08-13 20:17:38 +00:00
Harold Mciver 8fae227e8d fix: Prevent duplicate or inactive tools/prompts after server refresh (#5850) 2025-08-13 19:31:24 +00:00
joshualitt c0c0e9b7a0 feat(core): Migrate read_many_files, shell, and web_fetch. (#6167) 2025-08-13 19:27:09 +00:00
joshualitt 904f4623b6 feat(core): Continue declarative tool migration. (#6114) 2025-08-13 18:57:37 +00:00
Seth Vargo 22109db320 chore(ci): add global linter (#6111)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-13 18:56:10 +00:00
Jacob Richman e4473a9007 Revert "chore(cli/slashcommands): Add status enum to SlashCommandEvent telemetry" (#6161) 2025-08-13 18:13:18 +00:00
shrutip90 38876b738f Add support for trustedFolders.json config file (#6073) 2025-08-13 18:06:31 +00:00
Adam Weidman b61a63aef4 move errorParsing.ts to core (#6159) 2025-08-13 17:57:11 +00:00
Deepankar Sharma 9c7fb870c1 Add terminal setup command for Shift+Enter and Ctrl+Enter support (#3289)
Co-authored-by: jacob314 <jacob314@gmail.com>
2025-08-13 17:32:54 +00:00
Tommaso Sciortino 74a13fb535 Document certificate issue workaround (#6157) 2025-08-13 17:30:15 +00:00
Shreya Keshive f81ccd8d7a Add usage documentation for IDE integration (#6154) 2025-08-13 16:31:20 +00:00
Agus Zubiaga d3fda9dafb Zed integration schema upgrade (#5536)
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Ben Brandt <benjamin@zed.dev>
2025-08-13 15:58:26 +00:00
Richie Foreman 150103e5dd chore(cli/slashcommands): Add status enum to SlashCommandEvent telemetry (#6023) 2025-08-13 15:42:38 +00:00
Seth Vargo 4074e8e6ec chore(ci): fix yamllint issues (#6112) 2025-08-13 03:24:39 +00:00
Seth Vargo 214800cfc6 chore(ci): Ensure ci workflows is consistent and not vulnerable to injection attacks (#6109) 2025-08-13 02:56:49 +00:00
Seth Vargo b655d8f062 chore(ci): Ensure triage workflows are consistent (#6108) 2025-08-13 02:50:18 +00:00
Seth Vargo b6da98e8e9 chore(ci): Ensure action and community workflows are consistent and not vulnerable to injection attacks (#6107) 2025-08-13 02:36:37 +00:00
Seth Vargo 0e8bbfb8ba chore: update bash to follow shellcheck recommendations (#6102) 2025-08-13 02:17:04 +00:00
Seth Vargo 9912577a2b chore(ci): Ensure docs-gen workflow are not vulnerable to injection attacks (#6100) 2025-08-13 02:12:28 +00:00
Jerop Kipruto 431a312d4d Show OpenTelemetry SDK initialization & shutdown in debug mode only (#6096) 2025-08-13 01:38:45 +00:00
Seth Vargo 806af05b97 chore(ci): Ensure stale and no-response workflows are consistent and not vulnerable to injection attacks (#6097) 2025-08-13 01:34:57 +00:00
Seth Vargo 661ee0a79e chore(ci): Ensure e2e workflow is consistent and not vulnerable to injection attacks (#6098) 2025-08-13 01:30:30 +00:00
Tommaso Sciortino 9d023be1d1 Upgrade integration tests to use Vitest (#6021) 2025-08-12 22:57:27 +00:00
Arya Gummadi 8d6eb8c322 feat: add --approval-mode parameter (#6024)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-12 22:10:22 +00:00
Srinath Padmanabhan 11377915db Create Docs Pages based on github documentation (#6083) 2025-08-12 22:09:13 +00:00
Shreya Keshive 3a87712c1a Launch VS Code IDE Integration (#6063) 2025-08-12 21:08:07 +00:00
Jacob Richman d219f90132 Switch from useInput to useKeypress. (#6056) 2025-08-12 21:05:49 +00:00
christine betts 74fd0841d0 [ide-mode] Update installation logic and nudge (#6068) 2025-08-12 20:08:47 +00:00
Seth Vargo 8524cce7b9 chore(ci): Ensure release workflow is consistent and not vulnerable to injection attacks (#6059) 2025-08-12 19:51:50 +00:00
Seth Vargo 5ee5cf17ba chore(ci): do not "fail fast" on Node tests (#6053) 2025-08-12 19:18:54 +00:00
Richie Foreman f34012034c chore(vscode): Add Build & Launch CLI option to vscode project (#6027) 2025-08-12 18:53:11 +00:00
Shreya Keshive 4ecfb478b0 chore(release): v0.1.19 (#6069)
Co-authored-by: gemini-cli-robot <gemini-cli-robot@google.com>
2025-08-12 18:37:49 +00:00
Richie Foreman 7cc6b8c270 chore(usage telemetry): Freshen up Clearcut logging (#6013)
Co-authored-by: christine betts <chrstn@uw.edu>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-12 18:31:59 +00:00
doonrevver86 c5c6966d08 ensure sandbox build script is cross-platform (#2603)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-12 18:18:06 +00:00
Shreya Keshive 67c6033147 Bump version number of companion extension to match next Gemini CLI version number (#6065) 2025-08-12 18:03:55 +00:00
owenofbrien 5d1d40fa2e Fix: log api response error status codes (#6015)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2025-08-12 16:51:21 +00:00
Jacob Richman 804c181ac4 chore(integration-tests): refactor to typescript (#5645) 2025-08-12 16:19:09 +00:00
JAYADITYA 2d1a6af890 feat(cli): support single Ctrl+C to cancel streaming, preserving double Ctrl+C to exit (#5838) 2025-08-12 04:13:57 +00:00
Ali Al Jufairi f9efb2e24f docs(commands): add /settings command for user-friendly settings editing (#5984)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-12 04:08:35 +00:00
Seth Vargo d8fec54e81 feat(/setup-github): Use node to download the files (#5863) 2025-08-12 01:32:23 +00:00
Sandy Tao 26fe587b44 skip loop check if it is currently inside a loop (#6022) 2025-08-11 23:45:31 +00:00
Wanlin Du d9fb08c9da feat: migrate tools to use parametersJsonSchema. (#5330) 2025-08-11 23:12:41 +00:00
Wanlin Du f52d073dfb chore: migrate from responseSchema to use responseJsonSchema. (#4814) 2025-08-11 23:04:58 +00:00
Shreya Keshive c7fd4c4a96 Start IDE connection after config initialization (#6018) 2025-08-11 22:09:47 +00:00
christine betts 94b6199943 [ide-mode] Update sandbox detection logic to support macos seatbelt (#6005)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-11 21:09:57 +00:00
christine betts c0f5f6a5f6 [ide-mode] Update handling of workspace paths (#6014)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-11 21:06:01 +00:00
christine betts 0e98641b51 Add support for VSCode-like editors (#5699)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-11 21:01:37 +00:00
Shreya Keshive 4656f17524 Reduce noisy IDE integration error message in standalone terminal (#6006) 2025-08-11 19:57:56 +00:00
cornmander 110e00178b Add --experimental-cli to speed up prettier formatting. (#5999)
Co-authored-by: Seth Troisi <sethtroisi@google.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-11 19:09:12 +00:00
Sijie Wang 72832fb889 Fix line end bugs in Vim mode (#5328)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-11 18:58:32 +00:00
Gaurav 6390b81646 update: issue triage workflows tags duplicate issues (#5868) 2025-08-11 18:48:57 +00:00
Tommaso Sciortino 239ba63d28 Make ProjectIdRequiredError error more lenient (#5693) 2025-08-11 18:04:44 +00:00
Jacob Richman 2269f8a1a8 Modify content generated describing the ide context to only include deltas after the initial update (#5880) 2025-08-11 17:15:44 +00:00
cornmander aa5c80dec4 feat(core): add host validation to GoogleCredentialProvider (#5962)
Co-authored-by: Brian Ray <62354532+emeryray2002@users.noreply.github.com>
2025-08-11 16:40:30 +00:00
Shreya Keshive b0b12af2ce Additional IDE integration polishes (#5985) 2025-08-11 16:27:45 +00:00
christine betts 8dd6f04199 Show IDE diff options in both panes (#5986) 2025-08-11 16:13:45 +00:00
Lee James 2548facc79 feat: add "surface" to all logs (#5862) 2025-08-11 15:11:20 +00:00
Gal Zahavi 2865a52778 docs(config): Add showLineNumbers option to documentation (#5947) 2025-08-10 19:06:35 +00:00
Dmitry Lyalin 0e44bbc85d docs(readme): Overhaul for clarity and user experience (#5732)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Srinath Padmanabhan <17151014+srithreepo@users.noreply.github.com>
2025-08-10 18:52:14 +00:00
Ali Al Jufairi 0157eae3d7 fix(settings): enable default usage statistics collection (#5909) 2025-08-10 02:56:53 +00:00
Ali Al Jufairi 8a9a927544 feat(ui): add /settings command and UI panel (#4738)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-10 00:04:52 +00:00
Lee Won Jun c632ec8b03 [#5356] Minor fix: Remove duplicate binding and add complete navigation command (#5884)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-09 22:28:28 +00:00
fuyou 0dea7233b6 feat(cli) - enhance input UX with double ESC clear (#4453)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-09 22:26:43 +00:00
Yuki Okita 34434cd4aa feat: drop load-memory-from-include-directories option from cli args (#5866) 2025-08-09 19:50:53 +00:00
JAYADITYA 6b19c8bd55 feat: add humorous tip for new line shortcut in Gemini CLI (#5666)
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-08-09 07:24:21 +00:00
Lee Won Jun b8084ba815 Centralize Key Binding Logic and Refactor (Reopen) (#5356)
Co-authored-by: Lee-WonJun <10369528+Lee-WonJun@users.noreply.github.com>
2025-08-09 07:03:17 +00:00
Hiroaki Mitsuyoshi 6487cc1689 feat(chat): Add overwrite confirmation dialog to /chat save (#5686)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-09 06:59:22 +00:00
Brian de Alwis 191cc01bf5 fix(core): restrict oauth_creds.json file permissions (#5245)
Co-authored-by: cornmander <shikhman@google.com>
2025-08-09 03:05:30 +00:00
N. Taylor Mullen c184ec3224 chore(release): v0.1.18 (#5864) 2025-08-08 17:26:43 -07:00
Jacob MacDonald f35921a771 Add MCP Roots support (#5856)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-08 23:29:06 +00:00
Gal Zahavi c03ae43777 feat: Add option to hide line numbers in code blocks (#5857)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-08 22:11:14 +00:00
Jacob MacDonald 69322e12e4 Add a request queue to the tool scheduler (#5845) 2025-08-08 21:50:35 +00:00
Shreya Keshive 9ac62565a0 Fix excessive console logging + remove unnecessary try catch (#5860) 2025-08-08 21:48:02 +00:00
Shreya Keshive 344ee29f77 Use slash command instead of context drawer to display open files in editor to reduce flickering in the UI (#5858) 2025-08-08 21:26:11 +00:00
shishu314 60bde58f29 fix(cli) - Adding logging for response and error in LoggingContentGenerator (#5842)
Co-authored-by: Shi Shu <shii@google.com>
2025-08-08 19:58:33 +00:00
shrutip90 34b5dc7f28 Add FolderTrustDialog that shows on launch and enables folderTrust setting (#5815) 2025-08-08 18:02:27 +00:00
christine betts 3af4913ef3 [ide-mode] Close all open diffs when the CLI gets closed (#5792) 2025-08-08 15:38:30 +00:00
christine betts 5ec4ea9b4d [ide-mode] Wire up env variables to sandbox (#5804) 2025-08-08 15:35:47 +00:00
christine betts 407393b128 [ide-mode] Hide diff options when active diff is not focused (#5808)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-08 15:21:50 +00:00
Gal Zahavi 51d09e720b fix(core): Add missing mnemonist dependency (#5841) 2025-08-08 15:10:04 +00:00
Akhil Appana f5e0f16157 fix: properly report tool errors in telemetry (#5688)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-08 11:33:42 +00:00
agarwalravikant 5ab184fcaf Fix for git issue 5657 to add lines of code added/removed telemetry (#5823)
Co-authored-by: Ravikant Agarwal <ravikantag@google.com>
2025-08-08 04:38:07 +00:00
Gal Zahavi 86eaa03f8a feat(telemetry): Prevent memory leak in ClearcutLogger (#5734) 2025-08-08 01:53:39 +00:00
Jerop Kipruto e50d886ba8 docs: Improve local telemetry example (#5818) 2025-08-08 01:17:19 +00:00
Sandy Tao e8815ba43c feat(quality): Reset when seeing a new type of Markdown element (#5820) 2025-08-08 00:21:42 +00:00
shishu314 bae922a632 fix(cli) - Move logging into CodeAssistServer (#5781)
Co-authored-by: Shi Shu <shii@google.com>
2025-08-07 23:58:18 +00:00
laurentsimon 60362e0329 fix: MCP servers allowed in settings do not show up in /mcp command (#5324) 2025-08-07 23:42:17 +00:00
Jerop Kipruto 494a10e7a7 Add echo tool to automated triage workflow (#5809)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
2025-08-07 23:14:28 +00:00
Miguel Solorio 785ee5d59a Use semantic colors in themes (#5796)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-07 23:11:35 +00:00
Gal Zahavi 4f2974dbfe feat(ui): Improve UI layout adaptation for narrow terminals (#5651)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-07 22:55:53 +00:00
Richie Foreman 65e4b941ee chore(vscode): Add recommended extensions list to vscode settings. (#5810) 2025-08-07 22:54:00 +00:00
Richie Foreman 9bc0a4aff3 chore(telemetry): Log FIREBASE_STUDIO when using Gemini CLI within Firebase Studio (#5790) 2025-08-07 22:50:48 +00:00
Allen Hutchison 0c32a4061d fix(core): Replace flaky performance tests with robust correctness tests (#5795)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-07 22:38:21 +00:00
Bryant Chandler 9fc7115b86 perf(filesearch): Use async fzf for non-blocking file search (#5771)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-07 22:24:55 +00:00
Richie Foreman c38147a3a6 chore(vscode settings): Update VsCode settings for quality-of-life (#5806)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-07 22:16:57 +00:00
Gaurav 908ce2be33 update: google-github-actions/run-gemini-cli version in workflows (#5802) 2025-08-07 21:57:54 +00:00
Shreya Keshive f1663d9615 README + reduce required VS Code version for companion extension (#5719) 2025-08-07 21:25:06 +00:00
Shreya Keshive 4d4eacfc40 Few IDE integration polishes (#5727) 2025-08-07 21:19:31 +00:00
Jacob MacDonald 19491b7b94 avoid loading and initializing CLI config twice in non-interactive mode (#5793) 2025-08-07 21:19:06 +00:00
shrutip90 53f8617b24 Add new folderTrust setting that the users can enable or disable (#5798) 2025-08-07 21:06:17 +00:00
Adam Weidman 3a3b138195 Include Schema Error Handling for Vertex and Google Auth methods (#5780)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-07 20:21:39 +00:00
Pyush Sinha 8e6a565adb fix: re render context usage indicator (#5102) 2025-08-07 18:16:47 +00:00
anthony bushong a3351bc985 fix(tests): add missing deps in cli to fix sandbox runs (#5742) 2025-08-07 17:58:44 +00:00
Shehab 7596481a9d feat(cli): Allow Exiting Authentication Menu with CTRL+C (SIGINT) (#4482)
Co-authored-by: Seth Troisi <sethtroisi@google.com>
2025-08-07 17:26:55 +00:00
joshualitt 8bac9e7d04 Migrate EditTool, GrepTool, and GlobTool to DeclarativeTool (#5744) 2025-08-07 17:05:37 +00:00
Sandy Tao 0d65baf928 Fix(core): Use Flash for next speaker check (#5786) 2025-08-07 16:18:53 +00:00
Lee James 8d848dca4a feat: open repo secrets page in addition to README (#5684) 2025-08-07 16:00:46 +00:00
Jacob MacDonald 6ae75c9f32 Add a context percentage threshold setting for auto compression (#5721) 2025-08-07 14:34:40 +00:00
Abhi 36750ca49b feat(agent): Introduce Foundational Subagent Architecture (#1805)
Co-authored-by: Colt McAnlis <colton@google.com>
2025-08-07 00:34:38 +00:00
Allen Hutchison d6a7334279 fix(logging): Ensure sandbox startup messages are routed to stderr (#5725) 2025-08-07 00:19:10 +00:00
anthony bushong 99f88851fb fix(actions): swap gha bot for cla allowlisted gemini-cli-robot (#5730) 2025-08-07 00:01:22 +00:00
N. Taylor Mullen 01f7c4b740 Fix(tests): update mcp_server_cyclic_schema test (#5733) 2025-08-06 23:59:50 +00:00
DevMassive 9ac3e8b79e feat: Improve @-command file path completion with fzf integration (#5650)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-06 23:41:04 +00:00
Richie Foreman 4782113ceb fix(core): Improve errors in situations where the command spawn does … (#5723) 2025-08-06 23:31:42 +00:00
shrutip90 626844b539 experiment: Add feature exp flag for folder trust (#5709) 2025-08-06 22:27:21 +00:00
Seth Vargo 5cd63a6abc feat(cli): get the run-gemini-cli version from the GitHub API (#5708) 2025-08-06 20:56:06 +00:00
christine betts b55467c1dd [ide-mode] Support rendering in-IDE diffs using the edit tool (#5618)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-06 20:55:29 +00:00
joshualitt 43510ed212 bug(core): Prompt engineering for truncated read_file. (#5161) 2025-08-06 20:52:04 +00:00
Jack Wotherspoon ad5d2af4e3 tests: fix e2e tests (#5706) 2025-08-06 20:46:50 +00:00
Jacob MacDonald e3e7677753 Add integration test for maximum schema depth error handling (#5685) 2025-08-06 20:45:54 +00:00
Jacob MacDonald b3cfaeb6d3 Add detection of tools with bad schemas and automatically omit them with a warning (#5694) 2025-08-06 20:19:15 +00:00
Shreya Keshive 024b8207eb Add hint to enable IDE integration for users running in VS Code (#5610) 2025-08-06 19:47:58 +00:00
Lee James 1fb680bacc bug(tests): fix test errors (#5678)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-06 19:26:46 +00:00
shishu314 1f0ad86544 fix: Restore user input when the user cancels response (#5601)
Co-authored-by: Shi Shu <shii@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-06 19:19:10 +00:00
joshualitt 6133bea388 feat(core): Introduce DeclarativeTool and ToolInvocation. (#5613) 2025-08-06 17:50:02 +00:00
agarwalravikant 882a97aff9 Fix to send user tool confirmation decision for yolo or non interacti… (#5677)
Co-authored-by: Ravikant Agarwal <ravikantag@google.com>
2025-08-06 17:46:42 +00:00
christine betts fde9849d48 [ide-mode] Add support for in-IDE diff handling in the CLI (#5603)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-06 17:36:05 +00:00
Akhil Appana 487818df27 fix: improve error handling and path processing in memory discovery (#5175)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-06 17:19:43 +00:00
Jack Wotherspoon ca4c745e3b feat(mcp): add gemini mcp commands for add, remove and list (#5481) 2025-08-06 15:52:29 +00:00
Lee James b38f377c9a feat: Enable /setup-github to always run, and error appropriately (#5653)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-06 13:06:37 +00:00
Bryant Chandler aab850668c feat(file-search): Add support for non-recursive file search (#5648)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-06 06:33:27 +00:00
Yash Velagapudi 8b1d5a2e3c fix(core): Treat .mts files as TypeScript modules instead of video files (#5492)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-06 06:15:53 +00:00
Gaurav a0990380b5 fix:missing coreTool in new workflow setup (#5656) 2025-08-06 05:26:27 +00:00
Jerop Kipruto 2fcaa302da docs: add GitHub Integration section to README (#5649) 2025-08-06 04:01:42 +00:00
Lee James 7fa2d7be17 doc(lint): fix docs on how to run linter in "fix" mode (#5647) 2025-08-06 03:21:36 +00:00
Lee James be3aabaea6 docs(setup-github): Inform user of the next steps after running slash command (#5644)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-06 02:59:25 +00:00
Gaurav b87b436ebc refactor: use google-github-actions/run-gemini-cli action (#5643) 2025-08-06 02:24:40 +00:00
Jacob MacDonald 7e5a5e2da7 Detect and warn about cyclic tool refs when schema depth errors are encountered (#5609)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-06 01:48:00 +00:00
christine betts 9db5aab498 Update a couple more witty phrases (#5641) 2025-08-06 01:13:22 +00:00
Sandy Tao 390edb5e0a Add tests for useAtCompletion reset logic (#5639) 2025-08-06 01:10:29 +00:00
Jerop Kipruto cd7e60e008 switch from heads to tags in url path (#5638) 2025-08-05 17:47:28 -07:00
Sandy Tao 59bde4a612 fix(core) Fix not resetting when after first get out of completion suggestions (#5635)
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-08-06 00:37:44 +00:00
Bryan Morgan 02f7e48c51 Removed GitHub Actions experiment files (#5627) 2025-08-06 00:01:18 +00:00
christine betts aeb6602266 Remove a few witty loading phrases (#5631)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-05 23:59:14 +00:00
David Rees 805114aef8 fix(docs): Fix code block delimiters in commands.md (#5521)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 23:30:57 +00:00
Justin Mahood 91035ad7b0 Fix(vim): Fix shell mode in Vim mode (#5567)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-05 23:29:37 +00:00
Bryant Chandler 12a9bc3ed9 feat(core, cli): Introduce high-performance FileSearch engine (#5136)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-05 23:18:03 +00:00
Allen Hutchison 2141b39c3d feat(cli): route non-interactive output to stderr (#5624) 2025-08-05 23:11:21 +00:00
Shreya Keshive 268627469b Refactor IDE client state management, improve user-facing error messages, and add logging of connection events (#5591)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-05 22:52:58 +00:00
Jacob MacDonald 6a72cd064b check for the prompt capability before listing prompts from MCP servers (#5616)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 22:50:30 +00:00
sangwook aebe3ace3c perf(core): implement parallel file processing for 74% performance improvement (#4763)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 22:47:18 +00:00
8bitmp3 c402784d97 Fix and improve Gemini CLI troubleshooting.md doc (#2734)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 22:43:41 +00:00
William Thurston bed6ab1cce fix(start): use absolute path to resolve CLI package (#3196)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 22:43:15 +00:00
xyizko 1b08a6c063 fix(minor): Grammar and Typos (#5053)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-05 22:41:27 +00:00
Sandy Tao 82fa7a0660 fix(format) Fix format for .github/workflows/weekly-velocity-report.yml (#5622) 2025-08-05 22:32:06 +00:00
Bryan Morgan 2e9236fab4 Update weekly-velocity-report.yml 2025-08-05 18:11:06 -04:00
Mikhail Aksenov dadf05809c feat: mcp - support audiences for OAuth2 (#5265) 2025-08-05 22:02:16 +00:00
Ramón Medrano Llamas 29c3825604 fix(mcp): clear prompt registry on refresh to prevent duplicates (#5385)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 21:59:31 +00:00
Hiroaki Mitsuyoshi faf6a5497a feat(docs): Add /chat delete command in commands.md (#5408)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 21:58:09 +00:00
Jacob Richman dd85aaa951 bug(core): Fix flaky test by using waitFor. (#5540)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-08-05 21:56:38 +00:00
Gal Zahavi aacae1de43 fix(core): prevent UI shift after vim edit (#5315) 2025-08-05 21:55:54 +00:00
Sandy Tao 8d993156e7 Fix format (#5617) 2025-08-05 21:38:43 +00:00
Bryan Morgan 57003ca68c Update weekly-velocity-report.yml 2025-08-05 17:18:19 -04:00
Bryan Morgan 47de37eb0a Update weekly-velocity-report.yml 2025-08-05 17:10:37 -04:00
Bryan Morgan dc7b4fda64 Update weekly-velocity-report.yml 2025-08-05 17:08:22 -04:00
Bryan Morgan 3dcca31796 Update weekly-velocity-report.yml 2025-08-05 17:00:44 -04:00
Bryan Morgan c194a6ac3b GitHub Action for velocity reporting purposes (#5607) 2025-08-05 20:33:59 +00:00
Bryan Morgan d421fa9e64 Testing basic velocity report action 2025-08-05 15:55:50 -04:00
Luccas Paroni 2778c7d851 feat(core): Parse Multimodal MCP Tool responses (#5529)
Co-authored-by: Luccas Paroni <luccasparoni@google.com>
2025-08-05 19:19:47 +00:00
Oleksandr Gotgelf b465145229 chore(settings): clean up comments in settings.ts (#5576) 2025-08-05 19:10:16 +00:00
Alexander J f2d6748432 fix: small typo in ROADMAP.md (#5593)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-05 19:04:10 +00:00
joshualitt 08f1431946 bug(core): fix contentRangeTruncated calculation. (#5329)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-05 18:52:39 +00:00
David East 43d5aaa798 fix(mcp): ensure authorization url is valid when containing query params (#5545)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-05 18:44:30 +00:00
Yuki Okita 5c8268b6f4 feat: Multi-Directory Workspace Support (part 3: configuration in settings.json) (#5354)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-05 17:01:01 +00:00
Jack Wotherspoon d0cda58f1f docs: update typo in commands.md (#5584) 2025-08-05 14:03:58 +00:00
N. Taylor Mullen c7a1de4983 chore(release): v0.1.17 (#5561) 2025-08-04 21:37:32 -07:00
DeWitt Clinton 49001a0f83 Remove the "local modifications" string from bug and about reports. (#5552) 2025-08-05 04:01:19 +00:00
Olcan 11ecf6fc86 fix self-reference in build script (#5548) 2025-08-05 01:12:21 +00:00
Harold Mciver 99ba2f6424 Update MCP client to connect to servers with only prompts (#5290) 2025-08-04 21:38:23 +00:00
christine betts 93f8fe3671 [ide-mode] Add openDiff tool to IDE MCP server (#4519)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-04 21:36:23 +00:00
Mo Moadeli e7b468e122 feat(cli): Prevent redundant opening of browser tabs when zero MCP servers are configured (#5367)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-04 21:20:49 +00:00
Shreya Keshive dca040908a ide-mode flag cleanup (#5531) 2025-08-04 21:06:50 +00:00
Shreya Keshive 2180dd13dc Improve user-facing error messages for IDE mode (#5522) 2025-08-04 21:06:17 +00:00
Richie Foreman 11808ef7ed fix(core): Allow model to be set from settings.json (#5527) 2025-08-04 20:41:58 +00:00
Sandy Tao 8da6d23688 refactor(core): Rename useSlashCompletion to useCommandCompletion (#5532) 2025-08-04 20:35:26 +00:00
Seth Vargo 37b83e05a7 Use new URLs for downloading workflows (#5524) 2025-08-04 20:10:36 +00:00
Jacob MacDonald 5caf23d627 remove unnecessary checks in WriteFileChecks.getDescription (#5526) 2025-08-04 19:12:33 +00:00
Sandy Tao d1bfba1abb feat(core): Add trailing space when completing an at completion suggestion (#5475)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-04 18:30:59 +00:00
Sandy Tao b9fe4fc263 feat(cli): Handle Punctuation in @ Command Parsing (#5482) 2025-08-04 17:49:15 +00:00
Pyush Sinha e506b40c27 fix: /help remove flickering and respect clear shortcut (ctr+l) (#3611)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-08-04 16:53:50 +00:00
owenofbrien 83a04c4755 Cloud Shell surface logging fix (#5364) 2025-08-04 16:48:46 +00:00
matt korwel 94b7b402c5 feat(docs): create new documentation for automation and triage (#5363) 2025-08-04 08:49:14 -07:00
Kumbham Ajay Goud a8984a9b30 Fix: Preserve conversation history when changing auth methods via /auth (#5216)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-03 22:03:01 +00:00
Ali Al Jufairi acd48a1259 docs(fix): Update themes documentation to include new color keys for… (#5467) 2025-08-03 21:56:27 +00:00
N. Taylor Mullen 70478b92a9 chore(release): v0.1.16 (#5478) 2025-08-03 13:38:03 -07:00
Shreya Keshive 2cdaf912ba Generate NOTICES.TXT and surface via command (#5310) 2025-08-03 20:19:34 +00:00
Ayesha Shafique 072d8ba289 feat: Add reverse search capability for shell commands (#4793) 2025-08-03 19:53:24 +00:00
Oleksandr Gotgelf 03ed37d0dc fix: exclude DEBUG and DEBUG_MODE from project .env files by default (#5289)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-03 18:44:15 +00:00
Billy Biggs bedcbb9feb Add a setting to disable the version update nag message (#5449) 2025-08-03 18:20:55 +00:00
Gal Zahavi 820169ba2e feat(autoupdate): Improve update check and refactor for testability (#5389) 2025-08-02 03:17:32 +00:00
TIRUMALASETTI PRANITH 15a1f1af9d fix(config): Resolve duplicate config loading from home directory (#5090)
Co-authored-by: Allen Hutchison <adh@google.com>
Co-authored-by: Allen Hutchison <allen@hutchison.org>
2025-08-01 22:22:17 +00:00
Allen Hutchison 387706607d fix(tests): refactor integration tests to be less flaky (#4890)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-01 21:33:33 +00:00
mrcabbage972 dccca91fc9 Switch utility calls to use the gemini-2.5-flash-lite model (#5193)
Co-authored-by: Anjali Sridhar <anjsridhar@gmail.com>
2025-08-01 21:11:51 +00:00
owenofbrien a6a386f72a Propagate prompt (#5033) 2025-08-01 19:37:56 +00:00
joshualitt 67d16992cf bug(cli): Prefer IPv4 dns resolution by default. (#5338) 2025-08-01 19:30:39 +00:00
Santhosh Kumar 9382334a5e feat(github): add workflow to manage stale issues and PRs (#4871)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-01 19:26:03 +00:00
Sandy Tao c795168e9c feat(core): Use completionStart/End for slash command auto-completion (#5374) 2025-08-01 18:51:38 +00:00
Billy Biggs 24c5a15d7a Add a setting to disable auth mode validation on startup (#5358) 2025-08-01 18:49:03 +00:00
andrea-berling c725e258c6 feat(sandbox): Add SANDBOX_FLAGS for custom container options (#2036)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-08-01 16:32:44 +00:00
Brian de Alwis d42e3f1e7f doc: use standard Google security policy for GitHub projects (#5062) 2025-08-01 16:12:32 +00:00
Silvio Junior 7748e56153 [Fix Telemetry for tool calls, PR 1/n] Propagate tool reported errors via ToolCallResponseInfo and ToolResult (#5222) 2025-08-01 15:20:08 +00:00
cornmander e126d2fcd9 Add missing emacs entry in UI. (#5351) 2025-08-01 14:40:05 +00:00
Brian Ray dc9f17bb4a New browser launcher for MCP OAuth. (#5261) 2025-08-01 05:47:22 +00:00
Sandy Tao f21ff09389 fix(core): Remove json output schema form the next speaker check prompt (#5325)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-01 01:17:52 +00:00
Raushan Raj 6c3fb18ef6 Update gemini-automated-issue-triage.yml (#5312)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-08-01 01:14:26 +00:00
Tommaso Sciortino a3a432e3cf Fix bug executing commands in windows whose flags contain spaces (#5317) 2025-08-01 00:27:07 +00:00
Miguel Solorio 6f7beb414c Highlight slash commands in history (#5323) 2025-07-31 23:24:23 +00:00
Jacob Richman 61e382444a fix(ux) bug in replaceRange dealing with newLines that was breaking vim support (#5320) 2025-07-31 23:16:29 +00:00
Sandy Tao 32809a7be7 feat(cli): Improve @ autocompletion for mid-sentence edits (#5321) 2025-07-31 23:07:12 +00:00
Paige Bailey 37a3f1e6b6 Add emacs support, as per user requests. :) (#1633)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: matt korwel <mattkorwel@google.com>
2025-07-31 22:46:04 +00:00
JeromeJu 574015edd9 feat: Implement /setup-github command (#5069) 2025-07-31 22:14:22 +00:00
Yuki Okita f9a05401c1 feat: Multi-Directory Workspace Support (part2: add "directory" command) (#5241) 2025-07-31 19:02:08 +00:00
Niladri Das 9a6422f331 fix: CLAUDE.md compatibility for GEMINI.md '@' file import behavior (#2978)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-07-31 16:36:50 +00:00
joshualitt ae86c7ba05 bug(core): UI reporting for truncated read_file. (#5155)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-31 16:31:14 +00:00
anj-s 65be9cab47 Fix: Ensure that non interactive mode and interactive mode are calling the same entry points (#5137) 2025-07-31 12:36:12 +00:00
Sandy Tao 23c014e29c Replace FlashDecidedToContinueEvent with NextSpeakerCheckEvent (#5257) 2025-07-31 04:47:04 +00:00
Kazunari001 3ef2c6d198 feat(docs): Add /init command in commands.md (#5187)
Co-authored-by: saucykazugmail <saucydog0922@gmail.com>
Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-31 01:52:40 +00:00
Seth Troisi c77a22d4c6 Add render counter in debug mode (#5242)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-31 00:43:11 +00:00
Gal Zahavi d06e17fbd9 Improve error message for discoverTools function (#4157) 2025-07-31 00:16:21 +00:00
Shreya Keshive 0c6f788406 Exclude companion extension from release versioning (#5226)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-30 22:49:26 +00:00
christine betts 325bb89137 Add toggleable IDE mode setting (#5146) 2025-07-30 22:36:24 +00:00
Olcan ac1bb5ee42 confirm save_memory tool, with ability to see diff and edit manually for advanced changes that may override past memories (#5237) 2025-07-30 22:21:31 +00:00
Allen Hutchison 498edb57ab fix(testing): make ModelStatsDisplay snapshot test deterministic (#5236)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-30 22:09:32 +00:00
christine betts 7bc8766542 Introduce IDE mode installer (#4877) 2025-07-30 21:26:31 +00:00
Yuki Okita c1fe688956 feat: Multi-Directory Workspace Support (part1: add --include-directories option) (#4605)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-07-30 20:38:20 +00:00
Srinath Padmanabhan 21965f986c Srithreepo Fixes for Scheduled triage (#5158) 2025-07-30 20:38:02 +00:00
shamso-goog 32b1ef3779 feat(ui): Update tool confirmation cancel button text (#4820)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-30 20:37:51 +00:00
Hyunsu Shin bcce1e7b84 perf(core): parallelize bfsFileSearch for 40% faster CLI startup (#5185) 2025-07-30 17:32:03 +00:00
Olcan bc23009f61 do not mention GEMINI.md in system prompt as it is not fixed and can confuse model as it is not mentioned by memory tool and memory file paths are generally not exposed to model (yet) (#5202) 2025-07-30 17:21:15 +00:00
yaksh gandhi b447c329db docs: Update chat command documentation with checkpoint locations (#5027)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
Co-authored-by: F. Hinkelmann <franziska.hinkelmann@gmail.com>
2025-07-30 10:01:08 +00:00
N. Taylor Mullen fd434626c5 chore(release): v0.1.15 (#5163) 2025-07-29 22:03:54 -07:00
Sandy Tao 8985e489a5 Skip and reset loop checking around code blocks (#5144) 2025-07-30 04:05:03 +00:00
Jenna Inouye 0ce89392b8 Docs: add documentation for .geminiignore (#5123)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-30 03:36:26 +00:00
Sambhav Khanna d5a1b717c2 fix(update): correctly report new updates (#4821)
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-07-30 00:11:15 +00:00
Allen Hutchison 091804c750 feat(docs): document GEMINI.md import syntax (#5145) 2025-07-29 23:41:31 +00:00
Ava d64c3d6af8 Add Starcraft ref to witty loading phrases (#5120)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-29 23:22:13 +00:00
Tommaso Sciortino 327f915610 Fix typo in RFC 9728 impl (#5126) 2025-07-29 23:03:39 +00:00
Srinath Padmanabhan 008051e42d Update Triage Logic to improve issue categorization. (#5110) 2025-07-29 21:44:48 +00:00
Shreya Keshive 293bb82019 Adds centralized support to log slash commands + sub commands (#5128) 2025-07-29 20:20:37 +00:00
shamso-goog 80079cd2a5 feat(cli): introduce /init command for GEMINI.md creation (#4852)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-29 16:49:01 +00:00
Daniel Lee 7356764a48 feat(commands): add custom commands support for extensions (#4703) 2025-07-29 01:40:47 +00:00
Gal Zahavi 871e0dfab8 feat: Add auto update functionality (#4686) 2025-07-29 00:56:52 +00:00
Shreya Keshive 83c4dddb7e Only enable IDE integration if gemini-cli is running in the same path as open workspace (#5068) 2025-07-28 20:55:00 +00:00
Seth Troisi 1c1aa047ff feat: Add tests for checkpoint tag sanitization (#4882) 2025-07-28 20:43:39 +00:00
Abhi b08679c906 Add new fallback state as prefactor for routing (#5065) 2025-07-28 19:55:50 +00:00
Danny b6c2c64f9b Adds docs outlining keyboard shortcuts for gemini-cli (#4727)
Co-authored-by: dannyzen <dannyrosen@google.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-28 19:35:06 +00:00
Shreya Keshive cfe3753d4c Refactors companion VS Code extension to import & use notification schema defined in gemini-cli (#5059) 2025-07-28 18:20:56 +00:00
N. Taylor Mullen 9aef0a8e6c Revert "feat: Add /config refresh command" (#5060) 2025-07-28 18:13:46 +00:00
Neha Prasad a5ea113a8e fix: Clear previous thoughts when starting new prompts (#4966) 2025-07-28 17:57:33 +00:00
christine betts 379765da23 Add documentation for MCP prompts (#4897)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-07-28 16:01:15 +00:00
Alexander Parshakov f7e559223d docs: Add more examples to Popular tasks (#4979)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-07-28 15:54:09 +00:00
Ramón Medrano Llamas 0170791800 feat: Add /config refresh command (#4993)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-07-28 15:46:43 +00:00
Shreya Keshive e275441651 Updates schema, UX and prompt for IDE context (#5046) 2025-07-28 15:03:22 +00:00
James Woo f2e006179d Fix author attribution (#5042) 2025-07-28 14:45:23 +00:00
N. Taylor Mullen bd85070411 Revert "Propagate user_prompt_id to GenerateConentRequest for logging" (#5007) 2025-07-27 19:28:20 -07:00
Jenna Inouye 9ed351260c Update documentation for read_many_files. (#4874)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-27 22:25:04 +00:00
Jenna Inouye ab0d9df658 Clarify ToS and privacy documentation FAQs. (#4899) 2025-07-27 22:24:53 +00:00
Hiroaki Mitsuyoshi bce6eb5014 feat(chat): Implement /chat delete command (#2401) 2025-07-27 22:18:12 +00:00
Leeroy Ding 9ca48c00a6 fix: yolo mode not respected (#4972) 2025-07-27 21:42:26 +00:00
Abhi 0b5cc96362 (model) - Use Flash Lite For Next Speaker Checks (#4991) 2025-07-27 21:40:55 +00:00
owenofbrien b497791c59 Propagate user_prompt_id to GenerateConentRequest for logging (#4741) 2025-07-27 21:34:39 +00:00
Abhi 36e1e57252 (docs) - Fix small markdown mistake for custom commands docs (#4983) 2025-07-27 21:33:58 +00:00
Hyeladi Bassi a9f04eba2c refactor(telemetry): enhance flushToClearcut method with retry logic and early return for empty events (#1601)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-27 18:18:27 +00:00
Brian Ray c45c14ee0e Bug: add resource parameter to MCP OAuth Flow (#4981)
Co-authored-by: Your Name <you@example.com>
2025-07-27 18:09:45 +00:00
Abhi 576cebc928 feat: Add Shell Command Execution to Custom Commands (#4917) 2025-07-27 06:00:26 +00:00
Dmitry Lyalin 9e61b3510c docs: add missing --prompt-interactive/-i flag documentation (#4950) 2025-07-27 02:41:19 +00:00
Abhi 3e81359c6b (fix): Custom Commands follow symlinks (#4907) 2025-07-26 03:27:23 +00:00
Shreya Keshive 771cb229ab fix: Clean up transport on IDE connection failure (#4902) 2025-07-26 01:57:34 +00:00
Abhi ca5dd28ab6 refactor(core): Centralize shell logic into ShellExecutionService (#4823) 2025-07-26 01:56:49 +00:00
Jacob Richman ad2ef080aa Fix so legacy custom themes still load. (#4757)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-26 00:36:42 +00:00
Jacob Richman b089845f1c fix(ui): remove extraneous whitespace from startup screen (#3990) 2025-07-26 00:36:19 +00:00
Jacob Richman 21fef1620d Handle unhandled rejections more gracefully. (#4417)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-07-26 00:35:26 +00:00
Jacob Richman fb751c542b Regression test for paste when the terminal lacks focus. (#4898) 2025-07-25 23:29:15 +00:00
Tommaso Sciortino f9cfb20897 Run pre-merge checks in mac os as well as ubutnu+win (#4900) 2025-07-25 23:09:37 +00:00
Tommaso Sciortino 17331001a0 Run presubmit tests in windows as well as linux. (#4672)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-25 15:57:30 -07:00
Sijie Wang fbdc8d5ab3 Vim mode (#3936) 2025-07-25 22:36:42 +00:00
Tommaso Sciortino aa71438684 Fix grep.test to work on windows. (#4889) 2025-07-25 21:32:28 +00:00
Tommaso Sciortino 23e0dc6960 Fix test to be windows compatible. (#4875) 2025-07-25 21:31:10 +00:00
Tommaso Sciortino be898710fe Make glob.test.ts win compatible. (#4891) 2025-07-25 21:30:39 +00:00
Tommaso Sciortino 4c144e616d Make fileDiscoveryService.test.ts win compatible (#4892) 2025-07-25 21:30:15 +00:00
Tommaso Sciortino 65aabfede8 Make oauth2 test windows compatible. (#4895) 2025-07-25 21:29:54 +00:00
christine betts eb65034117 Load and use MCP server prompts as slash commands in the CLI (#4828)
Co-authored-by: harold <haroldmciver@google.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-25 20:56:33 +00:00
Jacob Richman de96887789 Fix bugs breaking drag and drop of files. (#4887)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-25 20:26:13 +00:00
Abhi 13b0971291 fix(ci): Fix failing release workflow by creating a self-contained bundle (#4888)
Co-authored-by: Jerop Kipruto <jerop@google.com>
2025-07-25 20:18:59 +00:00
Sandy Tao d76cedb68f Implement hashing based loop detection (#4831) 2025-07-25 19:53:19 +00:00
Tommaso Sciortino 91f016d44a Make restoreCommand test windows compatible. (#4873) 2025-07-25 19:26:09 +00:00
matt korwel 820105e982 Safer Shell command Execution (#4795)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-25 19:25:32 +00:00
Tommaso Sciortino 7ddbf97634 Fix userStartupWarnings to be windows compatible. (#4868) 2025-07-25 19:05:29 +00:00
Tommaso Sciortino f0e3e6ee8a Make shell.test.ts windows compatible (#4858) 2025-07-25 19:05:21 +00:00
christine betts 1b8ba5ca6b [ide-mode] Create an IDE manager class to handle connecting to and exposing methods from the IDE server (#4797) 2025-07-25 17:46:55 +00:00
Tommaso Sciortino 3c16429fc4 Make useCompletion.test.ts windows compatible (#4766) 2025-07-25 17:32:59 +00:00
Tommaso Sciortino f379aa833f Make errorReporting test windows compatible. (#4856) 2025-07-25 17:32:23 +00:00
Tommaso Sciortino e500eb5562 Fix read-file.test.ts to be windows compatible. (#4864) 2025-07-25 17:31:22 +00:00
Gal Zahavi 6321442865 feat(auth): Enhance non-interactive gcp auth (#4811) 2025-07-25 17:19:38 +00:00
Allen Hutchison fb0db2dfd6 adh/bugfix/1563 (#4822) 2025-07-25 16:39:37 +00:00
christine betts 1d3ad9d075 Add drawer for active files in IDE mode (#4682)
Co-authored-by: Shreya <shreyakeshive@google.com>
2025-07-25 14:50:34 +00:00
Tommaso Sciortino 5d4b02ca85 Upgrade test to work on windows. (#4815) 2025-07-25 07:15:41 +00:00
Sandy Tao 1d7eb0d250 [Refactor] Centralizes autocompletion logic within useCompletion (#4740) 2025-07-25 04:41:35 +00:00
Ramón Medrano Llamas 273e74c09d feat: add /mcp refresh command (#4566) 2025-07-25 01:14:45 +00:00
Seth Troisi e9ee686ab6 Sanitize checkpoint tags (#4813) 2025-07-24 23:05:13 +00:00
Aditya Timalsina f0400912fd docs: clarify shell command does not use default shell (#2203)
Co-authored-by: Jenna Inouye <jinouye@google.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-24 20:18:35 +00:00
Shreya Keshive 30b6cf8a00 Add "Gemini CLI: Run" command shortcut (#4792) 2025-07-24 19:55:39 +00:00
christine betts 4e376c0447 [ide-mode] Send the cursor and selected text from the IDE server (#4621) 2025-07-24 19:54:41 +00:00
anj-s f9930c2d36 Add support for logging the entire request and response object (#4725) 2025-07-24 18:45:53 +00:00
christine betts e05173d9cc Move vscode extension build into its own command (#4799) 2025-07-24 18:40:50 +00:00
ashwinpvg d254d4ce00 Add Google credentials provider for authenticating with MCP servers (#4748) 2025-07-24 17:37:39 +00:00
Daniel Lee 3dd6e431df feat: add GEMINI_CLI environment variable to spawned shell commands (#4791) 2025-07-24 17:13:00 +00:00
Ali Al Jufairi 52980510c9 Updated Docs to inform users about the ability to have custom theme (#4632)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-24 17:04:54 +00:00
Sandy Tao 0ef9c0b792 Log prompt id when a loop is detected (#4765)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-24 05:37:28 +00:00
Shreya Keshive 6380bfe35c Minor refactoring of VS Code companion extension code (#4761) 2025-07-24 05:32:55 +00:00
Thomas Burnham b1e0fb157b feat(cli): display timestamp in /chat list (#4733)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-24 04:48:52 +00:00
Shreya Keshive 107ce8afa3 Polish companion extension README and package.json file ahead of publishing (#4729) 2025-07-24 00:08:25 +00:00
Tommaso Sciortino e9e2f55144 Fix InputPrompt.test.tsx to be windows compatible (#4736) 2025-07-23 22:49:09 +00:00
Miguel Solorio 2e28bb90a0 Update diff colors (#4747)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-23 22:39:22 +00:00
Tommaso Sciortino e21b5c95aa Fix tests to work in windows (#4754) 2025-07-23 22:07:19 +00:00
Brandon Keiji d7a304bcff feat(memory): make directory search limit on memory discovery configurable with settings.json (#4460) 2025-07-23 21:48:35 +00:00
smhendrickson 9d3164621a add --telemetry-outfile flag (#4689) 2025-07-23 21:48:24 +00:00
Tommaso Sciortino 209c8783b4 Make ideCommand test windows compatible. (#4746) 2025-07-23 21:01:51 +00:00
Tommaso Sciortino 4fd7cf9177 Fix memoryDiscovery test to work in windows. (#4742) 2025-07-23 20:14:06 +00:00
Abhi bbe95f1eaa feat(commands): Implement argument handling for custom commands via a prompt pipeline (#4702) 2025-07-23 20:11:23 +00:00
Anjali Sridhar 2d1eafae95 Revert "wip"
This reverts commit 1de246236b.
2025-07-23 06:51:40 -07:00
Anjali Sridhar 1de246236b wip 2025-07-23 06:49:27 -07:00
Sandy Tao 7c3a84075d Log flash continue (#4700) 2025-07-23 01:01:24 +00:00
Sandy Tao 67008d4643 Log when flash model decided to continue (#4698)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-23 00:31:57 +00:00
Tommaso Sciortino 30c68922a3 Fix windows bugs in atCommandProcessor.ts (#4684) 2025-07-23 00:18:57 +00:00
HyeongHo Jun a00f1bb916 feat(core): add partUtils module with unit tests (#4575)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-22 23:57:06 +00:00
Werner Robitza 487debe525 add notes on API keys and .gemini/.env to authentication.md (#2004)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-07-22 21:10:13 +00:00
Oliver Kowalke 5dce1df5db feat(core): Resolve GEMINI_SYSTEM_MD case-insensitively (#4538)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-22 17:23:04 +00:00
Jerop Kipruto e306b34a6e feat(auth): support gemini api key and vertex auth in non-interactive mode (#4631) 2025-07-22 14:52:40 +00:00
Brian Ray 4d653c833a MCP OAuth Part 3 - CLI/UI/Documentation (#4319)
Co-authored-by: Greg Shikhman <shikhman@google.com>
2025-07-22 14:05:36 +00:00
Brian Ray 258c848909 MCP OAuth Part 2 - MCP Client Integration (#4318)
Co-authored-by: Greg Shikhman <shikhman@google.com>
2025-07-22 13:34:56 +00:00
Tommaso Sciortino 138ff73821 Fix windows bugs + refactor tests. (#4634) 2025-07-22 05:21:37 +00:00
Abhi 9daead63dd (feat): Initial Version of Custom Commands (#4572) 2025-07-22 04:34:55 +00:00
Nick Salerni 5f813ef510 feat(ci): run e2e tests on macos during ci (#4422) 2025-07-22 04:01:20 +00:00
Pascal Birchler ffa42a79dd chore: Expand node version test matrix (#2700)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-21 16:33:54 -07:00
Marat Boshernitsan 5066bc5384 Refactor the logic for deciding whether to launch a browser into config (#4622) 2025-07-21 23:23:28 +00:00
Pascal Birchler 97cf26ec53 fix(eslint): remove custom rule in favor of eslint-plugin-import (#3012)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-07-21 23:22:13 +00:00
Shreya Keshive 01ea0b8657 Address flaky integration tests with retries (#4604) 2025-07-21 22:46:00 +00:00
BOYI 12765eb775 fix: character encoding issues in shell command processor (#1949)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-07-21 22:26:40 +00:00
darkcocoa 4c3532d2b3 fix: Add warning message for token limit truncation (#2260)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-07-21 21:57:11 +00:00
Josh Soref dc2ac144b7 Various spelling improvements (#3497)
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
2025-07-21 21:54:44 +00:00
Jean-Phi Baconnais 8be5f8038a docs: add Homebrew installation instructions (#2973)
Co-authored-by: Pascal Birchler <pascalb@google.com>
2025-07-21 21:45:24 +00:00
Seydulla Narkulyyev f7b4e74932 feat(cli):suggestion-navigation-shortcut (#3641)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-21 21:43:23 +00:00
Wen Sun b4d00ab4fb feat(edit): Prevent no-op edits (#3520) 2025-07-21 21:24:02 +00:00
christine betts 1969d805f2 [ide-mode] Use active files and selected text in user prompt (#4614) 2025-07-21 20:52:02 +00:00
Tommaso Sciortino d7a57d85a3 Simplify streaming code for code assist server (#4619) 2025-07-21 20:44:43 +00:00
christine betts f95674e646 Add env var to configure system settings path (#4339) 2025-07-21 20:14:07 +00:00
anthony bushong 74d0f4c79f fix: handle cross-device issues with running otel collector (#4458) 2025-07-21 19:44:18 +00:00
christine betts 9bdcdf97d8 [ide-mode] Keep track of recently-opened files and send them to the CLI (#4463) 2025-07-21 17:54:37 +00:00
sangwook 45b764943a feat: Make file type detection and binary checks asynchronous (#3286) (#3288) 2025-07-20 23:16:42 +00:00
Seydulla Narkulyyev f4d077cc1f docs: add documentation for mcp excludeTools and includeTools (#3409)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-07-20 23:11:49 +00:00
ljxfstorm 5f8fff4db3 build(deps): Add missing resolved and integrity for all dependencies (#3501) 2025-07-20 22:52:53 +00:00
Didier Durand 0f6405e28d fix typos in diverse files (#3550)
Co-authored-by: Pascal Birchler <pascal.birchler@gmail.com>
Co-authored-by: Pascal Birchler <pascalb@google.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-20 22:36:34 +00:00
Yuki Okita 0996d91f0b feat(cli): add warnings when gemini-cli is called in the root directory (#4542)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-20 21:57:09 +00:00
Abhi 2a95c8287e prefactor(commands): Command Service Prefactor for Extensible Commands (#4511) 2025-07-20 20:57:34 +00:00
Cole Miller 7a9821607b Check for zeditor if zed binary is not found (#3680)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-20 19:35:21 +00:00
Devansh Sharma 8f85ac7de0 feat: Added /copy command for copying output to clipboard with new Command Service approach (#3706)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-20 18:57:41 +00:00
Pyush Sinha a01b1219a3 feat: full implementation for .geminiignore in settings and respective tool calls (#3727) 2025-07-20 07:55:33 +00:00
Ali Al Jufairi 76b935d598 Feature custom themes logic (#2639)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-20 07:51:18 +00:00
osbornesec c0bfa388c5 fix: prevent RangeError in GitIgnoreParser for root paths (#3417)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-20 07:12:53 +00:00
N. Taylor Mullen fe00686c58 chore(release): v0.1.13 (#4515) 2025-07-19 13:40:55 -07:00
N. Taylor Mullen a464675c4d Extend mcp-server timeout. (#4514) 2025-07-19 20:28:50 +00:00
N. Taylor Mullen 412b78c5ab Simplify MCP connection errors. (#4508) 2025-07-19 12:44:51 -07:00
Yuki Okita 73d5d988f5 feat(core): display declined confirmation code diff (#4440) 2025-07-19 17:47:09 +00:00
Jacob Richman f650be2c3a Make shell output consistent. (#4469) 2025-07-19 00:30:28 +00:00
Tommaso Sciortino 4dbd9f30b6 Revert background agent commits (#4479) 2025-07-19 00:28:40 +00:00
Marat Boshernitsan 5b7b6fe608 Automatically detect non-interactive environments and fall back to a manual, code-based authentication flow (#4475) 2025-07-19 00:22:50 +00:00
Tommaso Sciortino 003609239f Add /background commands (when background agent is configured) (#4407)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-07-18 22:38:04 +00:00
Tommaso Sciortino 04bbc60b97 Demo background agent (#4409)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-07-18 22:21:46 +00:00
Shreya Keshive 73745ecd03 Display open IDE file in context section above input box rather than in the footer (#4470) 2025-07-18 22:14:46 +00:00
Sandy Tao 4915050ad4 improve command completion trigger logic based on cursor position (#4462)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-18 21:54:10 +00:00
Tommaso Sciortino b5f5ea2c31 Use simple name for MCP tools where possible. (#4459) 2025-07-18 21:29:09 +00:00
christine betts d7041a6595 [ide-mode] Send ping every 30 seconds to prevent client from closing connection (#4329) 2025-07-18 19:33:04 +00:00
Billy Biggs 18c3bf3a42 Summarize extensions and MCP servers on startup (#3977) 2025-07-18 18:45:00 +00:00
Sandy Tao 9dadf22958 Implement loop check with LLM (#4337)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-18 16:33:46 +00:00
Brian Ray c5761317f4 MCP OAuth Part 1 - OAuth Infrastructure (#4316) 2025-07-18 14:14:23 +00:00
Harold Mciver de27ea6095 feat(cli): allow executing commands on perfect match (#4397)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2025-07-18 04:55:29 +00:00
Abhi 8497176168 (fix): broken releases and e2e workflows (#4428) 2025-07-18 04:10:58 +00:00
Yongsheng Xu 91c69731c7 feat(auth): Enhance OAuth callback for robust Docker support (#3532)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-18 01:55:26 +00:00
Miguel Solorio 2f5eecfc49 Light theme color improvements (#4396) 2025-07-18 00:46:33 +00:00
Keith Lyons 8ade3e7ee2 feat(ui): hide cursor when terminal is unfocused (#4012) 2025-07-18 00:45:42 +00:00
Yuki Okita 584a50a342 fix(cli): not show update avaialble messages when running gemini-cli locally (#4052) 2025-07-18 00:44:45 +00:00
Abhi ca07b5b0c4 Migrate /corgi (#4419) 2025-07-17 23:40:36 +00:00
Abhi 5df6c9fb66 migrate restore command (#4388) 2025-07-17 23:23:17 +00:00
HyeongHo Jun f0dc9690b7 Test/add loadcodeassist mock (#4287)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-17 22:57:54 +00:00
Pascal Birchler 4b8838bea4 fix: remove direct gaxios dependency (#4289) 2025-07-17 22:54:19 +00:00
Abdelkader Boudih 695afac33e Update ESLint and related packages to latest versions (#4296) 2025-07-17 22:52:01 +00:00
Miguel Solorio 5b7bf74d66 Add numbers to selection list (#4320) 2025-07-17 22:51:42 +00:00
goldyonatan 6aac93ee07 Fix #4220: allow up/down arrow to toggle history when only one sugges… (#4377) 2025-07-17 22:30:39 +00:00
Conrad Irwin 761ffc6338 Zed integration (#4266)
Co-authored-by: Agus Zubiaga <agus@zed.dev>
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
Co-authored-by: mkorwel <matt.korwel@gmail.com>
2025-07-17 22:25:23 +00:00
Yun Peng 12401898f1 Fix link for checkpointing doc for --checkpointing (#4304)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-17 21:26:56 +00:00
warjiang 606a7702de feat(cli): add explicit proxy option in cli (#2526)
Co-authored-by: Dcatfly <dcatfly@gmail.com>
2025-07-17 18:57:37 +00:00
Ali 4ca471bac6 Fix ANSI escape crash in text buffer (#3987) (#3999)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-17 17:53:30 +00:00
Shreya Keshive 88b5f20943 Update companionPort not existing to be a warning so the user can still proceed with running /ide install (#4382) 2025-07-17 16:59:57 +00:00
Abhi 79d36ac0a5 (fix) - regression to quit shortcut from command migration (#4374) 2025-07-17 16:07:10 +00:00
uttamkanodia14 fc8c38b2bc Logging surface field in the start_session_event. Also logging sessio… (#4362) 2025-07-17 15:53:59 +00:00
christine betts cbda781f73 [ide-mode] Add active file to user model request (#4312) 2025-07-17 14:35:23 +00:00
Nick Salerni 0d64355be6 bug(ux): update context percentage when /clear command is run (#4162)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-17 14:14:35 +00:00
Sandy Tao ac8e98511e Fix resetting loop counts on every other event (#4348) 2025-07-17 05:32:48 +00:00
Harold Mciver 9ab44ea9d6 updated /quit to use new slash command arch (#4259)
Co-authored-by: Abhi <abhipatel@google.com>
2025-07-17 02:40:56 +00:00
Harold Mciver 01e66bb123 update /bug to new slash command arch (#4246)
Co-authored-by: Abhi <abhipatel@google.com>
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-07-17 01:46:35 +00:00
Shreya Keshive 0c76affe6d Minor refactoring of IDE companion server (#4331) 2025-07-17 01:03:56 +00:00
Harold Mciver fbe09cd35e update /editor to new slash command arch (#4153)
Co-authored-by: Abhi <abhipatel@google.com>
2025-07-17 00:27:36 +00:00
Shreya Keshive ab9eb9377f Add /ide status & /ide install commands to manage IDE integration (#4265) 2025-07-16 22:36:14 +00:00
Shreya Keshive 69a8ae6a89 Minor UX updates for IDE mode (#4311) 2025-07-16 21:33:56 +00:00
Wanlin Du f6ee0d182b fix: update google/genai to v1.9.0 and switch to parametersJsonSchema for MCP related tools (#4176)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-07-16 21:32:34 +00:00
Harold Mciver 21eb44b242 update /tools to new slash command arch (#4236)
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-07-16 20:12:22 +00:00
Shreya Keshive e4ed1aabac Include companion VS Code extension VSIX as part of build/release (#4254) 2025-07-16 19:06:39 +00:00
christine betts 34c1b5811a Revert "[ide-mode] Thread active file through to system prompt" (#4308) 2025-07-16 16:22:29 +00:00
Harold Mciver ddcac4201d update /docs to new slash command arch (#4133)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-16 15:56:05 +00:00
Ramon Figueiredo f4cd0055fd chore: update numbering in release-docker.yaml (#4249)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-07-16 14:47:12 +00:00
Sandy Tao cba272082d Run model availability check in the background to speed up startup (#4256) 2025-07-16 04:13:30 +00:00
Matias d622e596a1 feat(cli): clear input buffer on CTRL+C when not executing commands (#1729)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-16 03:35:58 +00:00
Brian Ray 0903421b1a Move MCP slash command to new system (#3678)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Abhi <abhipatel@google.com>
2025-07-16 02:35:05 +00:00
Abhi b72e3dfb43 migrate compress command (#4271) 2025-07-16 01:59:16 +00:00
Ben Guo e88b9362dc refactor: Optimize the display information of "/chat list" and "/chat resume" (#2857)
Co-authored-by: Ben Guo <hundunben@gmail.com>
2025-07-16 00:47:56 +00:00
Christian Demeke 1d67b41ccd Clarifies that Gemini Code Assist, when offered through the Google De… (#3086) 2025-07-15 23:51:48 +00:00
Lee Won Jun ec5e9d1025 Improve altName completion behavior in slash commands (#4227)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-15 23:45:10 +00:00
Elvin 615748657a Update MaxSizedBox.tsx (#2233)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: Pascal Birchler <pascalb@google.com>
2025-07-15 23:35:03 +00:00
christine betts 222e362fc2 [ide-mode] Thread active file through to system prompt (#4264) 2025-07-15 22:20:00 +00:00
christine betts b61016f2a5 Set port dynamically in VSCode extension and read from it in gemini-cli and send initial notification (#4255) 2025-07-15 22:13:03 +00:00
Harold Mciver bf51de1a4d update /extensions to new slash command arch (#4229)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-15 21:40:09 +00:00
christine betts 58f1aa6ceb Add support for allowed/excluded MCP server names in settings (#4135)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-15 20:45:24 +00:00
Harold Mciver 03b3917f62 updated /stats to use new slash command arch (#4146) 2025-07-15 20:10:04 +00:00
N. Taylor Mullen 8d9dc44b71 Revert "Update to yargs v18 (#3759)" (#4252) 2025-07-15 12:36:54 -07:00
Shreya Keshive 776d6b6ea0 Upload VSIX of companion VS Code extension (#4241)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-15 18:44:03 +00:00
Pascal Birchler af551f4a41 Revert Node <20 warning (#4244) 2025-07-15 18:42:27 +00:00
Sandy Tao 7b49560265 Include api key in header instead of in the URL (#4240) 2025-07-15 18:37:14 +00:00
Sambhav Khanna 40c4070846 feat(tool): sort tool list alphabetically for deterministic output (#3095)
Co-authored-by: Pascal Birchler <pascalb@google.com>
2025-07-15 18:35:35 +00:00
anj-s d3ee9de3c3 Enable tool summarization only when explicitly set in settings.json (#4140)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-15 17:22:31 +00:00
christine betts 7effdad3e2 [ide-mode] Stream notifications when the active file changes (#4147)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-15 16:19:22 +00:00
Shreya Keshive b09bc66560 Adds the user's active file in the IDE to the footer (#4154) 2025-07-15 14:19:59 +00:00
Jvr 97cc1e6418 Fix: Standardize capitalization for "Troubleshooting Guide" in README (#2763)
Co-authored-by: Pascal Birchler <pascalb@google.com>
2025-07-15 09:50:54 +00:00
Devansh Sharma 123c3e7c7f feat: add a warning that shows if user uses node -v <20 #2930 (#3371)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-15 09:49:46 +00:00
Srinath Padmanabhan f5d5213504 Roadmap release (#4178)
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-07-15 07:25:35 +00:00
Abhi 6e258e2850 migrate /about (#4207) 2025-07-15 06:22:46 +00:00
Pascal Birchler 2862ae7344 Update to yargs v18 (#3759) 2025-07-15 06:09:12 +00:00
Tommaso Sciortino fefa7ecbea Pure refactor: Consolidate isWithinRoot() function calling. (#4163) 2025-07-15 05:55:49 +00:00
Abhi e584241141 Migrate /privacy to new architecture (#4202) 2025-07-15 05:45:06 +00:00
Sandy Tao 886faa2990 Log the 2 types of loop detection (#4193) 2025-07-15 04:44:07 +00:00
Sandy Tao 734da8b9d2 Introduce loop detection service that breaks simple loop (#3919)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-15 03:25:16 +00:00
Sandy Tao 7ffe8038ef Make @ command sort file without extension name (#4158) 2025-07-14 21:10:26 +00:00
Bryan Morgan ff3722a3a7 Fix circular reference JSON serialization in telemetry logging (#4150) 2025-07-14 20:20:06 +00:00
Tommaso Sciortino 5008aea90d Refactor MCP code for reuse and testing (#3880) 2025-07-14 18:19:33 +00:00
Abhi 9dc812dd4b fix(checkpoint): Prevent silent failure and enable for non-Git projects (#4144) 2025-07-14 17:23:51 +00:00
Tommaso Sciortino 2f1d6234de Don't start uncompressed history with a function response (#4141) 2025-07-14 17:09:11 +00:00
haroldmciver-go c313c3dee1 updated '/auth' to use new slash command arch (#3797)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-07-14 16:22:37 +00:00
Pascal Birchler 80c81f2a4c fix(docs): clarify global installation in readme (#3781) 2025-07-14 16:21:40 +00:00
Shreya Keshive fadc477001 Add feature flag for IDE integration (#3927)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-14 16:04:08 +00:00
christine betts e9d680e8a4 Introduce VSCode companion extension (#3917) 2025-07-14 15:34:44 +00:00
Billy Biggs 64f1d80b26 Add documentation for the /extensions command (#4051)
Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
2025-07-14 14:33:05 +00:00
Will 保哥 34bbfa0e15 Fix markdown heading level issue (#3381) 2025-07-14 12:13:43 +00:00
Billy Biggs bc4182b9d2 Show stderr output from mcp servers in debug mode (#4049) 2025-07-14 04:42:22 +00:00
Nick Popovic c7840966e2 Fix duplicate help text for build targets in Makefile (#4092) 2025-07-14 04:42:07 +00:00
K 3110e8f810 feat(cli): add hideBanner setting to disable startup banner (#2803)
Co-authored-by: Pascal Birchler <pascalb@google.com>
2025-07-14 04:37:31 +00:00
Abhi 8d0a4082a4 Fix(ci): Correct container publishing pipeline and improve robustness (#4093) 2025-07-14 04:19:58 +00:00
Billy Biggs ef8ec98489 Add back support for escaping newline with a \ character (#4064) 2025-07-14 03:34:20 +00:00
N. Taylor Mullen b018e2d3ad Fix docker release yaml to use correct commands. (#4025) 2025-07-12 23:46:49 -07:00
N. Taylor Mullen 8cf7f530e1 chore(release): v0.1.12 (#4023) 2025-07-12 23:09:54 -07:00
Sandy Tao b29c02dd34 Fix not using flash for next speaker check (#4016) 2025-07-13 05:12:47 +00:00
N. Taylor Mullen 44ef0408f3 feat(tools): Centralize shell tool summarization (#4009) 2025-07-13 04:09:12 +00:00
N. Taylor Mullen 09a3b7d5e1 feat: Invert scroll arrow default in RadioButtonSelect (#4006) 2025-07-13 03:58:00 +00:00
N. Taylor Mullen 26a79fec25 feat: Add GEMINI_DEFAULT_AUTH_TYPE support (#4002) 2025-07-13 03:43:35 +00:00
N. Taylor Mullen 4442e893c3 fix(auth): Remove sharp edges from headless auth (#3985) 2025-07-12 15:42:47 -07:00
Yuki Okita 890982a811 fix(core): make the commented-out test workable (#3885) 2025-07-12 19:13:22 +00:00
Isuru Gunarathne b3cbde5cf3 Fix typo in README.md regarding Vertex AI API key (#3946)
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-07-12 07:23:09 +00:00
Abhi 642d2e8d51 ensure system instruction also uses <state_snapshot> (#3951) 2025-07-12 06:15:56 +00:00
Jayson Dasher c9e194ec6a feat: Add clipboard image paste support for macOS (#1580)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-12 04:06:49 +00:00
Jacob Richman c4ea17692f Fix extra whitespace in markdown rendering. (#3943)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-12 03:38:07 +00:00
Miguel Solorio d89ccf2250 Add scrolling to theme dialog (#3895)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-12 01:05:21 +00:00
Jacob Richman 82bde57868 Fix issues that resulted in Gemini trying to use relative paths where absolute paths were required (#3938) 2025-07-12 00:49:26 +00:00
N. Taylor Mullen 6ebe97c704 chore(release): v0.1.11 (#3939) 2025-07-12 00:33:17 +00:00
Daniel Lee 5b6608ad84 feat(cli): add support for --prompt-interactive/-i flag (#1743) 2025-07-11 23:52:56 +00:00
uttamkanodia14 5b5f496436 Adds Flash Fallback logging and clearcut logging (#3843) 2025-07-11 21:10:25 +00:00
Gaurav 764809753a fix: TypeError: Cannot read properties of undefined (reading 'authType') (#3914) 2025-07-11 21:08:49 +00:00
christine betts a071f604e3 Remove unused demo file (#3886) 2025-07-11 21:05:39 +00:00
Seth Troisi eab47b9131 Add oauth test (#3916) 2025-07-11 21:05:27 +00:00
Miguel Solorio 448838dea8 Add visual cues for nightly version (#3701)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-11 20:43:57 +00:00
haroldmciver-go 4197f30278 update /theme to new slash command arch (#3791)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-07-11 20:01:28 +00:00
Jack Wotherspoon 2826c7a1c6 feat: add headers support to SSE transport MCP servers (#3902) 2025-07-11 19:59:42 +00:00
Gaurav 8f12e8a114 fix: clearcut logging (retry #3744) (#3751) 2025-07-11 17:57:35 +00:00
uttamkanodia14 93284281de Logs the auth type in the user prompts, api responses and errors (#3795) 2025-07-11 16:47:46 +00:00
Pascal Birchler ed00612cf7 chore: pin GitHub Actions to SHAs (#2987)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-07-11 16:46:06 +00:00
anj-s 23197151c2 Summarize tool call outputs using tool specific summarizers (#3745) 2025-07-11 16:29:08 +00:00
Bryan Morgan cdbe2fffd9 Added in proper checks for customer tiers in 429/Quota error messaging (#3863)
Co-authored-by: Ioannis Papapanagiotou <iduckhd@hotmail.com>
2025-07-11 15:25:30 +00:00
anj-s c9e1e6d3bd Add support for specifying maxSessionTurns via the settings configuration (#3507) 2025-07-11 14:55:03 +00:00
anj-s 0151a9e1a3 Remove extra logging in debug mode (#3864) 2025-07-11 14:43:51 +00:00
Tommaso Sciortino 166f5eaa66 Don't print MCP server logs. It's too noisy. (#3867) 2025-07-11 14:42:43 +00:00
Ioannis Papapanagiotou 62ebd51e11 docs: correct typo in CONTRIBUTING.md (#3852) 2025-07-11 13:29:05 +00:00
chrisheecho e8fd2d6147 Update authentication.md to show how to use API keys in GCP (#3042)
Co-authored-by: Pascal Birchler <pascalb@google.com>
2025-07-11 13:25:11 +00:00
Max Bain a634e03177 docs: Include video and audio in multi-file tool documentation (#3380)
Co-authored-by: Pascal Birchler <pascalb@google.com>
2025-07-11 13:22:43 +00:00
Jinhwan Kim 9195a1c026 Fix typo in authentication.md (#3348) 2025-07-11 13:04:42 +00:00
trapezoid daed8b0f90 chore(deps): Pin @google/genai to 1.8.0 (#3834)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-11 06:58:32 +00:00
Masato Sugiyama 8d054898af chore: remove unused ink-text-input dependency (#2388) 2025-07-11 05:32:02 +00:00
Seth Troisi 8a128d8dc6 Add NO_BROWSER environment variable to trigger offline oauth flow (#3713) 2025-07-11 01:59:02 +00:00
Billy Biggs ab66e3a24e Work around bracketed paste support for node < 20 (#2476)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-10 19:56:34 +00:00
matt korwel 75a128e7ee chore(release): v0.1.10 (#3749)
Co-authored-by: Gaurav <39389231+gsquared94@users.noreply.github.com>
Co-authored-by: Aryan Sawant <156219699+aryanjsawant@users.noreply.github.com>
Co-authored-by: neo.alienson <neo@01man.com>
2025-07-10 16:55:22 +00:00
Tommaso Sciortino 870797c16c Indent subcommands in help output (#3703) 2025-07-10 16:21:20 +00:00
Mithlesh kumar bf508bfd77 Cleanup: Removed duplicate guidelines prompt (#3741) 2025-07-10 16:04:59 +00:00
neo.alienson 5ecc13729a Fix invalid docker command and invalid JSON in the mcpServers example. (#3672) 2025-07-10 08:33:04 +00:00
Aryan Sawant 316c0fa37b Fix Patch for grep.test.ts (#3747) 2025-07-10 06:08:58 +00:00
matt korwel 58607b92df Revert "fix: Use Email for Clearcut Logging and Refactor User Info Fetching" (#3744) 2025-07-09 21:51:37 -07:00
Gaurav b7f8e1360f fix: Use Email for Clearcut Logging and Refactor User Info Fetching (#3620) 2025-07-10 04:17:40 +00:00
christine betts da50a1eefb Add system-wide settings config for administrators (#3498)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-07-09 21:16:42 +00:00
uttamkanodia14 063481faa4 Adding TurnId to Tool call and API responses and error logs. (#3039)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-09 18:49:30 +00:00
Tyler 6c12f9e0d9 Use yargs array type for the allowedMcpServerNames flag instead of processing the list directly ourselves. (#3600) 2025-07-09 18:38:38 +00:00
Pascal Birchler 017a0a6c86 fix(gha): only post coverage comment for 22.x (#3613) 2025-07-09 18:25:48 +00:00
N. Taylor Mullen 725b23e37a Revert "chore(deps): bump google-auth-library from 9.15.1 to 10.1.0 (… (#3676) 2025-07-09 18:19:28 +00:00
N. Taylor Mullen b3d3f40115 Revert "chore(deps): Add Dependabot config (#2972)" (#3675) 2025-07-09 18:17:04 +00:00
Bryan Morgan 8a6509ffeb Remove auto-execution on Flash in the event of a 429/Quota failover (#3662)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2025-07-09 17:55:56 +00:00
Ed Harrod 01e756481f mcp-server: Fix debug flag (#3667) 2025-07-09 17:52:49 +00:00
Jenna Inouye d5db4f0b93 Update Terms of Service and Privacy Notice for clarity. (#3036) 2025-07-09 16:23:58 +00:00
Bryan Morgan b0cce95286 Improve quota- and resource-related 429 error handling, also taking Code Assist customer tiers into consideration (#3609) 2025-07-09 14:18:15 +00:00
Pascal Birchler 8f2da86aa5 Use full terminal width for --help (#3515)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-09 07:02:59 +00:00
N. Taylor Mullen d094026b3b fix(deps): revert yargs bump and fix npx regression (#3610) 2025-07-08 23:44:56 -07:00
dependabot[bot] 95782b7b47 chore(deps): bump google-auth-library from 9.15.1 to 10.1.0 (#3583)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 06:01:18 +00:00
DaeYeong Kim 0e13b7f0c6 docs(contributing): mention macOS Seatbelt in GEMINI_SANDBOX examples (#3537)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-09 06:01:16 +00:00
dependabot[bot] c5abd7a302 chore(deps): bump dotenv from 16.6.1 to 17.1.0 (#3589)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 06:01:06 +00:00
dependabot[bot] 52db1b83a0 chore(deps): bump ws from 8.18.2 to 8.18.3 (#3581)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 05:47:51 +00:00
Principal-Ideal 4d882d9b58 chore: fix typo (#3570) 2025-07-09 05:46:55 +00:00
dependabot[bot] 5a50958f28 chore(deps): bump dorny/test-reporter from 1 to 2 (#3575)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Abhi <43648792+abhipatel12@users.noreply.github.com>
2025-07-09 05:46:24 +00:00
dependabot[bot] d787f1b3de chore(deps): bump actions/create-github-app-token from 1 to 2 (#3576)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 05:46:14 +00:00
dependabot[bot] b12149be7c chore(deps): bump mime-types and @types/mime-types (#3582)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 05:44:40 +00:00
dependabot[bot] 9089107a8d chore(deps-dev): bump esbuild from 0.25.5 to 0.25.6 (#3586)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 05:42:49 +00:00
dependabot[bot] bedecc03f4 chore(deps-dev): bump globals from 16.2.0 to 16.3.0 (#3587)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 05:42:23 +00:00
dependabot[bot] f6cd65190f chore(deps): bump yargs from 17.7.2 to 18.0.0 (#3590)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 05:40:56 +00:00
dependabot[bot] 698ec8172c chore(deps): bump gaxios from 6.7.1 to 7.1.1 (#3592)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-09 05:39:42 +00:00
Tommaso Sciortino 9273e8ddae Fix version of shell-quote (#3557) 2025-07-09 00:40:49 +00:00
Pascal Birchler 3e157a2331 chore(deps): Add Dependabot config (#2972) 2025-07-09 00:23:59 +00:00
Pascal Birchler 2916753409 chore: add CodeQL analysis (#2992) 2025-07-09 00:23:51 +00:00
Pascal Birchler c8cf954e6e fix(auth): do not blindly default to API key auth (#3235)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-08 22:10:36 +00:00
Sandy Tao 0506b40a39 Fix bad request in model check (#3568) 2025-07-08 22:06:47 +00:00
Jack Wotherspoon 27a2d8af14 refactor: consolidate all flags to use hyphens (deprecate underscore flags) (#3541) 2025-07-08 20:56:12 +00:00
Marat Boshernitsan 2ed1b378cb fix: Honor DEBUG and CLI_TITLE environment variables (#3560) 2025-07-08 19:34:17 +00:00
Billy Biggs c0940a194e Add a command line option to enable and list extensions (#3191) 2025-07-08 16:57:34 +00:00
Marat Boshernitsan f1647d9e19 Improve auth env var validation logic and messaging to detect settings that confuse GenAI SDK (#1381)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-08 16:37:10 +00:00
Tommaso Sciortino 5c759d48c7 Don't enforce leading slash since that's not true on Windows (#3545) 2025-07-08 16:30:49 +00:00
Tommaso Sciortino 4dab31f1c8 Improve Function Call argument validation and typing (#2881)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-08 06:48:44 +00:00
matt korwel 137ffec3f6 Fix nightly Release (#3511) 2025-07-08 06:41:39 +00:00
Tommaso Sciortino 0c70a99b56 Preserve recent history when compressing. (#3049)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-08 06:32:09 +00:00
Ayesha Shafique 23e3c7d6ec style: Format execution time as minutes, seconds (#2707) 2025-07-08 06:14:42 +00:00
Sandy Tao f7ad9a7e47 Fix infinite loop in start.js on Windows (#3506) 2025-07-08 03:49:22 +00:00
warjiang a34cc6124c ci: disable scheduled jobs in forked repo (#3093)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-07-08 01:14:39 +00:00
Jack Wotherspoon ba58e077eb chore: add general usage message to --help message (#3500) 2025-07-08 01:13:31 +00:00
matt korwel a4097ae6f9 Release and Packaging: Clean up (#3489) 2025-07-07 23:36:51 +00:00
Tommaso Sciortino 4e84989d8f Fix double "esc" bug in Auth dialog (#3493) 2025-07-07 23:27:24 +00:00
Tommaso Sciortino 426b6905da Fix typo and add tests for auth validation. (#3491) 2025-07-07 22:52:04 +00:00
Marat Boshernitsan 48c2aa296a Enable Gemini CLI to reuse user's auth in Cloud Shell (#3070) 2025-07-07 22:02:13 +00:00
Tommaso Sciortino 357546a2aa Initialize MCP tools once at start up instead of every time we auth. (#3483) 2025-07-07 22:01:59 +00:00
Abhi aa10ccba71 feature(commands) - Refactor Slash Command + Vision For the Future (#3175) 2025-07-07 20:45:44 +00:00
Tyler 6eccb474c7 refactor: rename allowed_mcp_server_names to allowed-mcp-server-names (#3469) 2025-07-07 19:47:27 +00:00
Sambhav Khanna 97a472f2fb fix(cli): Prevent Tab from auto-executing incomplete slash commands (#2919)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-07 19:43:27 +00:00
Tommaso Sciortino 2b135d0e9e Remove unneeded code. (#3467)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-07 19:35:29 +00:00
chrisheecho 7cc84cd6af Update README.md to show API key usage for Vertex (#3060)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-07 18:43:27 +00:00
Colt McAnlis 8f4046c71a fix: EditTool can clobber human edits to the same file. (#3043)
Co-authored-by: Colt McAnlis <colton@google.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-07 17:28:56 +00:00
Tyler 229ae03631 Add --allowed_mcp_server_names flag (#3464) 2025-07-07 16:45:58 +00:00
Jordan Demeulenaere 355fb4ac67 Add excludeTools and includeTools to mcpServers config (#2976) 2025-07-07 16:34:26 +00:00
Gennadiy Civil aa8e5776eb Add new test to verify that when an Authorization header is provided (#3023) 2025-07-07 16:34:16 +00:00
N. Taylor Mullen 17dfa267d5 Re-enable backticks in shell tool usage. (#3360) 2025-07-07 16:15:10 +00:00
Jerop Kipruto 48ebd728b3 Migrate Gemini CLI Action workflows to Direct WIF authentication (#3456) 2025-07-07 16:06:31 +00:00
Pugazhendhi 524ede52d2 feat: add .svg support (#3229) 2025-07-07 05:51:32 +00:00
zfflxx 97d9386e3f @file don't respect config respectGitIgnore=false (#3382) (#3387)
Co-authored-by: Ryan Fang <ryan.fang@gllue.com>
2025-07-07 05:48:39 +00:00
zfflxx bb8f6b376d Fix nested markdown Rendering for table headers and rows #3331 (#3362)
Co-authored-by: Ryan Fang <ryan.fang@gllue.com>
2025-07-07 05:33:46 +00:00
Jack Wotherspoon b70fba5b09 fix: respect env variables in .env for settings.json variable substitution (#3416) 2025-07-07 05:13:13 +00:00
Yuki Okita 87a44ec468 feat(core): improve error messages in isCommandAllowed (#3349) 2025-07-07 05:03:36 +00:00
matt korwel 20825e4114 Release misc (#3418) 2025-07-07 03:16:42 +00:00
Devansh Sharma 39d4095a4c feat: YOLO mode shorctut displayed inside /help (#3367) 2025-07-06 15:48:29 +00:00
Pyush Sinha 39e8509452 feat: add user startup warnings, add home directory check (#3056) 2025-07-06 06:27:00 +00:00
N. Taylor Mullen da9b1baa6e Update @google/genai -> 1.8.0 (#3339) 2025-07-06 01:10:57 +00:00
Adam Weidman 9211905ff1 feat: Handle inline content modification in tool scheduler (#2883) 2025-07-05 23:19:41 +00:00
Daniel Sibaja 2b8a565f89 Fix #2922: Prevent @ concatenation to valid paths in shellmode. (#2932) 2025-07-05 22:20:12 +00:00
BigUncle b564d4a088 fix(core): Sanitize tool parameters to fix 400 API errors (#3300) 2025-07-05 21:58:51 +00:00
matt korwel 5c9372372c cleaning up prompts for release (#3335) 2025-07-05 21:20:47 +00:00
matt korwel a7256f630c Relase: Clean up and condensing (#3321) 2025-07-05 20:58:59 +00:00
N. Taylor Mullen 4be32d1f73 fix(cli): Group cancelled tool call responses to prevent API errors (#3333) 2025-07-05 20:56:39 +00:00
이동현 8adc586973 fix: small typo (#3183)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-05 15:33:42 +00:00
matt korwel 4963a1eea8 Mk nohup (#3285) 2025-07-05 15:27:22 +00:00
Didier Durand ab96676e36 fix typos in diverse files (#3284)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-05 15:23:39 +00:00
matt korwel 47dc16d243 feat: Update minimum Node.js version to 20 (#3277) 2025-07-05 14:55:15 +00:00
Ned Nguyen 80aad5a42c Doc: update gemini-cli README.md to require Node.js version 20+ (#3247)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-07-05 02:44:23 +00:00
Will 保哥 c94fcd1094 fix a command usage issue in deployment.md (#2862)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-05 02:05:56 +00:00
matt korwel 7aa67f324c Mk sign nightly release commits (#3264) 2025-07-05 01:32:58 +00:00
matt korwel e90e0015ea Signing tags (#3254) 2025-07-04 22:04:05 +00:00
matt korwel 9ff3592e01 Mk nightly relase tag formatting (#3206) 2025-07-04 16:30:29 +00:00
Jack Wotherspoon 806d858c45 ci: update issue templates to use GitHub alert (#3167) 2025-07-04 15:59:09 +00:00
Mithlesh kumar f4923468dc chore: typo fixes (#3203)
Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
2025-07-04 15:38:43 +00:00
matt korwel ef736f0d1c Mk nightly relase tag formatting (#3204) 2025-07-03 22:44:04 -07:00
matt korwel adc63e6882 fix tagging for nightly (#3202) 2025-07-04 05:16:35 +00:00
matt korwel d43ea268b0 Releasing: Utilizing Github Actions and Tagging for release. (#2852)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-07-04 03:57:01 +00:00
Sandy Tao 32db5ba0e1 Refactor text-buffer to use reducer (#2652) 2025-07-04 00:53:17 +00:00
moon jooho 8d3fec08e5 Add and improve JSDoc comments for core tool methods (#3128) 2025-07-04 00:13:02 +00:00
Bryan Morgan 654f8aeb61 Fixed Google User Id pass to Clearcut (#3147) 2025-07-03 20:54:35 +00:00
SunskyXH ab63a5f183 fix(client): get model from config in flashFallbackHandler (#2118)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-03 19:43:48 +00:00
Devansh Sharma 64767c52fe fix: show ctrl+s shortcut to expand debug console #2002 (#2491)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-03 19:42:02 +00:00
Fausto Núñez Alberro dcb9381138 Use AccentBlue: 'blue' in ANSI theme instead of hard-coded #0000FF (#3100)
Co-authored-by: Riccardo Carlesso <palladiusbonton@gmail.com>
2025-07-03 14:32:47 +00:00
moon jooho a68f28e5cc fix: remove unnecessary whitespace (#2781)
Co-authored-by: F. Hinkelmann <franziska.hinkelmann@gmail.com>
2025-07-03 10:22:32 +00:00
Taeik Lim 5057502e8d docs: fix typos in CONTRIBUTING.md (#2722)
Signed-off-by: Taeik Lim <sibera21@gmail.com>
Co-authored-by: F. Hinkelmann <franziska.hinkelmann@gmail.com>
2025-07-03 09:46:23 +00:00
Jerop Kipruto 85a1d814a7 refactor(ci): improve pr triage (#3082) 2025-07-03 02:45:34 +00:00
Jerop Kipruto b463249729 feat(workflows): add automated and scheduled PR triage (#3062) 2025-07-03 00:41:23 +00:00
Michael Carolin e7b0b49c82 Fix typo in README (#3061) 2025-07-02 23:58:38 +00:00
Eddie Santos 82a0ac3d1e Update notification template (#3035) 2025-07-02 20:26:14 +00:00
Abhi edd69cb7d4 help: add shift+tab tip (#2892) 2025-07-02 03:18:01 +00:00
Vachan cd069fd436 Reduce the threshold for when we compress history. (#2898) 2025-07-02 00:18:13 +00:00
Seth Troisi 38445f63f0 make tag required for /chat (#2904) 2025-07-02 00:17:08 +00:00
Brandon Keiji 34935d6558 chore: bump version to 0.1.9 (#2906) 2025-07-01 23:30:04 +00:00
Bryan Morgan dbe88f6e0e Added support for session_id in API calls (#2886) 2025-07-01 23:16:09 +00:00
Tommaso Sciortino 3492c429b9 Add excludedTools to extensions. (#2853) 2025-07-01 23:13:46 +00:00
Allen Hutchison e94decea39 feat(core): Add infinite loop protection to client (#2793) 2025-07-01 23:09:21 +00:00
Billy Biggs 3a995305c0 Fix characters being dropped in text-buffer (#2504)
Co-authored-by: Sandy Tao <sandytao520@icloud.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-07-01 23:07:41 +00:00
Tommaso Sciortino 82afc75350 Special case mime type for ts file. (#2902) 2025-07-01 23:05:33 +00:00
Seth Troisi 383306e17e Improve slashCommand autoCompletion logic (#2776) 2025-07-01 22:51:43 +00:00
Preston Holmes 8957ad7fc3 Docs: Add a page detailing quota and cost information (#2894)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2025-07-01 22:28:15 +00:00
Santhosh Kumar 0275ab0108 feat: add audio and video support to read_file (#2556) 2025-07-01 19:22:32 +00:00
Logan Kilpatrick 63ed8d6499 Update README.md (#2729)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-07-01 19:16:40 +00:00
Tommaso Sciortino fe125d59b9 Use the constant placeholders for ".gemini/settings.json" in gemini.tsx (#2860) 2025-07-01 18:00:21 +00:00
Jerop Kipruto 58b14b7ccf feat: add weekly community report workflow (#2855) 2025-07-01 16:19:51 +00:00
Jacob Richman 2bf8e8b2c7 Fix spurious logs about invalid MaxSizedBox children due to Ink6 + React19 migration (#2794) 2025-07-01 15:54:27 +00:00
MirzaSamadAhmedBaig 01186e3aff Make clean script cross-platform (#1990)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-07-01 15:30:18 +00:00
Tian Jian Wang a4062cb44a feat: Add markdown table rendering support (#1955)
Co-authored-by: heartyguy <heartyguy@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-07-01 03:25:19 +00:00
Hemant 1a30b9656f docs(auth): clarify env-file discovery & recommend (#2402) 2025-07-01 03:23:48 +00:00
Eddie Santos e5b1208bd8 update check + tests (#2772) 2025-07-01 03:03:16 +00:00
Jerop Kipruto e10c208fbe feat(triage): improve automated issue triage workflows (#2778) 2025-07-01 02:59:46 +00:00
Jvr 84355bb447 Fix: Use HTTPS in docs and correct formatting typo in troubleshooting guide (#2762)
Co-authored-by: Seth Troisi <sethtroisi@google.com>
2025-07-01 00:39:45 +00:00
Abhi f91927569c refactor(ui): revamp exit stats display (#2771) 2025-07-01 00:28:49 +00:00
Tommaso Sciortino 3587054d32 Rename AuthType LOGIN_WITH_GOOGLE_PERSONAL -> LOGIN_WITH_GOOGLE (#2769) 2025-07-01 00:11:54 +00:00
Tommaso Sciortino 0ca5c07135 Use structured prompt for compression. (#2747) 2025-07-01 00:04:33 +00:00
Tommaso Sciortino dbd626054f Remove unused method (#2721) 2025-06-30 22:53:05 +00:00
owenofbrien f19b9ed4f8 Removed fallback logic for gaia id logging (#2761) 2025-06-30 22:51:17 +00:00
Tommaso Sciortino 505a5d617b Fix CODE_ASSIST_ENDPOINT env var. (#2712) 2025-06-30 22:41:14 +00:00
Jerop Kipruto 36e099ac22 fix(workflows): use preview release gemini-cli in triage workflows (#2759) 2025-06-30 22:34:08 +00:00
Jerop Kipruto 09d494d174 feat(workflows): add issues list command to automated triage workflow (#2749) 2025-06-30 21:04:48 +00:00
Jerop Kipruto 9794d329d3 refactor(workflows): separate issue triage into two workflows (#2746) 2025-06-30 20:30:22 +00:00
Tommaso Sciortino 5c4c833ddd Fix oauth credential caching. (#2709) 2025-06-30 15:47:01 +00:00
Jerop Kipruto f3849627fc feat(shell): Enable prefix matching for flexible command validation (#2653) 2025-06-30 15:42:35 +00:00
Abhi 770f862832 feat: Change /stats to include more detailed breakdowns (#2615) 2025-06-30 00:44:33 +00:00
Adam Spiers 0fd602eb43 feat: add support to remote MCP servers for custom HTTP headers (#2477) 2025-06-30 00:09:08 +00:00
Marcin Jahn d1eb86581c feat(cli): Add hideTips setting (#1524)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-06-29 23:56:37 +00:00
Faizan Alam 1732e90d52 Highlight previous user input (#2507)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-06-29 23:28:56 +00:00
Devansh 2096f971cd fix:Update /help to show correct newline key combo for different OS #… (#2043)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-06-29 23:16:14 +00:00
Niladri Das f848d35758 feat: modular GEMINI.md imports with @file.md syntax (#1585) (#2230) 2025-06-29 22:51:47 +00:00
uttamkanodia14 ada4061a45 Fix clearcut-logger.ts to event name GEMINI_CLI_API_RESPONSE_TOOL_TOK… (#1875) 2025-06-29 22:14:13 +00:00
Bryan Morgan cdb803b9a4 Added obfuscated google account ID to clearcut log messages (#2593) 2025-06-29 20:35:20 +00:00
Tim Rogers dbe63e7234 fix: Correct pluralization of the number of occurrences in EditTool tool errors (#2463) 2025-06-29 19:53:59 +00:00
Adam Spiers 0cfaeedf03 chore: add .editorconfig (#2572) 2025-06-29 19:40:32 +00:00
Jerop Kipruto d8d78d73f9 feat: allow command-specific restrictions for ShellTool (#2605) 2025-06-29 19:32:26 +00:00
Noritaka Kobayashi 19a0276142 refactor: remove unnecessary "await" (#2574) 2025-06-29 19:15:27 +00:00
Noritaka Kobayashi 9ae2595bfd refactor: remove unnecessary assertion (#2579) 2025-06-29 19:06:03 +00:00
Umair Idris 65a58c3b03 Clarify .gemini/config.yaml is for the PR review bot (not CLI). (#2495) 2025-06-29 18:54:23 +00:00
Will 保哥 51eba66528 Fix a heading issue for Authentication Setup doc (#2592) 2025-06-29 18:45:19 +00:00
Will 保哥 91502193ec Fix a broken link (#2598) 2025-06-29 18:43:27 +00:00
yuki yano c860dac233 feat: add Neovim editor support (#1448) 2025-06-29 17:25:22 +00:00
Zircoz 87d4fc0560 docs: Add uninstallation instructions to README (#1985)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Allen Hutchison <adh@google.com>
Co-authored-by: Allen Hutchison <allen@hutchison.org>
2025-06-29 13:41:58 +00:00
Noritaka Kobayashi b980a47879 refactor: remove imported multiple times (#1846) 2025-06-29 09:09:15 +00:00
Noritaka Kobayashi e188daab91 refactor: use for...of loop instead of traditional for loop (#1840) 2025-06-29 08:53:09 +00:00
Tommaso Sciortino fc21d1cae3 Esc to exit privacy screen in error state (#2527) 2025-06-29 07:50:53 +00:00
Ahmad Awais ⌘ 19a9b50aab 📦 NEW: Theme Shades of Purple (#2114)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-29 03:43:17 +00:00
anj-s 7b86a2015f Remove debug logs that are not actionable but numerous (#2030) 2025-06-29 02:33:53 +00:00
Krushna Sharma 33bfda9879 docs: fix typos and grammatical errors (#2459)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-06-29 01:23:49 +00:00
JimmyLiao 399841b6e0 fix: Correct start script reference in create_alias.sh (#1487) 2025-06-28 23:28:44 +00:00
Vladislav Semyanov f31b1274bf docs: remove duplicate tool descriptions in file-system.md (#1790)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-06-28 23:26:38 +00:00
Jerop Kipruto fbb3a2e6f0 chore(gha): pin issue triage workflow to a specific commit (#2496) 2025-06-28 23:14:44 +00:00
Umair Idris 2769188d30 Re-enable Gemini Code Assist PR review bot (#2254) 2025-06-28 22:05:40 +00:00
Leo 5d3a64d747 fix file extension in "modify flow" temp files (#2478) 2025-06-28 21:51:03 +00:00
Leo 601d9ba36d fix edit retrigger (#2306) 2025-06-28 18:02:44 +00:00
Pyush Sinha 3518ff7663 feat: add VSCodium editor support (#2299)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: Allen Hutchison <adh@google.com>
2025-06-28 17:44:31 +00:00
christine betts 0d51e4b4b7 Add troubleshooting note about CI env variables (#2229)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-28 16:25:56 +00:00
Reid 8c13c1e82a fix: typo (#2415)
Signed-off-by: reidliu41 <reid201711@gmail.com>
2025-06-28 16:18:20 +00:00
Kalle Ahlström 9665928860 chore: add proper pluralization handling for match in grep tool (#2344)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-06-28 14:41:25 +00:00
Billy Biggs 25cdf9b762 Inline the description and schema of the shell tool in the source (#1709) 2025-06-28 09:53:03 +00:00
Mot ad7839ea4c quiet dotenv log message (#2239)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-28 02:03:20 +00:00
SADIK KUZU 2e20effb43 Fix typos (#1629)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-06-28 01:29:59 +00:00
Noritaka Kobayashi 221b066900 chore: fix typo in mcp-client (#1555)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-28 01:14:59 +00:00
Jerop Kipruto 6c4391dda5 improve triage prompt (#2314) 2025-06-28 00:53:38 +00:00
Jerop Kipruto ac2bc3af7c add issue triage using gemini cli (#2310) 2025-06-28 00:30:56 +00:00
Brandon Keiji e8d5dec380 chore: bump to 0.1.8 (#2308) 2025-06-28 00:08:16 +00:00
Vachan db115c468a Updates error handling in case of incorrect tool calling. (#2304) 2025-06-27 23:57:40 +00:00
Sandy Tao 150df382f8 Upgrade to Ink 6 and React 19 (#2096)
Co-authored-by: jacob314 <jacob314@gmail.com>
2025-06-27 23:39:54 +00:00
Brandon Keiji 19d2a0fb35 fix: add missing gaxios dependency (#2302) 2025-06-27 23:24:03 +00:00
Philipp Schmid ac24fd27e4 Update Auth Label to include AI Studio (#2130)
Co-authored-by: Allen Hutchison <adh@google.com>
2025-06-27 21:33:26 +00:00
Xi Chen d35e7d3eb1 Fix a circular dependency (#2246)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-27 20:59:47 +00:00
Brandon Keiji 8d1d40cc7a chore: bump to 0.1.6 (#2285) 2025-06-27 20:57:07 +00:00
Tommaso Sciortino a2a46c7c67 Add privacy notice slash command (#2059) 2025-06-27 19:07:38 +00:00
Billy Biggs 4fbffdf617 Handle stdin for prompts using readline for escape character parsing (#1972) 2025-06-27 17:57:32 +00:00
Preston Holmes 5fd6664c4b Further clarify the situations where a Project ID is required (#2029)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-06-27 16:51:28 +00:00
Preston Holmes 3aabb940f5 Add the current auth method and GCP Project config to the about message (#2112) 2025-06-27 15:46:27 +00:00
Srinath Padmanabhan 3ebf54f367 Refine Fallback message providing more options. (#1961) 2025-06-27 15:21:46 +00:00
Billy Biggs 582b4861a9 Use 2-space indent for saved checkpoint files (#1152) (#1977)
Co-authored-by: Jacob Richman <jacob314@gmail.com>
2025-06-27 13:39:27 +00:00
DongJin Jeong a943cee45d Fix typos and formatting issues (#1480) 2025-06-27 10:31:42 +00:00
Seth Troisi 6742a1b7f9 Explicit message for missing subcommand (#2019) 2025-06-27 05:01:00 +00:00
Brandon Keiji bf873a1d85 feat: add prepublishOnly checks (#2052) 2025-06-26 23:49:43 +00:00
Brandon Keiji d9892ada7f fix: add repository field to package.jsons (#2032) 2025-06-26 22:36:34 +00:00
Bryan Morgan 560905154c Updating the first user message to mention the product name (#2037) 2025-06-26 22:32:19 +00:00
anj-s 267173c7e8 Revert "feat: Add model selection logic (#1678)" (#1983) 2025-06-26 20:59:16 +00:00
Tommaso Sciortino c55b15f705 Improve LoadCodeAssist error handling (#1645) 2025-06-26 15:27:20 +00:00
N. Taylor Mullen 24ccc9c457 feat: Add model selection logic (#1678) 2025-06-26 14:51:32 +00:00
Vladislav Semyanov 121bba3464 docs: fix broken configuration link in themes.md (#1780) 2025-06-26 07:37:42 +00:00
김진엽 (Nathan) 02bd8dfeff docs: fix multiple typos in documentation files (#1781) 2025-06-26 07:36:31 +00:00
Masato Sugiyama ee5bf842eb fix: remove unnecessary @gemini-code/core mock from slashCommandProcessor test (#1739)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-26 04:56:51 +00:00
Keith Ballinger 891116a6c2 Flaky test (#1405)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-26 04:45:39 +00:00
Noritaka Kobayashi dbe217828d chore: fix typos in comment-out (#1540)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-26 04:34:53 +00:00
Andrew Drozdov b8ae12a109 Update geminiChat.ts (#1681)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-26 04:27:35 +00:00
Billy Biggs 759ad4cc96 When resuming a checkpoint always add items to history even if not shown (#1653)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-26 04:23:47 +00:00
Jennifer Davis 4d4b95a41d fix: add engines check to ensure older Node.js versions don't fail at… (#1752) 2025-06-26 04:09:40 +00:00
mpAtGoogle 046c7f84bc Update LICENSE (#1664) 2025-06-26 03:34:01 +00:00
Brandon Keiji 01ff27709d chore: bump to 0.1.5 (#1731) 2025-06-26 02:48:16 +00:00
anj-s 1078a546fe Fix doc link in the auth dialog (#1688) 2025-06-26 01:59:13 +00:00
Brandon Keiji a8763abfb7 feat: add release trigger configuration (#1697) 2025-06-26 01:54:58 +00:00
Bryan Morgan bb797ded7d 429 fix (#1668) 2025-06-26 01:45:38 +00:00
Jerop Kipruto b6b9923dc3 Streamline issue submission with YAML forms (#1608) 2025-06-25 22:50:24 +00:00
Tommaso Sciortino 79c647d486 Merge "Login with Google Workspace" auth option into "Login with Google" (#1574)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-25 22:38:18 +00:00
anj-s 00b24c917e Update usage stats doc (#1636) 2025-06-25 22:26:07 +00:00
Logan Kilpatrick 32b2e79b62 Update README.md (#1632) 2025-06-25 21:41:52 +00:00
anj-s 5aa6b9a84b Update docs and add faq section (#1625) 2025-06-25 21:32:16 +00:00
Jerop Kipruto 8c5a0b6f88 prompt users to search for existing issues before creating a new one (#1595) 2025-06-25 20:29:51 +00:00
zhiyue b0cf9bcece fix(telemetry): handle all promise rejections in ClearcutLogger (#1557)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-25 20:14:44 +00:00
Seth Troisi 31f32421a3 Minor style changes to prompt (#1578) 2025-06-25 20:00:44 +00:00
Bryan Morgan eacbb3551c changed 429 failover from 3 consecutive to 2 for OAuth users (#1579) 2025-06-25 19:37:23 +00:00
anj-s 4b5ca6bc77 Add tos and privacy links docs for clarity (#1571) 2025-06-25 19:32:25 +00:00
Mark McDonald 452b82162b Adding some troubleshooting text for login issues (#1451) 2025-06-25 19:00:36 +00:00
DongJin Jeong aa0e375508 Fix: update npx command to correct GitHub repository URL (#1488) 2025-06-25 18:58:11 +00:00
Jenna Inouye 6a0b8a733b Add information request to bug reports: login method. (#1501) 2025-06-25 18:55:35 +00:00
Arjun Lall 63a7fbc5fd Fixed Checkpointing docs for enabling checkpointing using settings.json (#1534) 2025-06-25 18:51:38 +00:00
N. Taylor Mullen 3a369ddec3 feat: Refine model fallback messaging to reflect reality. (#1527) 2025-06-25 17:33:32 +00:00
starsandskies 0915bf7d67 Remove GEMINI_CODE_ASSIST env variable from configuration.md doc (#1514) 2025-06-25 16:45:40 +00:00
Marat Boshernitsan 9897a2b80a Clarify why authentication failures might be happening and direct users to documentation (#1478)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-06-25 16:11:54 +00:00
Jason Davenport 819507c5e8 Update Readme to call out gemini command after npm install (#1423)
Co-authored-by: Mark McDonald <macd@google.com>
2025-06-25 16:03:07 +00:00
matt korwel 45b2b382cc Prod: Integration Tests Main Only (#1461) 2025-06-25 15:56:06 +00:00
Thomas Kosiewski af4dfd9327 Update authentication.md (#1429)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-06-25 15:48:15 +00:00
matt korwel 21cfe9f680 issue template update (#1441) 2025-06-25 14:44:34 +00:00
matt korwel 6991ba1387 Version 0 1 1 (#1426) 2025-06-25 13:47:27 +00:00
Asad Memon 452dca4301 Fix typo in intro on MCP line (#1421) 2025-06-25 13:04:42 +00:00
N. Taylor Mullen 852210e108 Shipping it! (#1418) 2025-06-25 12:42:04 +00:00
Brandon Keiji f6c36f75e3 fix: prepublish changes to package names (#1420) 2025-06-25 12:41:11 +00:00
Jenna Inouye a3c46c0d31 Docs: Add link links to tools/index.md. (#1419) 2025-06-25 11:16:17 +00:00
Mark McDonald f78479d7ce Add intro text back to README (#1417)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-06-25 10:12:31 +00:00
Mark McDonald cfc13fbd58 Add 'npm i' instruction to README (#1416) 2025-06-25 09:46:05 +00:00
matt korwel 9a093e4b51 CI: Linting Fix (#1413)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-25 04:18:51 +00:00
Preston Holmes 4cc2b27f1d Docs: update docs to clarify the differences between Google account login o… (#1409)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: matt korwel <mattkorwel@google.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-06-25 04:15:45 +00:00
Scott Densmore 39bfa108b5 refactor: remove deplicate dependency in slashCommandProcessor (#1410)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-06-25 04:07:20 +00:00
Daniel Tedesco 268d29f05c docs: fix typos in documentation (#1411)
Co-authored-by: Dan Tedesco <dted@google.com>
2025-06-25 03:53:03 +00:00
Keith Ballinger b6ccf12551 [June 25] handle early output pipe closer (#1402) 2025-06-25 00:39:01 +00:00
matt korwel fbd8725c07 fix(update-notifier): resolve __dirname error on npx execution (#1406) 2025-06-25 00:26:50 +00:00
matt korwel 2505af8522 Prerelease: Cleanup (#1404) 2025-06-24 23:41:36 +00:00
Brian Ray d45d414c93 sandbox doc (#1390)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
Co-authored-by: Jenna Inouye <jinouye@google.com>
2025-06-24 23:11:39 +00:00
Seth Troisi d8000c9248 Add slashCommand dependency (#1401) 2025-06-24 22:55:26 +00:00
Marat Boshernitsan e3def2dd49 fix: use correct directory for update checks (#1394) 2025-06-24 22:51:16 +00:00
Bryan Morgan e356949d3f [JUNE 25] Permanent failover to Flash model for OAuth users after persistent 429 errors (#1376)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-24 22:48:55 +00:00
Jenna Inouye 4bf18da2b0 Documents: Add docs tools pages (#1397) 2025-06-24 22:31:58 +00:00
Jacob Richman 8bd5645dd4 Truncate all strings before displaying in a tool messages to avoid stack overflows (#1395) 2025-06-24 22:31:55 +00:00
Mark McDonald 1f6fe59def Added ToS links for each surface (#1365)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-06-24 22:31:50 +00:00
anj-s 418f67086b Add the link to the privacy policy to the Usage Statistics section and remove debug logs (#1393) 2025-06-24 22:31:45 +00:00
cperry-goog 13cff94b1a docs: add screenshot to README (#1396) 2025-06-24 22:31:40 +00:00
Louis Jimenez 7421bf681b Checkpointing documentation (#1321)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-06-24 22:31:32 +00:00
matt korwel db57d38d92 feat: add merge_group trigger to CI and E2E workflows (#1400) 2025-06-24 15:30:31 -07:00
Jacob Richman 5ff00b0c5d Remove uses of the spread operator that appear to have caused a maximum call stack size exceeded error (#1389) 2025-06-24 21:38:25 +00:00
Jacob Richman 75ed7aaa06 Jacob314/max old space (#1314) 2025-06-24 14:18:55 -07:00
Sandy Tao a411c415a8 Do not render mcp responses as markdown (#1388) 2025-06-24 14:10:41 -07:00
Brian Ray e613cbc448 MCP documentation improvements (#1386)
Co-authored-by: Jenna Inouye <jinouye@google.com>
2025-06-24 13:19:36 -07:00
Bryan Morgan 5099f104bc [June 25] Fixed user agent string to be standards-compliant (#1384) 2025-06-24 09:11:09 -07:00
Billy Biggs b47a4240ff Bug/1369 at command recursive search (#1370) 2025-06-24 06:48:26 +00:00
cornmander a2ed4266aa Update editor.ts (#1371) 2025-06-24 06:41:40 +00:00
Scott Densmore 324715ee8b Add Zed Editor to Eidtor List (#1372) 2025-06-23 23:32:09 -07:00
starsandskies 9f5a625730 Fix broken doc links (#1368) 2025-06-23 20:56:57 -07:00
Abhi d3f13c71ae feat: add custom message for 429 errors (#1366) 2025-06-24 03:43:00 +00:00
Bryan Morgan f7caca5f94 Updated README.md (#1367) 2025-06-23 23:37:07 -04:00
Tommaso Sciortino 0abd2a644e Improve Auth error messaging (#1358) 2025-06-24 01:37:41 +00:00
Seth Troisi 104f23da90 Add /chat list (#1361) 2025-06-24 01:11:45 +00:00
owenofbrien 37034045ae Fix Clearcut logging wire format (#1359)
Fix for Clearcut logging wire format based on validation thread with Clearcut / Concord eng
2025-06-23 17:47:37 -07:00
Jerop Kipruto aca034fdfe Refactor usage statistics to be a top-level setting (#1363)
This commit refactors the `usageStatisticsEnabled` setting from a sub-property of the `telemetry` configuration to a top-level setting. This change simplifies the configuration by decoupling usage statistics from the telemetry settings.

The documentation has also been updated to reflect this change.
2025-06-24 00:29:31 +00:00
cperry-goog b3741f7016 docs: update configuration.md with new CLI options (#1360) 2025-06-23 17:24:55 -07:00
anj-s 3012684469 Fix duplicate startSession logs and duplicate logging events over the wire (#1357) 2025-06-24 00:05:42 +00:00
Seth Troisi 335802f4dd moving /save, /resume to /chat <save|resume> (#1355) 2025-06-23 16:56:08 -07:00
Jacob Richman f741630572 Polish Theme Dialog (#1356) 2025-06-23 16:43:17 -07:00
Seth Troisi 8c6545bf9d Include all chat messages (#1354) 2025-06-23 22:41:33 +00:00
Bryan Morgan e21dbed8c8 [June 25] Updated docs for telemetry and user statistics (#1346) 2025-06-23 22:25:49 +00:00
starsandskies 160d6a6552 Docs: Add telemetry to the list of configuration options (#1348) 2025-06-23 22:18:07 +00:00
Jerop Kipruto b443b5e800 Ensure telemetry events are flushed immediately (#1344)
The previous implementation used `flushIfNeeded` to batch most telemetry events, but it was not reliably sending them, leading to data loss. Notably, the `startSession` event, which already used `flushToClearcut`, was working correctly, indicating an issue with the batching logic itself.

This change replaces all calls to `flushIfNeeded` with `flushToClearcut` to align all event logging with the working `startSession` implementation and ensure that events are sent immediately. This prioritizes the reliability of data collection over network efficiency.

This is a temporary solution to prevent further data loss. The underlying issue with the batching mechanism in `flushIfNeeded` should be investigated and fixed in the future, at which point this change can be reverted.
2025-06-23 22:05:02 +00:00
Jerop Kipruto 58572a6eaa Use concurrently to run start script with GCP telemetry (#1329)
## TLDR

Introduces the `concurrently` package to simplify the dev startup process with GCP telemetry enabled.

## Dive Deeper

Previously, developers had to run the telemetry script and the main application start script in separate terminals. This change updates the `start:gcp` script to use `concurrently`, allowing both processes to be launched and managed with a single command. This improves the developer experience and reduces the chance of forgetting to start one of the required processes. 

## Reviewer Test Plan
Set the required environment variable:

```shell
export OTLP_GOOGLE_CLOUD_PROJECT=<your-project-id>
```

Run the following command:

```shell
npm run start:gcp
```

#750 

cc @teeler
2025-06-23 22:01:22 +00:00
Bryan Morgan e423d20a8d Updated docs and /stats command to support lack of token caching support for OAuth users (b/426943001) (#1307) 2025-06-23 21:55:24 +00:00
Sandy Tao fcb8be2fb9 Refine refresh static logic (#1349) 2025-06-23 21:45:15 +00:00
Jacob Richman 1faf53a3af Remove fallback to render normall rather than using custom MaxSizedBox layout logic (#1340) 2025-06-23 21:41:45 +00:00
N. Taylor Mullen fd58d3267e feat: Open MCP docs if no MCPs are configured (#1325) 2025-06-23 21:35:23 +00:00
Abhi dc76bcc433 Add error messaging for 429 errors (#1316) 2025-06-23 21:30:13 +00:00
Jerop Kipruto 21e6a36cf1 docs(telemetry): relocate telemetry documentation (#1327)
Moves the telemetry.md file from docs/core to the top-level docs/ directory to make it more discoverable.

Updates the link in the main index.md and removes the old reference from the CLI configuration page.
2025-06-23 21:24:48 +00:00
Jerop Kipruto 98f3a7066e refactor: rename disableDataCollection to dataCollectionEnabled (#1319)
Renames the `disableDataCollection` flag to the more intuitive and positive `dataCollectionEnabled`.

This change improves code clarity by avoiding double negatives and making the purpose of the flag more direct. The logic has been inverted wherever the flag is used to accommodate the new naming convention.

Using a suffix like `"Enabled"` follows a common convention that improves readability. 
- A condition like `if (dataCollectionEnabled)` reads like a natural language sentence ("if data collection is enabled"), which reduces cognitive load.
- Distinguishes the boolean flag (representing a state) from potential functions that would perform an action (e.g., `enableDataCollection()` or `disableDataCollection()`), avoiding ambiguity between checking a value and calling a function.

#750
2025-06-23 21:19:40 +00:00
Jerop Kipruto 4d88054d35 Fix batch flush to Clearcut (#1337)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-23 21:12:58 +00:00
starsandskies d2ae7af487 Edit pass of docs/core/index.md (#1338)
Make a pass through the docs/core/index.md file to hopefully improve readability and consistency.

Of particular note, I've cut out a big chunk that felt mostly like implementation details that aren't particularly relevant for public consumption, and I cut out a discussion of cli/core interconnection that is covered better higher up in the docs hierarchy
2025-06-23 21:07:03 +00:00
cperry-goog 139668c1d1 Docs/authentication doc (#1341) 2025-06-23 13:02:52 -07:00
cperry-goog 1825105d8f feat(docs): add /chat and /restore commands (#1336) 2025-06-23 12:10:23 -07:00
Jacob Richman 3e25c350f2 A couple of these log messages were now showing up every time on app startup (#1335) 2025-06-23 11:31:13 -07:00
N. Taylor Mullen 4b7307accb Remove .gitignore logging from startup. (#1323) 2025-06-23 11:12:42 -07:00
owenofbrien 631591ce79 Enable clearcut logging by default (#1309)
Clearcut logging can now be disabled via disableDataCollection in user settings
2025-06-23 10:18:58 -07:00
Tommaso Sciortino 07880d43d2 Sanitize MCP FunctionDeclarations to workaround Vertex bug (#1330) 2025-06-23 09:13:53 -07:00
Mark McDonald 7b39dd8b28 Added some use cases to the README (#1257) 2025-06-23 07:07:18 +00:00
matt korwel d0800ab917 Adding .gitattributes (#1303) 2025-06-23 06:58:41 +00:00
Scott Densmore 99d521569d Scotdensmore/first run auth fix (#1322) 2025-06-22 22:52:25 -07:00
Jacob Richman 156feff5b1 Fix so that pressing ctrl-s a second time toggles off constrain height mode (#1306) 2025-06-23 05:42:20 +00:00
Mark McDonald 523aeec544 Use shorter URL for docs link (#1324) 2025-06-23 05:37:41 +00:00
Jerop Kipruto 64e1c7df75 docs: update telemetry documentation and scripts (#1318) 2025-06-23 06:10:26 +01:00
matt korwel da128e725d {bug} Vertex Auth Support (#1302)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
2025-06-23 00:30:58 +00:00
Abhi d8ecbde9bd add bash block to doc for easy copypasta (#1317) 2025-06-22 20:19:13 -04:00
Billy Biggs c9bea8e646 Plumb extension context filenames through for /memory refresh (#1312) 2025-06-22 16:17:05 -07:00
cperry-goog b05b8673cd update tips (#1315) 2025-06-22 16:02:48 -07:00
Jacob Richman b831ffc1b3 Jacob314/auto exit unconstrained height mode (#1293)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
2025-06-22 13:43:36 -07:00
N. Taylor Mullen 6a1c62731b Fix seatbelt sandboxing when GEMINI_SANDBOX="" and starting with -s (#1298) 2025-06-22 18:33:29 +00:00
N. Taylor Mullen 3c656cfbc6 feat: Only show ctrl-s when idle (#1299) 2025-06-22 15:57:53 +00:00
N. Taylor Mullen cb76b08e31 feat: Add /docs command and update UI (#1297) 2025-06-22 15:54:10 +00:00
owenofbrien 4cfab0a893 Clearcut logging - initial implementation (#1274)
Flag-guarded initial implementation of a clearcut logger to collect telemetry data and send it to Concord for dashboards, etc.
2025-06-22 14:26:48 +00:00
Abhi c9950b3cb2 feat: Add client-initiated tool call handling (#1292) 2025-06-22 01:35:36 -04:00
cperry-goog 5cf8dc4f07 Docs update (#1295) 2025-06-22 05:06:58 +00:00
Louis Jimenez 383212034c Provide a .gitconfig for shadow repos (#1294) 2025-06-22 00:13:03 -04:00
Billy Biggs 0779697da6 Add setting enableRecursiveFileSearch to control @-file completion (#1290) 2025-06-22 01:23:35 +00:00
Jacob Richman 63f6a497cb Jacob314/overflow notification and one MaxSizedBox bug fix (#1288) 2025-06-22 00:54:10 +00:00
cperry-goog e20171e7dd Updating missing commands (#1289) 2025-06-21 17:41:03 -07:00
cperry-goog 47780e984c docs: update README (#1287) 2025-06-21 16:18:23 -07:00
Marlon Gamez 076f81f130 point Code Assist client to prod server (#1201) 2025-06-21 22:25:18 +00:00
cperry-goog e255eb6124 feat(cli): update Tips.tsx component (#1284) 2025-06-21 12:58:00 -07:00
Billy Biggs 99a6dc0267 Update memory and context summary UI for multiple context filenames (#1282) 2025-06-21 19:15:43 +00:00
Sandy Tao 03af6235a9 Fix Static duplication and input prompt tearing (#1279) 2025-06-21 11:11:42 -07:00
Tommaso Sciortino f9b2a33732 Remove packages/cli/README.md (#1278) 2025-06-21 16:43:01 +01:00
1856 changed files with 418663 additions and 40079 deletions
+1
View File
@@ -0,0 +1 @@
action: 'log'
+13
View File
@@ -0,0 +1,13 @@
root = true
[*]
charset = utf-8
insert_final_newline = true
end_of_line = lf
indent_style = space
indent_size = 2
max_line_length = 80
[Makefile]
indent_style = tab
indent_size = 8
-47
View File
@@ -1,47 +0,0 @@
steps:
# Step 1: Install root dependencies (includes workspaces)
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['install']
# Step 2: Update version in root package.json
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'bash'
args:
- -c # Use bash -c to allow for command substitution and string manipulation
- |
current_version=$(npm pkg get version | sed 's/"//g')
new_version="$${current_version}-$SHORT_SHA.$_REVISION"
npm pkg set "version=$${new_version}"
echo "Set root package.json version to: $${new_version}"
# Step 3: Run prerelease:dev to update workspace versions and dependencies
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['run', 'prerelease:dev'] # This will run prerelease:version and prerelease:deps
# Step 4: Authenticate for Docker and NPM
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['run', 'auth']
# Step 5: Run the master release script
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['run', 'publish:release']
env:
- 'GEMINI_SANDBOX=$_CONTAINER_TOOL'
- 'SANDBOX_IMAGE_REGISTRY=$_SANDBOX_IMAGE_REGISTRY'
- 'SANDBOX_IMAGE_NAME=$_SANDBOX_IMAGE_NAME'
- 'NPM_PUBLISH_TAG=$_NPM_PUBLISH_TAG'
options:
defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET
dynamicSubstitutions: true
substitutions:
_REVISION: '0'
_SANDBOX_IMAGE_REGISTRY: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers'
_SANDBOX_IMAGE_NAME: 'gemini-cli-sandbox'
_NPM_PUBLISH_TAG: 'head'
_CONTAINER_TOOL: 'docker'
-30
View File
@@ -1,30 +0,0 @@
steps:
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['install']
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['run', 'auth']
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args:
[
'run',
'prerelease:version',
'--workspaces',
'--',
'--suffix="$SHORT_SHA.$_REVISION"',
]
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['run', 'prerelease:deps', '--workspaces']
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
entrypoint: 'npm'
args: ['publish', '--tag=head', '--dry-run', '--workspace=@gemini-cli/cli']
options:
defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET
+71
View File
@@ -0,0 +1,71 @@
steps:
# Step 1: Install root dependencies (includes workspaces)
- 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 (so we can push images to the artifact registry)
- 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: Determine Docker Image Tag
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
id: 'Determine Docker Image Tag'
entrypoint: 'bash'
args:
- '-c'
- |-
SHELL_TAG_NAME="$TAG_NAME"
FINAL_TAG="$SHORT_SHA" # Default to 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" > /workspace/image_tag.txt
# Step 5: Build sandbox container image
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
id: 'Build sandbox Docker image'
entrypoint: 'bash'
args:
- '-c'
- |-
export GEMINI_SANDBOX_IMAGE_TAG=$$(cat /workspace/image_tag.txt)
echo "Using Docker image tag for build: $$GEMINI_SANDBOX_IMAGE_TAG"
npm run build:sandbox -- --output-file /workspace/final_image_uri.txt
env:
- 'GEMINI_SANDBOX=$_CONTAINER_TOOL'
# Step 8: Publish sandbox container image
- name: 'us-west1-docker.pkg.dev/gemini-code-dev/gemini-code-containers/gemini-code-builder'
id: 'Publish sandbox Docker image'
entrypoint: 'bash'
args:
- '-c'
- |-
set -e
FINAL_IMAGE_URI=$$(cat /workspace/final_image_uri.txt)
echo "Pushing sandbox image: $${FINAL_IMAGE_URI}"
$_CONTAINER_TOOL push "$${FINAL_IMAGE_URI}"
env:
- 'GEMINI_SANDBOX=$_CONTAINER_TOOL'
options:
defaultLogsBucketBehavior: 'REGIONAL_USER_OWNED_BUCKET'
dynamicSubstitutions: true
substitutions:
_CONTAINER_TOOL: 'docker'
+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}}.
"""
+30
View File
@@ -0,0 +1,30 @@
description = "Find relevant documentation and output GitHub URLs."
prompt = """
## Mission: Find Relevant Documentation
Your task is to find documentation files relevant to the user's question within the current git repository and provide a list of GitHub URLs to view them.
### Workflow:
1. **Identify Repository Details**:
* You may use shell commands like `git` or `gh` to get the remote URL of the repository.
* From the remote URL, parse and construct the base GitHub URL (e.g., `https://github.com/user/repo`). You must handle both HTTPS (`https://github.com/user/repo.git`) and SSH (`git@github.com:user/repo.git`) formats.
* Determine the default branch name. You can assume `main` for this purpose, as it is the most common.
2. **Search for Documentation**:
* First, perform a targeted search across the repository for documentation files (e.g., `.md`, `.mdx`) that seem directly related to the user's question.
* If this initial search yields no relevant results, and a `docs/` directory exists, read the content of all files within the `docs/` directory to find relevant information.
* If you still can't find a direct match, broaden your search to include related concepts and synonyms of the keywords in the user's question.
* For each file you identify as potentially relevant, read its content to confirm it addresses the user's query.
3. **Construct and Output URLs**:
* For each file you identify as relevant, construct the full GitHub URL by combining the base URL, branch, and file path. **Do not use shell commands for this step.**
* The URL format should be: `{BASE_GITHUB_URL}/blob/{BRANCH_NAME}/{PATH_TO_FILE_FROM_REPO_ROOT}`.
* Present the final list to the user as a markdown list. Each item in the list should be the URL to the document, followed by a short summary of its content.
* If, after all search attempts, you cannot find any relevant documentation, ask the user clarifying questions to better understand their needs. Do not return any URLs in this case.
### QUESTION:
{{args}}
"""
+60
View File
@@ -0,0 +1,60 @@
description = "Check status of nightly evals, fix failures for key models, and re-run."
prompt = """
You are an expert at fixing behavioral evaluations.
1. **Investigate**:
- Use 'gh' cli to fetch the results from the latest run from the main branch: https://github.com/google-gemini/gemini-cli/actions/workflows/evals-nightly.yml.
- DO NOT push any changes or start any runs. The rest of your evaluation will be local.
- Evals are in evals/ directory and are documented by evals/README.md.
- The test case trajectory logs will be logged to evals/logs.
- You should also enable and review the verbose agent logs by setting the GEMINI_DEBUG_LOG_FILE environment variable.
- Identify the relevant test. Confine your investigation and validation to just this test.
- Proactively add logging that will aid in gathering information or validating your hypotheses.
2. **Fix**:
- If a relevant test is failing, locate the test file and the corresponding prompt/code.
- It's often helpful to make an extreme, brute force change to see if you are changing the right place to make an improvement and then scope it back iteratively.
- Your **final** change should be **minimal and targeted**.
- Keep in mind the following:
- The prompt has multiple configurations and pieces. Take care that your changes
end up in the final prompt for the selected model and configuration.
- The prompt chosen for the eval is intentional. It's often vague or indirect
to see how the agent performs with ambiguous instructions. Changing it should
be a last resort.
- When changing the test prompt, carefully consider whether the prompt still tests
the same scenario. We don't want to lose test fidelity by making the prompts too
direct (i.e.: easy).
- Your primary mechanism for improving the agent's behavior is to make changes to
tool instructions, prompt.ts, and/or modules that contribute to the prompt.
- If prompt and description changes are unsuccessful, use logs and debugging to
confirm that everything is working as expected.
- If unable to fix the test, you can make recommendations for architecture changes
that might help stablize the test. Be sure to THINK DEEPLY if offering architecture guidance.
Some facts that might help with this are:
- Agents may be composed of one or more agent loops.
- AgentLoop == 'context + toolset + prompt'. Subagents are one type of agent loop.
- Agent loops perform better when:
- They have direct, unambiguous, and non-contradictory prompts.
- They have fewer irrelevant tools.
- They have fewer goals or steps to perform.
- They have less low value or irrelevant context.
- You may suggest compositions of existing primitives, like subagents, or
propose a new one.
- These recommendations should be high confidence and should be grounded
in observed deficient behaviors rather than just parroting the facts above.
Investigate as needed to ground your recommendations.
3. **Verify**:
- Run just that one test if needed to validate that it is fixed. Be sure to run vitest in non-interactive mode.
- Running the tests can take a long time, so consider whether you can diagnose via other means or log diagnostics before committing the time. You must minimize the number of test runs needed to diagnose the failure.
- After the test completes, check whether it seems to have improved.
- You will need to run the test 3 times for Gemini 3.0, Gemini 3 flash, and Gemini 2.5 pro to ensure that it is truly stable. Run these runs in parallel, using scripts if needed.
- Some flakiness is expected; if it looks like a transient issue or the test is inherently unstable but passes 2/3 times, you might decide it cannot be improved.
4. **Report**:
- Provide a summary of the test success rate for each of the tested models.
- Success rate is calculated based on 3 runs per model (e.g., 3/3 = 100%).
- If you couldn't fix it due to persistent flakiness, explain why.
{{args}}
"""
+54
View File
@@ -0,0 +1,54 @@
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.
## Testing Standards
* **Async Testing**: ALWAYS use `waitFor` from `packages/cli/src/test-utils/async.ts` instead of `vi.waitFor` to prevent flakiness and `act` warnings. NEVER use fixed waits (e.g., `await delay(100)`).
* **State Changes**: Wrap all blocks that change component state in `act`.
* **Snapshots**: Use `toMatchSnapshot` to verify rendering.
* **Rendering**: Use `render` or `renderWithProviders` from `packages/cli/src/test-utils/render.tsx` instead of `ink-testing-library` directly.
* **Mocking**:
* Reuse existing mocks/fakes where possible.
* **Parameterized Tests**: Use parameterized tests with explicit types to reduce duplication and ensure type safety.
* Avoid mocking the file system, os, or child_process if at all possible; if you have to mock the Mock critical dependencies (`fs`, `os`, `child_process`) do so ONLY at the top of the file.
## React & Ink Architecture
* **Keyboard Handling**: You MUST use `useKeyPress.ts` from Gemini CLI for keyboard handling, NOT the standard ink library. This is critical for supporting slow terminals and multiple events per frame.
* Handle multiple events gracefully (often requires a reducer pattern, see `text-buffer.ts`).
* **State Management**:
* NEVER trigger side effects from within the body of a `setState` callback. Use a reducer or `useRef` if necessary.
* Initialize state explicitly (e.g., use `undefined` rather than `true` if unknown).
* **Performance**:
* Avoid synchronous file I/O in components.
* Do not introduce excessive property drilling; leverage or extend existing providers.
## 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.
## Keyboard Shortcuts
* **Registration**: Define new shortcuts in `packages/cli/src/config/keyBindings.ts`.
* **Documentation**: Document all new shortcuts in `docs/cli/keyboard-shortcuts.md`.
* **Compatibility**: Avoid function keys and common VSCode shortcuts. Be cautious with `Meta` key (Mac-limited support).
## General
* **Logging**: Use `debugLogger` for errors. NEVER leave `console.log/warn/error` in the code.
* **TypeScript**: Avoid the non-null assertion operator (`!`).
{{args}}.
"""
+57
View File
@@ -0,0 +1,57 @@
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.
## Testing Standards
* **Async Testing**: ALWAYS use `waitFor` from `packages/cli/src/test-utils/async.ts` instead of `vi.waitFor` to prevent flakiness and `act` warnings. NEVER use fixed waits (e.g., `await delay(100)`).
* **State Changes**: Wrap all blocks that change component state in `act`.
* **Snapshots**: Use `toMatchSnapshot` to verify rendering.
* **Rendering**: Use `render` or `renderWithProviders` from `packages/cli/src/test-utils/render.tsx` instead of `ink-testing-library` directly.
* **Mocking**:
* Reuse existing mocks/fakes where possible.
* **Parameterized Tests**: Use parameterized tests with explicit types to reduce duplication and ensure type safety.
* Avoid mocking the file system, os, or child_process if at all possible; if you have to mock the Mock critical dependencies (`fs`, `os`, `child_process`) do so ONLY at the top of the file.
## React & Ink Architecture
* **Keyboard Handling**: You MUST use `useKeyPress.ts` from Gemini CLI for keyboard handling, NOT the standard ink library. This is critical for supporting slow terminals and multiple events per frame.
* Handle multiple events gracefully (often requires a reducer pattern, see `text-buffer.ts`).
* **State Management**:
* NEVER trigger side effects from within the body of a `setState` callback. Use a reducer or `useRef` if necessary.
* Initialize state explicitly (e.g., use `undefined` rather than `true` if unknown).
* **Performance**:
* Avoid synchronous file I/O in components.
* Do not introduce excessive property drilling; leverage or extend existing providers.
## 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.
## Keyboard Shortcuts
* **Registration**: Define new shortcuts in `packages/cli/src/config/keyBindings.ts`.
* **Documentation**: Document all new shortcuts in `docs/cli/keyboard-shortcuts.md`.
* **Compatibility**: Avoid function keys and common VSCode shortcuts. Be cautious with `Meta` key (Mac-limited support).
## General
* **Logging**: Use `debugLogger` for errors. NEVER leave `console.log/warn/error` in the code.
* **TypeScript**: Avoid the non-null assertion operator (`!`).
{{args}}.
"""
@@ -0,0 +1,13 @@
description = "Go back to main and clean up the branch."
prompt = """
I'm done with the work on this branch, and I'm ready to go back to main and clean up.
Here is the workflow I'd like you to follow:
1. **Get Current Branch:** First, I need you to get the name of the current branch and save it.
2. **Branch Check:** Check if the current branch is `main`. If it is, I need you to stop and let me know.
3. **Go to Main:** Next, I need you to checkout the main branch.
4. **Pull Latest:** Once you are on the main branch, I need you to pull down the latest changes to make sure I'm up to date.
5. **Branch Cleanup:** Finally, I need you to delete the branch that you noted in the first step.
"""
+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.
"""
+47
View File
@@ -0,0 +1,47 @@
description = "Review a specific pull request"
prompt = """
## Mission: Comprehensive Pull Request Review
Today, our mission is to meticulously review community pull requests (PRs) for this project. We will proceed systematically, evaluating each candidate PR for its quality, adherence to standards, and readiness for merging.
### Workflow:
1. **PR Preparation & Initial Assessment**:
* **You will check out the designated PR {{args}}** into a temporary branch.
* **Execute the preflight checks (`npm run preflight`)**. This includes building, linting, and running all unit tests.
* Analyze the output of these preflight checks, noting any failures, warnings, or linting issues.
2. **In-Depth Code Review**:
* **Your primary role is to conduct a thorough and in-depth code review** of the changes introduced in the PR. Focus your analysis on the following criteria:
* **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.
* Based on your analysis, you will determine if the PR is **safe to merge**.
3. **Reviewing Previous Feedback**:
* **Access and examine the PR's history** to identify any **outstanding requests or unresolved comments from previous reviews**. Incorporate these into your current review and explicitly highlight if they have been adequately addressed in the current state of the PR.
4. **Decision and Output Generation**:
* **If the PR is deemed safe to merge** (after your comprehensive review and considering previous feedback):
* Draft a **friendly, concise, and professional approval message**.
* **The approval message should:**
* Clearly state that the PR is approved.
* Briefly acknowledge the quality or value of the contribution (e.g., "Great work on X feature!" or "Appreciate the fix for Y issue!").
* **Do NOT mention the preflight checks or unit testing**, as these are internal processes.
* Be suitable for public display on GitHub.
* **If the PR is NOT safe to merge**:
* Provide a **clear, constructive, and detailed summary of the issues found**.
* Suggest **specific actionable changes** required for the PR to become merge-ready.
* Ensure the feedback is professional and encourages the contributor.
### Post-PR Action:
* After providing your review and decision for the current PR, I will wait for you to perform any manual testing you wish to do. Please let me know when you are finished.
* Once you have confirmed that you are done, I will switch to the `main` branch, clean up the local branch, and perform a pull to ensure we are synchronized with the latest upstream changes for the next review.
"""
+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.
"""
@@ -0,0 +1,202 @@
description = "Reviews a frontend PR or staged changes and automatically initiates a Pickle Fix loop for findings."
prompt = """
You are an expert Frontend 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. Evaluate all tests on the changes and make sure that they are doing the following:
* Using `waitFor` from @{packages/cli/src/test-utils/async.ts} rather than
using `vi.waitFor` for all `waitFor` calls within `packages/cli`. Even if
tests pass, using the wrong `waitFor` could result in flaky tests as `act`
warnings could show up if timing is slightly different.
* Using `act` to wrap all blocks in tests that change component state.
* Using `toMatchSnapshot` to verify that rendering works as expected rather
than matching against the raw content of the output.
* If snapshots were changed as part of the changes, review the snapshots
changes to ensure they are intentional and comment if any look at all
suspicious. Too many snapshot changes that indicate bugs have been approved
in the past.
* Use `render` or `renderWithProviders` from
@{packages/cli/src/test-utils/render.tsx} rather than using `render` from
`ink-testing-library` directly. This is needed to ensure that we do not get
warnings about spurious `act` calls. If test cases specify providers
directly, consider whether the existing `renderWithProviders` should be
modified to support that use case.
* Ensure the test cases are using parameterized tests where that might reduce
the number of duplicated lines significantly.
* NEVER use fixed waits (e.g. 'await delay(100)'). Always use 'waitFor' with
a predicate to ensure tests are stable and fast.
* Ensure mocks are properly managed:
* Critical dependencies (fs, os, child_process) should only be mocked at
the top of the file. Ideally avoid mocking these dependencies altogether.
* Check to see if there are existing mocks or fakes that can be used rather
than creating new ones for the new tests added.
* Try to avoid mocking the file system whenever possible. If using the real
file system is difficult consider whether the test should be an
integration test rather than a unit test.
* `vi.restoreAllMocks()` should be called in `afterEach` to prevent test
pollution.
* Use `vi.useFakeTimers()` for tests involving time-based logic to avoid
flakiness.
* Avoid using `any` in tests; prefer proper types or `unknown` with
narrowing.
* When creating parameterized tests, give the parameters types to ensure
that the tests are type-safe.
8. Evaluate all react logic carefully keeping in mind that the author of the
changes is not likely an expert on React. Key areas to audit carefully are:
* Whether `setState` calls trigger side effects from within the body of the
`setState` callback. If so, you *must* propose an alternate design using
reducers or other ways the code might be modified to not have to modify
state from within a `setState`. Make sure to comment about absolutely
every case like this as these cases have introduced multiple bugs in the
past. Typically these cases should be resolved using a reducer although
occassionally other techniques such as useRef are appropriate. Consider
suggesting that jacob314@ be tagged on the code review if the solution is
not 100% obvious.
* Whether code might introduce an infinite rendering loop in React.
* Whether keyboard handling is robust. Keyboard handling must go through
`useKeyPress.ts` from the Gemini CLI package rather than using the
standard ink library used by most keyboard handling. Unlike the standard
ink library, the keyboard handling library in Gemini CLI may report
multiple keyboard events one after another in the same React frame. This
is needed to support slow terminals but introduces complexity in all our
code that handles keyboard events. Handling this correctly often means
that reducers must be used or other mechanisms to ensure that multiple
state updates one after another are handled gracefully rather than
overriding values from the first update with the second update. Refer to
text-buffer.ts as a canonical example of using a reducer for this sort of
case.
* Ensure code does not use `console.log`, `console.warn`, or `console.error`
as these indicate debug logging that was accidentally left in the code.
* Avoid synchronous file I/O in React components as it will hang the UI.
* Ensure state initialization is explicit (e.g., use 'undefined' rather than
'true' as a default if the state is truly unknown initially).
* Carefully manage 'useEffect' dependencies. Prefer to use a reducer
whenever practical to resolve the issues. If that is not practical it is
ok to use 'useRef' to access the latest value of a prop or state inside an
effect without adding it to the dependency array if re-running the effect
is undesirable (common in event listeners).
* NEVER disable 'react-hooks/exhaustive-deps'. Fix the code to correctly
declare dependencies. Disabling this lint rule will almost always lead to
hard to detect bugs.
* Avoid making types nullable unless strictly necessary, as it hurts
readability.
* Do not introduce excessive property drilling. There are multiple providers
that can be leveraged to avoid property drilling. Make sure one of them
cannot be used. Do suggest a provider that might make sense to be extended
to include the new property or propose a new provider to add if the
property drilling is excessive. Only use providers for properties that are
consistent for the entire application.
9. General Gemini CLI design principles:
* Make sure that settings are only used for options that a user might
consider changing.
* Do not add new command line arguments and suggest settings instead.
* New settings must be added 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 for new settings.
* Use 'debugLogger' for rethrown errors to avoid duplicate logging.
* All new keyboard shortcuts MUST be documented in
docs/cli/keyboard-shortcuts.md.
* Ensure new keyboard shortcuts are defined in
packages/cli/src/config/keyBindings.ts.
* If new keyboard shortcuts are added, remind the user to test them in
VSCode, iTerm2, Ghostty, and Windows to ensure they work for all
users.
* Be careful of keybindings that require the meta key as only certain
meta key shortcuts are supported on Mac.
* Be skeptical of function keys and keyboard shortcuts that are commonly
bound in VSCode as they may conflict.
10. 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 and you are confident the value is not null.
11. Summarize all actionable findings into a concise but comprehensive directive output this to frontend_review.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 coding 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 frontend_review.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. Run tests/build (Check functionality)
* **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 `frontend_review.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.
"""
+140
View File
@@ -0,0 +1,140 @@
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. Evaluate all tests on the PR and make sure that they are doing the following:
* Using `waitFor` from @{packages/cli/src/test-utils/async.ts} rather than
using `vi.waitFor` for all `waitFor` calls within `packages/cli`. Even if
tests pass, using the wrong `waitFor` could result in flaky tests as `act`
warnings could show up if timing is slightly different.
* Using `act` to wrap all blocks in tests that change component state.
* Using `toMatchSnapshot` to verify that rendering works as expected rather
than matching against the raw content of the output.
* If snapshots were changed as part of the pull request, review the snapshots
changes to ensure they are intentional and comment if any look at all
suspicious. Too many snapshot changes that indicate bugs have been approved
in the past.
* Use `render` or `renderWithProviders` from
@{packages/cli/src/test-utils/render.tsx} rather than using `render` from
`ink-testing-library` directly. This is needed to ensure that we do not get
warnings about spurious `act` calls. If test cases specify providers
directly, consider whether the existing `renderWithProviders` should be
modified to support that use case.
* Ensure the test cases are using parameterized tests where that might reduce
the number of duplicated lines significantly.
* NEVER use fixed waits (e.g. 'await delay(100)'). Always use 'waitFor' with
a predicate to ensure tests are stable and fast.
* Ensure mocks are properly managed:
* Critical dependencies (fs, os, child_process) should only be mocked at
the top of the file. Ideally avoid mocking these dependencies altogether.
* Check to see if there are existing mocks or fakes that can be used rather
than creating new ones for the new tests added.
* Try to avoid mocking the file system whenever possible. If using the real
file system is difficult consider whether the test should be an
integration test rather than a unit test.
* `vi.restoreAllMocks()` should be called in `afterEach` to prevent test
pollution.
* Use `vi.useFakeTimers()` for tests involving time-based logic to avoid
flakiness.
* Avoid using `any` in tests; prefer proper types or `unknown` with
narrowing.
* When creating parameterized tests, give the parameters types to ensure
that the tests are type-safe.
10. Evaluate all react logic carefully keeping in mind that the author of the PR
is not likely an expert on React. Key areas to audit carefully are:
* Whether `setState` calls trigger side effects from within the body of the
`setState` callback. If so, you *must* propose an alternate design using
reducers or other ways the code might be modified to not have to modify
state from within a `setState`. Make sure to comment about absolutely
every case like this as these cases have introduced multiple bugs in the
past. Typically these cases should be resolved using a reducer although
occassionally other techniques such as useRef are appropriate. Consider
suggesting that jacob314@ be tagged on the code review if the solution is
not 100% obvious.
* Whether code might introduce an infinite rendering loop in React.
* Whether keyboard handling is robust. Keyboard handling must go through
`useKeyPress.ts` from the Gemini CLI package rather than using the
standard ink library used by most keyboard handling. Unlike the standard
ink library, the keyboard handling library in Gemini CLI may report
multiple keyboard events one after another in the same React frame. This
is needed to support slow terminals but introduces complexity in all our
code that handles keyboard events. Handling this correctly often means
that reducers must be used or other mechanisms to ensure that multiple
state updates one after another are handled gracefully rather than
overriding values from the first update with the second update. Refer to
text-buffer.ts as a canonical example of using a reducer for this sort of
case.
* Ensure code does not use `console.log`, `console.warn`, or `console.error`
as these indicate debug logging that was accidentally left in the code.
* Avoid synchronous file I/O in React components as it will hang the UI.
* Ensure state initialization is explicit (e.g., use 'undefined' rather than
'true' as a default if the state is truly unknown initially).
* Carefully manage 'useEffect' dependencies. Prefer to use a reducer
whenever practical to resolve the issues. If that is not practical it is
ok to use 'useRef' to access the latest value of a prop or state inside an
effect without adding it to the dependency array if re-running the effect
is undesirable (common in event listeners).
* NEVER disable 'react-hooks/exhaustive-deps'. Fix the code to correctly
declare dependencies. Disabling this lint rule will almost always lead to
hard to detect bugs.
* Avoid making types nullable unless strictly necessary, as it hurts
readability.
* Do not introduce excessive property drilling. There are multiple providers
that can be leveraged to avoid property drilling. Make sure one of them
cannot be used. Do suggest a provider that might make sense to be extended
to include the new property or propose a new provider to add if the
property drilling is excessive. Only use providers for properties that are
consistent for the entire application.
11. General Gemini CLI design principles:
* Make sure that settings are only used for options that a user might
consider changing.
* Do not add new command line arguments and suggest settings instead.
* New settings must be added 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 for new settings.
* Use 'debugLogger' for rethrown errors to avoid duplicate logging.
* All new keyboard shortcuts MUST be documented in
docs/cli/keyboard-shortcuts.md.
* Ensure new keyboard shortcuts are defined in
packages/cli/src/config/keyBindings.ts.
* If new keyboard shortcuts are added, remind the user to test them in
VSCode, iTerm2, Ghostty, and Windows to ensure they work for all
users.
* Be careful of keybindings that require the meta key as only certain
meta key shortcuts are supported on Mac.
* Be skeptical of function keys and keyboard shortcuts that are commonly
bound in VSCode as they may conflict.
12. 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 and you are confident the value is not null.
13. If the change might at all impact the prompts sent to Gemini CLI, flagged
that the change could impact Gemini CLI quality and make sure anj-s has been
tagged on the code review.
14. 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.
15. 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.
"""
+6 -4
View File
@@ -1,10 +1,12 @@
# Config for the Gemini Pull Request Review Bot.
# https://github.com/marketplace/gemini-code-assist
have_fun: false
code_review:
disable: true
comment_severity_threshold: HIGH
disable: false
comment_severity_threshold: 'HIGH'
max_review_comments: -1
pull_request_opened:
help: false
summary: false
code_review: false
summary: true
code_review: true
ignore_patterns: []
+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`).
+71
View File
@@ -0,0 +1,71 @@
---
name: docs-writer
description:
Use this skill for writing, reviewing, and editing documentation (`/docs`
directory or any .md file) for Gemini CLI.
---
# `docs-writer` skill instructions
As an expert technical writer and editor for the Gemini CLI project, your goal
is to produce and refine documentation that is accurate, clear, consistent, and
easy for users to understand. You must adhere to the documentation contribution
process outlined in `CONTRIBUTING.md`.
## Step 1: Understand the goal and create a plan
1. **Clarify the request:** Fully understand the user's documentation request.
Identify the core feature, command, or concept that needs work.
2. **Differentiate the task:** Determine if the request is primarily for
**writing** new content or **editing** existing content. If the request is
ambiguous (e.g., "fix the docs"), ask the user for clarification.
3. **Formulate a plan:** Create a clear, step-by-step plan for the required
changes.
## Step 2: Investigate and gather information
1. **Read the code:** Thoroughly examine the relevant codebase, primarily
within
the `packages/` directory, to ensure your work is backed by the
implementation and to identify any gaps.
2. **Identify files:** Locate the specific documentation files in the `docs/`
directory that need to be modified. Always read the latest version of a file
before you begin work.
3. **Check for connections:** Consider related documentation. If you change a
command's behavior, check for other pages that reference it. If you add a new
page, check if `docs/sidebar.json` needs to be updated. Make sure all
links are up to date.
## Step 3: Write or edit the documentation
1. **Follow the style guide:** Adhere to the rules in
`references/style-guide.md`. Read this file to understand the project's
documentation standards.
2. Ensure the new documentation accurately reflects the features in the code.
3. **Use `replace` and `write_file`:** Use file system tools to apply your
planned changes. For small edits, `replace` is preferred. For new files or
large rewrites, `write_file` is more appropriate.
### Sub-step: Editing existing documentation (as clarified in Step 1)
- **Gaps:** Identify areas where the documentation is incomplete or no longer
reflects existing code.
- **Tone:** Ensure the tone is active and engaging, not passive.
- **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.
## Step 4: Verify and finalize
1. **Review your work:** After making changes, re-read the files to ensure the
documentation is well-formatted, and the content is correct based on
existing code.
2. **Link verification:** Verify the validity of all links in the new content.
Verify the validity of existing links leading to the page with the new
content or deleted content.
2. **Offer to run npm format:** Once all changes are complete, offer to run the
project's formatting script to ensure consistency by proposing the command:
`npm run format`
@@ -0,0 +1,96 @@
# Documentation style guide
## I. Core principles
1. **Clarity:** Write for easy understanding. Prioritize clear, direct, and
simple language.
2. **Consistency:** Use consistent terminology, formatting, and style
throughout the documentation.
3. **Accuracy:** Ensure all information is technically correct and up-to-date.
4. **Accessibility:** Design documentation to be usable by everyone. Focus on
semantic structure, clear link text, and image alternatives.
5. **Global audience:** Write in standard US English. Avoid slang, idioms, and
cultural references.
6. **Prescriptive:** Guide the reader by recommending specific actions and
paths, especially for complex tasks.
## II. Voice and tone
- **Professional yet friendly:** Maintain a helpful, knowledgeable, and
conversational tone without being frivolous.
- **Direct:** Get straight to the point. Keep paragraphs short and focused.
- **Second person:** Address the reader as "you."
- **Present tense:** Use the present tense to describe functionality (e.g., "The
API returns a JSON object.").
- **Avoid:** Jargon, slang, marketing hype, and overly casual language.
## III. Language and grammar
- **Active voice:** Prefer active voice over passive voice.
- _Example:_ "The system sends a notification." (Not: "A notification is sent
by the system.")
- **Contractions:** Use common contractions (e.g., "don't," "it's") to maintain
a natural tone.
- **Simple vocabulary:** Use common words. Define technical terms when
necessary.
- **Conciseness:** Keep sentences short and focused, but don't omit helpful
information.
- **"Please":** Avoid using the word "please."
## IV. Procedures and steps
- Start each step with an imperative verb (e.g., "Connect to the database").
- Number steps sequentially.
- Introduce lists of steps with a complete sentence.
- Put conditions before instructions, not after.
- Provide clear context for where the action takes place (e.g., "In the
administration console...").
- Indicate optional steps clearly (e.g., "Optional: ...").
## V. Formatting and punctuation
- **Text wrap:** Wrap all text at 80 characters, with exceptions for long links
or tables.
- **Headings, titles, and bold text:** Use sentence case. Structure headings
hierarchically.
- **Lists:** Use numbered lists for sequential steps and bulleted lists for all
other lists. Keep list items parallel in structure.
- **Serial comma:** Use the serial comma (e.g., "one, two, and three").
- **Punctuation:** Use standard American punctuation. Place periods inside
quotation marks.
- **Dates:** Use unambiguous date formatting (e.g., "January 22, 2026").
## VI. UI, code, and links
- **UI elements:** Put UI elements in **bold**. Focus on the task when
discussing interaction.
- **Code:** Use `code font` for filenames, code snippets, commands, and API
elements. Use code blocks for multi-line samples.
- **Links:** Use descriptive link text that indicates what the link leads to.
Avoid "click here."
## VII. Word choice and terminology
- **Consistent naming:** Use product and feature names consistently. Always
refer to Gemini CLI as `Gemini CLI`, never `the Gemini CLI`.
- **Specific verbs:** Use precise verbs.
- **Avoid:**
- Latin abbreviations (e.g., use "for example" instead of "e.g.").
- Placeholder names like "foo" and "bar" in examples; use meaningful names
instead.
- Anthropomorphism (e.g., "The server thinks...").
- "Should": Be clear about requirements ("must") vs. recommendations ("we
recommend").
## VIII. Files and media
- **Filenames:** Use lowercase letters, separate words with hyphens (-), and use
standard ASCII characters.
- **Images:** Provide descriptive alt text for all images. Provide
high-resolution or vector images when practical.
## IX. Accessibility quick check
- Provide descriptive alt text for images.
- Ensure link text makes sense out of context.
- Use semantic HTML elements correctly (headings, lists, tables).
+73
View File
@@ -0,0 +1,73 @@
---
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**: Check the current branch to avoid working directly
on `main`.
- Run `git branch --show-current`.
- If the current branch is `main`, create and switch to a new descriptive
branch:
```bash
git checkout -b <new-branch-name>
```
2. **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`).
3. **Read Template**: Read the content of the identified template file.
4. **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").
5. **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.
6. **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
- **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.
+24
View File
@@ -0,0 +1,24 @@
# Set the default behavior for all files to automatically handle line endings.
# This will ensure that all text files are normalized to use LF (line feed)
# line endings in the repository, which helps prevent cross-platform issues.
* text=auto eol=lf
# Explicitly declare files that must have LF line endings for proper execution
# on Unix-like systems.
*.sh eol=lf
*.bash eol=lf
Makefile eol=lf
# Explicitly declare binary file types to prevent Git from attempting to
# normalize their line endings.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.pdf binary
*.woff binary
*.woff2 binary
*.eot binary
*.ttf binary
*.otf binary
+14 -5
View File
@@ -1,7 +1,16 @@
# 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
-13
View File
@@ -1,13 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**Additional context**
Add any other context about the problem here.
+57
View File
@@ -0,0 +1,57 @@
name: 'Bug Report'
description: 'Report a bug to help us improve Gemini CLI'
body:
- type: 'markdown'
attributes:
value: |-
> [!IMPORTANT]
> Thanks for taking the time to fill out this bug report!
>
> Please search **[existing issues](https://github.com/google-gemini/gemini-cli/issues)** to see if an issue already exists for the bug you encountered.
- type: 'textarea'
id: 'problem'
attributes:
label: 'What happened?'
description: 'A clear and concise description of what the bug is.'
validations:
required: true
- type: 'textarea'
id: 'expected'
attributes:
label: 'What did you expect to happen?'
validations:
required: true
- type: 'textarea'
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). Note that this output contains your email address. Consider removing it before submitting.'
value: |-
<details>
<summary>Client Information</summary>
Run `gemini` to enter the interactive CLI, then run the `/about` command.
```console
> /about
# paste output here
```
</details>
validations:
required: true
- type: 'textarea'
id: 'login-info'
attributes:
label: 'Login information'
description: 'Describe how you are logging in (e.g., Google Account, API key).'
- type: 'textarea'
id: 'additional-context'
attributes:
label: 'Anything else we need to know?'
description: 'Add any other context about the problem here.'
@@ -0,0 +1,35 @@
name: 'Feature Request'
description: 'Suggest an idea for this project'
labels:
- 'status/need-triage'
type: 'Feature'
body:
- type: 'markdown'
attributes:
value: |-
> [!IMPORTANT]
> Thanks for taking the time to suggest an enhancement!
>
> Please search **[existing issues](https://github.com/google-gemini/gemini-cli/issues)** to see if a similar feature has already been requested.
- type: 'textarea'
id: 'feature'
attributes:
label: 'What would you like to be added?'
description: 'A clear and concise description of the enhancement.'
validations:
required: true
- type: 'textarea'
id: 'rationale'
attributes:
label: 'Why is this needed?'
description: 'A clear and concise description of why this enhancement is needed.'
validations:
required: true
- type: 'textarea'
id: 'additional-context'
attributes:
label: 'Additional context'
description: 'Add any other context or screenshots about the feature request here.'
+40
View File
@@ -0,0 +1,40 @@
name: 'Website issue'
description: 'Report an issue with the Gemini CLI Website and Gemini CLI Extensions Gallery'
labels:
- 'area/extensions'
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,56 @@
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 }}'
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
+45
View File
@@ -0,0 +1,45 @@
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
@@ -17,6 +17,9 @@ inputs:
node_version:
description: 'Node.js version for context in messages'
required: true
os:
description: 'The os for context in messages'
required: true
github_token:
description: 'GitHub token for posting comments'
required: true
@@ -24,79 +27,93 @@ inputs:
runs:
using: 'composite'
steps:
- name: Prepare Coverage Comment
id: prep_coverage_comment
shell: bash
run: |
cli_json_file="${{ inputs.cli_json_file }}"
core_json_file="${{ inputs.core_json_file }}"
cli_full_text_summary_file="${{ inputs.cli_full_text_summary_file }}"
core_full_text_summary_file="${{ inputs.core_full_text_summary_file }}"
comment_file="coverage-comment.md"
- name: '📝 Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Prepare Coverage Comment'
id: 'prep_coverage_comment'
shell: 'bash'
env:
CLI_JSON_FILE: '${{ inputs.cli_json_file }}'
CORE_JSON_FILE: '${{ inputs.core_json_file }}'
CLI_FULL_TEXT_SUMMARY_FILE: '${{ inputs.cli_full_text_summary_file }}'
CORE_FULL_TEXT_SUMMARY_FILE: '${{ inputs.core_full_text_summary_file }}'
COMMENT_FILE: 'coverage-comment.md'
NODE_VERSION: '${{ inputs.node_version }}'
OS: '${{ inputs.os }}'
run: |-
# Extract percentages using jq for the main table
if [ -f "$cli_json_file" ]; then
cli_lines_pct=$(jq -r '.total.lines.pct' "$cli_json_file")
cli_statements_pct=$(jq -r '.total.statements.pct' "$cli_json_file")
cli_functions_pct=$(jq -r '.total.functions.pct' "$cli_json_file")
cli_branches_pct=$(jq -r '.total.branches.pct' "$cli_json_file")
if [ -f "${CLI_JSON_FILE}" ]; then
cli_lines_pct="$(jq -r '.total.lines.pct' "${CLI_JSON_FILE}")"
cli_statements_pct="$(jq -r '.total.statements.pct' "${CLI_JSON_FILE}")"
cli_functions_pct="$(jq -r '.total.functions.pct' "${CLI_JSON_FILE}")"
cli_branches_pct="$(jq -r '.total.branches.pct' "${CLI_JSON_FILE}")"
else
cli_lines_pct="N/A"; cli_statements_pct="N/A"; cli_functions_pct="N/A"; cli_branches_pct="N/A"
echo "CLI coverage-summary.json not found at: $cli_json_file" >&2 # Error to stderr
cli_lines_pct="N/A"
cli_statements_pct="N/A"
cli_functions_pct="N/A"
cli_branches_pct="N/A"
echo "CLI coverage-summary.json not found at: ${CLI_JSON_FILE}" >&2 # Error to stderr
fi
if [ -f "$core_json_file" ]; then
core_lines_pct=$(jq -r '.total.lines.pct' "$core_json_file")
core_statements_pct=$(jq -r '.total.statements.pct' "$core_json_file")
core_functions_pct=$(jq -r '.total.functions.pct' "$core_json_file")
core_branches_pct=$(jq -r '.total.branches.pct' "$core_json_file")
if [ -f "${CORE_JSON_FILE}" ]; then
core_lines_pct="$(jq -r '.total.lines.pct' "${CORE_JSON_FILE}")"
core_statements_pct="$(jq -r '.total.statements.pct' "${CORE_JSON_FILE}")"
core_functions_pct="$(jq -r '.total.functions.pct' "${CORE_JSON_FILE}")"
core_branches_pct="$(jq -r '.total.branches.pct' "${CORE_JSON_FILE}")"
else
core_lines_pct="N/A"; core_statements_pct="N/A"; core_functions_pct="N/A"; core_branches_pct="N/A"
echo "Core coverage-summary.json not found at: $core_json_file" >&2 # Error to stderr
core_lines_pct="N/A"
core_statements_pct="N/A"
core_functions_pct="N/A"
core_branches_pct="N/A"
echo "Core coverage-summary.json not found at: ${CORE_JSON_FILE}" >&2 # Error to stderr
fi
echo "## Code Coverage Summary" > "$comment_file"
echo "" >> "$comment_file"
echo "| Package | Lines | Statements | Functions | Branches |" >> "$comment_file"
echo "|---|---|---|---|---|" >> "$comment_file"
echo "| CLI | ${cli_lines_pct}% | ${cli_statements_pct}% | ${cli_functions_pct}% | ${cli_branches_pct}% |" >> "$comment_file"
echo "| Core | ${core_lines_pct}% | ${core_statements_pct}% | ${core_functions_pct}% | ${core_branches_pct}% |" >> "$comment_file"
echo "" >> "$comment_file"
echo "## Code Coverage Summary" > "${COMMENT_FILE}"
echo "" >> "${COMMENT_FILE}"
echo "| Package | Lines | Statements | Functions | Branches |" >> "${COMMENT_FILE}"
echo "|---|---|---|---|---|" >> "${COMMENT_FILE}"
echo "| CLI | ${cli_lines_pct}% | ${cli_statements_pct}% | ${cli_functions_pct}% | ${cli_branches_pct}% |" >> "${COMMENT_FILE}"
echo "| Core | ${core_lines_pct}% | ${core_statements_pct}% | ${core_functions_pct}% | ${core_branches_pct}% |" >> "${COMMENT_FILE}"
echo "" >> "${COMMENT_FILE}"
# CLI Package - Collapsible Section (with full text summary from file)
echo "<details>" >> "$comment_file"
echo "<summary>CLI Package - Full Text Report</summary>" >> "$comment_file"
echo "" >> "$comment_file"
echo '```text' >> "$comment_file"
if [ -f "$cli_full_text_summary_file" ]; then
cat "$cli_full_text_summary_file" >> "$comment_file"
echo "<details>" >> "${COMMENT_FILE}"
echo "<summary>CLI Package - Full Text Report</summary>" >> "${COMMENT_FILE}"
echo "" >> "${COMMENT_FILE}"
echo '```text' >> "${COMMENT_FILE}"
if [ -f "${CLI_FULL_TEXT_SUMMARY_FILE}" ]; then
cat "${CLI_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
else
echo "CLI full-text-summary.txt not found at: $cli_full_text_summary_file" >> "$comment_file"
echo "CLI full-text-summary.txt not found at: ${CLI_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
fi
echo '```' >> "$comment_file"
echo "</details>" >> "$comment_file"
echo "" >> "$comment_file"
echo '```' >> "${COMMENT_FILE}"
echo "</details>" >> "${COMMENT_FILE}"
echo "" >> "${COMMENT_FILE}"
# Core Package - Collapsible Section (with full text summary from file)
echo "<details>" >> "$comment_file"
echo "<summary>Core Package - Full Text Report</summary>" >> "$comment_file"
echo "" >> "$comment_file"
echo '```text' >> "$comment_file"
if [ -f "$core_full_text_summary_file" ]; then
cat "$core_full_text_summary_file" >> "$comment_file"
echo "<details>" >> "${COMMENT_FILE}"
echo "<summary>Core Package - Full Text Report</summary>" >> "${COMMENT_FILE}"
echo "" >> "${COMMENT_FILE}"
echo '```text' >> "${COMMENT_FILE}"
if [ -f "${CORE_FULL_TEXT_SUMMARY_FILE}" ]; then
cat "${CORE_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
else
echo "Core full-text-summary.txt not found at: $core_full_text_summary_file" >> "$comment_file"
echo "Core full-text-summary.txt not found at: ${CORE_FULL_TEXT_SUMMARY_FILE}" >> "${COMMENT_FILE}"
fi
echo '```' >> "$comment_file"
echo "</details>" >> "$comment_file"
echo "" >> "$comment_file"
echo '```' >> "${COMMENT_FILE}"
echo "</details>" >> "${COMMENT_FILE}"
echo "" >> "${COMMENT_FILE}"
echo "_For detailed HTML reports, please see the 'coverage-reports-${{ inputs.node_version }}' artifact from the main CI run._" >> "$comment_file"
echo "_For detailed HTML reports, please see the 'coverage-reports-${NODE_VERSION}-${OS}' artifact from the main CI run._" >> "${COMMENT_FILE}"
- name: Post Coverage Comment
uses: thollander/actions-comment-pull-request@v3
if: always()
- name: 'Post Coverage Comment'
uses: 'thollander/actions-comment-pull-request@65f9e5c9a1f2cd378bd74b2e057c9736982a8e74' # ratchet:thollander/actions-comment-pull-request@v3
if: |-
${{ always() }}
with:
file-path: coverage-comment.md # Use the generated file directly
comment-tag: code-coverage-summary
github-token: ${{ inputs.github_token }}
file-path: 'coverage-comment.md' # Use the generated file directly
comment-tag: 'code-coverage-summary'
github-token: '${{ inputs.github_token }}'
+275
View File
@@ -0,0 +1,275 @@
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
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}"
- name: '⬆️ Update package versions'
working-directory: '${{ inputs.working-directory }}'
shell: 'bash'
run: |
npm run 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 }}'
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 --set-upstream origin "${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 }}'
shell: 'bash'
run: |
npm publish \
--dry-run="${{ inputs.dry-run }}" \
--workspace="${{ inputs.core-package-name }}" \
--no-tag
npm dist-tag rm ${{ inputs.core-package-name }} false --silent
- 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
- 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 }}'
shell: 'bash'
run: |
npm publish \
--dry-run="${{ inputs.dry-run }}" \
--workspace="${{ inputs.cli-package-name }}" \
--no-tag
npm dist-tag rm ${{ inputs.cli-package-name }} false --silent
- 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 }}'
shell: 'bash'
# Tag staging for initial release
run: |
npm publish \
--dry-run="${{ inputs.dry-run }}" \
--workspace="${{ inputs.a2a-package-name }}" \
--no-tag
npm dist-tag rm ${{ inputs.a2a-package-name }} false --silent
- 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-token }}'
shell: 'bash'
run: |
gh release create "${{ inputs.release-tag }}" \
bundle/gemini.js \
--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 origin --delete "${{ steps.release_branch.outputs.BRANCH_NAME }}"
+78
View File
@@ -0,0 +1,78 @@
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
- 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"
+96
View File
@@ -0,0 +1,96 @@
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@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 Docker Buildx'
uses: 'docker/setup-buildx-action@v3'
- name: 'Log in to GitHub Container Registry'
uses: '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
- name: 'build'
id: 'docker_build'
shell: 'bash'
env:
GEMINI_SANDBOX_IMAGE_TAG: '${{ steps.image_tag.outputs.FINAL_TAG }}'
GEMINI_SANDBOX: 'docker'
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: 'publish'
shell: 'bash'
if: "${{ inputs.dry-run != 'true' }}"
run: |-
docker push "${{ steps.docker_build.outputs.uri }}"
- 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"
+38
View File
@@ -0,0 +1,38 @@
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: 'Run Tests'
env:
GEMINI_API_KEY: '${{ inputs.gemini_api_key }}'
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'
+22
View File
@@ -0,0 +1,22 @@
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
+125
View File
@@ -0,0 +1,125 @@
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 }}'
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 }}'
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 }}'
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 }}."
+100
View File
@@ -0,0 +1,100 @@
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@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
- 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
- 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 }}'
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'
+33
View File
@@ -0,0 +1,33 @@
version: 2
updates:
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: 'weekly'
day: 'monday'
open-pull-requests-limit: 10
reviewers:
- 'joshualitt'
groups:
npm-dependencies:
patterns:
- '*'
update-types:
- 'minor'
- 'patch'
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
day: 'monday'
open-pull-requests-limit: 10
reviewers:
- 'joshualitt'
groups:
actions-dependencies:
patterns:
- '*'
update-types:
- 'minor'
- 'patch'
+32 -17
View File
@@ -1,27 +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 reviewes 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. -->
<!-- Add links to any gh issues or other external bugs --->
- [ ] 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
+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);
});
+184
View File
@@ -0,0 +1,184 @@
#!/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=""
# 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
# 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 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}"
local LABELS_TO_ADD=""
local LABELS_TO_REMOVE=""
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
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}"
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_ADD="${LABELS_TO_ADD},${label}"
fi
fi
done
IFS="${IFS_OLD}"
fi
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 " Syncing labels to add: ${LABELS_TO_ADD}"
EDIT_CMD+=("--add-label" "${LABELS_TO_ADD}")
fi
if [[ -n "${LABELS_TO_REMOVE}" ]]; then
echo " Syncing labels to remove: ${LABELS_TO_REMOVE}"
EDIT_CMD+=("--remove-label" "${LABELS_TO_REMOVE}")
fi
("${EDIT_CMD[@]}" || true)
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
if [[ -z "${PRS_NEEDING_COMMENT}" ]]; then
echo "prs_needing_comment=[]" >> "${GITHUB_OUTPUT}"
else
echo "prs_needing_comment=[${PRS_NEEDING_COMMENT}]" >> "${GITHUB_OUTPUT}"
fi
echo "✅ PR triage completed"
+355
View File
@@ -0,0 +1,355 @@
/* eslint-disable @typescript-eslint/no-require-imports */
/* global process, console, require */
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],
});
}
}
} catch (error) {
console.error(`Error processing label for ${issueKey}: ${error.message}`);
}
}
}
run().catch((error) => {
console.error(error);
process.exit(1);
});
+349
View File
@@ -0,0 +1,349 @@
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'
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.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 '${{ env.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: '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: 'always()'
steps:
- name: 'Set pending status'
uses: 'myrotvorets/set-commit-status-action@16037e056d73b2d3c88e37e393ff369047f70886' # ratchet:myrotvorets/set-commit-status-action@master
if: '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: |
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 }}'
- 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 }}'
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'
if: |
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 }}'
- 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 }}'
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: |
always() && (needs.merge_queue_skipper.result !='success' || needs.merge_queue_skipper.outputs.skip != 'true')
runs-on: 'gemini-cli-windows-16-core'
continue-on-error: 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 }}'
- 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 }}'
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: |
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 }}'
- 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: 'Run Evals (Required to pass)'
env:
GEMINI_API_KEY: '${{ secrets.GEMINI_API_KEY }}'
run: 'npm run test:always_passing_evals'
e2e:
name: 'E2E'
if: |
always() && (needs.merge_queue_skipper.result !='success' || needs.merge_queue_skipper.outputs.skip != 'true')
needs:
- 'e2e_linux'
- 'e2e_mac'
- '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.evals.result }} != 'success' ]]; then
echo "One or more E2E jobs failed."
exit 1
fi
echo "All required E2E jobs passed!"
set_workflow_status:
runs-on: 'gemini-cli-ubuntu-16-core'
permissions: 'write-all'
if: '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: '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)'
+434 -116
View File
@@ -1,145 +1,463 @@
# .github/workflows/ci.yml
name: Gemini CLI CI
name: 'Testing: CI'
on:
push:
branches: [main, release]
branches:
- 'main'
- 'release/**'
pull_request:
branches: [main, release]
branches:
- '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 }}'
cancel-in-progress: |-
${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/heads/release/') }}
permissions:
checks: 'write'
contents: 'read'
statuses: 'write'
defaults:
run:
shell: 'bash'
jobs:
build:
name: Build and Lint
runs-on: ubuntu-latest
permissions:
contents: read # For checkout
strategy:
matrix:
node-version: [20.x]
merge_queue_skipper:
permissions: 'read-all'
name: 'Merge Queue Skipper'
runs-on: 'gemini-cli-ubuntu-16-core'
outputs:
skip: '${{ steps.merge-queue-ci-skipper.outputs.skip-check }}'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
- id: 'merge-queue-ci-skipper'
uses: 'cariad-tech/merge-queue-ci-skipper@1032489e59437862c90a08a2c92809c903883772' # ratchet:cariad-tech/merge-queue-ci-skipper@main
with:
node-version: ${{ matrix.node-version }}
secret: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
lint:
name: 'Lint'
runs-on: 'gemini-cli-ubuntu-16-core'
needs: 'merge_queue_skipper'
if: "${{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:
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
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: 'Cache Linters'
uses: 'actions/cache@v4'
with:
path: '${{ env.GEMINI_LINT_TEMP_DIR }}'
key: "${{ runner.os }}-${{ runner.arch }}-linters-${{ hashFiles('scripts/lint.js') }}"
- name: Run formatter check
- name: 'Install dependencies'
run: 'npm ci'
- name: 'Cache ESLint'
uses: 'actions/cache@v4'
with:
path: '.eslintcache'
key: "${{ runner.os }}-eslint-${{ hashFiles('package-lock.json', 'eslint.config.js') }}"
- name: 'Validate NOTICES.txt'
run: 'git diff --exit-code packages/vscode-ide-companion/NOTICES.txt'
- 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'
- name: 'Run shellcheck'
run: 'node scripts/lint.js --shellcheck'
- name: 'Run yamllint'
run: 'node scripts/lint.js --yamllint'
- 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'
link_checker:
name: 'Link Checker'
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- 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:
- 'merge_queue_skipper'
if: "${{needs.merge_queue_skipper.outputs.skip == 'false'}}"
permissions:
contents: 'read'
checks: 'write'
pull-requests: 'write'
strategy:
matrix:
node-version:
- '20.x'
- '22.x'
- '24.x'
shard:
- 'cli'
- 'others'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- 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
run: |
npm run format
git diff --exit-code
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
npm run test:scripts
fi
- name: Run linter
run: npm run lint
- name: 'Bundle'
run: 'npm run bundle'
- name: Build project
run: npm run build
- name: 'Smoke test bundle'
run: 'node ./bundle/gemini.js --version'
- name: Run type check
run: npm run typecheck
- name: 'Smoke test npx installation'
run: |
# 1. Package the project into a tarball
TARBALL=$(npm pack | tail -n 1)
- name: Upload build artifacts
uses: actions/upload-artifact@v4
# 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: build-artifacts-${{ matrix.node-version }}
path: |
packages/*/dist
package-lock.json # Only upload dist and lockfile
test:
name: Test
runs-on: ubuntu-latest
needs: build # This job depends on the 'build' job
permissions:
contents: read
checks: write
pull-requests: write
strategy:
matrix:
node-version: [20.x] # Should match the build job's matrix
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts-${{ matrix.node-version }}
path: . # Download to the root, this will include package-lock.json and packages/*/dist
# Restore/create package structure for dist folders if necessary.
# The download-artifact action with path: . should place them correctly if the
# upload paths were relative to the workspace root.
# Example: if uploaded `packages/cli/dist`, it will be at `./packages/cli/dist`.
- name: Install dependencies for testing
run: npm ci # Install fresh dependencies using the downloaded package-lock.json
- name: Run tests and generate reports
run: NO_COLOR=true npm run test:ci
- name: Publish Test Report (for non-forks)
if: always() && (github.event.pull_request.head.repo.full_name == github.repository)
uses: dorny/test-reporter@v1
with:
name: Test Results (Node ${{ matrix.node-version }})
path: packages/*/junit.xml
reporter: java-junit
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@v4
- 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-${{ matrix.node-version }}
path: packages/*/junit.xml
name: 'test-results-fork-${{ runner.os }}-${{ matrix.node-version }}-${{ matrix.shard }}'
path: 'packages/*/junit.xml'
- name: Upload coverage reports
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-reports-${{ matrix.node-version }}
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
test_mac:
name: 'Test (Mac) - ${{ matrix.node-version }}, ${{ matrix.shard }}'
runs-on: 'macos-latest'
needs:
- 'merge_queue_skipper'
if: "${{needs.merge_queue_skipper.outputs.skip == 'false'}}"
permissions:
contents: read # For checkout
pull-requests: write # For commenting
contents: 'read'
checks: 'write'
pull-requests: 'write'
continue-on-error: true
strategy:
matrix:
node-version: [20.x] # Should match the test job's matrix
node-version:
- '20.x'
- '22.x'
- '24.x'
shard:
- 'cli'
- 'others'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: Download coverage reports artifact
uses: actions/download-artifact@v4
- name: 'Set up Node.js ${{ matrix.node-version }}'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
name: coverage-reports-${{ matrix.node-version }}
path: coverage_artifact # Download to a specific directory
node-version: '${{ matrix.node-version }}'
cache: 'npm'
- name: Post Coverage Comment using Composite Action
uses: ./.github/actions/post-coverage-comment # Path to the composite action directory
- 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
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:
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 }}
github_token: ${{ secrets.GITHUB_TOKEN }}
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'
if: |-
${{ always() }}
uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'coverage-reports-${{ runner.os }}-${{ matrix.node-version }}-${{ matrix.shard }}'
path: 'packages/*/coverage'
codeql:
name: 'CodeQL'
runs-on: 'gemini-cli-ubuntu-16-core'
needs: 'merge_queue_skipper'
if: "${{needs.merge_queue_skipper.outputs.skip == 'false'}}"
permissions:
actions: 'read'
contents: 'read'
security-events: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
- name: 'Initialize CodeQL'
uses: 'github/codeql-action/init@df559355d593797519d70b90fc8edd5db049e7a2' # ratchet:github/codeql-action/init@v3
with:
languages: 'javascript'
- name: 'Perform CodeQL Analysis'
uses: 'github/codeql-action/analyze@df559355d593797519d70b90fc8edd5db049e7a2' # ratchet:github/codeql-action/analyze@v3
# Check for changes in bundle size.
bundle_size:
name: 'Check Bundle Size'
needs: 'merge_queue_skipper'
if: "${{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
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.inputs.branch_ref || github.ref }}'
fetch-depth: 1
- uses: 'preactjs/compressed-size-action@946a292cd35bd1088e0d7eb92b69d1a8d5b5d76a'
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
pattern: './bundle/**/*.{js,sb}'
minimum-change-threshold: '1000'
compression: 'none'
clean-script: 'clean'
test_windows:
name: 'Slow Test - Win'
runs-on: 'gemini-cli-windows-16-core'
needs: 'merge_queue_skipper'
if: "${{needs.merge_queue_skipper.outputs.skip == 'false'}}"
continue-on-error: true
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
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
NODE_OPTIONS: '--max-old-space-size=32768 --max-semi-space-size=256'
UV_THREADPOOL_SIZE: '32'
NODE_ENV: 'test'
run: 'npm run test:ci -- --coverage.enabled=false'
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: 'always()'
needs:
- 'lint'
- 'link_checker'
- 'test_linux'
- 'test_mac'
- '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.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!"
+197
View File
@@ -0,0 +1,197 @@
name: 'Generate Weekly Community Report 📊'
on:
schedule:
- cron: '0 12 * * 1' # Run at 12:00 UTC on Monday
workflow_dispatch:
inputs:
days:
description: 'Number of days to look back for the report'
required: true
default: '7'
jobs:
generate-report:
name: 'Generate Report 📝'
if: |-
${{ github.repository == 'google-gemini/gemini-cli' }}
runs-on: 'ubuntu-latest'
permissions:
issues: 'write'
pull-requests: 'read'
discussions: 'read'
contents: 'read'
id-token: 'write'
steps:
- name: 'Generate GitHub App Token 🔑'
id: 'generate_token'
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 }}'
permission-issues: 'write'
permission-pull-requests: 'read'
permission-discussions: 'read'
permission-contents: 'read'
- name: 'Generate Report 📜'
id: 'report'
env:
GH_TOKEN: '${{ steps.generate_token.outputs.token }}'
REPO: '${{ github.repository }}'
DAYS: '${{ github.event.inputs.days || 7 }}'
run: |-
set -e
START_DATE="$(date -u -d "$DAYS days ago" +'%Y-%m-%d')"
END_DATE="$(date -u +'%Y-%m-%d')"
echo "⏳ Generating report for contributions from ${START_DATE} to ${END_DATE}..."
declare -A author_is_googler
check_googler_status() {
local author="$1"
if [[ "${author}" == *"[bot]" ]]; then
author_is_googler[${author}]=1
return 1
fi
if [[ -v "author_is_googler[${author}]" ]]; then
return "${author_is_googler[${author}]}"
fi
if gh api "orgs/googlers/members/${author}" --silent 2>/dev/null; then
echo "🧑‍💻 ${author} is a Googler."
author_is_googler[${author}]=0
else
echo "🌍 ${author} is a community contributor."
author_is_googler[${author}]=1
fi
return "${author_is_googler[${author}]}"
}
googler_issues=0
non_googler_issues=0
googler_prs=0
non_googler_prs=0
echo "🔎 Fetching issues and pull requests..."
ITEMS_JSON="$(gh search issues --repo "${REPO}" "created:>${START_DATE}" --json author,isPullRequest --limit 1000)"
for row in $(echo "${ITEMS_JSON}" | jq -r '.[] | @base64'); do
_jq() {
echo "${row}" | base64 --decode | jq -r "${1}"
}
author="$(_jq '.author.login')"
is_pr="$(_jq '.isPullRequest')"
if [[ -z "${author}" || "${author}" == "null" ]]; then
continue
fi
if check_googler_status "${author}"; then
if [[ "${is_pr}" == "true" ]]; then
((googler_prs++))
else
((googler_issues++))
fi
else
if [[ "${is_pr}" == "true" ]]; then
((non_googler_prs++))
else
((non_googler_issues++))
fi
fi
done
googler_discussions=0
non_googler_discussions=0
echo "🗣️ Fetching discussions..."
DISCUSSION_QUERY='''
query($q: String!) {
search(query: $q, type: DISCUSSION, first: 100) {
nodes {
... on Discussion {
author {
login
}
}
}
}
}'''
DISCUSSIONS_JSON="$(gh api graphql -f q="repo:${REPO} created:>${START_DATE}" -f query="${DISCUSSION_QUERY}")"
for row in $(echo "${DISCUSSIONS_JSON}" | jq -r '.data.search.nodes[] | @base64'); do
_jq() {
echo "${row}" | base64 --decode | jq -r "${1}"
}
author="$(_jq '.author.login')"
if [[ -z "${author}" || "${author}" == "null" ]]; then
continue
fi
if check_googler_status "${author}"; then
((googler_discussions++))
else
((non_googler_discussions++))
fi
done
echo "✍️ Generating report content..."
TOTAL_ISSUES=$((googler_issues + non_googler_issues))
TOTAL_PRS=$((googler_prs + non_googler_prs))
TOTAL_DISCUSSIONS=$((googler_discussions + non_googler_discussions))
REPORT_BODY=$(cat <<EOF
### 💖 Community Contribution Report
**Period:** ${START_DATE} to ${END_DATE}
| Category | Googlers | Community | Total |
|---|---:|---:|---:|
| **Issues** | $googler_issues | $non_googler_issues | **$TOTAL_ISSUES** |
| **Pull Requests** | $googler_prs | $non_googler_prs | **$TOTAL_PRS** |
| **Discussions** | $googler_discussions | $non_googler_discussions | **$TOTAL_DISCUSSIONS** |
_This report was generated automatically by a GitHub Action._
EOF
)
echo "report_body<<EOF" >> "${GITHUB_OUTPUT}"
echo "${REPORT_BODY}" >> "${GITHUB_OUTPUT}"
echo "EOF" >> "${GITHUB_OUTPUT}"
echo "📊 Community Contribution Report:"
echo "${REPORT_BODY}"
- name: '🤖 Get Insights from Report'
if: |-
${{ steps.report.outputs.report_body != '' }}
uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0
env:
GITHUB_TOKEN: '${{ steps.generate_token.outputs.token }}'
REPOSITORY: '${{ github.repository }}'
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: |-
{
"coreTools": [
"run_shell_command(gh issue list)",
"run_shell_command(gh pr list)",
"run_shell_command(gh search issues)",
"run_shell_command(gh search prs)"
]
}
prompt: |-
You are a helpful assistant that analyzes community contribution reports.
Based on the following report, please provide a brief summary and highlight any interesting trends or potential areas for improvement.
Report:
${{ steps.report.outputs.report_body }}
+170
View File
@@ -0,0 +1,170 @@
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'
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 }}'
- 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 }}'
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 [[ "${{ env.IS_DOCKER }}" == "true" ]]; then
npm run deflake:test:integration:sandbox:docker -- --runs="${{ env.RUNS }}" -- --testNamePattern "'${{ env.TEST_NAME_PATTERN }}'"
else
npm run deflake:test:integration:sandbox:none -- --runs="${{ env.RUNS }}" -- --testNamePattern "'${{ env.TEST_NAME_PATTERN }}'"
fi
deflake_e2e_mac:
name: 'E2E Test (macOS)'
runs-on: 'macos-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.pull_request.head.sha }}'
repository: '${{ github.repository }}'
- 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 }}'
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="${{ env.RUNS }}" -- --testNamePattern "'${{ env.TEST_NAME_PATTERN }}'"
deflake_e2e_windows:
name: 'Slow E2E - Win'
runs-on: 'gemini-cli-windows-16-core'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.pull_request.head.sha }}'
repository: '${{ github.repository }}'
- 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 }}'
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 }}'"
+50
View File
@@ -0,0 +1,50 @@
name: 'Deploy GitHub Pages'
on:
push:
tags: 'v*'
workflow_dispatch:
permissions:
contents: 'read'
pages: 'write'
id-token: 'write'
# Allow only one concurrent deployment, skipping runs queued between the run
# in-progress and latest queued. However, do NOT cancel in-progress runs as we
# want to allow these production deployments to complete.
concurrency:
group: '${{ github.workflow }}'
cancel-in-progress: false
jobs:
build:
if: |-
${{ !contains(github.ref_name, 'nightly') }}
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: 'Setup Pages'
uses: 'actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b' # ratchet:actions/configure-pages@v5
- name: 'Build with Jekyll'
uses: 'actions/jekyll-build-pages@44a6e6beabd48582f863aeeb6cb2151cc1716697' # ratchet:actions/jekyll-build-pages@v1
with:
source: './'
destination: './_site'
- name: 'Upload artifact'
uses: 'actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa' # ratchet:actions/upload-pages-artifact@v3
deploy:
environment:
name: 'github-pages'
url: '${{ steps.deployment.outputs.page_url }}'
runs-on: 'ubuntu-latest'
needs: 'build'
steps:
- name: 'Deploy to GitHub Pages'
id: 'deployment'
uses: 'actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e' # ratchet:actions/deploy-pages@v4
+17
View File
@@ -0,0 +1,17 @@
name: 'Trigger Docs Rebuild'
on:
push:
branches:
- 'main'
paths:
- 'docs/**'
jobs:
trigger-rebuild:
runs-on: 'ubuntu-latest'
steps:
- name: 'Trigger rebuild'
run: |
curl -X POST \
-H "Content-Type: application/json" \
-d '{}' \
"${{ secrets.DOCS_REBUILD_URL }}"
-49
View File
@@ -1,49 +0,0 @@
# .github/workflows/e2e.yml
name: E2E Tests
on:
push:
branches: [main, release]
pull_request:
branches: [main, release]
jobs:
e2e-test:
name: E2E Test - ${{ matrix.sandbox }}
runs-on: ubuntu-latest
strategy:
matrix:
sandbox: [sandbox:none, sandbox:docker]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: 'npm'
- 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@v3
- name: Set up Podman
if: matrix.sandbox == 'sandbox:podman'
uses: redhat-actions/podman-login@v1
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Run E2E tests
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: npm run test:integration:${{ matrix.sandbox }} -- --verbose --keep-output
+48
View File
@@ -0,0 +1,48 @@
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'
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: 'Authenticate to Google Cloud'
id: 'auth'
uses: 'google-github-actions/auth@c200f3691d83b41bf9bbd8638997a462592937ed' # ratchet:exclude pin@v2.1.7
with:
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: '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
+101
View File
@@ -0,0 +1,101 @@
name: 'Evals: Nightly'
on:
schedule:
- cron: '0 1 * * *' # Runs at 1 AM every day
workflow_dispatch:
inputs:
run_all:
description: 'Run all evaluations (including usually passing)'
type: 'boolean'
default: true
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'
strategy:
fail-fast: false
matrix:
model:
- '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
- 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_MODEL: '${{ matrix.model }}'
RUN_EVALS: "${{ github.event.inputs.run_all != 'false' }}"
TEST_NAME_PATTERN: '${{ github.event.inputs.test_name_pattern }}'
run: |
CMD="npm run test:all_evals"
PATTERN="${{ env.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: 'always()'
runs-on: 'gemini-cli-ubuntu-16-core'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- 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"'
@@ -0,0 +1,261 @@
name: '🏷️ Gemini Automated Issue Deduplication'
on:
issues:
types:
- 'opened'
- 'reopened'
issue_comment:
types:
- 'created'
workflow_dispatch:
inputs:
issue_number:
description: 'issue number to dedup'
required: true
type: 'number'
concurrency:
group: '${{ github.workflow }}-${{ github.event.issue.number }}'
cancel-in-progress: true
defaults:
run:
shell: 'bash'
jobs:
find-duplicates:
if: |-
github.repository == 'google-gemini/gemini-cli' &&
vars.TRIAGE_DEDUPLICATE_ISSUES != '' &&
(github.event_name == 'issues' ||
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'issue_comment' &&
contains(github.event.comment.body, '@gemini-cli /deduplicate') &&
(github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'MEMBER' ||
github.event.comment.author_association == 'COLLABORATOR')))
permissions:
contents: 'read'
id-token: 'write' # Required for WIF, see https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-google-cloud-platform#adding-permissions-settings
issues: 'read'
statuses: 'read'
packages: 'read'
timeout-minutes: 20
runs-on: 'ubuntu-latest'
outputs:
duplicate_issues_csv: '${{ env.DUPLICATE_ISSUES_CSV }}'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: 'Log in to GitHub Container Registry'
uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
with:
registry: 'ghcr.io'
username: '${{ github.actor }}'
password: '${{ secrets.GITHUB_TOKEN }}'
- name: 'Find Duplicate Issues'
uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0
id: 'gemini_issue_deduplication'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ISSUE_TITLE: '${{ github.event.issue.title }}'
ISSUE_BODY: '${{ github.event.issue.body }}'
ISSUE_NUMBER: '${{ github.event.issue.number }}'
REPOSITORY: '${{ github.repository }}'
FIRESTORE_PROJECT: '${{ vars.FIRESTORE_PROJECT }}'
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: |-
{
"mcpServers": {
"issue_deduplication": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network", "host",
"-e", "GITHUB_TOKEN",
"-e", "GEMINI_API_KEY",
"-e", "DATABASE_TYPE",
"-e", "FIRESTORE_DATABASE_ID",
"-e", "GCP_PROJECT",
"-e", "GOOGLE_APPLICATION_CREDENTIALS=/app/gcp-credentials.json",
"-v", "${GOOGLE_APPLICATION_CREDENTIALS}:/app/gcp-credentials.json",
"ghcr.io/google-gemini/gemini-cli-issue-triage@sha256:e3de1523f6c83aabb3c54b76d08940a2bf42febcb789dd2da6f95169641f94d3"
],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}",
"GEMINI_API_KEY": "${{ secrets.GEMINI_API_KEY }}",
"DATABASE_TYPE":"firestore",
"GCP_PROJECT": "${FIRESTORE_PROJECT}",
"FIRESTORE_DATABASE_ID": "(default)",
"GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
},
"timeout": 600000
}
},
"maxSessionTurns": 25,
"coreTools": [
"run_shell_command(echo)",
"run_shell_command(gh issue view)"
],
"telemetry": {
"enabled": true,
"target": "gcp"
}
}
prompt: |-
## Role
You are an issue de-duplication assistant. Your goal is to find
duplicate issues for a given issue.
## Steps
1. **Find Potential Duplicates:**
- The repository is ${{ github.repository }} and the issue number is ${{ github.event.issue.number }}.
- Use the `duplicates` tool with the `repo` and `issue_number` to find potential duplicates for the current issue. Do not use the `threshold` parameter.
- If no duplicates are found, you are done.
- Print the JSON output from the `duplicates` tool to the logs.
2. **Refine Duplicates List (if necessary):**
- If the `duplicates` tool returns between 1 and 14 results, you must refine the list.
- For each potential duplicate issue, run `gh issue view <issue-number> --json title,body,comments` to fetch its content.
- Also fetch the content of the original issue: `gh issue view "${ISSUE_NUMBER}" --json title,body,comments`.
- Carefully analyze the content (title, body, comments) of the original issue and all potential duplicates.
- It is very important if the comments on either issue mention that they are not duplicates of each other, to treat them as not duplicates.
- Based on your analysis, create a final list containing only the issues you are highly confident are actual duplicates.
- If your final list is empty, you are done.
- Print to the logs if you omitted any potential duplicates based on your analysis.
- If the `duplicates` tool returned 15+ results, use the top 15 matches (based on descending similarity score value) to perform this step.
3. **Output final duplicates list as CSV:**
- Convert the list of appropriate duplicate issue numbers into a comma-separated list (CSV). If there are no appropriate duplicates, use the empty string.
- Use the "echo" shell command to append the CSV of issue numbers into the filepath referenced by the environment variable "${GITHUB_ENV}":
echo "DUPLICATE_ISSUES_CSV=[DUPLICATE_ISSUES_AS_CSV]" >> "${GITHUB_ENV}"
## Guidelines
- Only use the `duplicates` and `run_shell_command` tools.
- The `run_shell_command` tool can be used with `gh issue view`.
- Do not download or read media files like images, videos, or links. The `--json` flag for `gh issue view` will prevent this.
- Do not modify the issue content or status.
- Do not add comments or labels.
- Reference all shell variables as "${VAR}" (with quotes and braces).
add-comment-and-label:
needs: 'find-duplicates'
if: |-
github.repository == 'google-gemini/gemini-cli' &&
vars.TRIAGE_DEDUPLICATE_ISSUES != '' &&
needs.find-duplicates.outputs.duplicate_issues_csv != '' &&
(
github.event_name == 'issues' ||
github.event_name == 'workflow_dispatch' ||
(
github.event_name == 'issue_comment' &&
contains(github.event.comment.body, '@gemini-cli /deduplicate') &&
(
github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'MEMBER' ||
github.event.comment.author_association == 'COLLABORATOR'
)
)
)
permissions:
issues: 'write'
timeout-minutes: 5
runs-on: 'ubuntu-latest'
steps:
- name: 'Generate GitHub App Token'
id: 'generate_token'
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 }}'
permission-issues: 'write'
- name: 'Comment and Label Duplicate Issue'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
env:
DUPLICATES_OUTPUT: '${{ needs.find-duplicates.outputs.duplicate_issues_csv }}'
with:
github-token: '${{ steps.generate_token.outputs.token || secrets.GITHUB_TOKEN }}'
script: |-
const rawCsv = process.env.DUPLICATES_OUTPUT;
core.info(`Raw duplicates CSV: ${rawCsv}`);
const duplicateIssues = rawCsv.split(',').map(s => s.trim()).filter(s => s);
if (duplicateIssues.length === 0) {
core.info('No duplicate issues found. Nothing to do.');
return;
}
const issueNumber = ${{ github.event.issue.number }};
function formatCommentBody(issues, updated = false) {
const header = updated
? 'Found possible duplicate issues (updated):'
: 'Found possible duplicate issues:';
const issuesList = issues.map(num => `- #${num}`).join('\n');
const footer = 'If you believe this is not a duplicate, please remove the `status/possible-duplicate` label.';
const magicComment = '<!-- gemini-cli-deduplication -->';
return `${header}\n\n${issuesList}\n\n${footer}\n${magicComment}`;
}
const newCommentBody = formatCommentBody(duplicateIssues);
const newUpdatedCommentBody = formatCommentBody(duplicateIssues, true);
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
});
const magicComment = '<!-- gemini-cli-deduplication -->';
const existingComment = comments.find(comment =>
comment.user.type === 'Bot' && comment.body.includes(magicComment)
);
let commentMade = false;
if (existingComment) {
// To check if lists are same, just compare the formatted bodies without headers.
const existingBodyForCompare = existingComment.body.substring(existingComment.body.indexOf('- #'));
const newBodyForCompare = newCommentBody.substring(newCommentBody.indexOf('- #'));
if (existingBodyForCompare.trim() !== newBodyForCompare.trim()) {
core.info(`Updating existing comment ${existingComment.id}`);
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existingComment.id,
body: newUpdatedCommentBody,
});
commentMade = true;
} else {
core.info('Existing comment is up-to-date. Nothing to do.');
}
} else {
core.info('Creating new comment.');
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: newCommentBody,
});
commentMade = true;
}
if (commentMade) {
core.info('Adding "status/possible-duplicate" label.');
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: ['status/possible-duplicate'],
});
}
@@ -0,0 +1,324 @@
name: '🏷️ Gemini Automated Issue Triage'
on:
issues:
types:
- 'opened'
- 'reopened'
issue_comment:
types:
- 'created'
workflow_dispatch:
inputs:
issue_number:
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 || inputs.issue_number }}'
cancel-in-progress: true
defaults:
run:
shell: 'bash'
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
statuses: 'write'
packages: 'read'
actions: 'write' # Required for cancelling a workflow run
jobs:
triage-issue:
if: |-
(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') &&
(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:
- name: 'Get issue data for manual trigger'
id: 'get_issue_data'
if: |-
github.event_name == 'workflow_dispatch'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
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: issueNumber,
});
core.setOutput('title', issue.title);
core.setOutput('body', issue.body);
core.setOutput('labels', issue.labels.map(label => label.name).join(','));
return issue;
- name: 'Manual Trigger Pre-flight Checks'
if: |-
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: |
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
- 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 }}'
permission-issues: 'write'
- name: 'Get Repository Labels'
id: 'get_labels'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
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 allowedLabels = [
'area/agent',
'area/enterprise',
'area/non-interactive',
'area/core',
'area/security',
'area/platform',
'area/extensions',
'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: '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 || inputs.issue_number) || github.event.issue.number }}
REPOSITORY: '${{ github.repository }}'
AVAILABLE_LABELS: '${{ steps.get_labels.outputs.available_labels }}'
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,
"telemetry": {
"enabled": true,
"target": "gcp"
}
}
prompt: |-
## Role
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. Review the issue title and body: ${{ env.ISSUE_TITLE }} and ${{ env.ISSUE_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.
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."
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/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: |-
${{ steps.gemini_issue_analysis.outputs.summary != '' }}
env:
REPOSITORY: '${{ github.repository }}'
ISSUE_NUMBER: '${{ github.event.issue.number || github.event.inputs.issue_number }}'
LABELS_OUTPUT: '${{ steps.gemini_issue_analysis.outputs.summary }}'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
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 {
// 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 {
core.setFailed(`Output is not valid JSON and does not contain a JSON markdown block.\nRaw output: ${rawOutput}`);
return;
}
}
const issueNumber = parseInt(process.env.ISSUE_NUMBER);
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
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: |-
${{ failure() && steps.gemini_issue_analysis.outcome == 'failure' }}
env:
ISSUE_NUMBER: '${{ github.event.issue.number || github.event.inputs.issue_number }}'
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 || secrets.GITHUB_TOKEN }}'
script: |-
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: parseInt(process.env.ISSUE_NUMBER),
body: 'There is a problem with the Gemini CLI issue triaging. Please check the [action logs](${process.env.RUN_URL}) for details.'
})
@@ -0,0 +1,115 @@
name: '📋 Gemini Scheduled Issue Deduplication'
on:
schedule:
- cron: '0 * * * *' # Runs every hour
workflow_dispatch:
concurrency:
group: '${{ github.workflow }}'
cancel-in-progress: true
defaults:
run:
shell: 'bash'
jobs:
refresh-embeddings:
if: |-
${{ vars.TRIAGE_DEDUPLICATE_ISSUES != '' && github.repository == 'google-gemini/gemini-cli' }}
permissions:
contents: 'read'
id-token: 'write' # Required for WIF, see https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-google-cloud-platform#adding-permissions-settings
issues: 'read'
statuses: 'read'
packages: 'read'
timeout-minutes: 20
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: 'Log in to GitHub Container Registry'
uses: 'docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1' # ratchet:docker/login-action@v3
with:
registry: 'ghcr.io'
username: '${{ github.actor }}'
password: '${{ secrets.GITHUB_TOKEN }}'
- name: 'Run Gemini Issue Deduplication Refresh'
uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0
id: 'gemini_refresh_embeddings'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ISSUE_TITLE: '${{ github.event.issue.title }}'
ISSUE_BODY: '${{ github.event.issue.body }}'
ISSUE_NUMBER: '${{ github.event.issue.number }}'
REPOSITORY: '${{ github.repository }}'
FIRESTORE_PROJECT: '${{ vars.FIRESTORE_PROJECT }}'
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: |-
{
"mcpServers": {
"issue_deduplication": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network", "host",
"-e", "GITHUB_TOKEN",
"-e", "GEMINI_API_KEY",
"-e", "DATABASE_TYPE",
"-e", "FIRESTORE_DATABASE_ID",
"-e", "GCP_PROJECT",
"-e", "GOOGLE_APPLICATION_CREDENTIALS=/app/gcp-credentials.json",
"-v", "${GOOGLE_APPLICATION_CREDENTIALS}:/app/gcp-credentials.json",
"ghcr.io/google-gemini/gemini-cli-issue-triage@sha256:e3de1523f6c83aabb3c54b76d08940a2bf42febcb789dd2da6f95169641f94d3"
],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}",
"GEMINI_API_KEY": "${{ secrets.GEMINI_API_KEY }}",
"DATABASE_TYPE":"firestore",
"GCP_PROJECT": "${FIRESTORE_PROJECT}",
"FIRESTORE_DATABASE_ID": "(default)",
"GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
},
"timeout": 600000
}
},
"maxSessionTurns": 25,
"coreTools": [
"run_shell_command(echo)"
],
"telemetry": {
"enabled": true,
"target": "gcp"
}
}
prompt: |-
## Role
You are a database maintenance assistant for a GitHub issue deduplication system.
## Goal
Your sole responsibility is to refresh the embeddings for all open issues in the repository to ensure the deduplication database is up-to-date.
## Steps
1. **Extract Repository Information:** The repository is ${{ github.repository }}.
2. **Refresh Embeddings:** Call the `refresh` tool with the correct `repo`. Do not use the `force` parameter.
3. **Log Output:** Print the JSON output from the `refresh` tool to the logs.
## Guidelines
- Only use the `refresh` tool.
- Do not attempt to find duplicates or modify any issues.
- Your only task is to call the `refresh` tool and log its output.
@@ -0,0 +1,278 @@
name: '📋 Gemini Scheduled Issue Triage'
on:
issues:
types:
- 'opened'
- 'reopened'
schedule:
- cron: '0 * * * *' # Runs every hour
workflow_dispatch:
concurrency:
group: '${{ github.workflow }}-${{ github.event.number || github.run_id }}'
cancel-in-progress: true
defaults:
run:
shell: 'bash'
permissions:
id-token: 'write'
issues: 'write'
jobs:
triage-issues:
timeout-minutes: 10
if: |-
${{ github.repository == 'google-gemini/gemini-cli' }}
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: 'Generate GitHub App Token'
id: 'generate_token'
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 }}'
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
ISSUE_JSON=$(echo "$ISSUE_EVENT" | jq -c '[{number: .number, title: .title, body: .body}]')
echo "issues_to_triage=${ISSUE_JSON}" >> "${GITHUB_OUTPUT}"
echo "✅ Found issue #${{ github.event.issue.number }} from event to triage! 🎯"
- 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 }}'
GITHUB_REPOSITORY: '${{ github.repository }}'
run: |-
set -euo pipefail
echo '🔍 Finding issues missing area labels...'
NO_AREA_ISSUES="$(gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue -label:area/core -label:area/agent -label:area/enterprise -label:area/non-interactive -label:area/security -label:area/platform -label:area/extensions -label:area/unknown' --limit 100 --json number,title,body)"
echo '🔍 Finding issues missing kind labels...'
NO_KIND_ISSUES="$(gh issue list --repo "${GITHUB_REPOSITORY}" \
--search 'is:open is:issue -label:kind/bug -label:kind/enhancement -label:kind/customer-issue -label:kind/question' --limit 100 --json number,title,body)"
echo '🏷️ Finding issues missing priority labels...'
NO_PRIORITY_ISSUES="$(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 100 --json number,title,body)"
echo '🔄 Merging and deduplicating issues...'
ISSUES="$(echo "${NO_AREA_ISSUES}" "${NO_KIND_ISSUES}" "${NO_PRIORITY_ISSUES}" | jq -c -s 'add | unique_by(.number)')"
echo '📝 Setting output for GitHub Actions...'
echo "issues_to_triage=${ISSUES}" >> "${GITHUB_OUTPUT}"
ISSUE_COUNT="$(echo "${ISSUES}" | jq 'length')"
echo "✅ Found ${ISSUE_COUNT} unique issues to triage! 🎯"
- name: 'Get Repository Labels'
id: 'get_labels'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.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);
core.setOutput('available_labels', labelNames.join(','));
core.info(`Found ${labelNames.length} labels: ${labelNames.join(', ')}`);
return labelNames;
- name: 'Run Gemini Issue Analysis'
if: |-
(steps.get_issue_from_event.outputs.issues_to_triage != '' && steps.get_issue_from_event.outputs.issues_to_triage != '[]') ||
(steps.find_issues.outputs.issues_to_triage != '' && steps.find_issues.outputs.issues_to_triage != '[]')
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
ISSUES_TO_TRIAGE: '${{ steps.get_issue_from_event.outputs.issues_to_triage || steps.find_issues.outputs.issues_to_triage }}'
REPOSITORY: '${{ github.repository }}'
AVAILABLE_LABELS: '${{ steps.get_labels.outputs.available_labels }}'
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)"
],
"telemetry": {
"enabled": true,
"target": "gcp"
}
}
prompt: |-
## Role
You are an issue triage assistant. Analyze issues and identify
appropriate labels. Use the available tools to gather information;
do not ask for information to be provided.
## 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, 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 already has a priority/ label, do not change it.
- If the issue already has an area/ label, do not change it.
- 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. 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": ["area/core", "kind/bug", "priority/p2"],
"labels_to_remove": ["status/need-triage"],
"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.
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
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
- 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.
- Do not remove the following labels maintainer, help wanted or good first issue.
- Triage only the current issue.
- Identify only one area/ label.
- Identify only one kind/ label (Do not apply kind/duplicate or kind/parent-issue)
- Identify only one priority/ label.
- 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 (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/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 Labels to Issues'
if: |-
${{ steps.gemini_issue_analysis.outcome == 'success' &&
steps.gemini_issue_analysis.outputs.summary != '[]' }}
env:
REPOSITORY: '${{ github.repository }}'
LABELS_OUTPUT: '${{ steps.gemini_issue_analysis.outputs.summary }}'
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;
}
for (const entry of parsedLabels) {
const issueNumber = entry.issue_number;
if (!issueNumber) {
core.info(`Skipping entry with no issue number: ${JSON.stringify(entry)}`);
continue;
}
const labelsToAdd = entry.labels_to_add || [];
labelsToAdd.push('status/bot-triaged');
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 (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`);
}
}
@@ -0,0 +1,45 @@
name: 'Gemini Scheduled PR Triage 🚀'
on:
schedule:
- cron: '*/15 * * * *' # Runs every 15 minutes
workflow_dispatch:
jobs:
audit-prs:
timeout-minutes: 15
if: |-
${{ github.repository == 'google-gemini/gemini-cli' }}
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
pull-requests: 'write'
runs-on: 'ubuntu-latest'
outputs:
prs_needing_comment: '${{ steps.run_triage.outputs.prs_needing_comment }}'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
- name: 'Generate GitHub App Token'
id: 'generate_token'
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 }}'
permission-issues: 'write'
permission-pull-requests: 'write'
- name: 'Run PR Triage Script'
id: 'run_triage'
shell: 'bash'
env:
GITHUB_TOKEN: '${{ steps.generate_token.outputs.token }}'
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
@@ -0,0 +1,158 @@
name: '🔒 Gemini Scheduled Stale Issue Closer'
on:
schedule:
- cron: '0 0 * * 0' # Every Sunday at midnight UTC
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
defaults:
run:
shell: 'bash'
jobs:
close-stale-issues:
runs-on: 'ubuntu-latest'
permissions:
issues: 'write'
steps:
- name: 'Generate GitHub App Token'
id: 'generate_token'
uses: 'actions/create-github-app-token@v1'
with:
app-id: '${{ secrets.APP_ID }}'
private-key: '${{ secrets.PRIVATE_KEY }}'
permission-issues: 'write'
- name: 'Process Stale Issues'
uses: 'actions/github-script@v7'
env:
DRY_RUN: '${{ inputs.dry_run }}'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |
const dryRun = process.env.DRY_RUN === 'true';
if (dryRun) {
core.info('DRY RUN MODE ENABLED: No changes will be applied.');
}
const batchLabel = 'Stale';
const threeMonthsAgo = new Date();
threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);
const tenDaysAgo = new Date();
tenDaysAgo.setDate(tenDaysAgo.getDate() - 10);
core.info(`Cutoff date for creation: ${threeMonthsAgo.toISOString()}`);
core.info(`Cutoff date for updates: ${tenDaysAgo.toISOString()}`);
const query = `repo:${context.repo.owner}/${context.repo.repo} is:issue is:open created:<${threeMonthsAgo.toISOString()}`;
core.info(`Searching with query: ${query}`);
const itemsToCheck = await github.paginate(github.rest.search.issuesAndPullRequests, {
q: query,
sort: 'created',
order: 'asc',
per_page: 100
});
core.info(`Found ${itemsToCheck.length} open issues to check.`);
let processedCount = 0;
for (const issue of itemsToCheck) {
const createdAt = new Date(issue.created_at);
const updatedAt = new Date(issue.updated_at);
const reactionCount = issue.reactions.total_count;
// Basic thresholds
if (reactionCount >= 5) {
continue;
}
// Skip if it has a maintainer, help wanted, or Public Roadmap label
const rawLabels = issue.labels.map((l) => l.name);
const lowercaseLabels = rawLabels.map((l) => l.toLowerCase());
if (
lowercaseLabels.some((l) => l.includes('maintainer')) ||
lowercaseLabels.includes('help wanted') ||
rawLabels.includes('🗓️ Public Roadmap')
) {
continue;
}
let isStale = updatedAt < tenDaysAgo;
// If apparently active, check if it's only bot activity
if (!isStale) {
try {
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
per_page: 100,
sort: 'created',
direction: 'desc'
});
const lastHumanComment = comments.data.find(comment => comment.user.type !== 'Bot');
if (lastHumanComment) {
isStale = new Date(lastHumanComment.created_at) < tenDaysAgo;
} else {
// No human comments. Check if creator is human.
if (issue.user.type !== 'Bot') {
isStale = createdAt < tenDaysAgo;
} else {
isStale = true; // Bot created, only bot comments
}
}
} catch (error) {
core.warning(`Failed to fetch comments for issue #${issue.number}: ${error.message}`);
continue;
}
}
if (isStale) {
processedCount++;
const message = `Closing stale issue #${issue.number}: "${issue.title}" (${issue.html_url})`;
core.info(message);
if (!dryRun) {
// Add label
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: [batchLabel]
});
// Add comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: 'Hello! As part of our effort to keep our backlog manageable and focus on the most active issues, we are tidying up older reports.\n\nIt looks like this issue hasn\'t been active for a while, so we are closing it for now. However, if you are still experiencing this bug on the latest stable build, please feel free to comment on this issue or create a new one with updated details.\n\nThank you for your contribution!'
});
// Close issue
await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
state: 'closed',
state_reason: 'not_planned'
});
}
}
}
core.info(`\nTotal issues processed: ${processedCount}`);
@@ -0,0 +1,223 @@
name: 'Gemini Scheduled Stale PR Closer'
on:
schedule:
- cron: '0 2 * * *' # Every day at 2 AM UTC
pull_request:
types: ['opened', 'edited']
workflow_dispatch:
inputs:
dry_run:
description: 'Run in dry-run mode'
required: false
default: false
type: 'boolean'
jobs:
close-stale-prs:
if: "github.repository == 'google-gemini/gemini-cli'"
runs-on: 'ubuntu-latest'
permissions:
pull-requests: 'write'
issues: 'write'
steps:
- name: 'Generate GitHub App Token'
id: 'generate_token'
uses: 'actions/create-github-app-token@v1'
with:
app-id: '${{ secrets.APP_ID }}'
private-key: '${{ secrets.PRIVATE_KEY }}'
owner: '${{ github.repository_owner }}'
repositories: 'gemini-cli'
- name: 'Process Stale PRs'
uses: 'actions/github-script@v7'
env:
DRY_RUN: '${{ inputs.dry_run }}'
with:
github-token: '${{ steps.generate_token.outputs.token }}'
script: |
const dryRun = process.env.DRY_RUN === 'true';
const thirtyDaysAgo = new Date();
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
// 1. Fetch maintainers for verification
let maintainerLogins = new Set();
let teamFetchSucceeded = false;
try {
const members = await github.paginate(github.rest.teams.listMembersInOrg, {
org: context.repo.owner,
team_slug: 'gemini-cli-maintainers'
});
maintainerLogins = new Set(members.map(m => m.login.toLowerCase()));
teamFetchSucceeded = true;
core.info(`Successfully fetched ${maintainerLogins.size} team members from gemini-cli-maintainers`);
} catch (e) {
core.warning(`Failed to fetch team members from gemini-cli-maintainers: ${e.message}. Falling back to author_association only.`);
}
const isMaintainer = (login, assoc) => {
const isTeamMember = maintainerLogins.has(login.toLowerCase());
const isRepoMaintainer = ['OWNER', 'MEMBER', 'COLLABORATOR'].includes(assoc);
return isTeamMember || isRepoMaintainer;
};
// 2. Determine which PRs to check
let prs = [];
if (context.eventName === 'pull_request') {
const { data: pr } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number
});
prs = [pr];
} else {
prs = await github.paginate(github.rest.pulls.list, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100
});
}
for (const pr of prs) {
const maintainerPr = isMaintainer(pr.user.login, pr.author_association);
const isBot = pr.user.type === 'Bot' || pr.user.login.endsWith('[bot]');
// Detection Logic for Linked Issues
// Check 1: Official GitHub "Closing Issue" link (GraphQL)
const linkedIssueQuery = `query($owner:String!, $repo:String!, $number:Int!) {
repository(owner:$owner, name:$repo) {
pullRequest(number:$number) {
closingIssuesReferences(first: 1) { totalCount }
}
}
}`;
let hasClosingLink = false;
try {
const res = await github.graphql(linkedIssueQuery, {
owner: context.repo.owner, repo: context.repo.repo, number: pr.number
});
hasClosingLink = res.repository.pullRequest.closingIssuesReferences.totalCount > 0;
} catch (e) {}
// Check 2: Regex for mentions (e.g., "Related to #123", "Part of #123", "#123")
// We check for # followed by numbers or direct URLs to issues.
const body = pr.body || '';
const mentionRegex = /(?:#|https:\/\/github\.com\/[^\/]+\/[^\/]+\/issues\/)(\d+)/i;
const hasMentionLink = mentionRegex.test(body);
const hasLinkedIssue = hasClosingLink || hasMentionLink;
// Logic for Closed PRs (Auto-Reopen)
if (pr.state === 'closed' && context.eventName === 'pull_request' && context.payload.action === 'edited') {
if (hasLinkedIssue) {
core.info(`PR #${pr.number} now has a linked issue. Reopening.`);
if (!dryRun) {
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
state: 'open'
});
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: "Thank you for linking an issue! This pull request has been automatically reopened."
});
}
}
continue;
}
// Logic for Open PRs (Immediate Closure)
if (pr.state === 'open' && !maintainerPr && !hasLinkedIssue && !isBot) {
core.info(`PR #${pr.number} is missing a linked issue. Closing.`);
if (!dryRun) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: "Hi there! Thank you for your contribution to Gemini CLI. \n\nTo improve our contribution process and better track changes, we now require all pull requests to be associated with an existing issue, as announced in our [recent discussion](https://github.com/google-gemini/gemini-cli/discussions/16706) and as detailed in our [CONTRIBUTING.md](https://github.com/google-gemini/gemini-cli/blob/main/CONTRIBUTING.md#1-link-to-an-existing-issue).\n\nThis pull request is being closed because it is not currently linked to an issue. **Once you have updated the description of this PR to link an issue (e.g., by adding `Fixes #123` or `Related to #123`), it will be automatically reopened.**\n\n**How to link an issue:**\nAdd a keyword followed by the issue number (e.g., `Fixes #123`) in the description of your pull request. For more details on supported keywords and how linking works, please refer to the [GitHub Documentation on linking pull requests to issues](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).\n\nThank you for your understanding and for being a part of our community!"
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
state: 'closed'
});
}
continue;
}
// Staleness check (Scheduled runs only)
if (pr.state === 'open' && context.eventName !== 'pull_request') {
const labels = pr.labels.map(l => l.name.toLowerCase());
if (labels.includes('help wanted') || labels.includes('🔒 maintainer only')) continue;
// Skip PRs that were created less than 30 days ago - they cannot be stale yet
const prCreatedAt = new Date(pr.created_at);
if (prCreatedAt > thirtyDaysAgo) {
const daysOld = Math.floor((Date.now() - prCreatedAt.getTime()) / (1000 * 60 * 60 * 24));
core.info(`PR #${pr.number} was created ${daysOld} days ago. Skipping staleness check.`);
continue;
}
// Initialize lastActivity to PR creation date (not epoch) as a safety baseline.
// This ensures we never incorrectly mark a PR as stale due to failed activity lookups.
let lastActivity = new Date(pr.created_at);
try {
const reviews = await github.paginate(github.rest.pulls.listReviews, {
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number
});
for (const r of reviews) {
if (isMaintainer(r.user.login, r.author_association)) {
const d = new Date(r.submitted_at || r.updated_at);
if (d > lastActivity) lastActivity = d;
}
}
const comments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number
});
for (const c of comments) {
if (isMaintainer(c.user.login, c.author_association)) {
const d = new Date(c.updated_at);
if (d > lastActivity) lastActivity = d;
}
}
} catch (e) {
core.warning(`Failed to fetch reviews/comments for PR #${pr.number}: ${e.message}`);
}
// For maintainer PRs, the PR creation itself counts as maintainer activity.
// (Now redundant since we initialize to pr.created_at, but kept for clarity)
if (maintainerPr) {
const d = new Date(pr.created_at);
if (d > lastActivity) lastActivity = d;
}
if (lastActivity < thirtyDaysAgo) {
core.info(`PR #${pr.number} is stale.`);
if (!dryRun) {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: "Hi there! Thank you for your contribution to Gemini CLI. We really appreciate the time and effort you've put into this pull request.\n\nTo keep our backlog manageable and ensure we're focusing on current priorities, we are closing pull requests that haven't seen maintainer activity for 30 days. Currently, the team is prioritizing work associated with **🔒 maintainer only** or **help wanted** issues.\n\nIf you believe this change is still critical, please feel free to comment with updated details. Otherwise, we encourage contributors to focus on open issues labeled as **help wanted**. Thank you for your understanding!"
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
state: 'closed'
});
}
}
}
}
@@ -0,0 +1,99 @@
name: 'Assign Issue on Comment'
on:
issue_comment:
types:
- 'created'
concurrency:
group: '${{ github.workflow }}-${{ github.event.issue.number }}'
cancel-in-progress: true
defaults:
run:
shell: 'bash'
permissions:
contents: 'read'
id-token: 'write'
issues: 'write'
statuses: 'write'
packages: 'read'
jobs:
self-assign-issue:
if: |-
github.repository == 'google-gemini/gemini-cli' &&
github.event_name == 'issue_comment' &&
contains(github.event.comment.body, '/assign')
runs-on: 'ubuntu-latest'
steps:
- name: 'Generate GitHub App Token'
id: 'generate_token'
uses: 'actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b'
with:
app-id: '${{ secrets.APP_ID }}'
private-key: '${{ secrets.PRIVATE_KEY }}'
# Add 'assignments' write permission
permission-issues: 'write'
- name: 'Assign issue to user'
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 MAX_ISSUES_ASSIGNED = 3;
// 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`,
advanced_search: true
});
if (assignedIssues.total_count >= MAX_ISSUES_ASSIGNED) {
await github.rest.issues.createComment({
owner: owner,
repo: repo,
issue_number: issueNumber,
body: `👋 @${commenter}! You currently have ${assignedIssues.total_count} issues assigned to you. We have a ${MAX_ISSUES_ASSIGNED} max issues assigned at once policy. Once you close out an existing issue it will open up space to take another. You can also unassign yourself from an existing issue but please work on a hand-off if someone is expecting work on that issue.`
});
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({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: `@${commenter} Thanks for taking interest but this issue is already assigned. We'd still love to have you contribute. Check out our [Help Wanted](https://github.com/google-gemini/gemini-cli/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22help%20wanted%22) list for issues where we need some extra attention.`
});
return;
}
// If not taken, assign the user who commented
await github.rest.issues.addAssignees({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
assignees: [commenter]
});
// Post a comment to confirm assignment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
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).`
});
@@ -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,57 @@
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.event_name == 'issues'"
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@v4'
- name: 'Setup Node.js'
uses: '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.event_name == 'schedule' || github.event_name == 'workflow_dispatch'"
runs-on: 'ubuntu-latest'
steps:
- name: 'Checkout'
uses: 'actions/checkout@v4'
- name: 'Setup Node.js'
uses: '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,174 @@
name: 'Label Workstream Rollup'
on:
issues:
types: ['opened', 'edited', 'reopened']
schedule:
- cron: '0 * * * *'
workflow_dispatch:
jobs:
labeler:
runs-on: 'ubuntu-latest'
permissions:
issues: 'write'
steps:
- name: 'Check for Parent Workstream and Apply Label'
uses: '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}`);
}
+25
View File
@@ -0,0 +1,25 @@
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
- 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'
+33
View File
@@ -0,0 +1,33 @@
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!
@@ -0,0 +1,83 @@
name: '🏷️ PR Contribution Guidelines Notifier'
on:
pull_request:
types:
- 'opened'
jobs:
notify-process-change:
runs-on: 'ubuntu-latest'
if: |-
github.repository == 'google-gemini/gemini-cli' || github.repository == 'google-gemini/maintainers-gemini-cli'
permissions:
pull-requests: 'write'
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: 'Check membership and post comment'
uses: 'actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea'
with:
github-token: '${{ steps.generate_token.outputs.token || secrets.GITHUB_TOKEN }}'
script: |-
const org = context.repo.owner;
const repo = context.repo.repo;
const username = context.payload.pull_request.user.login;
const pr_number = context.payload.pull_request.number;
// 1. Check if the PR author is a maintainer
const authorAssociation = context.payload.pull_request.author_association;
if (['OWNER', 'MEMBER', 'COLLABORATOR'].includes(authorAssociation)) {
core.info(`${username} is a maintainer (Association: ${authorAssociation}). No notification needed.`);
return;
}
// 2. Check if the PR is already associated with an issue
const query = `
query($owner:String!, $repo:String!, $number:Int!) {
repository(owner:$owner, name:$repo) {
pullRequest(number:$number) {
closingIssuesReferences(first: 1) {
totalCount
}
}
}
}
`;
const variables = { owner: org, repo: repo, number: pr_number };
const result = await github.graphql(query, variables);
const issueCount = result.repository.pullRequest.closingIssuesReferences.totalCount;
if (issueCount > 0) {
core.info(`PR #${pr_number} is already associated with an issue. No notification needed.`);
return;
}
// 3. Post the notification comment
core.info(`${username} is not a maintainer and PR #${pr_number} has no linked issue. Posting notification.`);
const comment = `
Hi @${username}, thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this.
We'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](https://github.com/google-gemini/gemini-cli/discussions/16706).
Key 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.
Thank you for your understanding and for being a part of our community!
`.trim().replace(/^[ ]+/gm, '');
await github.rest.issues.createComment({
owner: org,
repo: repo,
issue_number: pr_number,
body: comment
});
+65
View File
@@ -0,0 +1,65 @@
name: 'Release: Change Tags'
on:
workflow_dispatch:
inputs:
version:
description: 'The package version to tag (e.g., 0.5.0-preview-2). This version must already exist on the npm registry.'
required: true
type: 'string'
channel:
description: 'The npm dist-tag to apply (e.g., latest, preview, nightly).'
required: true
type: 'choice'
options:
- 'dev'
- 'latest'
- 'preview'
- 'nightly'
dry-run:
description: 'Whether to run in dry-run mode.'
required: false
type: 'boolean'
default: true
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
change-tags:
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
permissions:
packages: 'write'
issues: 'write'
steps:
- name: 'Checkout repository'
uses: 'actions/checkout@v4'
with:
ref: '${{ github.ref }}'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
- name: 'Change tag'
uses: './.github/actions/tag-npm-release'
with:
channel: '${{ github.event.inputs.channel }}'
version: '${{ github.event.inputs.version }}'
dry-run: '${{ github.event.inputs.dry-run }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
cli-package-name: '${{ vars.CLI_PACKAGE_NAME }}'
core-package-name: '${{ vars.CORE_PACKAGE_NAME }}'
a2a-package-name: '${{ vars.A2A_PACKAGE_NAME }}'
working-directory: '.'
+135
View File
@@ -0,0 +1,135 @@
name: 'Release: Manual'
on:
workflow_dispatch:
inputs:
version:
description: 'The version to release (e.g., v0.1.11). Must be a valid semver string with a "v" prefix.'
required: true
type: 'string'
ref:
description: 'The branch, tag, or SHA to release from.'
required: true
type: 'string'
npm_channel:
description: 'The npm channel to publish to'
required: true
type: 'choice'
options:
- 'dev'
- 'preview'
- 'nightly'
- 'latest'
default: 'latest'
dry_run:
description: 'Run a dry-run of the release process; no branches, npm packages or GitHub releases will be created.'
required: true
type: 'boolean'
default: true
force_skip_tests:
description: 'Select to skip the "Run Tests" step in testing. Prod releases should run tests'
required: false
type: 'boolean'
default: false
skip_github_release:
description: 'Select to skip creating a GitHub release (only used when environment is PROD)'
required: false
type: 'boolean'
default: false
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
release:
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
permissions:
contents: 'write'
packages: 'write'
issues: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
fetch-depth: 0
- name: 'Checkout Release Code'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref }}'
path: 'release'
fetch-depth: 0
- name: 'Debug 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: './release/.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
working-directory: './release'
run: 'npm ci'
- name: 'Prepare Release Info'
id: 'release_info'
working-directory: './release'
env:
INPUT_VERSION: '${{ github.event.inputs.version }}'
run: |
RELEASE_VERSION="${INPUT_VERSION}"
echo "RELEASE_VERSION=${RELEASE_VERSION#v}" >> "${GITHUB_OUTPUT}"
echo "PREVIOUS_TAG=$(git describe --tags --abbrev=0)" >> "${GITHUB_OUTPUT}"
- name: 'Run Tests'
if: "${{github.event.inputs.force_skip_tests != 'true'}}"
uses: './.github/actions/run-tests'
with:
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
working-directory: './release'
- name: 'Publish Release'
uses: './.github/actions/publish-release'
with:
force-skip-tests: '${{ github.event.inputs.force_skip_tests }}'
release-version: '${{ steps.release_info.outputs.RELEASE_VERSION }}'
release-tag: '${{ github.event.inputs.version }}'
npm-tag: '${{ github.event.inputs.npm_channel }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
dry-run: '${{ github.event.inputs.dry_run }}'
previous-tag: '${{ steps.release_info.outputs.PREVIOUS_TAG }}'
skip-github-release: '${{ github.event.inputs.skip_github_release }}'
working-directory: './release'
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
npm-registry-publish-url: '${{ vars.NPM_REGISTRY_PUBLISH_URL }}'
npm-registry-url: '${{ vars.NPM_REGISTRY_URL }}'
npm-registry-scope: '${{ vars.NPM_REGISTRY_SCOPE }}'
cli-package-name: '${{ vars.CLI_PACKAGE_NAME }}'
core-package-name: '${{ vars.CORE_PACKAGE_NAME }}'
a2a-package-name: '${{ vars.A2A_PACKAGE_NAME }}'
- name: 'Create Issue on Failure'
if: '${{ failure() && github.event.inputs.dry_run == false }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
RELEASE_TAG: '${{ github.event.inputs.version }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |
gh issue create \
--title 'Manual Release Failed for ${RELEASE_TAG} on $(date +'%Y-%m-%d')' \
--body 'The manual release workflow failed. See the full run for details: ${DETAILS_URL}' \
--label 'release-failure,priority/p0'
+161
View File
@@ -0,0 +1,161 @@
name: 'Release: Nightly'
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
inputs:
dry_run:
description: 'Run a dry-run of the release process; no branches, npm packages or GitHub releases will be created.'
required: true
type: 'boolean'
default: true
force_skip_tests:
description: 'Select to skip the "Run Tests" step in testing. Prod releases should run tests'
required: false
type: 'boolean'
default: true
ref:
description: 'The branch, tag, or SHA to release from.'
required: false
type: 'string'
default: 'main'
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
release:
if: "github.repository == 'google-gemini/gemini-cli'"
environment: "${{ github.event.inputs.environment || 'prod' }}"
runs-on: 'ubuntu-latest'
permissions:
contents: 'write'
packages: 'write'
issues: 'write'
pull-requests: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
fetch-depth: 0
- name: 'Checkout Release Code'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref }}'
path: 'release'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version-file: './release/.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
working-directory: './release'
run: 'npm ci'
- name: 'Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(github.event.inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Calculate Release Variables'
id: 'vars'
uses: './.github/actions/calculate-vars'
with:
dry_run: '${{ github.event.inputs.dry_run }}'
- name: 'Print Calculated vars'
shell: 'bash'
env:
JSON_VARS: '${{ toJSON(steps.vars.outputs) }}'
run: 'echo "$JSON_VARS"'
- name: 'Run Tests'
if: "${{ github.event_name == 'schedule' || github.event.inputs.force_skip_tests == 'false' }}"
uses: './.github/actions/run-tests'
with:
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
working-directory: './release'
- name: 'Get Nightly Version'
id: 'nightly_version'
working-directory: './release'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
# Calculate the version using the centralized script
VERSION_JSON=$(node scripts/get-release-version.js --type=nightly)
# Extract values for logging and outputs
RELEASE_TAG=$(echo "${VERSION_JSON}" | jq -r .releaseTag)
RELEASE_VERSION=$(echo "${VERSION_JSON}" | jq -r .releaseVersion)
NPM_TAG=$(echo "${VERSION_JSON}" | jq -r .npmTag)
PREVIOUS_TAG=$(echo "${VERSION_JSON}" | jq -r .previousReleaseTag)
# Print calculated values for logging
echo "Calculated Release Tag: ${RELEASE_TAG}"
echo "Calculated Release Version: ${RELEASE_VERSION}"
echo "Calculated Previous Tag: ${PREVIOUS_TAG}"
# Set outputs for subsequent steps
echo "RELEASE_TAG=${RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
echo "RELEASE_VERSION=${RELEASE_VERSION}" >> "${GITHUB_OUTPUT}"
echo "NPM_TAG=${NPM_TAG}" >> "${GITHUB_OUTPUT}"
echo "PREVIOUS_TAG=${PREVIOUS_TAG}" >> "${GITHUB_OUTPUT}"
- name: 'Publish Release'
if: true
uses: './.github/actions/publish-release'
with:
release-version: '${{ steps.nightly_version.outputs.RELEASE_VERSION }}'
release-tag: '${{ steps.nightly_version.outputs.RELEASE_TAG }}'
npm-tag: '${{ steps.nightly_version.outputs.NPM_TAG }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
dry-run: '${{ steps.vars.outputs.is_dry_run }}'
previous-tag: '${{ steps.nightly_version.outputs.PREVIOUS_TAG }}'
working-directory: './release'
skip-branch-cleanup: true
force-skip-tests: "${{ github.event_name != 'schedule' && github.event.inputs.force_skip_tests == 'true' }}"
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
npm-registry-publish-url: '${{ vars.NPM_REGISTRY_PUBLISH_URL }}'
npm-registry-url: '${{ vars.NPM_REGISTRY_URL }}'
npm-registry-scope: '${{ vars.NPM_REGISTRY_SCOPE }}'
cli-package-name: '${{ vars.CLI_PACKAGE_NAME }}'
core-package-name: '${{ vars.CORE_PACKAGE_NAME }}'
a2a-package-name: '${{ vars.A2A_PACKAGE_NAME }}'
- name: 'Create and Merge Pull Request'
if: "github.event.inputs.environment != 'dev'"
uses: './.github/actions/create-pull-request'
with:
branch-name: 'release/${{ steps.nightly_version.outputs.RELEASE_TAG }}'
pr-title: 'chore/release: bump version to ${{ steps.nightly_version.outputs.RELEASE_VERSION }}'
pr-body: 'Automated version bump for nightly release.'
github-token: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
dry-run: '${{ steps.vars.outputs.is_dry_run }}'
working-directory: './release'
- name: 'Create Issue on Failure'
if: "${{ failure() && github.event.inputs.environment != 'dev' && (github.event_name == 'schedule' || github.event.inputs.dry_run != 'true') }}"
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
RELEASE_TAG: '${{ steps.nightly_version.outputs.RELEASE_TAG }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |
gh issue create \
--title "Nightly Release Failed for ${RELEASE_TAG} on $(date +'%Y-%m-%d')" \
--body "The nightly-release workflow failed. See the full run for details: ${DETAILS_URL}" \
--label 'release-failure,priority/p0'
@@ -0,0 +1,188 @@
name: 'Release: Patch (0) from Comment'
on:
issue_comment:
types: ['created']
jobs:
slash-command:
runs-on: 'ubuntu-latest'
# Only run if the comment is from a human user (not automated)
if: "github.event.comment.user.type == 'User' && github.event.comment.user.login != 'github-actions[bot]'"
permissions:
contents: 'write'
pull-requests: 'write'
actions: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
fetch-depth: 1
- name: 'Slash Command Dispatch'
id: 'slash_command'
uses: 'peter-evans/slash-command-dispatch@40877f718dce0101edfc7aea2b3800cc192f9ed5'
with:
token: '${{ secrets.GITHUB_TOKEN }}'
commands: 'patch'
permission: 'write'
issue-type: 'pull-request'
- name: 'Get PR Status'
id: 'pr_status'
if: "startsWith(github.event.comment.body, '/patch')"
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
gh pr view "${{ github.event.issue.number }}" --json mergeCommit,state > pr_status.json
echo "MERGE_COMMIT_SHA=$(jq -r .mergeCommit.oid pr_status.json)" >> "$GITHUB_OUTPUT"
echo "STATE=$(jq -r .state pr_status.json)" >> "$GITHUB_OUTPUT"
- name: 'Dispatch if Merged'
if: "steps.pr_status.outputs.STATE == 'MERGED'"
id: 'dispatch_patch'
uses: 'actions/github-script@00f12e3e20659f42342b1c0226afda7f7c042325'
env:
COMMENT_BODY: '${{ github.event.comment.body }}'
with:
github-token: '${{ secrets.GITHUB_TOKEN }}'
script: |
// Parse the comment body directly to extract channel(s)
const commentBody = process.env.COMMENT_BODY;
console.log('Comment body:', commentBody);
let channels = ['stable', 'preview']; // default to both
// Parse different formats:
// /patch (defaults to both)
// /patch both
// /patch stable
// /patch preview
if (commentBody.trim() === '/patch' || commentBody.trim() === '/patch both') {
channels = ['stable', 'preview'];
} else if (commentBody.trim() === '/patch stable') {
channels = ['stable'];
} else if (commentBody.trim() === '/patch preview') {
channels = ['preview'];
} else {
// Fallback parsing for legacy formats
if (commentBody.includes('channel=preview')) {
channels = ['preview'];
} else if (commentBody.includes('--channel preview')) {
channels = ['preview'];
}
}
console.log('Detected channels:', channels);
const dispatchedRuns = [];
// Dispatch workflow for each channel
for (const channel of channels) {
console.log(`Dispatching workflow for channel: ${channel}`);
const response = await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'release-patch-1-create-pr.yml',
ref: 'main',
inputs: {
commit: '${{ steps.pr_status.outputs.MERGE_COMMIT_SHA }}',
channel: channel,
original_pr: '${{ github.event.issue.number }}',
environment: 'prod'
}
});
dispatchedRuns.push({ channel, response });
}
// Wait a moment for the workflows to be created
await new Promise(resolve => setTimeout(resolve, 3000));
const runs = await github.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'release-patch-1-create-pr.yml',
per_page: 20 // Increased to handle multiple runs
});
// Find the recent runs that match our trigger
const recentRuns = runs.data.workflow_runs.filter(run =>
run.event === 'workflow_dispatch' &&
new Date(run.created_at) > new Date(Date.now() - 15000) // Within last 15 seconds
).slice(0, channels.length); // Limit to the number of channels we dispatched
// Set outputs
core.setOutput('dispatched_channels', channels.join(','));
core.setOutput('dispatched_run_count', channels.length.toString());
if (recentRuns.length > 0) {
core.setOutput('dispatched_run_urls', recentRuns.map(r => r.html_url).join(','));
core.setOutput('dispatched_run_ids', recentRuns.map(r => r.id).join(','));
}
- name: 'Comment on Failure'
if: "startsWith(github.event.comment.body, '/patch') && steps.pr_status.outputs.STATE != 'MERGED'"
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
with:
token: '${{ secrets.GITHUB_TOKEN }}'
issue-number: '${{ github.event.issue.number }}'
body: |
:x: The `/patch` command failed. This pull request must be merged before a patch can be created.
- name: 'Final Status Comment - Success'
if: "always() && startsWith(github.event.comment.body, '/patch') && steps.dispatch_patch.outcome == 'success' && steps.dispatch_patch.outputs.dispatched_run_urls"
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
with:
token: '${{ secrets.GITHUB_TOKEN }}'
issue-number: '${{ github.event.issue.number }}'
body: |
✅ **Patch workflow(s) dispatched successfully!**
**📋 Details:**
- **Channels**: `${{ steps.dispatch_patch.outputs.dispatched_channels }}`
- **Commit**: `${{ steps.pr_status.outputs.MERGE_COMMIT_SHA }}`
- **Workflows Created**: ${{ steps.dispatch_patch.outputs.dispatched_run_count }}
**🔗 Track Progress:**
- [View patch workflows](https://github.com/${{ github.repository }}/actions/workflows/release-patch-1-create-pr.yml)
- [This workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
- name: 'Final Status Comment - Dispatch Success (No URL)'
if: "always() && startsWith(github.event.comment.body, '/patch') && steps.dispatch_patch.outcome == 'success' && !steps.dispatch_patch.outputs.dispatched_run_urls"
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
with:
token: '${{ secrets.GITHUB_TOKEN }}'
issue-number: '${{ github.event.issue.number }}'
body: |
✅ **Patch workflow(s) dispatched successfully!**
**📋 Details:**
- **Channels**: `${{ steps.dispatch_patch.outputs.dispatched_channels }}`
- **Commit**: `${{ steps.pr_status.outputs.MERGE_COMMIT_SHA }}`
- **Workflows Created**: ${{ steps.dispatch_patch.outputs.dispatched_run_count }}
**🔗 Track Progress:**
- [View patch workflows](https://github.com/${{ github.repository }}/actions/workflows/release-patch-1-create-pr.yml)
- [This workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
- name: 'Final Status Comment - Failure'
if: "always() && startsWith(github.event.comment.body, '/patch') && (steps.dispatch_patch.outcome == 'failure' || steps.dispatch_patch.outcome == 'cancelled')"
uses: 'peter-evans/create-or-update-comment@67dcc547d311b736a8e6c5c236542148a47adc3d'
with:
token: '${{ secrets.GITHUB_TOKEN }}'
issue-number: '${{ github.event.issue.number }}'
body: |
❌ **Patch workflow dispatch failed!**
There was an error dispatching the patch creation workflow.
**🔍 Troubleshooting:**
- Check that the PR is properly merged
- Verify workflow permissions
- Review error logs in the workflow run
**🔗 Debug Links:**
- [This workflow run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
- [Patch workflow history](https://github.com/${{ github.repository }}/actions/workflows/release-patch-1-create-pr.yml)
@@ -0,0 +1,134 @@
name: 'Release: Patch (1) Create PR'
run-name: >-
Release Patch (1) Create PR | S:${{ inputs.channel }} | C:${{ inputs.commit }} ${{ inputs.original_pr && format('| PR:#{0}', inputs.original_pr) || '' }}
on:
workflow_dispatch:
inputs:
commit:
description: 'The commit SHA to cherry-pick for the patch.'
required: true
type: 'string'
channel:
description: 'The release channel to patch.'
required: true
type: 'choice'
options:
- 'stable'
- 'preview'
dry_run:
description: 'Whether to run in dry-run mode.'
required: false
type: 'boolean'
default: false
ref:
description: 'The branch, tag, or SHA to test from.'
required: false
type: 'string'
default: 'main'
original_pr:
description: 'The original PR number to comment back on.'
required: false
type: 'string'
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
create-patch:
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
permissions:
contents: 'write'
pull-requests: 'write'
actions: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5
with:
ref: '${{ github.event.inputs.ref }}'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'configure .npmrc'
uses: './.github/actions/setup-npmrc'
with:
github-token: '${{ secrets.GITHUB_TOKEN }}'
- name: 'Install Script Dependencies'
run: 'npm ci'
- name: 'Configure Git User'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
REPOSITORY: '${{ github.repository }}'
run: |-
git config user.name "gemini-cli-robot"
git config user.email "gemini-cli-robot@google.com"
# Configure git to use GITHUB_TOKEN for remote operations (has actions:write for workflow files)
git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/${REPOSITORY}.git"
- name: 'Create Patch'
id: 'create_patch'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
GH_TOKEN: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
CLI_PACKAGE_NAME: '${{ vars.CLI_PACKAGE_NAME }}'
PATCH_COMMIT: '${{ github.event.inputs.commit }}'
PATCH_CHANNEL: '${{ github.event.inputs.channel }}'
ORIGINAL_PR: '${{ github.event.inputs.original_pr }}'
DRY_RUN: '${{ github.event.inputs.dry_run }}'
continue-on-error: true
run: |
# Capture output and display it in logs using tee
{
node scripts/releasing/create-patch-pr.js \
--cli-package-name="${CLI_PACKAGE_NAME}" \
--commit="${PATCH_COMMIT}" \
--channel="${PATCH_CHANNEL}" \
--pullRequestNumber="${ORIGINAL_PR}" \
--dry-run="${DRY_RUN}"
} 2>&1 | tee >(
echo "LOG_CONTENT<<EOF" >> "$GITHUB_ENV"
cat >> "$GITHUB_ENV"
echo "EOF" >> "$GITHUB_ENV"
)
echo "EXIT_CODE=${PIPESTATUS[0]}" >> "$GITHUB_OUTPUT"
- name: 'Comment on Original PR'
if: 'always() && inputs.original_pr'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ORIGINAL_PR: '${{ github.event.inputs.original_pr }}'
EXIT_CODE: '${{ steps.create_patch.outputs.EXIT_CODE }}'
COMMIT: '${{ github.event.inputs.commit }}'
CHANNEL: '${{ github.event.inputs.channel }}'
REPOSITORY: '${{ github.repository }}'
GITHUB_RUN_ID: '${{ github.run_id }}'
LOG_CONTENT: '${{ env.LOG_CONTENT }}'
TARGET_REF: '${{ github.event.inputs.ref }}'
ENVIRONMENT: '${{ github.event.inputs.environment }}'
continue-on-error: true
run: |
git checkout "${TARGET_REF}"
node scripts/releasing/patch-create-comment.js
- name: 'Fail Workflow if Main Task Failed'
if: 'always() && steps.create_patch.outputs.EXIT_CODE != 0'
env:
EXIT_CODE: '${{ steps.create_patch.outputs.EXIT_CODE }}'
run: |
echo "Patch creation failed with exit code: ${EXIT_CODE}"
echo "Check the logs above and the comment posted to the original PR for details."
exit 1
@@ -0,0 +1,94 @@
name: 'Release: Patch (2) Trigger'
run-name: >-
Release Patch (2) Trigger |
${{ github.event.pull_request.number && format('PR #{0}', github.event.pull_request.number) || 'Manual' }} |
${{ github.event.pull_request.head.ref || github.event.inputs.ref }}
on:
pull_request:
types:
- 'closed'
branches:
- 'release/**'
workflow_dispatch:
inputs:
ref:
description: 'The head ref of the merged hotfix PR to trigger the release for (e.g. hotfix/v1.2.3/cherry-pick-abc).'
required: true
type: 'string'
workflow_ref:
description: 'The ref to checkout the workflow code from.'
required: false
type: 'string'
default: 'main'
workflow_id:
description: 'The workflow to trigger. Defaults to release-patch-3-release.yml'
required: false
type: 'string'
default: 'release-patch-3-release.yml'
dry_run:
description: 'Whether this is a dry run.'
required: false
type: 'boolean'
default: false
force_skip_tests:
description: 'Select to skip the "Run Tests" step in testing. Prod releases should run tests'
required: false
type: 'boolean'
default: false
test_mode:
description: 'Whether or not to run in test mode'
required: false
type: 'boolean'
default: false
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
trigger-patch-release:
if: "(github.event_name == 'pull_request' && github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'hotfix/')) || github.event_name == 'workflow_dispatch'"
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
permissions:
actions: 'write'
contents: 'write'
pull-requests: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: "${{ github.event.inputs.workflow_ref || 'main' }}"
fetch-depth: 1
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
run: 'npm ci'
- name: 'Trigger Patch Release'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
HEAD_REF: "${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.event.inputs.ref }}"
PR_BODY: "${{ github.event_name == 'pull_request' && github.event.pull_request.body || '' }}"
WORKFLOW_ID: '${{ github.event.inputs.workflow_id }}'
GITHUB_REPOSITORY_OWNER: '${{ github.repository_owner }}'
GITHUB_REPOSITORY_NAME: '${{ github.event.repository.name }}'
GITHUB_EVENT_NAME: '${{ github.event_name }}'
GITHUB_EVENT_PAYLOAD: '${{ toJSON(github.event) }}'
FORCE_SKIP_TESTS: '${{ github.event.inputs.force_skip_tests }}'
TEST_MODE: '${{ github.event.inputs.test_mode }}'
ENVIRONMENT: "${{ github.event.inputs.environment || 'prod' }}"
DRY_RUN: '${{ github.event.inputs.dry_run }}'
run: |
node scripts/releasing/patch-trigger.js --dry-run="${DRY_RUN}"
@@ -0,0 +1,251 @@
name: 'Release: Patch (3) Release'
run-name: >-
Release Patch (3) Release | T:${{ inputs.type }} | R:${{ inputs.release_ref }} ${{ inputs.original_pr && format('| PR:#{0}', inputs.original_pr) || '' }}
on:
workflow_dispatch:
inputs:
type:
description: 'The type of release to perform.'
required: true
type: 'choice'
options:
- 'stable'
- 'preview'
dry_run:
description: 'Run a dry-run of the release process; no branches, npm packages or GitHub releases will be created.'
required: true
type: 'boolean'
default: true
force_skip_tests:
description: 'Select to skip the "Run Tests" step in testing. Prod releases should run tests'
required: false
type: 'boolean'
default: false
release_ref:
description: 'The branch, tag, or SHA to release from.'
required: true
type: 'string'
original_pr:
description: 'The original PR number to comment back on.'
required: false
type: 'string'
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
release:
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
permissions:
contents: 'write'
packages: 'write'
pull-requests: 'write'
issues: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
fetch-depth: 0
fetch-tags: true
- name: 'Checkout Release Code'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.release_ref }}'
path: 'release'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'configure .npmrc'
uses: './.github/actions/setup-npmrc'
with:
github-token: '${{ secrets.GITHUB_TOKEN }}'
- name: 'Install Script Dependencies'
run: |-
npm ci
- name: 'Install Dependencies'
working-directory: './release'
run: |-
npm ci
- name: 'Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Get Patch Version'
id: 'patch_version'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
PATCH_FROM: '${{ github.event.inputs.type }}'
CLI_PACKAGE_NAME: '${{vars.CLI_PACKAGE_NAME}}'
run: |
# Use the existing get-release-version.js script to calculate patch version
# Run from main checkout which has full git history and access to npm
PATCH_JSON=$(node scripts/get-release-version.js --type=patch --cli-package-name="${CLI_PACKAGE_NAME}" --patch-from="${PATCH_FROM}")
echo "Patch version calculation result: ${PATCH_JSON}"
RELEASE_VERSION=$(echo "${PATCH_JSON}" | jq -r .releaseVersion)
RELEASE_TAG=$(echo "${PATCH_JSON}" | jq -r .releaseTag)
NPM_TAG=$(echo "${PATCH_JSON}" | jq -r .npmTag)
PREVIOUS_TAG=$(echo "${PATCH_JSON}" | jq -r .previousReleaseTag)
echo "RELEASE_VERSION=${RELEASE_VERSION}" >> "${GITHUB_OUTPUT}"
echo "RELEASE_TAG=${RELEASE_TAG}" >> "${GITHUB_OUTPUT}"
echo "NPM_TAG=${NPM_TAG}" >> "${GITHUB_OUTPUT}"
echo "PREVIOUS_TAG=${PREVIOUS_TAG}" >> "${GITHUB_OUTPUT}"
- name: 'Verify Version Consistency'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
CHANNEL: '${{ github.event.inputs.type }}'
ORIGINAL_RELEASE_VERSION: '${{ steps.patch_version.outputs.RELEASE_VERSION }}'
ORIGINAL_RELEASE_TAG: '${{ steps.patch_version.outputs.RELEASE_TAG }}'
ORIGINAL_PREVIOUS_TAG: '${{ steps.patch_version.outputs.PREVIOUS_TAG }}'
run: |
echo "🔍 Verifying no concurrent patch releases have occurred..."
# Store original calculation for comparison
echo "Original calculation:"
echo " Release version: ${ORIGINAL_RELEASE_VERSION}"
echo " Release tag: ${ORIGINAL_RELEASE_TAG}"
echo " Previous tag: ${ORIGINAL_PREVIOUS_TAG}"
# Re-run the same version calculation script
echo "Re-calculating version to check for changes..."
CURRENT_PATCH_JSON=$(node scripts/get-release-version.js --cli-package-name="${{vars.CLI_PACKAGE_NAME}}" --type=patch --patch-from="${CHANNEL}")
CURRENT_RELEASE_VERSION=$(echo "${CURRENT_PATCH_JSON}" | jq -r .releaseVersion)
CURRENT_RELEASE_TAG=$(echo "${CURRENT_PATCH_JSON}" | jq -r .releaseTag)
CURRENT_PREVIOUS_TAG=$(echo "${CURRENT_PATCH_JSON}" | jq -r .previousReleaseTag)
echo "Current calculation:"
echo " Release version: ${CURRENT_RELEASE_VERSION}"
echo " Release tag: ${CURRENT_RELEASE_TAG}"
echo " Previous tag: ${CURRENT_PREVIOUS_TAG}"
# Compare calculations
if [[ "${ORIGINAL_RELEASE_VERSION}" != "${CURRENT_RELEASE_VERSION}" ]] || \
[[ "${ORIGINAL_RELEASE_TAG}" != "${CURRENT_RELEASE_TAG}" ]] || \
[[ "${ORIGINAL_PREVIOUS_TAG}" != "${CURRENT_PREVIOUS_TAG}" ]]; then
echo "❌ RACE CONDITION DETECTED: Version calculations have changed!"
echo "This indicates another patch release completed while this one was in progress."
echo ""
echo "Originally planned: ${ORIGINAL_RELEASE_VERSION} (from ${ORIGINAL_PREVIOUS_TAG})"
echo "Should now build: ${CURRENT_RELEASE_VERSION} (from ${CURRENT_PREVIOUS_TAG})"
echo ""
echo "# Setting outputs for failure comment"
echo "CURRENT_RELEASE_VERSION=${CURRENT_RELEASE_VERSION}" >> "${GITHUB_ENV}"
echo "CURRENT_RELEASE_TAG=${CURRENT_RELEASE_TAG}" >> "${GITHUB_ENV}"
echo "CURRENT_PREVIOUS_TAG=${CURRENT_PREVIOUS_TAG}" >> "${GITHUB_ENV}"
echo "The patch release must be restarted to use the correct version numbers."
exit 1
fi
echo "✅ Version calculations unchanged - proceeding with release"
- name: 'Print Calculated Version'
run: |-
echo "Patch Release Summary:"
echo " Release Version: ${{ steps.patch_version.outputs.RELEASE_VERSION }}"
echo " Release Tag: ${{ steps.patch_version.outputs.RELEASE_TAG }}"
echo " NPM Tag: ${{ steps.patch_version.outputs.NPM_TAG }}"
echo " Previous Tag: ${{ steps.patch_version.outputs.PREVIOUS_TAG }}"
- name: 'Run Tests'
if: "${{github.event.inputs.force_skip_tests != 'true'}}"
uses: './.github/actions/run-tests'
with:
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
working-directory: './release'
- name: 'Publish Release'
uses: './.github/actions/publish-release'
with:
release-version: '${{ steps.patch_version.outputs.RELEASE_VERSION }}'
release-tag: '${{ steps.patch_version.outputs.RELEASE_TAG }}'
npm-tag: '${{ steps.patch_version.outputs.NPM_TAG }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
dry-run: '${{ github.event.inputs.dry_run }}'
previous-tag: '${{ steps.patch_version.outputs.PREVIOUS_TAG }}'
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
npm-registry-publish-url: '${{ vars.NPM_REGISTRY_PUBLISH_URL }}'
npm-registry-url: '${{ vars.NPM_REGISTRY_URL }}'
npm-registry-scope: '${{ vars.NPM_REGISTRY_SCOPE }}'
cli-package-name: '${{ vars.CLI_PACKAGE_NAME }}'
core-package-name: '${{ vars.CORE_PACKAGE_NAME }}'
a2a-package-name: '${{ vars.A2A_PACKAGE_NAME }}'
working-directory: './release'
- name: 'Create Issue on Failure'
if: '${{ failure() && github.event.inputs.dry_run == false }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
RELEASE_TAG: '${{ steps.patch_version.outputs.RELEASE_TAG }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |
gh issue create \
--title 'Patch Release Failed for ${RELEASE_TAG} on $(date +'%Y-%m-%d')' \
--body 'The patch-release workflow failed. See the full run for details: ${DETAILS_URL}' \
--label 'release-failure,priority/p0'
- name: 'Comment Success on Original PR'
if: '${{ success() && github.event.inputs.original_pr }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ORIGINAL_PR: '${{ github.event.inputs.original_pr }}'
SUCCESS: 'true'
RELEASE_VERSION: '${{ steps.patch_version.outputs.RELEASE_VERSION }}'
RELEASE_TAG: '${{ steps.patch_version.outputs.RELEASE_TAG }}'
NPM_TAG: '${{ steps.patch_version.outputs.NPM_TAG }}'
CHANNEL: '${{ github.event.inputs.type }}'
DRY_RUN: '${{ github.event.inputs.dry_run }}'
GITHUB_RUN_ID: '${{ github.run_id }}'
GITHUB_REPOSITORY_OWNER: '${{ github.repository_owner }}'
GITHUB_REPOSITORY_NAME: '${{ github.event.repository.name }}'
run: |
node scripts/releasing/patch-comment.js
- name: 'Comment Failure on Original PR'
if: '${{ failure() && github.event.inputs.original_pr }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ORIGINAL_PR: '${{ github.event.inputs.original_pr }}'
SUCCESS: 'false'
RELEASE_VERSION: '${{ steps.patch_version.outputs.RELEASE_VERSION }}'
RELEASE_TAG: '${{ steps.patch_version.outputs.RELEASE_TAG }}'
NPM_TAG: '${{ steps.patch_version.outputs.NPM_TAG }}'
CHANNEL: '${{ github.event.inputs.type }}'
DRY_RUN: '${{ github.event.inputs.dry_run }}'
GITHUB_RUN_ID: '${{ github.run_id }}'
GITHUB_REPOSITORY_OWNER: '${{ github.repository_owner }}'
GITHUB_REPOSITORY_NAME: '${{ github.event.repository.name }}'
# Pass current version info for race condition failures
CURRENT_RELEASE_VERSION: '${{ env.CURRENT_RELEASE_VERSION }}'
CURRENT_RELEASE_TAG: '${{ env.CURRENT_RELEASE_TAG }}'
CURRENT_PREVIOUS_TAG: '${{ env.CURRENT_PREVIOUS_TAG }}'
run: |
# Check if this was a version consistency failure
if [[ -n "${CURRENT_RELEASE_VERSION}" ]]; then
echo "Detected version race condition failure - posting specific comment with current version info"
export RACE_CONDITION_FAILURE=true
fi
node scripts/releasing/patch-comment.js
+406
View File
@@ -0,0 +1,406 @@
name: 'Release: Promote'
on:
workflow_dispatch:
inputs:
dry_run:
description: 'Run a dry-run of the release process; no branches, npm packages or GitHub releases will be created.'
required: true
type: 'boolean'
default: true
force_skip_tests:
description: 'Select to skip the "Run Tests" step in testing. Prod releases should run tests'
required: false
type: 'boolean'
default: false
ref:
description: 'The branch, tag, or SHA to release from.'
required: false
type: 'string'
default: 'main'
stable_version_override:
description: 'Manually override the stable version number.'
required: false
type: 'string'
preview_version_override:
description: 'Manually override the preview version number.'
required: false
type: 'string'
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
calculate-versions:
name: 'Calculate Versions and Plan'
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
outputs:
STABLE_VERSION: '${{ steps.versions.outputs.STABLE_VERSION }}'
STABLE_SHA: '${{ steps.versions.outputs.STABLE_SHA }}'
PREVIOUS_STABLE_TAG: '${{ steps.versions.outputs.PREVIOUS_STABLE_TAG }}'
PREVIEW_VERSION: '${{ steps.versions.outputs.PREVIEW_VERSION }}'
PREVIEW_SHA: '${{ steps.versions.outputs.PREVIEW_SHA }}'
PREVIOUS_PREVIEW_TAG: '${{ steps.versions.outputs.PREVIOUS_PREVIEW_TAG }}'
NEXT_NIGHTLY_VERSION: '${{ steps.versions.outputs.NEXT_NIGHTLY_VERSION }}'
PREVIOUS_NIGHTLY_TAG: '${{ steps.versions.outputs.PREVIOUS_NIGHTLY_TAG }}'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
fetch-depth: 0
fetch-tags: true
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
run: 'npm ci'
- name: 'Print Inputs'
shell: 'bash'
env:
JSON_INPUTS: '${{ toJSON(inputs) }}'
run: 'echo "$JSON_INPUTS"'
- name: 'Calculate Versions and SHAs'
id: 'versions'
env:
GH_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
STABLE_OVERRIDE: '${{ github.event.inputs.stable_version_override }}'
PREVIEW_OVERRIDE: '${{ github.event.inputs.preview_version_override }}'
REF_INPUT: '${{ github.event.inputs.ref }}'
run: |
set -e
STABLE_COMMAND="node scripts/get-release-version.js --type=stable"
if [[ -n "${STABLE_OVERRIDE}" ]]; then
STABLE_COMMAND+=" --stable_version_override=${STABLE_OVERRIDE}"
fi
PREVIEW_COMMAND="node scripts/get-release-version.js --type=preview"
if [[ -n "${PREVIEW_OVERRIDE}" ]]; then
PREVIEW_COMMAND+=" --preview_version_override=${PREVIEW_OVERRIDE}"
fi
NIGHTLY_COMMAND="node scripts/get-release-version.js --type=promote-nightly"
STABLE_JSON=$(${STABLE_COMMAND})
STABLE_VERSION=$(echo "${STABLE_JSON}" | jq -r .releaseVersion)
PREVIEW_COMMAND+=" --stable-base-version=${STABLE_VERSION}"
NIGHTLY_COMMAND+=" --stable-base-version=${STABLE_VERSION}"
PREVIEW_JSON=$(${PREVIEW_COMMAND})
NIGHTLY_JSON=$(${NIGHTLY_COMMAND})
echo "STABLE_JSON_COMMAND=${STABLE_COMMAND}"
echo "PREVIEW_JSON_COMMAND=${PREVIEW_COMMAND}"
echo "NIGHTLY_JSON_COMMAND=${NIGHTLY_COMMAND}"
echo "STABLE_JSON: ${STABLE_JSON}"
echo "PREVIEW_JSON: ${PREVIEW_JSON}"
echo "NIGHTLY_JSON: ${NIGHTLY_JSON}"
echo "STABLE_VERSION=${STABLE_VERSION}" >> "${GITHUB_OUTPUT}"
# shellcheck disable=SC1083
echo "STABLE_SHA=$(git rev-parse "$(echo "${PREVIEW_JSON}" | jq -r .previousReleaseTag)"^{commit})" >> "${GITHUB_OUTPUT}"
echo "PREVIOUS_STABLE_TAG=$(echo "${STABLE_JSON}" | jq -r .previousReleaseTag)" >> "${GITHUB_OUTPUT}"
echo "PREVIEW_VERSION=$(echo "${PREVIEW_JSON}" | jq -r .releaseVersion)" >> "${GITHUB_OUTPUT}"
# shellcheck disable=SC1083
REF="${REF_INPUT}"
SHA=$(git ls-remote origin "$REF" | awk -v ref="$REF" '$2 == "refs/heads/"ref || $2 == "refs/tags/"ref || $2 == ref {print $1}' | head -n 1)
if [ -z "$SHA" ]; then
if [[ "$REF" =~ ^[0-9a-f]{7,40}$ ]]; then
SHA="$REF"
else
echo "::error::Could not resolve ref '$REF' to a commit SHA."
exit 1
fi
fi
echo "PREVIEW_SHA=$SHA" >> "${GITHUB_OUTPUT}"
echo "PREVIOUS_PREVIEW_TAG=$(echo "${PREVIEW_JSON}" | jq -r .previousReleaseTag)" >> "${GITHUB_OUTPUT}"
echo "NEXT_NIGHTLY_VERSION=$(echo "${NIGHTLY_JSON}" | jq -r .releaseVersion)" >> "${GITHUB_OUTPUT}"
echo "PREVIOUS_NIGHTLY_TAG=$(echo "${NIGHTLY_JSON}" | jq -r .previousReleaseTag)" >> "${GITHUB_OUTPUT}"
CURRENT_NIGHTLY_TAG=$(git describe --tags --abbrev=0 --match="*nightly*")
echo "CURRENT_NIGHTLY_TAG=${CURRENT_NIGHTLY_TAG}" >> "${GITHUB_OUTPUT}"
echo "NEXT_SHA=$SHA" >> "${GITHUB_OUTPUT}"
- name: 'Display Pending Updates'
env:
STABLE_VERSION: '${{ steps.versions.outputs.STABLE_VERSION }}'
STABLE_SHA: '${{ steps.versions.outputs.STABLE_SHA }}'
PREVIOUS_STABLE_TAG: '${{ steps.versions.outputs.PREVIOUS_STABLE_TAG }}'
PREVIEW_VERSION: '${{ steps.versions.outputs.PREVIEW_VERSION }}'
PREVIEW_SHA: '${{ steps.versions.outputs.PREVIEW_SHA }}'
PREVIOUS_PREVIEW_TAG: '${{ steps.versions.outputs.PREVIOUS_PREVIEW_TAG }}'
NEXT_NIGHTLY_VERSION: '${{ steps.versions.outputs.NEXT_NIGHTLY_VERSION }}'
PREVIOUS_NIGHTLY_TAG: '${{ steps.versions.outputs.PREVIOUS_NIGHTLY_TAG }}'
INPUT_REF: '${{ github.event.inputs.ref }}'
run: |
echo "Release Plan:"
echo "-----------"
echo "Stable Release: ${STABLE_VERSION}"
echo " - Commit: ${STABLE_SHA}"
echo " - Previous Tag: ${PREVIOUS_STABLE_TAG}"
echo ""
echo "Preview Release: ${PREVIEW_VERSION}"
echo " - Commit: ${PREVIEW_SHA} (${INPUT_REF})"
echo " - Previous Tag: ${PREVIOUS_PREVIEW_TAG}"
echo ""
echo "Preparing Next Nightly Release: ${NEXT_NIGHTLY_VERSION}"
echo " - Merging Version Update PR to Branch: ${INPUT_REF}"
echo " - Previous Tag: ${PREVIOUS_NIGHTLY_TAG}"
test:
name: 'Test ${{ matrix.channel }}'
needs: 'calculate-versions'
runs-on: 'ubuntu-latest'
strategy:
fail-fast: false
matrix:
include:
- channel: 'stable'
sha: '${{ needs.calculate-versions.outputs.STABLE_SHA }}'
- channel: 'preview'
sha: '${{ needs.calculate-versions.outputs.PREVIEW_SHA }}'
- channel: 'nightly'
sha: '${{ github.event.inputs.ref }}'
steps:
- name: 'Checkout Ref'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref }}'
- name: 'Checkout correct SHA'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ matrix.sha }}'
path: 'release'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
working-directory: './release'
run: 'npm ci'
- name: 'Run Tests'
if: "${{github.event.inputs.force_skip_tests != 'true'}}"
uses: './.github/actions/run-tests'
with:
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
working-directory: './release'
publish-preview:
name: 'Publish preview'
needs: ['calculate-versions', 'test']
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
permissions:
contents: 'write'
packages: 'write'
issues: 'write'
steps:
- name: 'Checkout Ref'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref }}'
- name: 'Checkout correct SHA'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ needs.calculate-versions.outputs.PREVIEW_SHA }}'
path: 'release'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
working-directory: './release'
run: 'npm ci'
- name: 'Publish Release'
uses: './.github/actions/publish-release'
with:
release-version: '${{ needs.calculate-versions.outputs.PREVIEW_VERSION }}'
release-tag: 'v${{ needs.calculate-versions.outputs.PREVIEW_VERSION }}'
npm-tag: 'preview'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
dry-run: '${{ github.event.inputs.dry_run }}'
previous-tag: '${{ needs.calculate-versions.outputs.PREVIOUS_PREVIEW_TAG }}'
working-directory: './release'
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
force-skip-tests: '${{ github.event.inputs.force_skip_tests }}'
npm-registry-publish-url: '${{ vars.NPM_REGISTRY_PUBLISH_URL }}'
npm-registry-url: '${{ vars.NPM_REGISTRY_URL }}'
npm-registry-scope: '${{ vars.NPM_REGISTRY_SCOPE }}'
cli-package-name: '${{ vars.CLI_PACKAGE_NAME }}'
core-package-name: '${{ vars.CORE_PACKAGE_NAME }}'
a2a-package-name: '${{ vars.A2A_PACKAGE_NAME }}'
- name: 'Create Issue on Failure'
if: '${{ failure() && github.event.inputs.dry_run == false }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
RELEASE_TAG: 'v${{ needs.calculate-versions.outputs.PREVIEW_VERSION }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |
gh issue create \
--title 'Promote Release Failed for ${RELEASE_TAG} on $(date +'%Y-%m-%d')' \
--body 'The promote-release workflow failed during preview publish. See the full run for details: ${DETAILS_URL}' \
--label 'release-failure,priority/p0'
publish-stable:
name: 'Publish stable'
needs: ['calculate-versions', 'test', 'publish-preview']
runs-on: 'ubuntu-latest'
environment: "${{ github.event.inputs.environment || 'prod' }}"
permissions:
contents: 'write'
packages: 'write'
issues: 'write'
steps:
- name: 'Checkout Ref'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref }}'
- name: 'Checkout correct SHA'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ needs.calculate-versions.outputs.STABLE_SHA }}'
path: 'release'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
working-directory: './release'
run: 'npm ci'
- name: 'Publish Release'
uses: './.github/actions/publish-release'
with:
release-version: '${{ needs.calculate-versions.outputs.STABLE_VERSION }}'
release-tag: 'v${{ needs.calculate-versions.outputs.STABLE_VERSION }}'
npm-tag: 'latest'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
dry-run: '${{ github.event.inputs.dry_run }}'
previous-tag: '${{ needs.calculate-versions.outputs.PREVIOUS_STABLE_TAG }}'
working-directory: './release'
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
force-skip-tests: '${{ github.event.inputs.force_skip_tests }}'
npm-registry-publish-url: '${{ vars.NPM_REGISTRY_PUBLISH_URL }}'
npm-registry-url: '${{ vars.NPM_REGISTRY_URL }}'
npm-registry-scope: '${{ vars.NPM_REGISTRY_SCOPE }}'
cli-package-name: '${{ vars.CLI_PACKAGE_NAME }}'
core-package-name: '${{ vars.CORE_PACKAGE_NAME }}'
a2a-package-name: '${{ vars.A2A_PACKAGE_NAME }}'
- name: 'Create Issue on Failure'
if: '${{ failure() && github.event.inputs.dry_run == false }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
RELEASE_TAG: 'v${{ needs.calculate-versions.outputs.STABLE_VERSION }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |
gh issue create \
--title 'Promote Release Failed for ${RELEASE_TAG} on $(date +'%Y-%m-%d')' \
--body 'The promote-release workflow failed during stable publish. See the full run for details: ${DETAILS_URL}' \
--label 'release-failure,priority/p0'
nightly-pr:
name: 'Create Nightly PR'
needs: ['publish-stable', 'calculate-versions']
runs-on: 'ubuntu-latest'
permissions:
contents: 'write'
pull-requests: 'write'
issues: 'write'
steps:
- name: 'Checkout Ref'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref }}'
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
cache: 'npm'
- name: 'Install Dependencies'
run: 'npm ci'
- name: 'Configure Git User'
run: |-
git config user.name "gemini-cli-robot"
git config user.email "gemini-cli-robot@google.com"
- name: 'Create and switch to a new branch'
id: 'release_branch'
run: |
BRANCH_NAME="chore/nightly-version-bump-${{ needs.calculate-versions.outputs.NEXT_NIGHTLY_VERSION }}"
git switch -c "${BRANCH_NAME}"
echo "BRANCH_NAME=${BRANCH_NAME}" >> "${GITHUB_OUTPUT}"
- name: 'Update package versions'
run: 'npm run release:version "${{ needs.calculate-versions.outputs.NEXT_NIGHTLY_VERSION }}"'
- name: 'Commit and Push package versions'
env:
BRANCH_NAME: '${{ steps.release_branch.outputs.BRANCH_NAME }}'
DRY_RUN: '${{ github.event.inputs.dry_run }}'
run: |-
git add package.json packages/*/package.json
if [ -f package-lock.json ]; then
git add package-lock.json
fi
git commit -m "chore(release): bump version to ${{ needs.calculate-versions.outputs.NEXT_NIGHTLY_VERSION }}"
if [[ "${DRY_RUN}" == "false" ]]; then
echo "Pushing release branch to remote..."
git push --set-upstream origin "${BRANCH_NAME}"
else
echo "Dry run enabled. Skipping push."
fi
- name: 'Create and Merge Pull Request'
uses: './.github/actions/create-pull-request'
with:
branch-name: '${{ steps.release_branch.outputs.BRANCH_NAME }}'
pr-title: 'chore(release): bump version to ${{ needs.calculate-versions.outputs.NEXT_NIGHTLY_VERSION }}'
pr-body: 'Automated version bump to prepare for the next nightly release.'
github-token: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
dry-run: '${{ github.event.inputs.dry_run }}'
- name: 'Create Issue on Failure'
if: '${{ failure() && github.event.inputs.dry_run == false }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
RELEASE_TAG: 'v${{ needs.calculate-versions.outputs.NEXT_NIGHTLY_VERSION }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |
gh issue create \
--title 'Promote Release Failed for ${RELEASE_TAG} on $(date +'%Y-%m-%d')' \
--body 'The promote-release workflow failed during nightly PR creation. See the full run for details: ${DETAILS_URL}' \
--label 'release-failure,priority/p0'
+241
View File
@@ -0,0 +1,241 @@
name: 'Release: Rollback change'
on:
workflow_dispatch:
inputs:
rollback_origin:
description: 'The package version to rollback FROM and delete (e.g., 0.5.0-preview-2)'
required: true
type: 'string'
rollback_destination:
description: 'The package version to rollback TO (e.g., 0.5.0-preview-2). This version must already exist on the npm registry.'
required: false
type: 'string'
channel:
description: 'The npm dist-tag to apply to rollback_destination (e.g., latest, preview, nightly). REQUIRED IF rollback_destination is set.'
required: false
type: 'choice'
options:
- 'latest'
- 'preview'
- 'nightly'
- 'dev'
default: 'dev'
ref:
description: 'The branch, tag, or SHA to run from.'
required: false
type: 'string'
default: 'main'
dry-run:
description: 'Whether to run in dry-run mode.'
required: false
type: 'boolean'
default: true
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
change-tags:
environment: "${{ github.event.inputs.environment || 'prod' }}"
runs-on: 'ubuntu-latest'
permissions:
packages: 'write'
issues: 'write'
steps:
- name: 'Checkout repository'
uses: 'actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955' # ratchet:actions/checkout@v4
with:
ref: '${{ github.event.inputs.ref }}'
fetch-depth: 0
- name: 'Setup Node.js'
uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020'
with:
node-version-file: '.nvmrc'
- name: 'configure .npmrc'
uses: './.github/actions/setup-npmrc'
with:
github-token: '${{ secrets.GITHUB_TOKEN }}'
- name: 'Get Origin Version Tag'
id: 'origin_tag'
shell: 'bash'
env:
ROLLBACK_ORIGIN: '${{ github.event.inputs.rollback_origin }}'
run: |
TAG_VALUE="v${ROLLBACK_ORIGIN}"
echo "ORIGIN_TAG=$TAG_VALUE" >> "$GITHUB_OUTPUT"
- name: 'Get Origin Commit Hash'
id: 'origin_hash'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ORIGIN_TAG: '${{ steps.origin_tag.outputs.ORIGIN_TAG }}'
shell: 'bash'
run: |
echo "ORIGIN_HASH=$(git rev-parse "${ORIGIN_TAG}")" >> "$GITHUB_OUTPUT"
- name: 'Change tag'
if: "${{ github.event.inputs.rollback_destination != '' }}"
uses: './.github/actions/tag-npm-release'
with:
channel: '${{ github.event.inputs.channel }}'
version: '${{ github.event.inputs.rollback_destination }}'
dry-run: '${{ github.event.inputs.dry-run }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
cli-package-name: '${{ vars.CLI_PACKAGE_NAME }}'
core-package-name: '${{ vars.CORE_PACKAGE_NAME }}'
a2a-package-name: '${{ vars.A2A_PACKAGE_NAME }}'
- name: 'Get cli Token'
uses: './.github/actions/npm-auth-token'
id: 'cli-token'
with:
package-name: '${{ vars.CLI_PACKAGE_NAME }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
- name: 'Deprecate Cli Npm Package'
if: "${{ github.event.inputs.dry-run == 'false' && github.event.inputs.environment == 'prod' }}"
env:
NODE_AUTH_TOKEN: '${{ steps.cli-token.outputs.auth-token }}'
PACKAGE_NAME: '${{ vars.CLI_PACKAGE_NAME }}'
ROLLBACK_ORIGIN: '${{ github.event.inputs.rollback_origin }}'
shell: 'bash'
run: |
npm deprecate "${PACKAGE_NAME}@${ROLLBACK_ORIGIN}" "This version has been rolled back."
- name: 'Get core Token'
uses: './.github/actions/npm-auth-token'
id: 'core-token'
with:
package-name: '${{ vars.CLI_PACKAGE_NAME }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
- name: 'Deprecate Core Npm Package'
if: "${{ github.event.inputs.dry-run == 'false' && github.event.inputs.environment == 'prod' }}"
env:
NODE_AUTH_TOKEN: '${{ steps.core-token.outputs.auth-token }}'
PACKAGE_NAME: '${{ vars.CORE_PACKAGE_NAME }}'
ROLLBACK_ORIGIN: '${{ github.event.inputs.rollback_origin }}'
shell: 'bash'
run: |
npm deprecate "${PACKAGE_NAME}@${ROLLBACK_ORIGIN}" "This version has been rolled back."
- name: 'Get a2a Token'
uses: './.github/actions/npm-auth-token'
id: 'a2a-token'
with:
package-name: '${{ vars.A2A_PACKAGE_NAME }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
wombat-token-core: '${{ secrets.WOMBAT_TOKEN_CORE }}'
wombat-token-cli: '${{ secrets.WOMBAT_TOKEN_CLI }}'
wombat-token-a2a-server: '${{ secrets.WOMBAT_TOKEN_A2A_SERVER }}'
- name: 'Deprecate A2A Server Npm Package'
if: "${{ github.event.inputs.dry-run == 'false' && github.event.inputs.environment == 'prod' }}"
env:
NODE_AUTH_TOKEN: '${{ steps.a2a-token.outputs.auth-token }}'
PACKAGE_NAME: '${{ vars.A2A_PACKAGE_NAME }}'
ROLLBACK_ORIGIN: '${{ github.event.inputs.rollback_origin }}'
shell: 'bash'
run: |
npm deprecate "${PACKAGE_NAME}@${ROLLBACK_ORIGIN}" "This version has been rolled back."
- name: 'Delete Github Release'
if: "${{ github.event.inputs.dry-run == 'false' && github.event.inputs.environment == 'prod'}}"
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ORIGIN_TAG: '${{ steps.origin_tag.outputs.ORIGIN_TAG }}'
shell: 'bash'
run: |
gh release delete "${ORIGIN_TAG}" --yes
- name: 'Verify Origin Release Deletion'
if: "${{ github.event.inputs.dry-run == 'false' }}"
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
TARGET_TAG: '${{ steps.origin_tag.outputs.ORIGIN_TAG }}'
shell: 'bash'
run: |
RELEASE_TAG=$(gh release view "$TARGET_TAG" --json tagName --jq .tagName)
if [ "$RELEASE_TAG" = "$TARGET_TAG" ]; then
echo "❌ Failed to delete release with tag ${TARGET_TAG}"
echo '❌ This means the release was not deleted, and the workflow should fail.'
exit 1
fi
- name: 'Add Rollback Tag'
id: 'rollback_tag'
if: "${{ github.event.inputs.dry-run == 'false' }}"
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
ROLLBACK_TAG_NAME: '${{ steps.origin_tag.outputs.ORIGIN_TAG }}-rollback'
ORIGIN_HASH: '${{ steps.origin_hash.outputs.ORIGIN_HASH }}'
shell: 'bash'
run: |
echo "ROLLBACK_TAG=$ROLLBACK_TAG_NAME" >> "$GITHUB_OUTPUT"
git tag "$ROLLBACK_TAG_NAME" "${ORIGIN_HASH}"
git push origin --tags
- name: 'Verify Rollback Tag Added'
if: "${{ github.event.inputs.dry-run == 'false' }}"
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
TARGET_TAG: '${{ steps.rollback_tag.outputs.ROLLBACK_TAG }}'
TARGET_HASH: '${{ steps.origin_hash.outputs.ORIGIN_HASH }}'
shell: 'bash'
run: |
ROLLBACK_COMMIT=$(git rev-parse -q --verify "$TARGET_TAG")
if [ "$ROLLBACK_COMMIT" != "$TARGET_HASH" ]; then
echo '❌ Failed to add tag $TARGET_TAG to commit $TARGET_HASH'
echo '❌ This means the tag was not added, and the workflow should fail.'
exit 1
fi
- name: 'Log Dry run'
if: "${{ github.event.inputs.dry-run == 'true' }}"
env:
ROLLBACK_ORIGIN: '${{ github.event.inputs.rollback_origin }}'
ROLLBACK_DESTINATION: '${{ github.event.inputs.rollback_destination }}'
CHANNEL: '${{ github.event.inputs.channel }}'
REF_INPUT: '${{ github.event.inputs.ref }}'
ORIGIN_TAG: '${{ steps.origin_tag.outputs.ORIGIN_TAG }}'
ORIGIN_HASH: '${{ steps.origin_hash.outputs.ORIGIN_HASH }}'
ROLLBACK_TAG: '${{ steps.rollback_tag.outputs.ROLLBACK_TAG }}'
CLI_PACKAGE_NAME: '${{ vars.CLI_PACKAGE_NAME }}'
CORE_PACKAGE_NAME: '${{ vars.CORE_PACKAGE_NAME }}'
A2A_PACKAGE_NAME: '${{ vars.A2A_PACKAGE_NAME }}'
shell: 'bash'
run: |
echo "
Inputs:
- rollback_origin: '${ROLLBACK_ORIGIN}'
- rollback_destination: '${ROLLBACK_DESTINATION}'
- channel: '${CHANNEL}'
- ref: '${REF_INPUT}'
Outputs:
- ORIGIN_TAG: '${ORIGIN_TAG}'
- ORIGIN_HASH: '${ORIGIN_HASH}'
- ROLLBACK_TAG: '${ROLLBACK_TAG}'
Would have npm deprecate ${CLI_PACKAGE_NAME}@${ROLLBACK_ORIGIN}, ${CORE_PACKAGE_NAME}@${ROLLBACK_ORIGIN}, and ${A2A_PACKAGE_NAME}@${ROLLBACK_ORIGIN}
Would have deleted the github release with tag ${ORIGIN_TAG}
Would have added tag ${ORIGIN_TAG}-rollback to ${ORIGIN_HASH}
"
+49
View File
@@ -0,0 +1,49 @@
name: 'Release Sandbox'
on:
workflow_dispatch:
inputs:
ref:
description: 'The branch, tag, or SHA to release from.'
required: false
type: 'string'
default: 'main'
dry-run:
description: 'Whether this is a dry run.'
required: false
type: 'boolean'
default: true
jobs:
build:
runs-on: 'ubuntu-latest'
permissions:
contents: 'read'
packages: 'write'
issues: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref || github.sha }}'
fetch-depth: 0
- name: 'Push'
uses: './.github/actions/push-sandbox'
with:
dockerhub-username: '${{ secrets.DOCKER_SERVICE_ACCOUNT_NAME }}'
dockerhub-token: '${{ secrets.DOCKER_SERVICE_ACCOUNT_KEY }}'
github-actor: '${{ github.actor }}'
github-secret: '${{ secrets.GITHUB_TOKEN }}'
github-sha: '${{ github.sha }}'
github-ref-name: '${{github.event.inputs.ref}}'
dry-run: '${{ github.event.inputs.dry-run }}'
- name: 'Create Issue on Failure'
if: '${{ failure() && github.event.inputs.dry-run == false }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
run: |
gh issue create \
--title 'Sandbox Release Failed on $(date +'%Y-%m-%d')' \
--body 'The sandbox-release workflow failed. See the full run for details: ${DETAILS_URL}' \
--label 'release-failure,priority/p0'
+50
View File
@@ -0,0 +1,50 @@
name: 'On Merge Smoke Test'
on:
push:
branches:
- 'main'
- 'release/**'
workflow_dispatch:
inputs:
ref:
description: 'The branch, tag, or SHA to test on.'
required: false
type: 'string'
default: 'main'
dry-run:
description: 'Run a dry-run of the smoke test; No bug will be created'
required: true
type: 'boolean'
default: true
jobs:
smoke-test:
runs-on: 'ubuntu-latest'
permissions:
contents: 'write'
packages: 'write'
issues: 'write'
steps:
- name: 'Checkout'
uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
with:
ref: '${{ github.event.inputs.ref || github.sha }}'
fetch-depth: 0
- name: 'Install Dependencies'
run: 'npm ci'
- name: 'Build bundle'
run: 'npm run bundle'
- name: 'Smoke test bundle'
run: 'node ./bundle/gemini.js --version'
- name: 'Create Issue on Failure'
if: '${{ failure() && github.event.inputs.dry-run == false }}'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
DETAILS_URL: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
REF: '${{ github.event.inputs.ref }}'
run: |
gh issue create \
--title 'Smoke test failed on ${REF} @ $(date +'%Y-%m-%d')' \
--body 'Smoke test build failed. See the full run for details: ${DETAILS_URL}' \
--label 'priority/p0'
+44
View File
@@ -0,0 +1,44 @@
name: 'Mark stale issues and pull requests'
# Run as a daily cron at 1:30 AM
on:
schedule:
- cron: '30 1 * * *'
workflow_dispatch:
jobs:
stale:
strategy:
fail-fast: false
matrix:
runner:
- 'ubuntu-latest' # GitHub-hosted
runs-on: '${{ matrix.runner }}'
if: |-
${{ github.repository == 'google-gemini/gemini-cli' }}
permissions:
issues: 'write'
pull-requests: 'write'
concurrency:
group: '${{ github.workflow }}-stale'
cancel-in-progress: true
steps:
- uses: 'actions/stale@5bef64f19d7facfb25b37b414482c7164d639639' # ratchet:actions/stale@v9
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
stale-issue-message: >-
This issue has been automatically marked as stale due to 60 days of inactivity.
It will be closed in 14 days if no further activity occurs.
stale-pr-message: >-
This pull request has been automatically marked as stale due to 60 days of inactivity.
It will be closed in 14 days if no further activity occurs.
close-issue-message: >-
This issue has been closed due to 14 additional days of inactivity after being marked as stale.
If you believe this is still relevant, feel free to comment or reopen the issue. Thank you!
close-pr-message: >-
This pull request has been closed due to 14 additional days of inactivity after being marked as stale.
If this is still relevant, you are welcome to reopen or leave a comment. Thanks for contributing!
days-before-stale: 60
days-before-close: 14
exempt-issue-labels: 'pinned,security,🔒 maintainer only,help wanted,🗓️ Public Roadmap'
exempt-pr-labels: 'pinned,security,🔒 maintainer only,help wanted,🗓️ Public Roadmap'
+38
View File
@@ -0,0 +1,38 @@
name: 'Trigger E2E'
on:
workflow_dispatch:
inputs:
repo_name:
description: 'Repository name (e.g., owner/repo)'
required: false
type: 'string'
head_sha:
description: 'SHA of the commit to test'
required: false
type: 'string'
pull_request:
jobs:
save_repo_name:
runs-on: 'gemini-cli-ubuntu-16-core'
steps:
- name: 'Save Repo name'
env:
REPO_NAME: '${{ github.event.inputs.repo_name || github.event.pull_request.head.repo.full_name }}'
HEAD_SHA: '${{ github.event.inputs.head_sha || github.event.pull_request.head.sha }}'
run: |
mkdir -p ./pr
echo '${{ env.REPO_NAME }}' > ./pr/repo_name
echo '${{ env.HEAD_SHA }}' > ./pr/head_sha
- uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4
with:
name: 'repo_name'
path: 'pr/'
trigger_e2e:
name: 'Trigger e2e'
runs-on: 'gemini-cli-ubuntu-16-core'
steps:
- id: 'trigger-e2e'
run: |
echo "Trigger e2e workflow"
+51
View File
@@ -0,0 +1,51 @@
name: 'Verify NPM release tag'
on:
workflow_dispatch:
inputs:
version:
description: 'The expected Gemini binary version that should be released (e.g., 0.5.0-preview-2).'
required: true
type: 'string'
npm-tag:
description: 'NPM tag to verify'
required: true
type: 'choice'
options:
- 'dev'
- 'latest'
- 'preview'
- 'nightly'
default: 'latest'
environment:
description: 'Environment'
required: false
type: 'choice'
options:
- 'prod'
- 'dev'
default: 'prod'
jobs:
verify-release:
environment: "${{ github.event.inputs.environment || 'prod' }}"
runs-on: 'ubuntu-latest'
permissions:
contents: 'read'
packages: 'write'
issues: 'write'
steps:
- name: '📝 Print vars'
shell: 'bash'
run: 'echo "${{ toJSON(vars) }}"'
- uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8'
- name: 'Verify release'
uses: './.github/actions/verify-release'
with:
npm-package: '${{vars.CLI_PACKAGE_NAME}}@${{github.event.inputs.npm-tag}}'
expected-version: '${{github.event.inputs.version}}'
working-directory: '.'
gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
npm-registry-url: '${{ vars.NPM_REGISTRY_URL }}'
github-token: '${{ secrets.GITHUB_TOKEN }}'
npm-registry-scope: '${{ vars.NPM_REGISTRY_SCOPE }}'
+27 -2
View File
@@ -3,8 +3,18 @@
.env~
# gemini-cli settings
.gemini/
!gemini/config.yaml
# We want to keep the .gemini in the root of the repo and ignore any .gemini
# in subdirectories. In our root .gemini we want to allow for version control
# for subcommands.
**/.gemini/
!/.gemini/
.gemini/*
!.gemini/config.yaml
!.gemini/commands/
!.gemini/skills/
!.gemini/settings.json
# Note: .gemini-clipboard/ is NOT in gitignore so Gemini can access pasted images
# Dependency directory
node_modules
@@ -35,4 +45,19 @@ packages/*/coverage/
# Generated files
packages/cli/src/generated/
packages/core/src/generated/
.integration-tests/
packages/vscode-ide-companion/*.vsix
packages/cli/download-ripgrep*/
# GHA credentials
gha-creds-*.json
# Log files
patch_output.log
gemini-debug.log
.genkit
.gemini-clipboard/
.eslintcache
evals/logs/
+9
View File
@@ -0,0 +1,9 @@
npm run pre-commit || {
echo ''
echo '===================================================='
echo 'pre-commit checks failed. in case of emergency, run:'
echo ''
echo 'git commit --no-verify'
echo '===================================================='
exit 1
}
+6
View File
@@ -0,0 +1,6 @@
http://localhost:16686/
https://github.com/google-gemini/gemini-cli/issues/new/choose
https://github.com/google-gemini/maintainers-gemini-cli/blob/main/npm.md
https://github.com/settings/personal-access-tokens/new
https://github.com/settings/tokens/new
https://www.npmjs.com/package/@google/gemini-cli
+1 -1
View File
@@ -1 +1 @@
@gemini-cli:registry=https://us-west1-npm.pkg.dev/gemini-code-dev/gemini-code/
@google:registry=https://wombat-dressing-room.appspot.com
+1
View File
@@ -0,0 +1 @@
20
+23
View File
@@ -0,0 +1,23 @@
**/bundle
**/coverage
**/dist
**/.git
**/node_modules
.docker
.DS_Store
.env
.gemini/
.idea
.integration-tests/
*.iml
*.tsbuildinfo
*.vsix
bower_components
eslint.config.js
**/generated
gha-creds-*.json
junit.xml
.gemini-linters/
Thumbs.db
.pytest_cache
**/SKILL.md
+11 -1
View File
@@ -3,5 +3,15 @@
"trailingComma": "all",
"singleQuote": true,
"printWidth": 80,
"tabWidth": 2
"tabWidth": 2,
"overrides": [
{
"files": ["**/*.md"],
"options": {
"tabWidth": 2,
"printWidth": 80,
"proseWrap": "always"
}
}
]
}
+7
View File
@@ -0,0 +1,7 @@
{
"recommendations": [
"vitest.explorer",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint"
]
}
+34 -10
View File
@@ -7,24 +7,27 @@
{
"type": "node",
"request": "launch",
"name": "Launch CLI",
"name": "Build & Launch CLI",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "start"],
"runtimeArgs": ["run", "build-and-start"],
"skipFiles": ["<node_internals>/**"],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"env": {
"GEMINI_SANDBOX": "false",
"GEMINI_API_KEY": "testkey"
"GEMINI_SANDBOX": "false"
}
},
{
"type": "node",
"name": "Launch Companion VS Code Extension",
"type": "extensionHost",
"request": "launch",
"name": "Launch E2E",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "test:e2e", "read_many_files"],
"skipFiles": ["<node_internals>/**"],
"cwd": "${workspaceFolder}"
"args": [
"--extensionDevelopmentPath=${workspaceFolder}/packages/vscode-ide-companion"
],
"outFiles": [
"${workspaceFolder}/packages/vscode-ide-companion/dist/**/*.js"
],
"preLaunchTask": "npm: build: vscode-ide-companion"
},
{
"name": "Attach",
@@ -64,6 +67,27 @@
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": ["<node_internals>/**"]
},
{
"name": "Debug Integration Test File",
"type": "node",
"request": "launch",
"runtimeExecutable": "npx",
"runtimeArgs": [
"vitest",
"run",
"--root",
"./integration-tests",
"--inspect-brk=9229",
"${file}"
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": ["<node_internals>/**"],
"env": {
"GEMINI_SANDBOX": "false"
}
}
],
"inputs": [
+18 -1
View File
@@ -1,3 +1,20 @@
{
"typescript.tsserver.experimental.enableProjectDiagnostics": true
"typescript.tsserver.experimental.enableProjectDiagnostics": true,
"editor.tabSize": 2,
"editor.rulers": [80],
"editor.detectIndentation": false,
"editor.insertSpaces": true,
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"vitest.disableWorkspaceWarning": true
}
+9
View File
@@ -11,6 +11,15 @@
"problemMatcher": [],
"label": "npm: build",
"detail": "scripts/build.sh"
},
{
"type": "npm",
"script": "build",
"path": "packages/vscode-ide-companion",
"group": "build",
"problemMatcher": [],
"label": "npm: build: vscode-ide-companion",
"detail": "npm run build -w packages/vscode-ide-companion"
}
]
}
+89
View File
@@ -0,0 +1,89 @@
rules:
anchors:
forbid-duplicated-anchors: true
forbid-undeclared-aliases: true
forbid-unused-anchors: true
braces:
forbid: 'non-empty'
min-spaces-inside-empty: 0
max-spaces-inside-empty: 0
brackets:
min-spaces-inside: 0
max-spaces-inside: 0
min-spaces-inside-empty: 0
max-spaces-inside-empty: 0
colons:
max-spaces-before: 0
max-spaces-after: 1
commas:
max-spaces-before: 0
min-spaces-after: 1
max-spaces-after: 1
comments:
require-starting-space: true
ignore-shebangs: true
min-spaces-from-content: 1
comments-indentation: 'disable'
document-end:
present: false
document-start:
present: false
empty-lines:
max: 2
max-start: 0
max-end: 1
empty-values:
forbid-in-block-mappings: false
forbid-in-flow-mappings: true
float-values:
forbid-inf: false
forbid-nan: false
forbid-scientific-notation: false
require-numeral-before-decimal: false
hyphens:
max-spaces-after: 1
indentation:
spaces: 2
indent-sequences: true
check-multi-line-strings: false
key-duplicates: {}
new-line-at-end-of-file: {}
new-lines:
type: 'unix'
octal-values:
forbid-implicit-octal: true
forbid-explicit-octal: false
quoted-strings:
quote-type: 'single'
required: true
allow-quoted-quotes: true
trailing-spaces: {}
truthy:
allowed-values: ['true', 'false', 'on'] # GitHub Actions uses "on"
check-keys: true
ignore:
- 'thirdparty/'
- 'third_party/'
- 'vendor/'
- 'node_modules/'
+335 -78
View File
@@ -1,6 +1,18 @@
# How to Contribute
# How to contribute
We would love to accept your patches and contributions to this project.
We would love to accept your patches and contributions to this project. This
document includes:
- **[Before you begin](#before-you-begin):** Essential steps to take before
becoming a Gemini CLI contributor.
- **[Code contribution process](#code-contribution-process):** How to contribute
code to Gemini CLI.
- **[Development setup and workflow](#development-setup-and-workflow):** How to
set up your development environment and workflow.
- **[Documentation contribution process](#documentation-contribution-process):**
How to contribute documentation to Gemini CLI.
We're looking forward to seeing your contributions!
## Before you begin
@@ -20,78 +32,156 @@ sign a new one.
### Review our Community Guidelines
This project follows [Google's Open Source Community
Guidelines](https://opensource.google/conduct/).
This project follows
[Google's Open Source Community Guidelines](https://opensource.google/conduct/).
## Contribution Process
## Code contribution process
### Code Reviews
### Get started
The process for contributing code is as follows:
1. **Find an issue** that you want to work on. If an issue is tagged as
`🔒Maintainers only`, this means it is reserved for project maintainers. We
will not accept pull requests related to these issues. In the near future,
we will explicitly mark issues looking for contributions using the
`help wanted` label. If you believe an issue is a good candidate for
community contribution, please leave a comment on the issue. A maintainer
will review it and apply the `help-wanted` label if appropriate. Only
maintainers should attempt to add the `help-wanted` label to an issue.
2. **Fork the repository** and create a new branch.
3. **Make your changes** in the `packages/` directory.
4. **Ensure all checks pass** by running `npm run preflight`.
5. **Open a pull request** with your changes.
### Code reviews
All submissions, including submissions by project members, require review. We
use [GitHub pull requests](https://docs.github.com/articles/about-pull-requests)
for this purpose.
### Pull Request Guidelines
If your pull request involves changes to `packages/cli` (the frontend), we
recommend running our automated frontend review tool. **Note: This tool is
currently experimental.** It helps detect common React anti-patterns, testing
issues, and other frontend-specific best practices that are easy to miss.
To help us review and merge your PRs quickly, please follow these guidelines. PRs that do not meet these standards may be closed.
To run the review tool, enter the following command from within Gemini CLI:
#### 1. Link to an Existing Issue
```text
/review-frontend <PR_NUMBER>
```
All PRs should be linked to an existing issue in our tracker. This ensures that every change has been discussed and is aligned with the project's goals before any code is written.
Replace `<PR_NUMBER>` with your pull request number. Authors are encouraged to
run this on their own PRs for self-review, and reviewers should use it to
augment their manual review process.
### Self assigning issues
To assign an issue to yourself, simply add a comment with the text `/assign`.
The comment must contain only that text and nothing else. This command will
assign the issue to you, provided it is not already assigned.
Please note that you can have a maximum of 3 issues assigned to you at any given
time.
### Pull request guidelines
To help us review and merge your PRs quickly, please follow these guidelines.
PRs that do not meet these standards may be closed.
#### 1. Link to an existing issue
All PRs should be linked to an existing issue in our tracker. This ensures that
every change has been discussed and is aligned with the project's goals before
any code is written.
- **For bug fixes:** The PR should be linked to the bug report issue.
- **For features:** The PR should be linked to the feature request or proposal issue that has been approved by a maintainer.
- **For features:** The PR should be linked to the feature request or proposal
issue that has been approved by a maintainer.
If an issue for your change doesn't exist, please **open one first** and wait for feedback before you start coding.
If an issue for your change doesn't exist, we will automatically close your PR
along with a comment reminding you to associate the PR with an issue. The ideal
workflow starts with an issue that has been reviewed and approved by a
maintainer. Please **open the issue first** and wait for feedback before you
start coding.
#### 2. Keep It Small and Focused
#### 2. Keep it small and focused
We favor small, atomic PRs that address a single issue or add a single, self-contained feature.
We favor small, atomic PRs that address a single issue or add a single,
self-contained feature.
- **Do:** Create a PR that fixes one specific bug or adds one specific feature.
- **Don't:** Bundle multiple unrelated changes (e.g., a bug fix, a new feature, and a refactor) into a single PR.
- **Don't:** Bundle multiple unrelated changes (e.g., a bug fix, a new feature,
and a refactor) into a single PR.
Large changes should be broken down into a series of smaller, logical PRs that can be reviewed and merged independently.
Large changes should be broken down into a series of smaller, logical PRs that
can be reviewed and merged independently.
#### 3. Use Draft PRs for Work in Progress
#### 3. Use draft PRs for work in progress
If you'd like to get early feedback on your work, please use GitHub's **Draft Pull Request** feature. This signals to the maintainers that the PR is not yet ready for a formal review but is open for discussion and initial feedback.
If you'd like to get early feedback on your work, please use GitHub's **Draft
Pull Request** feature. This signals to the maintainers that the PR is not yet
ready for a formal review but is open for discussion and initial feedback.
#### 4. Ensure All Checks Pass
#### 4. Ensure all checks pass
Before submitting your PR, ensure that all automated checks are passing by running `npm run preflight`. This command runs all tests, linting, and other style checks.
Before submitting your PR, ensure that all automated checks are passing by
running `npm run preflight`. This command runs all tests, linting, and other
style checks.
#### 5. Update Documentation
#### 5. Update documentation
If your PR introduces a user-facing change (e.g., a new command, a modified flag, or a change in behavior), you must also update the relevant documentation in the `/docs` directory.
If your PR introduces a user-facing change (e.g., a new command, a modified
flag, or a change in behavior), you must also update the relevant documentation
in the `/docs` directory.
#### 6. Write Clear Commit Messages and a Good PR Description
See more about writing documentation:
[Documentation contribution process](#documentation-contribution-process).
Your PR should have a clear, descriptive title and a detailed description of the changes. Follow the [Conventional Commits](https://www.conventionalcommits.org/) standard for your commit messages.
#### 6. Write clear commit messages and a good PR description
- **Good PR Title:** `feat(cli): Add --json flag to 'config get' command`
- **Bad PR Title:** `Made some changes`
Your PR should have a clear, descriptive title and a detailed description of the
changes. Follow the [Conventional Commits](https://www.conventionalcommits.org/)
standard for your commit messages.
In the PR description, explain the "why" behind your changes and link to the relevant issue (e.g., `Fixes #123`).
- **Good PR title:** `feat(cli): Add --json flag to 'config get' command`
- **Bad PR title:** `Made some changes`
## Forking
In the PR description, explain the "why" behind your changes and link to the
relevant issue (e.g., `Fixes #123`).
If you are forking the repository you will be able to run the Built, Test and Integration test workflows. However in order to make the integration tests run you'll need to add a [Github Repository Secret](<[url](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository)>) with a value of `GEMINI_API_KEY` and set that to a valid API key that you have available. Your key and secret it private to your repo; no one without access can see your key and you cannot see any secrets related to this repo.
### Forking
Additionally you will need to click on the `Actions` tab and enable workflows for your repository, you'll find its the large blue button in the center of the screen.
If you are forking the repository you will be able to run the Build, Test and
Integration test workflows. However in order to make the integration tests run
you'll need to add a
[GitHub Repository Secret](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository)
with a value of `GEMINI_API_KEY` and set that to a valid API key that you have
available. Your key and secret are private to your repo; no one without access
can see your key and you cannot see any secrets related to this repo.
## Development Setup and Workflow
Additionally you will need to click on the `Actions` tab and enable workflows
for your repository, you'll find it's the large blue button in the center of the
screen.
This section guides contributors on how to build, modify, and understand the development setup of this project.
### Development setup and workflow
### Setting Up the Development Environment
This section guides contributors on how to build, modify, and understand the
development setup of this project.
### Setting up the development environment
**Prerequisites:**
1. Install [Node 18+](https://nodejs.org/en/download)
2. Git
1. **Node.js**:
- **Development:** Please use Node.js `~20.19.0`. This specific version is
required due to an upstream development dependency issue. You can use a
tool like [nvm](https://github.com/nvm-sh/nvm) to manage Node.js versions.
- **Production:** For running the CLI in a production environment, any
version of Node.js `>=20` is acceptable.
2. **Git**
### Build Process
### Build process
To clone the repository:
@@ -112,13 +202,19 @@ To build the entire project (all packages):
npm run build
```
This command typically compiles TypeScript to JavaScript, bundles assets, and prepares the packages for execution. Refer to `scripts/build.js` and `package.json` scripts for more details on what happens during the build.
This command typically compiles TypeScript to JavaScript, bundles assets, and
prepares the packages for execution. Refer to `scripts/build.js` and
`package.json` scripts for more details on what happens during the build.
### Enabling Sandboxing
### Enabling sandboxing
Container-based [sandboxing](#sandboxing) is highly recommended and requires, at a minimum, setting `GEMINI_SANDBOX=true` in your `~/.env` and ensuring a container engine (e.g. `docker` or `podman`) is available. See [Sandboxing](#sandboxing) for details.
[Sandboxing](#sandboxing) is highly recommended and requires, at a minimum,
setting `GEMINI_SANDBOX=true` in your `~/.env` and ensuring a sandboxing
provider (e.g. `macOS Seatbelt`, `docker`, or `podman`) is available. See
[Sandboxing](#sandboxing) for details.
To build both the `gemini` CLI utility and the sandbox container, run `build:all` from the root directory:
To build both the `gemini` CLI utility and the sandbox container, run
`build:all` from the root directory:
```bash
npm run build:all
@@ -126,21 +222,25 @@ npm run build:all
To skip building the sandbox container, you can use `npm run build` instead.
### Running
### Running the CLI
To start the Gemini CLI from the source code (after building), run the following command from the root directory:
To start the Gemini CLI from the source code (after building), run the following
command from the root directory:
```bash
npm start
```
If youd like to run the source build outside of the gemini-cli folder you can utilize `npm link path/to/gemini-cli/packages/cli` (see: [docs](https://docs.npmjs.com/cli/v9/commands/npm-link)) or `alias gemini="node path/to/gemini-cli/packages/cli"` to run with `gemini`
If you'd like to run the source build outside of the gemini-cli folder, you can
utilize `npm link path/to/gemini-cli/packages/cli` (see:
[docs](https://docs.npmjs.com/cli/v9/commands/npm-link)) or
`alias gemini="node path/to/gemini-cli/packages/cli"` to run with `gemini`
### Running Tests
### Running tests
This project contains two types of tests: unit tests and integration tests.
#### Unit Tests
#### Unit tests
To execute the unit test suite for the project:
@@ -148,11 +248,14 @@ To execute the unit test suite for the project:
npm run test
```
This will run tests located in the `packages/core` and `packages/cli` directories. Ensure tests pass before submitting any changes. For a more comprehensive check, it is recommended to run `npm run preflight`.
This will run tests located in the `packages/core` and `packages/cli`
directories. Ensure tests pass before submitting any changes. For a more
comprehensive check, it is recommended to run `npm run preflight`.
#### Integration Tests
#### Integration tests
The integration tests are designed to validate the end-to-end functionality of the Gemini CLI. They are not run as part of the default `npm run test` command.
The integration tests are designed to validate the end-to-end functionality of
the Gemini CLI. They are not run as part of the default `npm run test` command.
To run the integration tests, use the following command:
@@ -160,9 +263,10 @@ To run the integration tests, use the following command:
npm run test:e2e
```
For more detailed information on the integration testing framework, please see the [Integration Tests documentation](./docs/integration-tests.md).
For more detailed information on the integration testing framework, please see
the [Integration Tests documentation](/docs/integration-tests.md).
### Linting and Preflight Checks
### Linting and preflight checks
To ensure code quality and formatting consistency, run the preflight check:
@@ -170,11 +274,13 @@ To ensure code quality and formatting consistency, run the preflight check:
npm run preflight
```
This command will run ESLint, Prettier, all tests, and other checks as defined in the project's `package.json`.
This command will run ESLint, Prettier, all tests, and other checks as defined
in the project's `package.json`.
_ProTip_
after cloning create a git precommit hook file to ensure your commits are always clean.
after cloning create a git precommit hook file to ensure your commits are always
clean.
```bash
echo "
@@ -188,51 +294,71 @@ fi
#### Formatting
To separately format the code in this project by running the following command from the root directory:
To separately format the code in this project by running the following command
from the root directory:
```bash
npm run format
```
This command uses Prettier to format the code according to the project's style guidelines.
This command uses Prettier to format the code according to the project's style
guidelines.
#### Linting
To separately lint the code in this project, run the following command fro the root directory:
To separately lint the code in this project, run the following command from the
root directory:
```bash
npm run lint
```
### Coding Conventions
### Coding conventions
- Please adhere to the coding style, patterns, and conventions used throughout the existing codebase.
- Consult [GEMINI.md](https://github.com/google-gemini/gemini-cli/blob/main/GEMINI.md) (typically found in the project root) for specific instructions related to AI-assisted development, including conventions for React, comments, and Git usage.
- **Imports:** Pay special attention to import paths. The project uses `eslint-rules/no-relative-cross-package-imports.js` to enforce restrictions on relative imports between packages.
- Please adhere to the coding style, patterns, and conventions used throughout
the existing codebase.
- Consult
[GEMINI.md](https://github.com/google-gemini/gemini-cli/blob/main/GEMINI.md)
(typically found in the project root) for specific instructions related to
AI-assisted development, including conventions for React, comments, and Git
usage.
- **Imports:** Pay special attention to import paths. The project uses ESLint to
enforce restrictions on relative imports between packages.
### Project Structure
### Project structure
- `packages/`: Contains the individual sub-packages of the project.
- `a2a-server`: A2A server implementation for the Gemini CLI. (Experimental)
- `cli/`: The command-line interface.
- `server/`: The backend server that the CLI interacts with.
- `core/`: The core backend logic for the Gemini CLI.
- `test-utils` Utilities for creating and cleaning temporary file systems for
testing.
- `vscode-ide-companion/`: The Gemini CLI Companion extension pairs with
Gemini CLI.
- `docs/`: Contains all project documentation.
- `scripts/`: Utility scripts for building, testing, and development tasks.
For more detailed architecture, see `docs/architecture.md`.
## Debugging
### Debugging
### VS Code:
#### VS Code
0. Run the CLI to interactively debug in VS Code with `F5`
1. Start the CLI in debug mode from the root directory:
```bash
npm run debug
```
This command runs `node --inspect-brk dist/gemini.js` within the `packages/cli` directory, pausing execution until a debugger attaches. You can then open `chrome://inspect` in your Chrome browser to connect to the debugger.
2. In VS Code, use the "Attach" launch configuration (found in `.vscode/launch.json`).
This command runs `node --inspect-brk dist/gemini.js` within the
`packages/cli` directory, pausing execution until a debugger attaches. You
can then open `chrome://inspect` in your Chrome browser to connect to the
debugger.
2. In VS Code, use the "Attach" launch configuration (found in
`.vscode/launch.json`).
Alternatively, you can use the "Launch Program" configuration in VS Code if you prefer to launch the currently open file directly, but 'F5' is generally recommended.
Alternatively, you can use the "Launch Program" configuration in VS Code if you
prefer to launch the currently open file directly, but 'F5' is generally
recommended.
To hit a breakpoint inside the sandbox container run:
@@ -240,9 +366,14 @@ To hit a breakpoint inside the sandbox container run:
DEBUG=1 gemini
```
**Note:** If you have `DEBUG=true` in a project's `.env` file, it won't affect
gemini-cli due to automatic exclusion. Use `.gemini/.env` files for gemini-cli
specific debug settings.
### React DevTools
To debug the CLI's React-based UI, you can use React DevTools. Ink, the library used for the CLI's interface, is compatible with React DevTools version 4.x.
To debug the CLI's React-based UI, you can use React DevTools. Ink, the library
used for the CLI's interface, is compatible with React DevTools version 4.x.
1. **Start the Gemini CLI in development mode:**
@@ -250,7 +381,8 @@ To debug the CLI's React-based UI, you can use React DevTools. Ink, the library
DEV=true npm start
```
2. **Install and run React DevTools version 4.28.5 (or the latest compatible 4.x version):**
2. **Install and run React DevTools version 4.28.5 (or the latest compatible
4.x version):**
You can either install it globally:
@@ -268,25 +400,62 @@ To debug the CLI's React-based UI, you can use React DevTools. Ink, the library
Your running CLI application should then connect to React DevTools.
![](/docs/assets/connected_devtools.png)
## Sandboxing
### Sandboxing
### MacOS Seatbelt
#### macOS Seatbelt
On MacOS, `gemini` uses Seatbelt (`sandbox-exec`) under a `permissive-open` profile (see `packages/cli/src/utils/sandbox-macos-permissive-open.sb`) that restricts writes to the project folder but otherwise allows all other operations and outbound network traffic ("open") by default. You can switch to a `restrictive-closed` profile (see `.../sandbox-macos-strict.sb`) that declines all operations and outbound network traffic ("closed") by default by setting `SEATBELT_PROFILE=restrictive-closed` in your environment or `.env` file. Available built-in profiles are `{permissive,restrictive}-{open,closed,proxied}` (see below for proxied networking). You can also switch to a custom profile `SEATBELT_PROFILE=<profile>` if you also create a file `.gemini/sandbox-macos-<profile>.sb` under your project settings directory `.gemini`.
On macOS, `gemini` uses Seatbelt (`sandbox-exec`) under a `permissive-open`
profile (see `packages/cli/src/utils/sandbox-macos-permissive-open.sb`) that
restricts writes to the project folder but otherwise allows all other operations
and outbound network traffic ("open") by default. You can switch to a
`restrictive-closed` profile (see
`packages/cli/src/utils/sandbox-macos-restrictive-closed.sb`) that declines all
operations and outbound network traffic ("closed") by default by setting
`SEATBELT_PROFILE=restrictive-closed` in your environment or `.env` file.
Available built-in profiles are `{permissive,restrictive}-{open,closed,proxied}`
(see below for proxied networking). You can also switch to a custom profile
`SEATBELT_PROFILE=<profile>` if you also create a file
`.gemini/sandbox-macos-<profile>.sb` under your project settings directory
`.gemini`.
### Container-based Sandboxing (All Platforms)
#### Container-based sandboxing (all platforms)
For stronger container-based sandboxing on MacOS or other platforms, you can set `GEMINI_SANDBOX=true|docker|podman|<command>` in your environment or `.env` file. The specified command (or if `true` then either `docker` or `podman`) must be installed on the host machine. Once enabled, `npm run build:all` will build a minimal container ("sandbox") image and `npm start` will launch inside a fresh instance of that container. The first build can take 20-30s (mostly due to downloading of the base image) but after that both build and start overhead should be minimal. Default builds (`npm run build`) will not rebuild the sandbox.
For stronger container-based sandboxing on macOS or other platforms, you can set
`GEMINI_SANDBOX=true|docker|podman|<command>` in your environment or `.env`
file. The specified command (or if `true` then either `docker` or `podman`) must
be installed on the host machine. Once enabled, `npm run build:all` will build a
minimal container ("sandbox") image and `npm start` will launch inside a fresh
instance of that container. The first build can take 20-30s (mostly due to
downloading of the base image) but after that both build and start overhead
should be minimal. Default builds (`npm run build`) will not rebuild the
sandbox.
Container-based sandboxing mounts the project directory (and system temp directory) with read-write access and is started/stopped/removed automatically as you start/stop Gemini CLI. Files created within the sandbox should be automatically mapped to your user/group on host machine. You can easily specify additional mounts, ports, or environment variables by setting `SANDBOX_{MOUNTS,PORTS,ENV}` as needed. You can also fully customize the sandbox for your projects by creating the files `.gemini/sandbox.Dockerfile` and/or `.gemini/sandbox.bashrc` under your project settings directory (`.gemini`) and running `gemini` with `BUILD_SANDBOX=1` to trigger building of your custom sandbox.
Container-based sandboxing mounts the project directory (and system temp
directory) with read-write access and is started/stopped/removed automatically
as you start/stop Gemini CLI. Files created within the sandbox should be
automatically mapped to your user/group on host machine. You can easily specify
additional mounts, ports, or environment variables by setting
`SANDBOX_{MOUNTS,PORTS,ENV}` as needed. You can also fully customize the sandbox
for your projects by creating the files `.gemini/sandbox.Dockerfile` and/or
`.gemini/sandbox.bashrc` under your project settings directory (`.gemini`) and
running `gemini` with `BUILD_SANDBOX=1` to trigger building of your custom
sandbox.
#### Proxied Networking
#### Proxied networking
All sandboxing methods, including MacOS Seatbelt using `*-proxied` profiles, support restricting outbound network traffic through a custom proxy server that can be specified as `GEMINI_SANDBOX_PROXY_COMMAND=<command>`, where `<command>` must start a proxy server that listens on `:::8877` for relevant requests. See `scripts/example-proxy.js` for a minimal proxy that only allows `HTTPS` connections to `example.com:443` (e.g. `curl https://example.com`) and declines all other requests. The proxy is started and stopped automatically alongside the sandbox.
All sandboxing methods, including macOS Seatbelt using `*-proxied` profiles,
support restricting outbound network traffic through a custom proxy server that
can be specified as `GEMINI_SANDBOX_PROXY_COMMAND=<command>`, where `<command>`
must start a proxy server that listens on `:::8877` for relevant requests. See
`docs/examples/proxy-script.md` for a minimal proxy that only allows `HTTPS`
connections to `example.com:443` (e.g. `curl https://example.com`) and declines
all other requests. The proxy is started and stopped automatically alongside the
sandbox.
## Manual Publish
### Manual publish
We publish an artifact for each commit to our internal registry. But if you need to manually cut a local build, then run the following commands:
We publish an artifact for each commit to our internal registry. But if you need
to manually cut a local build, then run the following commands:
```
npm run clean
@@ -295,3 +464,91 @@ npm run auth
npm run prerelease:dev
npm publish --workspaces
```
## Documentation contribution process
Our documentation must be kept up-to-date with our code contributions. We want
our documentation to be clear, concise, and helpful to our users. We value:
- **Clarity:** Use simple and direct language. Avoid jargon where possible.
- **Accuracy:** Ensure all information is correct and up-to-date.
- **Completeness:** Cover all aspects of a feature or topic.
- **Examples:** Provide practical examples to help users understand how to use
Gemini CLI.
### Getting started
The process for contributing to the documentation is similar to contributing
code.
1. **Fork the repository** and create a new branch.
2. **Make your changes** in the `/docs` directory.
3. **Preview your changes locally** in Markdown rendering.
4. **Lint and format your changes.** Our preflight check includes linting and
formatting for documentation files.
```bash
npm run preflight
```
5. **Open a pull request** with your changes.
### Documentation structure
Our documentation is organized using [sidebar.json](/docs/sidebar.json) as the
table of contents. When adding new documentation:
1. Create your markdown file **in the appropriate directory** under `/docs`.
2. Add an entry to `sidebar.json` in the relevant section.
3. Ensure all internal links use relative paths and point to existing files.
### Style guide
We follow the
[Google Developer Documentation Style Guide](https://developers.google.com/style).
Please refer to it for guidance on writing style, tone, and formatting.
#### Key style points
- Use sentence case for headings.
- Write in second person ("you") when addressing the reader.
- Use present tense.
- Keep paragraphs short and focused.
- Use code blocks with appropriate language tags for syntax highlighting.
- Include practical examples whenever possible.
### Linting and formatting
We use `prettier` to enforce a consistent style across our documentation. The
`npm run preflight` command will check for any linting issues.
You can also run the linter and formatter separately:
- `npm run lint` - Check for linting issues
- `npm run format` - Auto-format markdown files
- `npm run lint:fix` - Auto-fix linting issues where possible
Please make sure your contributions are free of linting errors before submitting
a pull request.
### Before you submit
Before submitting your documentation pull request, please:
1. Run `npm run preflight` to ensure all checks pass.
2. Review your changes for clarity and accuracy.
3. Check that all links work correctly.
4. Ensure any code examples are tested and functional.
5. Sign the
[Contributor License Agreement (CLA)](https://cla.developers.google.com/) if
you haven't already.
### Need help?
If you have questions about contributing documentation:
- Check our [FAQ](/docs/faq.md).
- Review existing documentation for examples.
- Open [an issue](https://github.com/google-gemini/gemini-cli/issues) to discuss
your proposed changes.
- Reach out to the maintainers.
We appreciate your contributions to making Gemini CLI documentation better!
+4 -4
View File
@@ -40,11 +40,11 @@ ENV PATH=$PATH:/usr/local/share/npm-global/bin
USER node
# install gemini-cli and clean up
COPY packages/cli/dist/gemini-cli-cli-*.tgz /usr/local/share/npm-global/gemini-cli-cli.tgz
COPY packages/core/dist/gemini-cli-core-*.tgz /usr/local/share/npm-global/gemini-cli-core.tgz
RUN npm install -g /usr/local/share/npm-global/gemini-cli-cli.tgz /usr/local/share/npm-global/gemini-cli-core.tgz \
COPY packages/cli/dist/google-gemini-cli-*.tgz /tmp/gemini-cli.tgz
COPY packages/core/dist/google-gemini-cli-core-*.tgz /tmp/gemini-core.tgz
RUN npm install -g /tmp/gemini-cli.tgz /tmp/gemini-core.tgz \
&& npm cache clean --force \
&& rm -f /usr/local/share/npm-global/gemini-cli-{cli,core}.tgz
&& rm -f /tmp/gemini-{cli,core}.tgz
# default entrypoint when none specified
CMD ["gemini"]
+79 -182
View File
@@ -1,182 +1,79 @@
## Building and running
Before submitting any changes, it is crucial to validate them by running the full preflight check. This command will build the repository, run all tests, check for type errors, and lint the code.
To run the full suite of checks, execute the following command:
```bash
npm run preflight
```
This single command ensures that your changes meet all the quality gates of the project. While you can run the individual steps (`build`, `test`, `typecheck`, `lint`) separately, it is highly recommended to use `npm run preflight` to ensure a comprehensive validation.
## Writing Tests
This project uses **Vitest** as its primary testing framework. When writing tests, aim to follow existing patterns. Key conventions include:
### Test Structure and Framework
- **Framework**: All tests are written using Vitest (`describe`, `it`, `expect`, `vi`).
- **File Location**: Test files (`*.test.ts` for logic, `*.test.tsx` for React components) are co-located with the source files they test.
- **Configuration**: Test environments are defined in `vitest.config.ts` files.
- **Setup/Teardown**: Use `beforeEach` and `afterEach`. Commonly, `vi.resetAllMocks()` is called in `beforeEach` and `vi.restoreAllMocks()` in `afterEach`.
### Mocking (`vi` from Vitest)
- **ES Modules**: Mock with `vi.mock('module-name', async (importOriginal) => { ... })`. Use `importOriginal` for selective mocking.
- _Example_: `vi.mock('os', async (importOriginal) => { const actual = await importOriginal(); return { ...actual, homedir: vi.fn() }; });`
- **Mocking Order**: For critical dependencies (e.g., `os`, `fs`) that affect module-level constants, place `vi.mock` at the _very top_ of the test file, before other imports.
- **Hoisting**: Use `const myMock = vi.hoisted(() => vi.fn());` if a mock function needs to be defined before its use in a `vi.mock` factory.
- **Mock Functions**: Create with `vi.fn()`. Define behavior with `mockImplementation()`, `mockResolvedValue()`, or `mockRejectedValue()`.
- **Spying**: Use `vi.spyOn(object, 'methodName')`. Restore spies with `mockRestore()` in `afterEach`.
### Commonly Mocked Modules
- **Node.js built-ins**: `fs`, `fs/promises`, `os` (especially `os.homedir()`), `path`, `child_process` (`execSync`, `spawn`).
- **External SDKs**: `@google/genai`, `@modelcontextprotocol/sdk`.
- **Internal Project Modules**: Dependencies from other project packages are often mocked.
### React Component Testing (CLI UI - Ink)
- Use `render()` from `ink-testing-library`.
- Assert output with `lastFrame()`.
- Wrap components in necessary `Context.Provider`s.
- Mock custom React hooks and complex child components using `vi.mock()`.
### Asynchronous Testing
- Use `async/await`.
- For timers, use `vi.useFakeTimers()`, `vi.advanceTimersByTimeAsync()`, `vi.runAllTimersAsync()`.
- Test promise rejections with `await expect(promise).rejects.toThrow(...)`.
### General Guidance
- When adding tests, first examine existing tests to understand and conform to established conventions.
- Pay close attention to the mocks at the top of existing test files; they reveal critical dependencies and how they are managed in a test environment.
## Git Repo
The main branch for this project is called "main"
## JavaScript/TypeScript
When contributing to this React, Node, and TypeScript codebase, please prioritize the use of plain JavaScript objects with accompanying TypeScript interface or type declarations over JavaScript class syntax. This approach offers significant advantages, especially concerning interoperability with React and overall code maintainability.
### Preferring Plain Objects over Classes
JavaScript classes, by their nature, are designed to encapsulate internal state and behavior. While this can be useful in some object-oriented paradigms, it often introduces unnecessary complexity and friction when working with React's component-based architecture. Here's why plain objects are preferred:
- Seamless React Integration: React components thrive on explicit props and state management. Classes' tendency to store internal state directly within instances can make prop and state propagation harder to reason about and maintain. Plain objects, on the other hand, are inherently immutable (when used thoughtfully) and can be easily passed as props, simplifying data flow and reducing unexpected side effects.
- Reduced Boilerplate and Increased Conciseness: Classes often promote the use of constructors, this binding, getters, setters, and other boilerplate that can unnecessarily bloat code. TypeScript interface and type declarations provide powerful static type checking without the runtime overhead or verbosity of class definitions. This allows for more succinct and readable code, aligning with JavaScript's strengths in functional programming.
- Enhanced Readability and Predictability: Plain objects, especially when their structure is clearly defined by TypeScript interfaces, are often easier to read and understand. Their properties are directly accessible, and there's no hidden internal state or complex inheritance chains to navigate. This predictability leads to fewer bugs and a more maintainable codebase.
Simplified Immutability: While not strictly enforced, plain objects encourage an immutable approach to data. When you need to modify an object, you typically create a new one with the desired changes, rather than mutating the original. This pattern aligns perfectly with React's reconciliation process and helps prevent subtle bugs related to shared mutable state.
- Better Serialization and Deserialization: Plain JavaScript objects are naturally easy to serialize to JSON and deserialize back, which is a common requirement in web development (e.g., for API communication or local storage). Classes, with their methods and prototypes, can complicate this process.
### Embracing ES Module Syntax for Encapsulation
Rather than relying on Java-esque private or public class members, which can be verbose and sometimes limit flexibility, we strongly prefer leveraging ES module syntax (`import`/`export`) for encapsulating private and public APIs.
- Clearer Public API Definition: With ES modules, anything that is exported is part of the public API of that module, while anything not exported is inherently private to that module. This provides a very clear and explicit way to define what parts of your code are meant to be consumed by other modules.
- Enhanced Testability (Without Exposing Internals): By default, unexported functions or variables are not accessible from outside the module. This encourages you to test the public API of your modules, rather than their internal implementation details. If you find yourself needing to spy on or stub an unexported function for testing purposes, it's often a "code smell" indicating that the function might be a good candidate for extraction into its own separate, testable module with a well-defined public API. This promotes a more robust and maintainable testing strategy.
- Reduced Coupling: Explicitly defined module boundaries through import/export help reduce coupling between different parts of your codebase. This makes it easier to refactor, debug, and understand individual components in isolation.
### Avoiding `any` Types and Type Assertions; Preferring `unknown`
TypeScript's power lies in its ability to provide static type checking, catching potential errors before your code runs. To fully leverage this, it's crucial to avoid the `any` type and be judicious with type assertions.
- **The Dangers of `any`**: Using any effectively opts out of TypeScript's type checking for that particular variable or expression. While it might seem convenient in the short term, it introduces significant risks:
- **Loss of Type Safety**: You lose all the benefits of type checking, making it easy to introduce runtime errors that TypeScript would otherwise have caught.
- **Reduced Readability and Maintainability**: Code with `any` types is harder to understand and maintain, as the expected type of data is no longer explicitly defined.
- **Masking Underlying Issues**: Often, the need for any indicates a deeper problem in the design of your code or the way you're interacting with external libraries. It's a sign that you might need to refine your types or refactor your code.
- **Preferring `unknown` over `any`**: When you absolutely cannot determine the type of a value at compile time, and you're tempted to reach for any, consider using unknown instead. unknown is a type-safe counterpart to any. While a variable of type unknown can hold any value, you must perform type narrowing (e.g., using typeof or instanceof checks, or a type assertion) before you can perform any operations on it. This forces you to handle the unknown type explicitly, preventing accidental runtime errors.
```
function processValue(value: unknown) {
if (typeof value === 'string') {
// value is now safely a string
console.log(value.toUpperCase());
} else if (typeof value === 'number') {
// value is now safely a number
console.log(value * 2);
}
// Without narrowing, you cannot access properties or methods on 'value'
// console.log(value.someProperty); // Error: Object is of type 'unknown'.
}
```
- **Type Assertions (`as Type`) - Use with Caution**: Type assertions tell the TypeScript compiler, "Trust me, I know what I'm doing; this is definitely of this type." While there are legitimate use cases (e.g., when dealing with external libraries that don't have perfect type definitions, or when you have more information than the compiler), they should be used sparingly and with extreme caution.
- **Bypassing Type Checking**: Like `any`, type assertions bypass TypeScript's safety checks. If your assertion is incorrect, you introduce a runtime error that TypeScript would not have warned you about.
- **Code Smell in Testing**: A common scenario where `any` or type assertions might be tempting is when trying to test "private" implementation details (e.g., spying on or stubbing an unexported function within a module). This is a strong indication of a "code smell" in your testing strategy and potentially your code structure. Instead of trying to force access to private internals, consider whether those internal details should be refactored into a separate module with a well-defined public API. This makes them inherently testable without compromising encapsulation.
### Embracing JavaScript's Array Operators
To further enhance code cleanliness and promote safe functional programming practices, leverage JavaScript's rich set of array operators as much as possible. Methods like `.map()`, `.filter()`, `.reduce()`, `.slice()`, `.sort()`, and others are incredibly powerful for transforming and manipulating data collections in an immutable and declarative way.
Using these operators:
- Promotes Immutability: Most array operators return new arrays, leaving the original array untouched. This functional approach helps prevent unintended side effects and makes your code more predictable.
- Improves Readability: Chaining array operators often leads to more concise and expressive code than traditional for loops or imperative logic. The intent of the operation is clear at a glance.
- Facilitates Functional Programming: These operators are cornerstones of functional programming, encouraging the creation of pure functions that take inputs and produce outputs without causing side effects. This paradigm is highly beneficial for writing robust and testable code that pairs well with React.
By consistently applying these principles, we can maintain a codebase that is not only efficient and performant but also a joy to work with, both now and in the future.
## React (mirrored and adjusted from [react-mcp-server](https://github.com/facebook/react/blob/4448b18760d867f9e009e810571e7a3b8930bb19/compiler/packages/react-mcp-server/src/index.ts#L376C1-L441C94))
### Role
You are a React assistant that helps users write more efficient and optimizable React code. You specialize in identifying patterns that enable React Compiler to automatically apply optimizations, reducing unnecessary re-renders and improving application performance.
### Follow these guidelines in all code you produce and suggest
Use functional components with Hooks: Do not generate class components or use old lifecycle methods. Manage state with useState or useReducer, and side effects with useEffect (or related Hooks). Always prefer functions and Hooks for any new component logic.
Keep components pure and side-effect-free during rendering: Do not produce code that performs side effects (like subscriptions, network requests, or modifying external variables) directly inside the component's function body. Such actions should be wrapped in useEffect or performed in event handlers. Ensure your render logic is a pure function of props and state.
Respect one-way data flow: Pass data down through props and avoid any global mutations. If two components need to share data, lift that state up to a common parent or use React Context, rather than trying to sync local state or use external variables.
Never mutate state directly: Always generate code that updates state immutably. For example, use spread syntax or other methods to create new objects/arrays when updating state. Do not use assignments like state.someValue = ... or array mutations like array.push() on state variables. Use the state setter (setState from useState, etc.) to update state.
Accurately use useEffect and other effect Hooks: whenever you think you could useEffect, think and reason harder to avoid it. useEffect is primarily only used for synchronization, for example synchronizing React with some external state. IMPORTANT - Don't setState (the 2nd value returned by useState) within a useEffect as that will degrade performance. When writing effects, include all necessary dependencies in the dependency array. Do not suppress ESLint rules or omit dependencies that the effect's code uses. Structure the effect callbacks to handle changing values properly (e.g., update subscriptions on prop changes, clean up on unmount or dependency change). If a piece of logic should only run in response to a user action (like a form submission or button click), put that logic in an event handler, not in a useEffect. Where possible, useEffects should return a cleanup function.
Follow the Rules of Hooks: Ensure that any Hooks (useState, useEffect, useContext, custom Hooks, etc.) are called unconditionally at the top level of React function components or other Hooks. Do not generate code that calls Hooks inside loops, conditional statements, or nested helper functions. Do not call Hooks in non-component functions or outside the React component rendering context.
Use refs only when necessary: Avoid using useRef unless the task genuinely requires it (such as focusing a control, managing an animation, or integrating with a non-React library). Do not use refs to store application state that should be reactive. If you do use refs, never write to or read from ref.current during the rendering of a component (except for initial setup like lazy initialization). Any ref usage should not affect the rendered output directly.
Prefer composition and small components: Break down UI into small, reusable components rather than writing large monolithic components. The code you generate should promote clarity and reusability by composing components together. Similarly, abstract repetitive logic into custom Hooks when appropriate to avoid duplicating code.
Optimize for concurrency: Assume React may render your components multiple times for scheduling purposes (especially in development with Strict Mode). Write code that remains correct even if the component function runs more than once. For instance, avoid side effects in the component body and use functional state updates (e.g., setCount(c => c + 1)) when updating state based on previous state to prevent race conditions. Always include cleanup functions in effects that subscribe to external resources. Don't write useEffects for "do this when this changes" side-effects. This ensures your generated code will work with React's concurrent rendering features without issues.
Optimize to reduce network waterfalls - Use parallel data fetching wherever possible (e.g., start multiple requests at once rather than one after another). Leverage Suspense for data loading and keep requests co-located with the component that needs the data. In a server-centric approach, fetch related data together in a single request on the server side (using Server Components, for example) to reduce round trips. Also, consider using caching layers or global fetch management to avoid repeating identical requests.
Rely on React Compiler - useMemo, useCallback, and React.memo can be omitted if React Compiler is enabled. Avoid premature optimization with manual memoization. Instead, focus on writing clear, simple components with direct data flow and side-effect-free render functions. Let the React Compiler handle tree-shaking, inlining, and other performance enhancements to keep your code base simpler and more maintainable.
Design for a good user experience - Provide clear, minimal, and non-blocking UI states. When data is loading, show lightweight placeholders (e.g., skeleton screens) rather than intrusive spinners everywhere. Handle errors gracefully with a dedicated error boundary or a friendly inline message. Where possible, render partial data as it becomes available rather than making the user wait for everything. Suspense allows you to declare the loading states in your component tree in a natural way, preventing “flash” states and improving perceived performance.
### Process
1. Analyze the user's code for optimization opportunities:
- Check for React anti-patterns that prevent compiler optimization
- Look for component structure issues that limit compiler effectiveness
- Think about each suggestion you are making and consult React docs for best practices
2. Provide actionable guidance:
- Explain specific code changes with clear reasoning
- Show before/after examples when suggesting changes
- Only suggest changes that meaningfully improve optimization potential
### Optimization Guidelines
- State updates should be structured to enable granular updates
- Side effects should be isolated and dependencies clearly defined
## Comments policy
Only write high-value comments if at all. Avoid talking to the user through comments.
# Gemini CLI Project Context
Gemini CLI is an open-source AI agent that brings the power of Gemini directly
into the terminal. It is designed to be a terminal-first, extensible, and
powerful tool for developers.
## Project Overview
- **Purpose:** Provide a seamless terminal interface for Gemini models,
supporting code understanding, generation, automation, and integration via MCP
(Model Context Protocol).
- **Main Technologies:**
- **Runtime:** Node.js (>=20.0.0, recommended ~20.19.0 for development)
- **Language:** TypeScript
- **UI Framework:** React (using [Ink](https://github.com/vadimdemedes/ink)
for CLI rendering)
- **Testing:** Vitest
- **Bundling:** esbuild
- **Linting/Formatting:** ESLint, Prettier
- **Architecture:** Monorepo structure using npm workspaces.
- `packages/cli`: User-facing terminal UI, input processing, and display
rendering.
- `packages/core`: Backend logic, Gemini API orchestration, prompt
construction, and tool execution.
- `packages/core/src/tools/`: Built-in tools for file system, shell, and web
operations.
- `packages/a2a-server`: Experimental Agent-to-Agent server.
- `packages/vscode-ide-companion`: VS Code extension pairing with the CLI.
## Building and Running
- **Install Dependencies:** `npm install`
- **Build All:** `npm run build:all` (Builds packages, sandbox, and VS Code
companion)
- **Build Packages:** `npm run build`
- **Run in Development:** `npm run start`
- **Run in Debug Mode:** `npm run debug` (Enables Node.js inspector)
- **Bundle Project:** `npm run bundle`
- **Clean Artifacts:** `npm run clean`
## Testing and Quality
- **Test Commands:**
- **Unit (All):** `npm run test`
- **Integration (E2E):** `npm run test:e2e`
- **Workspace-Specific:** `npm test -w <pkg> -- <path>` (Note: `<path>` must
be relative to the workspace root, e.g.,
`-w @google/gemini-cli-core -- src/routing/modelRouterService.test.ts`)
- **Full Validation:** `npm run preflight` (Heaviest check; runs clean, install,
build, lint, type check, and tests. Recommended before submitting PRs.)
- **Individual Checks:** `npm run lint` / `npm run format` / `npm run typecheck`
## Development Conventions
- **Contributions:** Follow the process outlined in `CONTRIBUTING.md`. Requires
signing the Google CLA.
- **Pull Requests:** Keep PRs small, focused, and linked to an existing issue.
- **Commit Messages:** Follow the
[Conventional Commits](https://www.conventionalcommits.org/) standard.
- **Coding Style:** Adhere to existing patterns in `packages/cli` (React/Ink)
and `packages/core` (Backend logic).
- **Imports:** Use specific imports and avoid restricted relative imports
between packages (enforced by ESLint).
## Testing Conventions
- **Environment Variables:** When testing code that depends on environment
variables, use `vi.stubEnv('NAME', 'value')` in `beforeEach` and
`vi.unstubAllEnvs()` in `afterEach`. Avoid modifying `process.env` directly as
it can lead to test leakage and is less reliable. To "unset" a variable, use
an empty string `vi.stubEnv('NAME', '')`.
## Documentation
- Always use the `docs-writer` skill when you are asked to write, edit, or
review any documentation.
- Documentation is located in the `docs/` directory.
- Suggest documentation updates when code changes render existing documentation
obsolete or incomplete.
+1 -1
View File
@@ -199,4 +199,4 @@
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.
+3 -8
View File
@@ -7,9 +7,8 @@ help:
@echo ""
@echo "Usage:"
@echo " make install - Install npm dependencies"
@echo " make build - Build the entire project"
@echo " make build-sandbox - Build the sandbox container"
@echo " make build-all - Build the project and the sandbox"
@echo " make build - Build the main project"
@echo " make build-all - Build the main project and sandbox"
@echo " make test - Run the test suite"
@echo " make lint - Lint the code"
@echo " make format - Format the code"
@@ -17,7 +16,7 @@ help:
@echo " make clean - Remove generated files"
@echo " make start - Start the Gemini CLI"
@echo " make debug - Start the Gemini CLI in debug mode"
@echo " make release - Publish a new release"
@echo ""
@echo " make run-npx - Run the CLI using npx (for testing the published package)"
@echo " make create-alias - Create a 'gemini' alias for your shell"
@@ -27,8 +26,6 @@ install:
build:
npm run build
build-sandbox:
npm run build:sandbox
build-all:
npm run build:all
@@ -54,8 +51,6 @@ start:
debug:
npm run debug
release:
npm run publish:release
run-npx:
npx https://github.com/google-gemini/gemini-cli
+367 -95
View File
@@ -1,121 +1,393 @@
# Gemini CLI
[![Gemini CLI CI](https://github.com/google-gemini/gemini-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/google-gemini/gemini-cli/actions/workflows/ci.yml)
[![Gemini CLI E2E (Chained)](https://github.com/google-gemini/gemini-cli/actions/workflows/chained_e2e.yml/badge.svg)](https://github.com/google-gemini/gemini-cli/actions/workflows/chained_e2e.yml)
[![Version](https://img.shields.io/npm/v/@google/gemini-cli)](https://www.npmjs.com/package/@google/gemini-cli)
[![License](https://img.shields.io/github/license/google-gemini/gemini-cli)](https://github.com/google-gemini/gemini-cli/blob/main/LICENSE)
[![View Code Wiki](https://assets.codewiki.google/readme-badge/static.svg)](https://codewiki.google/github.com/google-gemini/gemini-cli?utm_source=badge&utm_medium=github&utm_campaign=github.com/google-gemini/gemini-cli)
This repository contains the Gemini CLI tool.
![Gemini CLI Screenshot](./docs/assets/gemini-screenshot.png)
## Quickstart
Gemini CLI is an open-source AI agent that brings the power of Gemini directly
into your terminal. It provides lightweight access to Gemini, giving you the
most direct path from your prompt to our model.
1. [Install Node 18+](https://nodejs.org/en/download).
2. [Get an API key from Google AI Studio](https://aistudio.google.com/apikey).
3. Set the API key in your shell using the following command, replacing `YOUR_API_KEY` with the API key you obtained: `export GEMINI_API_KEY="YOUR_API_KEY"`.
4. Run the Gemini CLI from your shell using the following command: `npx https://github.com/google-gemini/gemini-cli`
5. Enjoy.
Learn all about Gemini CLI in our [documentation](https://geminicli.com/docs/).
## Examples
## 🚀 Why Gemini CLI?
Once the CLI is running, you can start interacting with Gemini from your shell. Try a simple query:
- **🎯 Free tier**: 60 requests/min and 1,000 requests/day with personal Google
account.
- **🧠 Powerful Gemini 3 models**: Access to improved reasoning and 1M token
context window.
- **🔧 Built-in tools**: Google Search grounding, file operations, shell
commands, web fetching.
- **🔌 Extensible**: MCP (Model Context Protocol) support for custom
integrations.
- **💻 Terminal-first**: Designed for developers who live in the command line.
- **🛡️ Open source**: Apache 2.0 licensed.
```
> How can I build a web app?
## 📦 Installation
### Pre-requisites before installation
- Node.js version 20 or higher
- macOS, Linux, or Windows
### Quick Install
#### Run instantly with npx
```bash
# Using npx (no installation required)
npx @google/gemini-cli
```
Or ask it to perform a task using its tools:
#### Install globally with npm
```
> List files in the current directory.
```bash
npm install -g @google/gemini-cli
```
## API Key Setup
#### Install globally with Homebrew (macOS/Linux)
The Gemini CLI requires you to authenticate with Google's AI services. You'll need to configure **one** of the following authentication methods:
```bash
brew install gemini-cli
```
1. **Gemini Code Assist:**
#### Install globally with MacPorts (macOS)
- To enable this mode you only need set the GEMINI_CODE_ASSIST environment variable to true.
- You can temporarily set the environment variable in your current shell session using the following command:
```bash
export GEMINI_CODE_ASSIST="true"
```
- For repeated use, you can add the environment variable to your `.env` file (located in the project directory or user home directory) or your shell's configuration file (like `~/.bashrc`, `~/.zshrc`, or `~/.profile`). For example, the following command adds the environment variable to a `~/.bashrc` file:
```bash
echo 'export GEMINI_CODE_ASSIST="true"' >> ~/.bashrc
source ~/.bashrc
```
- There are two types of Google Accounts you can use with Gemini CLI:
- **Personal Google Account**: This is the standard, free account you use for services like Gmail, Google Photos, and Google Drive for personal use (e.g. your-name@gmail.com).
- **Google Workspace Account**: This is a paid service for businesses and organizations that provides a suite of productivity tools, including a custom email domain (e.g. your-name@your-company.com), enhanced security features, and administrative controls. These accounts are often managed by an employer or school.
- Google Workspace Account must configure a Google Cloud Project Id to use. You can temporarily set the environment variable in your current shell session using the following command:
```bash
export GOOGLE_CLOUD_PROJECT_ID="YOUR_PROJECT_ID"
```
- For repeated use, you can add the environment variable to your `.env` file (located in the project directory or user home directory) or your shell's configuration file (like `~/.bashrc`, `~/.zshrc`, or `~/.profile`). For example, the following command adds the environment variable to a `~/.bashrc` file:
```bash
echo 'export GOOGLE_CLOUD_PROJECT_ID="YOUR_PROJECT_ID"' >> ~/.bashrc
source ~/.bashrc
```
- During start up, Gemini CLI will direct you to a webpage for authentication. Once authenticated, your credentials will be cached locally so the web login can be skipped on subsequent runs. Cached credentials last about 20 hours before expiring.
- Note that the the web login must be done in a browser that can communicate with the machine Gemini Cli is being run from. (Specifically, the browser will be redirected to a localhost url that Gemini CLI will be listening on).
```bash
sudo port install gemini-cli
```
2. **Gemini API key:**
#### Install with Anaconda (for restricted environments)
- Obtain your API key from Google AI Studio: [https://aistudio.google.com/app/apikey](https://aistudio.google.com/app/apikey)
- Set the `GEMINI_API_KEY` environment variable. In the following methods, replace `YOUR_GEMINI_API_KEY` with the API key you obtained from Google AI Studio:
- You can temporarily set the environment variable in your current shell session using the following command:
```bash
export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"
```
- For repeated use, you can add the environment variable to your `.env` file (located in the project directory or user home directory) or your shell's configuration file (like `~/.bashrc`, `~/.zshrc`, or `~/.profile`). For example, the following command adds the environment variable to a `~/.bashrc` file:
```bash
echo 'export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"' >> ~/.bashrc
source ~/.bashrc
```
```bash
# Create and activate a new environment
conda create -y -n gemini_env -c conda-forge nodejs
conda activate gemini_env
3. **Google API Key (Vertex AI Express Mode):**
# Install Gemini CLI globally via npm (inside the environment)
npm install -g @google/gemini-cli
```
- You can use a general Google Cloud API key if it has been enabled for the Gemini API or Vertex AI.
- Set the `GOOGLE_API_KEY` and `GOOGLE_GENAI_USE_VERTEXAI` environment variables. In the following methods, replace `YOUR_GEMINI_API_KEY` with your Google Cloud API key:
- You can temporarily set these environment variables in your current shell session using the following commands:
```bash
export GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY"
export GOOGLE_GENAI_USE_VERTEXAI=true
```
- For repeated use, you can add the environment variables to your `.env` file (located in the project directory or user home directory) or your shell's configuration file (like `~/.bashrc`, `~/.zshrc`, or `~/.profile`). For example, the following commands adds the environment variables to a `~/.bashrc` file:
```bash
echo 'export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"' >> ~/.bashrc
echo 'export GOOGLE_GENAI_USE_VERTEXAI=true' >> ~/.bashrc
source ~/.bashrc
```
## Release Cadence and Tags
4. **Vertex AI (Project and Location):**
- Ensure you have a Google Cloud project and have enabled the Vertex AI API.
- Set up Application Default Credentials (ADC), using the following command:
```bash
gcloud auth application-default login
```
For more information, see [Set up Application Default Credentials for Google Cloud](https://cloud.google.com/docs/authentication/provide-credentials-adc).
- Set the `GOOGLE_CLOUD_PROJECT`, `GOOGLE_CLOUD_LOCATION`, and `GOOGLE_GENAI_USE_VERTEXAI` environment variables. In the following methods, replace `YOUR_PROJECT_ID` and `YOUR_PROJECT_LOCATION` with the relevant values for your project:
- You can temporarily set these environment variables in your current shell session using the following commands:
```bash
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION" # e.g., us-central1
export GOOGLE_GENAI_USE_VERTEXAI=true
```
- For repeated use, you can add the environment variables to your `.env` file (located in the project directory or user home directory) or your shell's configuration file (like `~/.bashrc`, `~/.zshrc`, or `~/.profile`). For example, the following commands adds the environment variables to a `~/.bashrc` file:
```bash
echo 'export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"' >> ~/.bashrc
echo 'export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"' >> ~/.bashrc
echo 'export GOOGLE_GENAI_USE_VERTEXAI=true' >> ~/.bashrc
source ~/.bashrc
```
See [Releases](./docs/releases.md) for more details.
### Next Steps
### Preview
- Learn how to [contribute to or build from the source](./CONTRIBUTING.md).
- Explore the available **[CLI Commands](./docs/cli/commands.md)**.
- If you encounter any issues, review the **[Troubleshooting guide](./docs/troubleshooting.md)**.
- For more comprehensive documentation, see the [full documentation](./docs/index.md).
New preview releases will be published each week at UTC 2359 on Tuesdays. These
releases will not have been fully vetted and may contain regressions or other
outstanding issues. Please help us test and install with `preview` tag.
## Gemini APIs
```bash
npm install -g @google/gemini-cli@preview
```
This project leverages the Gemini APIs to provide AI capabilities. For details on the terms of service governing the Gemini API, please refer to the [Gemini API Terms of Service](https://ai.google.dev/gemini-api/terms).
### Stable
- New stable releases will be published each week at UTC 2000 on Tuesdays, this
will be the full promotion of last week's `preview` release + any bug fixes
and validations. Use `latest` tag.
```bash
npm install -g @google/gemini-cli@latest
```
### Nightly
- New releases will be published each day at UTC 0000. This will be all changes
from the main branch as represented at time of release. It should be assumed
there are pending validations and issues. Use `nightly` tag.
```bash
npm install -g @google/gemini-cli@nightly
```
## 📋 Key Features
### Code Understanding & Generation
- Query and edit large codebases
- Generate new apps from PDFs, images, or sketches using multimodal capabilities
- Debug issues and troubleshoot with natural language
### Automation & Integration
- Automate operational tasks like querying pull requests or handling complex
rebases
- Use MCP servers to connect new capabilities, including
[media generation with Imagen, Veo or Lyria](https://github.com/GoogleCloudPlatform/vertex-ai-creative-studio/tree/main/experiments/mcp-genmedia)
- Run non-interactively in scripts for workflow automation
### Advanced Capabilities
- Ground your queries with built-in
[Google Search](https://ai.google.dev/gemini-api/docs/grounding) for real-time
information
- Conversation checkpointing to save and resume complex sessions
- Custom context files (GEMINI.md) to tailor behavior for your projects
### GitHub Integration
Integrate Gemini CLI directly into your GitHub workflows with
[**Gemini CLI GitHub Action**](https://github.com/google-github-actions/run-gemini-cli):
- **Pull Request Reviews**: Automated code review with contextual feedback and
suggestions
- **Issue Triage**: Automated labeling and prioritization of GitHub issues based
on content analysis
- **On-demand Assistance**: Mention `@gemini-cli` in issues and pull requests
for help with debugging, explanations, or task delegation
- **Custom Workflows**: Build automated, scheduled and on-demand workflows
tailored to your team's needs
## 🔐 Authentication Options
Choose the authentication method that best fits your needs:
### Option 1: Login with Google (OAuth login using your Google Account)
**✨ Best for:** Individual developers as well as anyone who has a Gemini Code
Assist License. (see
[quota limits and terms of service](https://cloud.google.com/gemini/docs/quotas)
for details)
**Benefits:**
- **Free tier**: 60 requests/min and 1,000 requests/day
- **Gemini 3 models** with 1M token context window
- **No API key management** - just sign in with your Google account
- **Automatic updates** to latest models
#### Start Gemini CLI, then choose _Login with Google_ and follow the browser authentication flow when prompted
```bash
gemini
```
#### If you are using a paid Code Assist License from your organization, remember to set the Google Cloud Project
```bash
# Set your Google Cloud Project
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
gemini
```
### Option 2: Gemini API Key
**✨ Best for:** Developers who need specific model control or paid tier access
**Benefits:**
- **Free tier**: 1000 requests/day with Gemini 3 (mix of flash and pro)
- **Model selection**: Choose specific Gemini models
- **Usage-based billing**: Upgrade for higher limits when needed
```bash
# Get your key from https://aistudio.google.com/apikey
export GEMINI_API_KEY="YOUR_API_KEY"
gemini
```
### Option 3: Vertex AI
**✨ Best for:** Enterprise teams and production workloads
**Benefits:**
- **Enterprise features**: Advanced security and compliance
- **Scalable**: Higher rate limits with billing account
- **Integration**: Works with existing Google Cloud infrastructure
```bash
# Get your key from Google Cloud Console
export GOOGLE_API_KEY="YOUR_API_KEY"
export GOOGLE_GENAI_USE_VERTEXAI=true
gemini
```
For Google Workspace accounts and other authentication methods, see the
[authentication guide](./docs/get-started/authentication.md).
## 🚀 Getting Started
### Basic Usage
#### Start in current directory
```bash
gemini
```
#### Include multiple directories
```bash
gemini --include-directories ../lib,../docs
```
#### Use specific model
```bash
gemini -m gemini-2.5-flash
```
#### Non-interactive mode for scripts
Get a simple text response:
```bash
gemini -p "Explain the architecture of this codebase"
```
For more advanced scripting, including how to parse JSON and handle errors, use
the `--output-format json` flag to get structured output:
```bash
gemini -p "Explain the architecture of this codebase" --output-format json
```
For real-time event streaming (useful for monitoring long-running operations),
use `--output-format stream-json` to get newline-delimited JSON events:
```bash
gemini -p "Run tests and deploy" --output-format stream-json
```
### Quick Examples
#### Start a new project
```bash
cd new-project/
gemini
> Write me a Discord bot that answers questions using a FAQ.md file I will provide
```
#### Analyze existing code
```bash
git clone https://github.com/google-gemini/gemini-cli
cd gemini-cli
gemini
> Give me a summary of all of the changes that went in yesterday
```
## 📚 Documentation
### Getting Started
- [**Quickstart Guide**](./docs/get-started/index.md) - Get up and running
quickly.
- [**Authentication Setup**](./docs/get-started/authentication.md) - Detailed
auth configuration.
- [**Configuration Guide**](./docs/get-started/configuration.md) - Settings and
customization.
- [**Keyboard Shortcuts**](./docs/cli/keyboard-shortcuts.md) - Productivity
tips.
### Core Features
- [**Commands Reference**](./docs/cli/commands.md) - All slash commands
(`/help`, `/chat`, etc).
- [**Custom Commands**](./docs/cli/custom-commands.md) - Create your own
reusable commands.
- [**Context Files (GEMINI.md)**](./docs/cli/gemini-md.md) - Provide persistent
context to Gemini CLI.
- [**Checkpointing**](./docs/cli/checkpointing.md) - Save and resume
conversations.
- [**Token Caching**](./docs/cli/token-caching.md) - Optimize token usage.
### Tools & Extensions
- [**Built-in Tools Overview**](./docs/tools/index.md)
- [File System Operations](./docs/tools/file-system.md)
- [Shell Commands](./docs/tools/shell.md)
- [Web Fetch & Search](./docs/tools/web-fetch.md)
- [**MCP Server Integration**](./docs/tools/mcp-server.md) - Extend with custom
tools.
- [**Custom Extensions**](./docs/extensions/index.md) - Build and share your own
commands.
### Advanced Topics
- [**Headless Mode (Scripting)**](./docs/cli/headless.md) - Use Gemini CLI in
automated workflows.
- [**Architecture Overview**](./docs/architecture.md) - How Gemini CLI works.
- [**IDE Integration**](./docs/ide-integration/index.md) - VS Code companion.
- [**Sandboxing & Security**](./docs/cli/sandbox.md) - Safe execution
environments.
- [**Trusted Folders**](./docs/cli/trusted-folders.md) - Control execution
policies by folder.
- [**Enterprise Guide**](./docs/cli/enterprise.md) - Deploy and manage in a
corporate environment.
- [**Telemetry & Monitoring**](./docs/cli/telemetry.md) - Usage tracking.
- [**Tools API Development**](./docs/core/tools-api.md) - Create custom tools.
- [**Local development**](./docs/local-development.md) - Local development
tooling.
### Troubleshooting & Support
- [**Troubleshooting Guide**](./docs/troubleshooting.md) - Common issues and
solutions.
- [**FAQ**](./docs/faq.md) - Frequently asked questions.
- Use `/bug` command to report issues directly from the CLI.
### Using MCP Servers
Configure MCP servers in `~/.gemini/settings.json` to extend Gemini CLI with
custom tools:
```text
> @github List my open pull requests
> @slack Send a summary of today's commits to #dev channel
> @database Run a query to find inactive users
```
See the [MCP Server Integration guide](./docs/tools/mcp-server.md) for setup
instructions.
## 🤝 Contributing
We welcome contributions! Gemini CLI is fully open source (Apache 2.0), and we
encourage the community to:
- Report bugs and suggest features.
- Improve documentation.
- Submit code improvements.
- Share your MCP servers and extensions.
See our [Contributing Guide](./CONTRIBUTING.md) for development setup, coding
standards, and how to submit pull requests.
Check our [Official Roadmap](https://github.com/orgs/google-gemini/projects/11)
for planned features and priorities.
## 📖 Resources
- **[Official Roadmap](./ROADMAP.md)** - See what's coming next.
- **[Changelog](./docs/changelogs/index.md)** - See recent notable updates.
- **[NPM Package](https://www.npmjs.com/package/@google/gemini-cli)** - Package
registry.
- **[GitHub Issues](https://github.com/google-gemini/gemini-cli/issues)** -
Report bugs or request features.
- **[Security Advisories](https://github.com/google-gemini/gemini-cli/security/advisories)** -
Security updates.
### Uninstall
See the [Uninstall Guide](docs/cli/uninstall.md) for removal instructions.
## 📄 Legal
- **License**: [Apache License 2.0](LICENSE)
- **Terms of Service**: [Terms & Privacy](./docs/tos-privacy.md)
- **Security**: [Security Policy](SECURITY.md)
---
<p align="center">
Built with ❤️ by Google and the open source community
</p>

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