Commit Graph

141 Commits

Author SHA1 Message Date
Jerop Kipruto 714421c2da
Add file operation telemetry (#1068)
Introduces telemetry for file create, read, and update operations.

This change adds the `gemini_cli.file.operation.count` metric, recorded by the `read-file`, `read-many-files`, and `write-file` tools.

The metric includes the following attributes:
    - `operation` (string: `create`, `read`, `update`): The type of file operation.
    - `lines` (optional, Int): Number of lines in the file.
    - `mimetype` (optional, string): Mimetype of the file.
    - `extension` (optional, string): File extension of the file.

Here is a stacked bar chart of file operations by extension (`js`, `ts`, `md`):
![image](https://github.com/user-attachments/assets/3e8f8ea9-6155-4186-863c-075cc47647c5)

Here is a stacked bar chart of file operations by type (`create`, `read`, `update`):
![image](https://github.com/user-attachments/assets/3fcf491d-31d0-4ba8-80e6-7fd2bd9c7c27)

#750 

cc @allenhutchison as discussed
2025-06-15 13:24:53 -07:00
Marat Boshernitsan 6d772a30c0
Stabilize prompts snapshot test by properly mocking the SANDBOX env var. (#1067)
Co-authored-by: Marat Boshernitsan <maratb@google.com>
2025-06-15 11:33:30 -07:00
Asad Memon 123ad20e9b
feat: Show model thoughts while loading (#992) 2025-06-15 18:19:05 +00:00
Asad Memon b3d89a1075
feat: Add token stats in footer (#909) 2025-06-15 11:15:53 -07:00
Sijie Wang 7352cb403c
fix(core): Improve shell tool reliability and test portability (#1036) 2025-06-15 09:19:19 +00:00
Jerop Kipruto ab932ffaa5
Telemetry: Improve API response logging with function call details (#1064) 2025-06-15 01:48:01 -04:00
Jerop Kipruto 53753f0455
Add telemetry command and refactor telemetry settings (#1060)
#750 

### Telemetry Settings
Refactors telemetry configuration to use a nested `telemetry` object in `settings.json`, for example:

```json
{
  "telemetry": {
    "enabled": true,
    "target": "gcp"
    "log-prompts": "true"
  },
  "sandbox": false
}
```

The above includes
- Centralized telemetry settings under a `telemetry` object in `settings.json`.
- CLI flags for the `gemini` command to override all telemetry sub-settings:
    - `--telemetry` / `--no-telemetry`
    - `--telemetry-target <local|gcp>`
    - `--telemetry-otlp-endpoint <URL>`
    - `--telemetry-log-prompts` / `--no-telemetry-log-prompts`
- Updates `packages/cli/src/config/config.ts` and `packages/core/src/config/config.ts` to read from the new settings structure and respect the new CLI flags.
- Modifies `scripts/handle-telemetry.js`, `scripts/local_telemetry.js`, and `scripts/telemetry_utils.js` to align with the new settings structure.
- Updates `docs/core/telemetry.md` to reflect the new settings structure, CLI flags, and order of precedence.
- Renames `logUserPromptsEnabled` to `logPrompts` for brevity.

### `npm run telemetry`

Add a new `npm run telemetry` command that uses `scripts/telemetry.js`, automates the entire process of setting up a local and GCP telemetry pipelines, including configuring the necessary settings in the `.gemini/settings.json` workspace file and installing required binaries (e.g. `otelcol-contrib`).

---
```shell
$ npm run telemetry -- --target=gcp

> gemini-cli@0.1.0 telemetry
> node scripts/telemetry.js --target=gcp

⚙️  Using command-line target: gcp
🚀 Running telemetry script for target: gcp.
 Starting Local Telemetry Exporter for Google Cloud 
⚙️  Enabled telemetry in workspace settings.
🔧 Set telemetry OTLP endpoint to http://localhost:4317.
🎯 Set telemetry target to gcp.
 Workspace settings updated.
 Using Google Cloud Project ID: foo-bar

🔑 Please ensure you are authenticated with Google Cloud:
  - Run `gcloud auth application-default login` OR ensure `GOOGLE_APPLICATION_CREDENTIALS` environment variable points to a valid service account key.
  - The account needs "Cloud Trace Agent", "Monitoring Metric Writer", and "Logs Writer" roles.
 otelcol-contrib already exists at /Users/jerop/github/gemini-cli/.gemini/otel/bin/otelcol-contrib
🧹 Cleaning up old processes and logs...
 Deleted old GCP collector log.
📄 Wrote OTEL collector config to /Users/jerop/github/gemini-cli/.gemini/otel/collector-gcp.yaml
🚀 Starting OTEL collector for GCP... Logs: /Users/jerop/github/gemini-cli/.gemini/otel/collector-gcp.log
 Waiting for OTEL collector to start (PID: 17013)...
 OTEL collector started successfully on port 4317.

 Local OTEL collector for GCP is running.

🚀 To send telemetry, run the Gemini CLI in a separate terminal window.

📄 Collector logs are being written to: /Users/jerop/github/gemini-cli/.gemini/otel/collector-gcp.log

📊 View your telemetry data in Google Cloud Console:
   - Logs: https://console.cloud.google.com/logs/query;query=logName%3D%22projects%2Ffoo-bar%2Flogs%2Fgemini_cli%22?project=foo-bar
   - Metrics: https://console.cloud.google.com/monitoring/metrics-explorer?project=foo-bar
   - Traces: https://console.cloud.google.com/traces/list?project=foo-bar

Press Ctrl+C to exit.
^C
👋 Shutting down...
⚙️  Disabled telemetry in workspace settings.
🔧 Cleared telemetry OTLP endpoint.
🎯 Cleared telemetry target.
 Workspace settings updated.
🛑 Stopping otelcol-contrib (PID: 17013)...
 otelcol-contrib stopped.
```
2025-06-15 00:47:32 -04:00
Keir Mierle 32dd298351
fix: Push tool calls to absolute paths (#1055) (#1057)
Make several changes to guide the model to request absolute paths,
reducing frequent accidental relative path tool call failures.

- Switch the parameter name: path --> absolute_path.
- Update the tool definition to strongly require an absolute path.
- Update the system prompt to indicate absolute paths are required.
- Update the system prompt tool use examples to use absolute paths.

Test case:

Open GC in GC: "Locate the primary file calling genai"
- Expected: Model opens files with absolute path, successfully.
- Actual (pre-patch): Failure, attempts to read with relative path.
- Actual (post-patch): Success, attempts to read with absolute path.
2025-06-14 21:16:11 -07:00
Leo 2c6aae863a
Enable "modify" in write tool (#1044) 2025-06-14 11:20:04 -07:00
Bryan Morgan 93909a2dd3
Address b/424256913 - fixed error in correctStringEscaping() and improved backslash handling (#1007) 2025-06-14 13:39:34 -04:00
Anas H. Sulaiman 4873fce791
centralize file filtering in `FileDiscoveryService` (#1039) 2025-06-14 14:25:34 +00:00
Allen Hutchison 643bdf31d5
feat: Add custom URL support for the /bug command (#1017) 2025-06-14 07:00:24 +00:00
Jacob MacDonald d5c6bb9740
Add `/compress` command to force a compression of the context (#986)
Related to https://b.corp.google.com/issues/423605555 - I figured this might be a simpler solution to start with, while still also being useful on its own even if we do implement that.
2025-06-14 04:21:40 +00:00
Marlon Gamez defb0fac2c
fix: remove quota project override in non-streaming calls to CCPA (#1032) 2025-06-14 01:23:12 +00:00
Allen Hutchison 31b28ade01
Improvements to web-fetch tool (#1030) 2025-06-13 17:44:14 -07:00
Anas H. Sulaiman 8eb505fbba
initialize `FileDiscoveryService` once (#1029) 2025-06-13 17:25:59 -07:00
Brandon Keiji 209381f06f
fix: add micromatch to package deps (#1020) 2025-06-13 22:18:05 +00:00
Anas H. Sulaiman bb67d31739
reuse `GitIgnoreParser` for loading `.geminiignore` (#1025) 2025-06-13 17:17:08 -04:00
Tommaso Sciortino 54f0d9d0e5
Fix default extension context filename and update docs (#1024) 2025-06-13 13:57:00 -07:00
Shreya Keshive 1fa41af918
Support MCP StreamableHTTPClientTransport (#1014) 2025-06-13 16:18:06 -04:00
Anas H. Sulaiman 1cefe21d2a
reuse filtering service in `bfsFileSearch` (#1018) 2025-06-13 14:57:03 -04:00
Anas H. Sulaiman 084b58a50e
reuse filtering service in getFolderStructure (#1016) 2025-06-13 14:26:31 -04:00
Jerop Kipruto 1f63f3331f
Revert "Telemetry: Auto-export to GCP if GOOGLE_CLOUD_PROJECT is set" (#1011) 2025-06-13 10:27:22 -07:00
Anas H. Sulaiman 9d04e04bc0
remove redundant `isGitRepository` helper` (#1012) 2025-06-13 12:45:07 -04:00
Billy Biggs 2a1ad1f5d9
Update contextFileName to support an optional list of strings (#1001) 2025-06-13 09:19:08 -07:00
Anas H. Sulaiman 34e0d9c0b6
cleanup unused `allowBuildArtifacts` (#1010) 2025-06-13 12:00:38 -04:00
Anas H. Sulaiman c886f08525
cleanup unused `customIgnorePatterns` (#1009) 2025-06-13 11:49:48 -04:00
Shreya Keshive 1fcbdef994
Add web socket protocol support for IDE MCP server (#987)
Co-authored-by: matt korwel <matt.korwel@gmail.com>
2025-06-13 09:30:44 -04:00
N. Taylor Mullen 7bcc60e996
refactor: Use default centralized Flash & Pro models everywhere (#994) 2025-06-13 08:25:42 +00:00
Jerop Kipruto 95e4a60a83
Telemetry: Auto-export to GCP if GOOGLE_CLOUD_PROJECT is set (#1003)
This change simplifies telemetry setup for users who want to integrate with GCP, as they no longer need to configure a local collector or an explicit endpoint if their project is already set up in the environment.

This change updates the telemetry system to automatically export traces, logs, and metrics to Google Cloud Platform (GCP) if the `GOOGLE_CLOUD_PROJECT` environment variable is set and no explicit `telemetryOtlpEndpoint` is configured by the user.

Key changes:
-   The default `telemetryOtlpEndpoint` in `Config` is now an empty string.
-   The `initializeTelemetry` SDK logic now prioritizes:
    -  User-defined `telemetryOtlpEndpoint`.
    -  `GOOGLE_CLOUD_PROJECT` for direct GCP export.
    -  Console exporters as a fallback.
-   If an invalid `telemetryOtlpEndpoint` is provided, it falls back to console exporters with a warning.

#750
2025-06-13 03:51:41 -04:00
Jerop Kipruto b20c8389f3
Handle telemetry in non-interactive mode (#1002)
Changes:
- Ensure proper shutdown in non-interactive mode
- Ensures the initial user prompt is logged in non-interactive mode
- Improve telemetry for streaming - handle chunks and input token count is now alongside other token counts in response

To test:
- Follow instructions in https://github.com/google-gemini/gemini-cli/blob/main/docs/core/telemetry.md#google-cloud
- Run CLI in non-interactive mode and observe logs/metrics in GCP Logs Explorer and Metrics Explorer

#750
2025-06-13 03:44:17 -04:00
Marat Boshernitsan 8bb6eca915
Improvements to CLI's ability to perform refactoring. Includes additions to the system prompt and GEMINI.md. (#955)
Co-authored-by: Marat Boshernitsan <maratb@google.com>
Co-authored-by: DeWitt Clinton <dclinton@gmail.com>
2025-06-12 23:55:41 -07:00
Tommaso Sciortino 28e656f882
Improve some tools to support abortSignal (#997) 2025-06-12 19:46:00 -07:00
Marlon Gamez 1c7774e35b
Use allowedTiers from LoadCodeAssist response when calling OnboardUser (#995)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Jerop Kipruto <jerop@google.com>
Co-authored-by: Marat Boshernitsan <maratb@nitsan.org>
Co-authored-by: Marat Boshernitsan <maratb@google.com>
2025-06-13 02:32:13 +00:00
Tommaso Sciortino 431ee839a0
Code Assist cleanup and docs (#993) 2025-06-12 18:00:17 -07:00
matt korwel 9a11567f73
Revert "Make glob tool support abortSignal" (#996) 2025-06-13 00:53:10 +00:00
Marat Boshernitsan 181abde2ff
Reduce coupling between core and cli packages (#961)
Co-authored-by: Marat Boshernitsan <maratb@google.com>
2025-06-12 17:17:29 -07:00
Jerop Kipruto 3c3da655b0
Refactor OTEL logging for API calls (#991)
Refactor OpenTelemetry logging for API requests, responses, and errors. Moved logging responsibility from GeminiClient to GeminiChat for more detailed logging.

#750
2025-06-12 16:36:51 -07:00
Jerop Kipruto 6723c72fa5
telemetry: include user decisions in tool call logs (#966)
Add the user's decision (accept, reject, modify) to tool call telemetry to better understand user intent. The decision provides crucial context to the `success` metric, as a user can reject a call that would have succeeded or accept one that fails. 

Also prettify the arguments json.

Example: 
![image](https://github.com/user-attachments/assets/251cb9fc-ceaa-4cdd-929c-8de47031aca8)

#750
2025-06-12 20:48:10 +00:00
Tommaso Sciortino f8863f4d00
Make glob tool support abortSignal (#988) 2025-06-12 13:27:40 -07:00
Leo ad2e47dc20
remove enable editor flag (#984) 2025-06-12 17:28:20 +00:00
Tommaso Sciortino 47ce39c46f
Convert CCPA requests to proper format (#981)
CCPA uses a different format than GenAi. This adds conversion code to get it to the right format.

Note that this doesn't work against the current ccpa staging server, The changes it needs are in cl/770266927
2025-06-12 09:33:49 -07:00
DeWitt Clinton f2ab6d08c4
Improve the performance of filename completion over large repositories. (#938) 2025-06-12 07:09:38 -07:00
anj-s 6fc7028031
Revert "Add support for local logging per session (#936)" (#970) 2025-06-11 21:59:46 -07:00
Jerop Kipruto 89f682f081
Telemetry: Improve clarity of user prompt event (#967) 2025-06-11 21:43:00 -04:00
Leo 1ef68e0612
feat: External editor settings (#882) 2025-06-11 18:21:54 -07:00
anj-s 2dc79b3bd0
Add support for local logging per session (#936) 2025-06-11 15:05:41 -07:00
JingboWang1997-1 6ecdecbdcc
add excludeTools flag to settings.json config (#957) 2025-06-11 14:32:23 -07:00
Seth Troisi 122678cc09
clean chat history before /resume (#949) 2025-06-11 13:40:44 -07:00
matt korwel 4160d904da
Extensibility: Gemini.md files (#944) 2025-06-11 20:34:35 +00:00