这是indexloc提供的服务,不要输入任何密码
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
6237d36
feat(cli): add quick command execution with Ctrl/Meta+Enter
var-aha Oct 4, 2025
b69d91b
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 8, 2025
9af3445
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 9, 2025
23a21e5
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 9, 2025
2f37ba5
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 10, 2025
a21d5a2
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 12, 2025
0eb79c7
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 14, 2025
ca9a434
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 15, 2025
a31961c
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 20, 2025
0c833cf
Merge branch 'main' into feature/quick-command-exec
var-aha Oct 22, 2025
b8e89fa
Merge origin/main into feature/quick-command-exec
var-aha Nov 5, 2025
21dd9bb
fix: allow user to set pro model even in fallback (#12566)
adamfweidman Nov 5, 2025
b445db3
fix(infra) - Make list dir less flaky (#12554)
shishu314 Nov 5, 2025
c743631
chore(release): bump version to 0.14.0-nightly.20251104.da3da198 (#12…
skeshive Nov 5, 2025
f51d745
refactor: parse string for retryInfo (#12586)
gsquared94 Nov 5, 2025
1611364
Fix/windows pty crash (#12587)
bdmorgan Nov 5, 2025
f5bd474
fix(core): prevent server name spoofing in policy engine (#12511)
allenhutchison Nov 5, 2025
400da30
fix(triage-workflow): Pass environment variables directly into prompt…
skeshive Nov 5, 2025
ca6cfaa
Update auto compression message. (#12605)
scidomino Nov 5, 2025
fa93b56
[Extension Reloading]: Update custom commands, add enable/disable com…
jakemac53 Nov 5, 2025
c951f9f
fix: add line breaks in quota/capacity msgs (#12603)
adamfweidman Nov 5, 2025
1d2f90c
Add compression mechanism to subagent (#12506)
silviojr Nov 5, 2025
44b8c62
fix(core) Path reader method readPathFromWorkspace does not respect g…
BadgerHobbs Nov 5, 2025
9787108
List tools in a consistent order. (#12615)
scidomino Nov 5, 2025
fb0768f
Docs: Added newest changelog: v0.12.0 (#12611)
jkcinouye Nov 5, 2025
224a33d
Improve tracking of animated components. (#12618)
jacob314 Nov 6, 2025
0f5dd22
chore: remove unused CLI policy TOML files (#12620)
allenhutchison Nov 6, 2025
956ab94
feat(core): Add ModelConfigService. (#12556)
joshualitt Nov 6, 2025
5f6453a
feat(policy): Add comprehensive priority range validation tests (#12617)
allenhutchison Nov 6, 2025
2785dba
Merge branch 'main' into feature/quick-command-exec
var-aha Nov 6, 2025
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
8 changes: 2 additions & 6 deletions .github/workflows/gemini-automated-issue-triage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,6 @@ jobs:
settings: |-
{
"maxSessionTurns": 25,
"coreTools": [
"run_shell_command(echo)"
],
"telemetry": {
"enabled": true,
"target": "gcp"
Expand All @@ -167,8 +164,8 @@ jobs:
You are an issue triage assistant. Your role is to analyze a GitHub issue and determine the single most appropriate area/ label and the single most appropriate priority/ label based on the definitions provided.

## Steps
1. Review the issue title and body provided in the environment variables: ${ISSUE_TITLE} and ${ISSUE_BODY}.
2. Review the available labels provided in the environment variable: ${AVAILABLE_LABELS}.
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. Select exactly one priority/ label that best matches the issue based on Reference 2: Priority Definitions.
5. Fallback Logic:
Expand All @@ -180,7 +177,6 @@ jobs:
## Guidelines
- Your output must contain exactly one area/ label and exactly one priority/ label.
- Triage only the current issue based on its title and body.
- Reference all shell variables as "${VAR}" (with quotes and braces).
- Output only valid JSON format.
- Do not include any explanation or additional text, just the JSON.

Expand Down
63 changes: 63 additions & 0 deletions docs/changelogs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,69 @@
Wondering what's new in Gemini CLI? This document provides key highlights and
notable changes to Gemini CLI.

## v0.12.0 - Gemini CLI weekly update - 2025-10-27

![Codebase investigator subagent in Gemini CLI.](https://i.imgur.com/4J1njsx.png)

- **🎉 New partner extensions:**
- **🤗 Hugging Face extension:** Access the Hugging Face hub.
([gif](https://drive.google.com/file/d/1LEzIuSH6_igFXq96_tWev11svBNyPJEB/view?usp=sharing&resourcekey=0-LtPTzR1woh-rxGtfPzjjfg))

`gemini extensions install https://github.com/huggingface/hf-mcp-server`

- **Monday.com extension**: Analyze your sprints, update your task boards,
etc.
([gif](https://drive.google.com/file/d/1cO0g6kY1odiBIrZTaqu5ZakaGZaZgpQv/view?usp=sharing&resourcekey=0-xEr67SIjXmAXRe1PKy7Jlw))

`gemini extensions install https://github.com/mondaycom/mcp`

- **Data Commons extension:** Query public datasets or ground responses on
data from Data Commons
([gif](https://drive.google.com/file/d/1cuj-B-vmUkeJnoBXrO_Y1CuqphYc6p-O/view?usp=sharing&resourcekey=0-0adXCXDQEd91ZZW63HbW-Q)).

`gemini extensions install https://github.com/gemini-cli-extensions/datacommons`

- **Model selection:** Choose the Gemini model for your session with `/model`.
([pic](https://imgur.com/a/ABFcWWw),
[pr](https://github.com/google-gemini/gemini-cli/pull/8940) by
[@abhipatel12](https://github.com/abhipatel12)).
- **Model routing:** Gemini CLI will now intelligently pick the best model for
the task. Simple queries will be sent to Flash while complex analytical or
creative tasks will still use the power of Pro. This ensures your quota will
last for a longer period of time. You can always opt-out of this via `/model`.
([pr](https://github.com/google-gemini/gemini-cli/pull/9262) by
[@abhipatel12](https://github.com/abhipatel12)).
- Discussion:
[https://github.com/google-gemini/gemini-cli/discussions/12375](https://github.com/google-gemini/gemini-cli/discussions/12375)
- **Codebase investigator subagent:** We now have a new built-in subagent that
will explore your workspace and resolve relevant information to improve
overall performance.
([pr](https://github.com/google-gemini/gemini-cli/pull/9988) by
[@abhipatel12](https://github.com/abhipatel12),
[pr](https://github.com/google-gemini/gemini-cli/pull/10282) by
[@silviojr](https://github.com/silviojr)).
- Enable, disable, or limit turns in `/settings`, plus advanced configs in
`settings.json` ([pic](https://imgur.com/a/yJiggNO),
[pr](https://github.com/google-gemini/gemini-cli/pull/10844) by
[@silviojr](https://github.com/silviojr)).
- **Explore extensions with `/extension`:** Users can now open the extensions
page in their default browser directly from the CLI using the `/extension`
explore command. ([pr](https://github.com/google-gemini/gemini-cli/pull/11846)
by [@JayadityaGit](https://github.com/JayadityaGit)).
- **Configurable compression:** Users can modify the compression threshold in
`/settings`. The default has been made more proactive
([pr](https://github.com/google-gemini/gemini-cli/pull/12317) by
[@scidomino](https://github.com/scidomino)).
- **API key authentication:** Users can now securely enter and store their
Gemini API key via a new dialog, eliminating the need for environment
variables and repeated entry.
([pr](https://github.com/google-gemini/gemini-cli/pull/11760) by
[@galz10](https://github.com/galz10)).
- **Sequential approval:** Users can now approve multiple tool calls
sequentially during execution.
([pr](https://github.com/google-gemini/gemini-cli/pull/11593) by
[@joshualitt](https://github.com/joshualitt)).

## v0.11.0 - Gemini CLI weekly update - 2025-10-20

![Gemini CLI and Jules](https://storage.googleapis.com/gweb-developer-goog-blog-assets/images/Jules_Extension_-_Blog_Header_O346JNt.original.png)
Expand Down
22 changes: 16 additions & 6 deletions docs/cli/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -318,10 +318,20 @@ Gemini CLI.
- When exited, the UI reverts to its standard appearance and normal Gemini
CLI behavior resumes.

- **Caution for all `!` usage:** Commands you execute in shell mode have the
same permissions and impact as if you ran them directly in your terminal.
### Quick Command Execution (`Ctrl+Enter` / `Meta+Enter`)

- **Environment Variable:** When a command is executed via `!` or in shell mode,
the `GEMINI_CLI=1` environment variable is set in the subprocess's
environment. This allows scripts or tools to detect if they are being run from
within the Gemini CLI.
While in **prompt mode**, you can quickly execute shell commands without switching to shell mode:

- **`Ctrl+Enter` / `Meta+Enter`**
- **Description:** Execute the current input as a shell command directly. After execution, you remain in prompt mode.
- **Behavior:**
- Works only when you're in prompt mode (not shell mode)
- The command is executed using the same shell processor as shell mode
- After execution, the input is cleared and you stay in prompt mode
- Useful for quick commands without mode switching
- **Examples:**
- Type `ls -la` and press `Ctrl+Enter`/`Meta+Enter` to execute without entering shell mode
- Type `git status` and press `Ctrl+Enter`/`Meta+Enter` to check git status quickly

- **Caution for all `!` usage and quick command execution:** Commands you execute have the same permissions and impact as if you ran them directly in your terminal.
- **Environment Variable:** When a command is executed via `!`, in shell mode, or with `Ctrl+Enter`/`Meta+Enter`, the `GEMINI_CLI=1` environment variable is set in the subprocess's environment. This allows scripts or tools to detect if they are being run from within the Gemini CLI.
1 change: 1 addition & 0 deletions docs/cli/keyboard-shortcuts.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ This document lists the available keyboard shortcuts within Gemini CLI.
| -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `!` | Toggle shell mode when the input is empty. |
| `\` (at end of line) + `Enter` | Insert a newline. |
| `Ctrl+Enter` / `Meta+Enter` | Execute the current input as a shell command directly without switching to shell mode (works in prompt mode). |
| `Down Arrow` | Navigate down through the input history. |
| `Enter` | Submit the current prompt. |
| `Meta+Delete` / `Ctrl+Delete` | Delete the word to the right of the cursor. |
Expand Down
14 changes: 14 additions & 0 deletions docs/get-started/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,20 @@ their corresponding top-level category object in your `settings.json` file.
- **Description:** Skip the next speaker check.
- **Default:** `true`

#### `modelConfigs`

- **`modelConfigs.aliases`** (object):
- **Description:** Named presets for model configs. Can be used in place of a
model name and can inherit from other aliases using an `extends` property.
- **Default:**
`{"base":{"modelConfig":{"generateContentConfig":{"temperature":0,"topP":1}}},"chat-base":{"extends":"base","modelConfig":{"generateContentConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":-1}}}},"gemini-2.5-pro":{"extends":"chat-base","modelConfig":{"model":"gemini-2.5-pro"}},"gemini-2.5-flash":{"extends":"chat-base","modelConfig":{"model":"gemini-2.5-flash"}},"gemini-2.5-flash-lite":{"extends":"chat-base","modelConfig":{"model":"gemini-2.5-flash-lite"}},"classifier":{"extends":"base","modelConfig":{"model":"gemini-2.5-flash-lite","generateContentConfig":{"maxOutputTokens":1024,"thinkingConfig":{"thinkingBudget":512}}}},"prompt-completion":{"extends":"base","modelConfig":{"model":"gemini-2.5-flash-lite","generateContentConfig":{"temperature":0.3,"maxOutputTokens":16000,"thinkingConfig":{"thinkingBudget":0}}}},"edit-corrector":{"extends":"base","modelConfig":{"model":"gemini-2.5-flash-lite","generateContentConfig":{"thinkingConfig":{"thinkingBudget":0}}}},"summarizer-default":{"extends":"base","modelConfig":{"model":"gemini-2.5-flash-lite","generateContentConfig":{"maxOutputTokens":2000}}},"summarizer-shell":{"extends":"base","modelConfig":{"model":"gemini-2.5-flash-lite","generateContentConfig":{"maxOutputTokens":2000}}},"web-search-tool":{"extends":"base","modelConfig":{"model":"gemini-2.5-flash","generateContentConfig":{"tools":[{"googleSearch":{}}]}}},"web-fetch-tool":{"extends":"base","modelConfig":{"model":"gemini-2.5-flash","generateContentConfig":{"tools":[{"urlContext":{}}]}}}}`

- **`modelConfigs.overrides`** (array):
- **Description:** Apply specific configuration overrides based on matches,
with a primary key of model (or alias). The most specific match will be
used.
- **Default:** `[]`

#### `context`

- **`context.fileName`** (string | string[]):
Expand Down
46 changes: 20 additions & 26 deletions integration-tests/list_directory.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { describe, it, expect } from 'vitest';
import { describe, it } from 'vitest';
import {
TestRig,
poll,
Expand All @@ -17,7 +17,7 @@ import { join } from 'node:path';
describe('list_directory', () => {
it('should be able to list a directory', async () => {
const rig = new TestRig();
await rig.setup('should be able to list a directory');
rig.setup('should be able to list a directory');
rig.createFile('file1.txt', 'file 1 content');
rig.mkdir('subdir');
rig.sync();
Expand All @@ -38,33 +38,27 @@ describe('list_directory', () => {

const result = await rig.run(prompt);

const foundToolCall = await rig.waitForToolCall('list_directory');
try {
await rig.expectToolCallSuccess(['list_directory']);
} catch (e) {
// Add debugging information
if (!result.includes('file1.txt') || !result.includes('subdir')) {
const allTools = printDebugInfo(rig, result, {
'Found tool call': false,
'Contains file1.txt': result.includes('file1.txt'),
'Contains subdir': result.includes('subdir'),
});

// Add debugging information
if (
!foundToolCall ||
!result.includes('file1.txt') ||
!result.includes('subdir')
) {
const allTools = printDebugInfo(rig, result, {
'Found tool call': foundToolCall,
'Contains file1.txt': result.includes('file1.txt'),
'Contains subdir': result.includes('subdir'),
});

console.error(
'List directory calls:',
allTools
.filter((t) => t.toolRequest.name === 'list_directory')
.map((t) => t.toolRequest.args),
);
console.error(
'List directory calls:',
allTools
.filter((t) => t.toolRequest.name === 'list_directory')
.map((t) => t.toolRequest.args),
);
}
throw e;
}

expect(
foundToolCall,
'Expected to find a list_directory tool call',
).toBeTruthy();

// Validate model output - will throw if no output, warn if missing expected content
validateModelOutput(result, ['file1.txt', 'subdir'], 'List directory test');
});
Expand Down
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@google/gemini-cli",
"version": "0.13.0-nightly.20251031.c89bc30d",
"version": "0.14.0-nightly.20251104.da3da198",
"engines": {
"node": ">=20.0.0"
},
Expand All @@ -14,7 +14,7 @@
"url": "git+https://github.com/google-gemini/gemini-cli.git"
},
"config": {
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.13.0-nightly.20251031.c89bc30d"
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.14.0-nightly.20251104.da3da198"
},
"scripts": {
"start": "cross-env NODE_ENV=development node scripts/start.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/a2a-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@google/gemini-cli-a2a-server",
"version": "0.13.0-nightly.20251031.c89bc30d",
"version": "0.14.0-nightly.20251104.da3da198",
"description": "Gemini CLI A2A Server",
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@google/gemini-cli",
"version": "0.13.0-nightly.20251031.c89bc30d",
"version": "0.14.0-nightly.20251104.da3da198",
"description": "Gemini CLI",
"repository": {
"type": "git",
Expand All @@ -25,7 +25,7 @@
"dist"
],
"config": {
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.13.0-nightly.20251031.c89bc30d"
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.14.0-nightly.20251104.da3da198"
},
"dependencies": {
"@google/gemini-cli-core": "file:../core",
Expand Down
1 change: 1 addition & 0 deletions packages/cli/src/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,7 @@ export async function loadCliConfig(
recordResponses: argv.recordResponses,
retryFetchErrors: settings.general?.retryFetchErrors ?? false,
ptyInfo: ptyInfo?.name,
modelConfigServiceConfig: settings.modelConfigs,
// TODO: loading of hooks based on workspace trust
enableHooks: settings.tools?.enableHooks ?? false,
hooks: settings.hooks || {},
Expand Down
31 changes: 22 additions & 9 deletions packages/cli/src/config/extension-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -616,15 +616,21 @@ export class ExtensionManager extends ExtensionLoader {
throw new Error(`Extension with name ${name} does not exist.`);
}

const scopePath =
scope === SettingScope.Workspace ? this.workspaceDir : os.homedir();
this.extensionEnablementManager.disable(name, true, scopePath);
extension.isActive = false;
await this.maybeStopExtension(extension);
if (scope !== SettingScope.Session) {
const scopePath =
scope === SettingScope.Workspace ? this.workspaceDir : os.homedir();
this.extensionEnablementManager.disable(name, true, scopePath);
}
logExtensionDisable(
this.telemetryConfig,
new ExtensionDisableEvent(hashValue(name), extension.id, scope),
);
if (!this.config || this.config.getEnableExtensionReloading()) {
// Only toggle the isActive state if we are actually going to disable it
// in the current session, or we haven't been initialized yet.
extension.isActive = false;
}
await this.maybeStopExtension(extension);
}

/**
Expand All @@ -644,14 +650,21 @@ export class ExtensionManager extends ExtensionLoader {
if (!extension) {
throw new Error(`Extension with name ${name} does not exist.`);
}
const scopePath =
scope === SettingScope.Workspace ? this.workspaceDir : os.homedir();
this.extensionEnablementManager.enable(name, true, scopePath);

if (scope !== SettingScope.Session) {
const scopePath =
scope === SettingScope.Workspace ? this.workspaceDir : os.homedir();
this.extensionEnablementManager.enable(name, true, scopePath);
}
logExtensionEnable(
this.telemetryConfig,
new ExtensionEnableEvent(hashValue(name), extension.id, scope),
);
extension.isActive = true;
if (!this.config || this.config.getEnableExtensionReloading()) {
// Only toggle the isActive state if we are actually going to disable it
// in the current session, or we haven't been initialized yet.
extension.isActive = true;
}
await this.maybeStartExtension(extension);
}
}
Expand Down
Loading
Loading