Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
0080589
fix(cli): resolve double rendering in shpool and address vscode lint …
braddux Feb 11, 2026
65d26e7
feat(plan): document and validate Plan Mode policy overrides (#18825)
jerop Feb 11, 2026
eb9223b
Fix pressing any key to exit select mode. (#18421)
jacob314 Feb 11, 2026
b19b026
fix(cli): update F12 behavior to only open drawer if browser fails (#…
SandyTao520 Feb 11, 2026
84ce53a
feat(plan): allow skills to be enabled in plan mode (#18817)
Adib234 Feb 11, 2026
77849ca
docs(plan): add documentation for plan mode tools (#18827)
jerop Feb 11, 2026
2dac98d
Remove experimental note in extension settings docs (#18822)
chrstnb Feb 11, 2026
2a08456
Update prompt and grep tool definition to limit context size (#18780)
gundermanc Feb 11, 2026
02adfe2
docs(plan): add `ask_user` tool documentation (#18830)
jerop Feb 11, 2026
e9a9474
Revert unintended credentials exposure (#18840)
Adib234 Feb 11, 2026
bfa791e
feat(core): update internal utility models to Gemini 3 (#18773)
SandyTao520 Feb 11, 2026
4138667
feat(a2a): add value-resolver for auth credential resolution (#18653)
adamfweidman Feb 11, 2026
0096606
Removed getPlainTextLength (#18848)
devr0306 Feb 11, 2026
6c17731
More grep prompt tweaks (#18846)
gundermanc Feb 11, 2026
b800869
refactor(cli): Reactive useSettingsStore hook (#14915)
psinha40898 Feb 11, 2026
941691c
fix(mcp): Ensure that stdio MCP server execution has the `GEMINI_CLI=…
richieforeman Feb 12, 2026
08e8eea
fix(core): improve headless mode detection for flags and query args (…
galz10 Feb 12, 2026
c370d23
refactor(cli): simplify UI and remove legacy inline tool confirmation…
abhipatel12 Feb 12, 2026
0e85e02
feat(cli): deprecate --allowed-tools and excludeTools in favor of pol…
Abhijit-2592 Feb 12, 2026
a1148ea
fix(workflows): improve maintainer detection for automated PR actions…
bdmorgan Feb 12, 2026
fad9f46
refactor(cli): consolidate useToolScheduler and delete legacy impleme…
abhipatel12 Feb 12, 2026
fe75de3
Update changelog for v0.28.0 and v0.29.0-preview0 (#18819)
g-samroberts Feb 12, 2026
099aa96
fix(core): ensure sub-agents are registered regardless of tools.allow…
mattKorwel Feb 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 49 additions & 16 deletions .github/workflows/gemini-scheduled-stale-pr-closer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,23 +43,56 @@ jobs:

// 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 teams = ['gemini-cli-maintainers', 'gemini-cli-askmode-approvers', 'gemini-cli-docs'];

for (const team_slug of teams) {
try {
const members = await github.paginate(github.rest.teams.listMembersInOrg, {
org: context.repo.owner,
team_slug: team_slug
});
for (const m of members) maintainerLogins.add(m.login.toLowerCase());
core.info(`Successfully fetched ${members.length} team members from ${team_slug}`);
} catch (e) {
core.warning(`Failed to fetch team members from ${team_slug}: ${e.message}`);
}
}

const isMaintainer = (login, assoc) => {
const isGooglerCache = new Map();
const isGoogler = async (login) => {
if (isGooglerCache.has(login)) return isGooglerCache.get(login);

try {
// Check membership in 'googlers' or 'google' orgs
const orgs = ['googlers', 'google'];
for (const org of orgs) {
try {
await github.rest.orgs.checkMembershipForUser({
org: org,
username: login
});
core.info(`User ${login} is a member of ${org} organization.`);
isGooglerCache.set(login, true);
return true;
} catch (e) {
// 404 just means they aren't a member, which is fine
if (e.status !== 404) throw e;
}
}
} catch (e) {
core.warning(`Failed to check org membership for ${login}: ${e.message}`);
}

isGooglerCache.set(login, false);
return false;
};

const isMaintainer = async (login, assoc) => {
const isTeamMember = maintainerLogins.has(login.toLowerCase());
const isRepoMaintainer = ['OWNER', 'MEMBER', 'COLLABORATOR'].includes(assoc);
return isTeamMember || isRepoMaintainer;
if (isTeamMember || isRepoMaintainer) return true;

return await isGoogler(login);
};

// 2. Determine which PRs to check
Expand All @@ -81,7 +114,7 @@ jobs:
}

for (const pr of prs) {
const maintainerPr = isMaintainer(pr.user.login, pr.author_association);
const maintainerPr = await isMaintainer(pr.user.login, pr.author_association);
const isBot = pr.user.type === 'Bot' || pr.user.login.endsWith('[bot]');

// Detection Logic for Linked Issues
Expand Down Expand Up @@ -175,7 +208,7 @@ jobs:
pull_number: pr.number
});
for (const r of reviews) {
if (isMaintainer(r.user.login, r.author_association)) {
if (await isMaintainer(r.user.login, r.author_association)) {
const d = new Date(r.submitted_at || r.updated_at);
if (d > lastActivity) lastActivity = d;
}
Expand All @@ -186,7 +219,7 @@ jobs:
issue_number: pr.number
});
for (const c of comments) {
if (isMaintainer(c.user.login, c.author_association)) {
if (await isMaintainer(c.user.login, c.author_association)) {
const d = new Date(c.updated_at);
if (d > lastActivity) lastActivity = d;
}
Expand Down
26 changes: 24 additions & 2 deletions .github/workflows/pr-contribution-guidelines-notifier.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,31 @@ jobs:
const pr_number = context.payload.pull_request.number;

// 1. Check if the PR author is a maintainer
const isGoogler = async (login) => {
try {
const orgs = ['googlers', 'google'];
for (const org of orgs) {
try {
await github.rest.orgs.checkMembershipForUser({
org: org,
username: login
});
return true;
} catch (e) {
if (e.status !== 404) throw e;
}
}
} catch (e) {
core.warning(`Failed to check org membership for ${login}: ${e.message}`);
}
return false;
};

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.`);
const isRepoMaintainer = ['OWNER', 'MEMBER', 'COLLABORATOR'].includes(authorAssociation);

if (isRepoMaintainer || await isGoogler(username)) {
core.info(`${username} is a maintainer or Googler. No notification needed.`);
return;
}

Expand Down
20 changes: 20 additions & 0 deletions docs/changelogs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,26 @@ on GitHub.
| [Preview](preview.md) | Experimental features ready for early feedback. |
| [Stable](latest.md) | Stable, recommended for general use. |

## Announcements: v0.28.0 - 2026-02-03

- **Slash Command:** We've added a new `/prompt-suggest` slash command to help
you generate prompt suggestions
([#17264](https://github.com/google-gemini/gemini-cli/pull/17264) by
@NTaylorMullen).
- **IDE Support:** Gemini CLI now supports the Positron IDE
([#15047](https://github.com/google-gemini/gemini-cli/pull/15047) by
@kapsner).
- **Customization:** You can now use custom themes in extensions, and we've
implemented automatic theme switching based on your terminal's background
([#17327](https://github.com/google-gemini/gemini-cli/pull/17327) by
@spencer426, [#17976](https://github.com/google-gemini/gemini-cli/pull/17976)
by @Abhijit-2592).
- **Authentication:** We've added interactive and non-interactive consent for
OAuth, and you can now include your auth method in bug reports
([#17699](https://github.com/google-gemini/gemini-cli/pull/17699) by
@ehedlund, [#17569](https://github.com/google-gemini/gemini-cli/pull/17569) by
@erikus).

## Announcements: v0.27.0 - 2026-02-03

- **Event-Driven Architecture:** The CLI now uses a new event-driven scheduler
Expand Down
Loading
Loading