Initial commit of Gemini Code CLI
This commit introduces the initial codebase for the Gemini Code CLI, a command-line interface designed to facilitate interaction with the Gemini API for software engineering tasks.
The code was migrated from a previous git repository as a single squashed commit.
Core Features & Components:
* **Gemini Integration:** Leverages the `@google/genai` SDK to interact with the Gemini models, supporting chat history, streaming responses, and function calling (tools).
* **Terminal UI:** Built with Ink (React for CLIs) providing an interactive chat interface within the terminal, including input prompts, message display, loading indicators, and tool interaction elements.
* **Tooling Framework:** Implements a robust tool system allowing Gemini to interact with the local environment. Includes tools for:
* File system listing (`ls`)
* File reading (`read-file`)
* Content searching (`grep`)
* File globbing (`glob`)
* File editing (`edit`)
* File writing (`write-file`)
* Executing bash commands (`terminal`)
* **State Management:** Handles the streaming state of Gemini responses and manages the conversation history.
* **Configuration:** Parses command-line arguments (`yargs`) and loads environment variables (`dotenv`) for setup.
* **Project Structure:** Organized into `core`, `ui`, `tools`, `config`, and `utils` directories using TypeScript. Includes basic build (`tsc`) and start scripts.
This initial version establishes the foundation for a powerful CLI tool enabling developers to use Gemini for coding assistance directly in their terminal environment.
---
Created by yours truly: __Gemini Code__
2025-04-15 21:41:08 -07:00
{
2025-05-29 18:25:52 +00:00
"name" : "gemini-cli" ,
2025-04-21 23:11:51 -07:00
"version" : "0.1.0" ,
2025-04-17 17:57:39 -04:00
"type" : "module" ,
Initial commit of Gemini Code CLI
This commit introduces the initial codebase for the Gemini Code CLI, a command-line interface designed to facilitate interaction with the Gemini API for software engineering tasks.
The code was migrated from a previous git repository as a single squashed commit.
Core Features & Components:
* **Gemini Integration:** Leverages the `@google/genai` SDK to interact with the Gemini models, supporting chat history, streaming responses, and function calling (tools).
* **Terminal UI:** Built with Ink (React for CLIs) providing an interactive chat interface within the terminal, including input prompts, message display, loading indicators, and tool interaction elements.
* **Tooling Framework:** Implements a robust tool system allowing Gemini to interact with the local environment. Includes tools for:
* File system listing (`ls`)
* File reading (`read-file`)
* Content searching (`grep`)
* File globbing (`glob`)
* File editing (`edit`)
* File writing (`write-file`)
* Executing bash commands (`terminal`)
* **State Management:** Handles the streaming state of Gemini responses and manages the conversation history.
* **Configuration:** Parses command-line arguments (`yargs`) and loads environment variables (`dotenv`) for setup.
* **Project Structure:** Organized into `core`, `ui`, `tools`, `config`, and `utils` directories using TypeScript. Includes basic build (`tsc`) and start scripts.
This initial version establishes the foundation for a powerful CLI tool enabling developers to use Gemini for coding assistance directly in their terminal environment.
---
Created by yours truly: __Gemini Code__
2025-04-15 21:41:08 -07:00
"workspaces" : [
"packages/*"
] ,
"scripts" : {
2025-06-09 12:19:42 -07:00
"generate" : "node scripts/generate-git-commit-info.js" ,
"build" : "node scripts/build.js" ,
"build:sandbox" : "node scripts/build_sandbox.js" ,
2025-05-07 14:46:47 +00:00
"build:all" : "npm run build && npm run build:sandbox" ,
2025-06-09 12:19:42 -07:00
"clean" : "node scripts/clean.js" ,
2025-05-23 12:27:48 -07:00
"prepare" : "npm run bundle" ,
Initial commit of Gemini Code CLI
This commit introduces the initial codebase for the Gemini Code CLI, a command-line interface designed to facilitate interaction with the Gemini API for software engineering tasks.
The code was migrated from a previous git repository as a single squashed commit.
Core Features & Components:
* **Gemini Integration:** Leverages the `@google/genai` SDK to interact with the Gemini models, supporting chat history, streaming responses, and function calling (tools).
* **Terminal UI:** Built with Ink (React for CLIs) providing an interactive chat interface within the terminal, including input prompts, message display, loading indicators, and tool interaction elements.
* **Tooling Framework:** Implements a robust tool system allowing Gemini to interact with the local environment. Includes tools for:
* File system listing (`ls`)
* File reading (`read-file`)
* Content searching (`grep`)
* File globbing (`glob`)
* File editing (`edit`)
* File writing (`write-file`)
* Executing bash commands (`terminal`)
* **State Management:** Handles the streaming state of Gemini responses and manages the conversation history.
* **Configuration:** Parses command-line arguments (`yargs`) and loads environment variables (`dotenv`) for setup.
* **Project Structure:** Organized into `core`, `ui`, `tools`, `config`, and `utils` directories using TypeScript. Includes basic build (`tsc`) and start scripts.
This initial version establishes the foundation for a powerful CLI tool enabling developers to use Gemini for coding assistance directly in their terminal environment.
---
Created by yours truly: __Gemini Code__
2025-04-15 21:41:08 -07:00
"test" : "npm run test --workspaces" ,
2025-05-27 12:45:28 -07:00
"test:ci" : "npm run test:ci --workspaces --if-present" ,
2025-06-09 12:19:42 -07:00
"start" : "node scripts/start.js" ,
"debug" : "cross-env DEBUG=1 node scripts/start.js" ,
2025-04-21 08:02:11 -07:00
"lint:fix" : "eslint . --fix" ,
2025-04-18 10:20:39 -07:00
"lint" : "eslint . --ext .ts,.tsx" ,
2025-05-15 23:51:53 -07:00
"typecheck" : "npm run typecheck --workspaces --if-present" ,
2025-04-18 14:37:02 -07:00
"format" : "prettier --write ." ,
2025-05-15 22:59:53 -07:00
"preflight" : "npm run format --workspaces --if-present && npm run lint && npm run test --workspaces --if-present" ,
2025-04-26 00:30:50 +00:00
"auth:npm" : "npx google-artifactregistry-auth" ,
"auth:docker" : "gcloud auth configure-docker us-west1-docker.pkg.dev" ,
"auth" : "npm run auth:npm && npm run auth:docker" ,
2025-05-08 16:09:26 -07:00
"prerelease:dev" : "npm run prerelease:version --workspaces && npm run prerelease:deps --workspaces" ,
2025-06-09 12:19:42 -07:00
"bundle" : "npm run generate && node esbuild.config.js && node scripts/copy_bundle_assets.js" ,
2025-05-29 21:01:44 +00:00
"build:cli" : "npm run build --workspace packages/cli" ,
2025-05-30 20:16:35 -07:00
"build:core" : "npm run build --workspace packages/core" ,
"build:packages" : "npm run build:core && npm run build:cli" ,
2025-06-09 12:19:42 -07:00
"build:docker" : "node scripts/build_sandbox.js -s" ,
2025-05-30 19:28:46 +00:00
"tag:docker" : "docker tag gemini-cli-sandbox ${SANDBOX_IMAGE_REGISTRY:?SANDBOX_IMAGE_REGISTRY not set}/${SANDBOX_IMAGE_NAME:?SANDBOX_IMAGE_NAME not set}:$npm_package_version" ,
2025-05-29 21:01:44 +00:00
"prepare:cli-packagejson" : "node scripts/prepare-cli-packagejson.js" ,
2025-06-09 12:19:42 -07:00
"publish:sandbox" : "node scripts/publish-sandbox.js" ,
2025-05-29 23:55:34 +00:00
"publish:npm" : "npm publish --workspaces ${NPM_PUBLISH_TAG:+--tag=$NPM_PUBLISH_TAG} ${NPM_DRY_RUN:+--dry-run}" ,
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
"publish:release" : "npm run build:packages && npm run prepare:cli-packagejson && npm run build:docker && npm run tag:docker && npm run publish:sandbox && npm run publish:npm" ,
2025-06-15 21:28:29 -04:00
"telemetry" : "node scripts/telemetry.js" ,
"start:gcp" : "npm run telemetry -- --target=gcp & npm start"
2025-05-23 12:27:48 -07:00
} ,
"bin" : {
"gemini" : "bundle/gemini.js"
} ,
"files" : [
"bundle/" ,
2025-05-23 15:22:13 -07:00
"README.md" ,
2025-06-08 19:07:25 -07:00
"LICENSE"
2025-05-23 12:27:48 -07:00
] ,
2025-04-17 17:57:39 -04:00
"devDependencies" : {
2025-06-05 10:15:27 -07:00
"@types/micromatch" : "^4.0.9" ,
2025-05-23 05:28:31 +00:00
"@types/mime-types" : "^2.1.4" ,
2025-06-05 06:48:03 -07:00
"@types/minimatch" : "^5.1.2" ,
2025-05-21 17:03:22 -07:00
"@vitest/coverage-v8" : "^3.1.1" ,
2025-06-09 12:19:42 -07:00
"cross-env" : "^7.0.3" ,
2025-06-12 06:21:50 +00:00
"esbuild" : "^0.25.0" ,
2025-04-17 17:57:39 -04:00
"eslint" : "^9.24.0" ,
"eslint-config-prettier" : "^10.1.2" ,
"eslint-plugin-import" : "^2.31.0" ,
2025-04-20 17:16:25 -07:00
"eslint-plugin-license-header" : "^0.8.0" ,
2025-04-17 17:57:39 -04:00
"eslint-plugin-react" : "^7.37.5" ,
"eslint-plugin-react-hooks" : "^5.2.0" ,
2025-06-09 12:19:42 -07:00
"glob" : "^10.4.2" ,
2025-04-17 17:57:39 -04:00
"globals" : "^16.0.0" ,
2025-06-05 06:48:03 -07:00
"json" : "^11.0.0" ,
2025-04-21 23:11:51 -07:00
"lodash" : "^4.17.21" ,
2025-05-28 23:30:05 +00:00
"memfs" : "^4.17.2" ,
2025-04-17 17:57:39 -04:00
"prettier" : "^3.5.3" ,
2025-04-24 01:16:15 +00:00
"react-devtools-core" : "^4.28.5" ,
2025-04-24 20:02:49 +00:00
"typescript-eslint" : "^8.30.1" ,
2025-06-05 06:48:03 -07:00
"yargs" : "^17.7.2"
}
Initial commit of Gemini Code CLI
This commit introduces the initial codebase for the Gemini Code CLI, a command-line interface designed to facilitate interaction with the Gemini API for software engineering tasks.
The code was migrated from a previous git repository as a single squashed commit.
Core Features & Components:
* **Gemini Integration:** Leverages the `@google/genai` SDK to interact with the Gemini models, supporting chat history, streaming responses, and function calling (tools).
* **Terminal UI:** Built with Ink (React for CLIs) providing an interactive chat interface within the terminal, including input prompts, message display, loading indicators, and tool interaction elements.
* **Tooling Framework:** Implements a robust tool system allowing Gemini to interact with the local environment. Includes tools for:
* File system listing (`ls`)
* File reading (`read-file`)
* Content searching (`grep`)
* File globbing (`glob`)
* File editing (`edit`)
* File writing (`write-file`)
* Executing bash commands (`terminal`)
* **State Management:** Handles the streaming state of Gemini responses and manages the conversation history.
* **Configuration:** Parses command-line arguments (`yargs`) and loads environment variables (`dotenv`) for setup.
* **Project Structure:** Organized into `core`, `ui`, `tools`, `config`, and `utils` directories using TypeScript. Includes basic build (`tsc`) and start scripts.
This initial version establishes the foundation for a powerful CLI tool enabling developers to use Gemini for coding assistance directly in their terminal environment.
---
Created by yours truly: __Gemini Code__
2025-04-15 21:41:08 -07:00
}