Commit Graph

246 Commits

Author SHA1 Message Date
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
DeWitt Clinton a9e56ee460
Ignore dot files on @-completion. (#978) 2025-06-12 17:04:15 +00: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
Abhi dd53e5c96a
Show session summary on exit for ctrl+c x 2. Fix exit UI (#963) 2025-06-11 20:08:32 -04:00
Eddie Santos e02a035ab4
Adding silly phrases (#922) 2025-06-11 23:40:13 +00:00
anj-s 2dc79b3bd0
Add support for local logging per session (#936) 2025-06-11 15:05:41 -07:00
Seth Troisi 122678cc09
clean chat history before /resume (#949) 2025-06-11 13:40:44 -07:00
Abhi 7a72d255d8
feat: Add exit UI w/ stats (#924) 2025-06-11 16:40:31 -04:00
Seth Troisi 5586ad5f8a
Fix noisy tests (#950) 2025-06-11 13:01:04 -07:00
Louis Jimenez e0f4f428fc
Restore Checkpoint Feature (#934) 2025-06-11 15:33:09 -04:00
jerop d96af8bacd refactor(telemetry): pass config object to telemetry functions
This commit refactors the telemetry system to pass a  object to various logging and metrics functions. This change centralizes configuration management within the telemetry system, making it more modular and easier to maintain.

The  constructor and various tool execution functions have been updated to accept the  object, which is then passed down to the telemetry functions. This eliminates the need to pass individual configuration values, such as , through multiple layers of the application.
2025-06-11 13:24:41 -04:00
jerop d1e23b7c71 refactor: Centralize session ID generation and propagation 2025-06-11 01:18:40 -04:00
Seth Troisi 8e0d5076d6
Add [tag] to /save and /resume (#916) 2025-06-10 16:58:39 -07:00
Seth Troisi 36f58a34b4 logConversation
loadConversation

/resume

clean up for review
2025-06-10 16:14:42 -07:00
Abhi 9c3f34890f
feat: Add UI for /stats slash command (#883) 2025-06-10 15:59:52 -04:00
Bryan Morgan 1e3abf96b5
addressed b/423798481 (#887) 2025-06-10 08:47:46 -04:00
Abhi 7f1252d364
feat: Display initial token usage metrics in /stats (#879) 2025-06-09 20:25:37 -04:00
matt korwel 3b943c1582
Windows: Refactor Shell Scripts to Node.js for Cross-Platform Compatibility (#784) 2025-06-09 12:19:42 -07:00
Olcan a2fee6bdd3
fix mcp timeouts and missing description on mcp errors (#868) 2025-06-08 21:52:11 -07:00
Bryan Morgan 152af28a34
Bryanmorgan/add tool source description (#856) 2025-06-08 19:07:05 -04:00
N. Taylor Mullen f2ea78d0e4
fix(tool-scheduler): Correctly pipe cancellation signal to tool calls (#852) 2025-06-08 22:42:49 +00:00
Abhi 7868ef8229
feat: Introduce session context and add session duration stat for `/stats` command (#854) 2025-06-08 18:01:02 -04:00
Scott Densmore 9104ac02f7
feat: display commit hash in detached HEAD state (#832) 2025-06-08 14:59:18 -07:00
N. Taylor Mullen 241c404573
fix(cli): correctly handle tool invocation cancellation (#844) 2025-06-08 11:14:45 -07:00
Scott Densmore b46f220931
feat(cli): improve API error parsing and display (#829) 2025-06-07 22:04:57 -07:00
Bryan Morgan e95a6086fc
Bryanmorgan/add mcp description support (#825) 2025-06-07 18:30:56 -04:00
cperry-goog 18d6a11c04
refactor: rename gemini-code to gemini-cli (#822) 2025-06-07 14:27:22 -07:00
Bryan Morgan 28ff62e7b1
Added /mcp command support and cleaned up broken tests (#817) 2025-06-07 15:06:18 -04:00
Tommaso Sciortino 680f4cdd61
More version simplifiction. (#810) 2025-06-07 10:54:23 -07:00
cperry-goog e94a10023d
adding very important phrases (#802) 2025-06-06 14:49:40 -07:00
Jacob Richman 4262f5b0de
feat(cli): respect the NO_COLOR env variable (#772) 2025-06-06 07:55:28 -07:00
Brandon Keiji 2285bba66e
refactor: remove unnecessary useRefs (#780) 2025-06-05 21:33:24 +00:00
Jerop Kipruto 2ebf2fbc82
OpenTelemetry Integration & Telemetry Control Flag (#762) 2025-06-05 13:04:25 -07:00
Eddie Santos d99d132cdf
Add `/tools` slash command to view available tools (#752) 2025-06-04 14:01:38 -07:00
N. Taylor Mullen d179b3aae4
refactor(core): Centralize tool response formatting (#743) 2025-06-04 07:24:25 +00:00
Marat Boshernitsan 7de790fbf2
Fix several bugs in prompt history (#734)
Co-authored-by: Marat Boshernitsan <maratb@google.com>
2025-06-03 23:01:26 -07:00
Keith Ballinger c313762ba0
Ignore folders files (#651)
# Add .gitignore-Aware File Filtering to gemini-cli

This pull request introduces .gitignore-based file filtering to the gemini-cli, ensuring that git-ignored files are automatically excluded from file-related operations and suggestions throughout the CLI. The update enhances usability, reduces noise from build artifacts and dependencies, and provides new configuration options for fine-tuning file discovery.

Key Improvements
.gitignore File Filtering

All @ (at) commands, file completions, and core discovery tools now honor .gitignore patterns by default.
Git-ignored files (such as node_modules/, dist/, .env, and .git) are excluded from results unless explicitly overridden.
The behavior can be customized via a new fileFiltering section in settings.json, including options for:
Turning .gitignore respect on/off.
Adding custom ignore patterns.
Allowing or excluding build artifacts.
Configuration & Documentation Updates

settings.json schema extended with fileFiltering options.
Documentation updated to explain new filtering controls and usage patterns.
Testing

New and updated integration/unit tests for file filtering logic, configuration merging, and edge cases.
Test coverage ensures .gitignore filtering works as intended across different workflows.
Internal Refactoring

Core file discovery logic refactored for maintainability and extensibility.
Underlying tools (ls, glob, read-many-files) now support git-aware filtering out of the box.


Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-06-04 04:40:46 +00:00
Brandon Keiji 546e033081
feat: notify user when chat context is compressed (#724) 2025-06-03 19:19:49 +00:00
Allen Hutchison 72f5ec3725
feat(cli): randomize and expand witty loading phrases (#704) 2025-06-03 10:12:47 -07:00
N. Taylor Mullen 8ab74ef1bb
Refactor: Use config.getGeminiClient() for GeminiClient instantiation (#715) 2025-06-03 05:30:52 +00:00
Brandon Keiji 74801e9004
refactor: maintain 1 GeminiChat per GeminiClient (#710) 2025-06-02 19:10:54 -07:00
Jacob Richman 447826ab40
fix(cli): restore first-launch theme prompt (#703) 2025-06-02 19:09:11 -07:00
Olcan 1dcf0a4cbd
strip ansi from shell output (#699) 2025-06-02 14:50:12 -07:00
Allen Hutchison 7f20425c98
feat(cli): add pro model availability check and fallback to flash (#608) 2025-06-02 13:55:54 -07:00
Tolik Malibroda 0795e55f0e
feat: Add --yolo mode that automatically accepts all tools executions (#695)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-06-02 22:05:45 +02:00
Olcan c5869db080
enable async tool discovery by making the registry accessor async; remove call to discoverTools that caused duplicate discovery (#691) 2025-06-02 09:56:32 -07:00
N. Taylor Mullen 34b81abd9c
fix: Ensure all tool calls are complete before submitting responses (#689) 2025-06-02 08:50:28 +00:00
N. Taylor Mullen f2a8d39f42
refactor: Centralize tool scheduling logic and simplify React hook (#670) 2025-06-01 14:16:24 -07:00
Scott Densmore c414512f19
Fix: Make file path case-insensitive in @-command (#659) 2025-05-31 16:19:14 -07:00
Taylor Mullen 1a84d8f674 Test: Add comprehensive tests for useToolScheduler hook
- Introduces a suite of tests for the  hook, covering various scenarios including:
  - Successful tool execution
  - Tool not found errors
  - Errors during
  - Errors during tool execution
  - Tool confirmation (approved and cancelled) - (currently skipped)
  - Live output updates - (currently skipped)
  - Cancellation of tool calls (before execution and during approval) - (currently skipped)
  - Execution of multiple tool calls
  - Preventing scheduling while other calls are running - (currently skipped)
- Includes tests for the  utility function to ensure correct mapping of tool call states to display objects.
- Mocks dependencies like , , and individual  instances.
- Uses fake timers to control asynchronous operations.

Note: Some tests involving complex asynchronous interactions (confirmations, live output, cancellations) are currently skipped due to challenges in reliably testing these scenarios with the current setup. These will be addressed in future work.
2025-05-31 02:55:36 -07:00
Scott Densmore bda7ec94df
Fix: Update git branch watcher to use .git/logs/HEAD (#643) 2025-05-30 21:08:56 -07:00
Tommaso Sciortino 21fba832d1
Rename server->core (#638) 2025-05-30 18:25:47 -07:00
Jacob Richman 01768d7759
feat: add --show_memory_usage flag to display memory usage in status bar (#606) 2025-05-30 15:18:01 -07:00
Olcan 1a5fd2ccb2
add flags for markdown rendering and live updating to Tool to avoid special-casing shell tool by name, and open door for other tools to specify their rendering/updating (#629) 2025-05-30 13:59:05 -07:00
Brandon Keiji cf82b6e127
fix(sandbox): prepare package.json before building sandbox image (#626) 2025-05-30 19:57:46 +00:00
Olcan a0ba65944f
disable markdown rendering of shell tool output (#625) 2025-05-30 12:43:59 -07:00
Olcan a3b557222a
tweaks to shell abort logic based on feedback (#618) 2025-05-30 01:35:03 -07:00
Olcan 8935a248f6
allow aborting of shell mode (!) commands, similar to shell tool commands. fix bug that prevented aborts after first abort. more robust killing logic (#616) 2025-05-30 00:46:43 -07:00
Olcan b0aeeb53b1
update shell output at an interval to reduce flicker (#614) 2025-05-30 00:02:30 -07:00
Jacob Richman dab7517622
Refactor read-file and support images. (#480) 2025-05-29 15:30:18 -07:00
Allen Hutchison 9ee5eadac0
fix(cli): Support multiple @file references in atCommandProcessor (#590) 2025-05-28 17:08:05 -07:00
Brandon Keiji fd6f6b02ea
feat: add git branch name to footer (#589) 2025-05-28 16:30:05 -07:00
Olcan 0d99398689
much improved support for background processes, avoiding termination (via SIGPIPE) or eventual blocking (e.g. due to filled OS buffers) (#586) 2025-05-28 14:45:46 -07:00
DeWitt Clinton 27a773d5b2
Display git commit info in the /about section. (#567)
This change detects the most recent git commit short hash and writes it to the `GIT_COMMIT_INFO` constant in `packages/cli/src/generated/git-commit.sh`, optionally appending the string "(local modifications)" if additional local changes after that commit are detected.

If set, this string is displayed in the `/about` dialog as well as passed into the `/bug` template.

Example:

```
> /about

╭───────────────────────────────────────────────────────────────────────────╮
│                                                                           │
│ About Gemini CLI                                                          │
│                                                                           │
│ CLI Version               development                                     │
│ Git Commit                43370ab (local modifications)                   │
│ Model                     gemini-2.5-pro-preview-05-06                    │
│ Sandbox                   sandbox-exec (minimal)                          │
│ OS                        darwin v23.11.0                                 │
│                                                                           │
╰───────────────────────────────────────────────────────────────────────────╯
```

Additionally, this change updates `.gitignore` to ignore the generated files, `scripts/clean.sh` to remove them, and adds a `npm run generate` stage for this and any other generators we need to write.
2025-05-28 00:04:26 -07:00
Taylor Mullen f2f2ecf9d8 feat: Allow cancellation of in-progress Gemini requests and pre-execution checks
- Implements cancellation for Gemini requests while they are actively being processed by the model.
- Extends cancellation support to the  logic within tools. This allows users to cancel operations during the phase where the system is determining if a tool execution requires user confirmation, which can include potentially long-running pre-flight checks or LLM-based corrections.
- Underlying LLM calls for edit corrections (within  and ) and next speaker checks can now also be cancelled.
- Previously, cancellation of the main request was not possible until text started streaming, and pre-execution checks were not cancellable.
- This change leverages the updated SDK's ability to accept an abort token and threads s throughout the request, tool execution, and pre-execution check lifecycle.

Fixes https://github.com/google-gemini/gemini-cli/issues/531
2025-05-27 23:46:37 -07:00
Olcan bfeaac8441
live output from shell tool (#573) 2025-05-27 15:40:18 -07:00
Olcan 0d5f7686d7
fix tool cancellation while executing (#575) 2025-05-27 15:22:30 -07:00
Taylor Mullen 480549e02e Refactor(chat): Introduce custom Chat class for future modifications
- Copied the `Chat` class from `@google/genai` into `packages/server/src/core/geminiChat.ts`.
- This change is in preparation for future modifications to the chat handling logic.
- Updated relevant files to use the new `GeminiChat` class.

Part of https://github.com/google-gemini/gemini-cli/issues/551
2025-05-26 14:20:28 -07:00
Taylor Mullen 8440b971f5 Fix(cli): Prevent premature input box reactivation during tool confirmation
- Introduced a 'validating' state for tool calls to prevent the input box from reappearing while waiting for a tool's `shouldConfirmExecute` method to complete.
- When a tool call is initiated, it's now immediately set to a 'validating' status. This ensures the UI remains in a busy/responding state.
- `useGeminiStream` now considers the 'validating' state as part of `StreamingState.Responding`.
- `useToolScheduler` has been updated to:
    - Set the initial status of new tool calls to 'validating'.
    - Asynchronously perform the `shouldConfirmExecute` check.
    - Transition to 'awaiting_approval' or 'scheduled' based on the check's outcome.
- This resolves an issue where a slow `shouldConfirmExecute` could lead to the input prompt becoming active again before the tool call lifecycle was fully determined. While 'validating' is currently treated similarly to 'executing' in the UI, this new state provides a foundation for more customized user experiences during this phase in the future.

Fixes https://github.com/google-gemini/gemini-cli/issues/527
2025-05-25 16:06:33 -07:00
Jacob Richman b4c16d1f56
Code review comment fixes and some refactors. (#525)
No intentional different behavior aside for tweaks suggested from the code review of #506 Refactor: Extract console message logic to custom hook

This commit refactors the console message handling from App.tsx into a new custom hook useConsoleMessages.

This change improves the testability of the console message logic and declutters the main App component.

Created useConsoleMessages.ts to encapsulate console message state and update logic.
Updated App.tsx to utilize the new useConsoleMessages hook.
Added unit tests for useConsoleMessages.ts to ensure its functionality.
I deleted and started over on LoadingIndicator.test.tsx as I spent way too much time trying to fix it before just regenerating the tests as the code was easier to write tests for from scratch and the existing tests were not that good (I added them in the previous pull request).
2025-05-24 00:44:17 -07:00
Jacob Richman 1c3d9d7623
Make console message support more robust to logging in the middle of rendering. (#521) 2025-05-23 22:51:47 -07:00
Miguel Solorio 6247cb8ddd Update packages/cli/src/ui/hooks/slashCommandProcessor.ts
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-05-23 16:14:37 -07:00
Miguel Solorio 221370acc5 Add `/about` command 2025-05-23 16:14:37 -07:00
Jacob Richman 91ee02898a
feat: Modify loading indicator to support a paused state (#506) 2025-05-23 10:25:17 -07:00
Jacob Richman a96ff934ea
Fix bug updating the cursor after navigating history. (#507) 2025-05-23 09:40:01 -07:00
Allen Hutchison a008d81780
Refactor(server): Centralize GEMINI.md discovery logic in server (#498) 2025-05-23 08:53:22 -07:00
Allen Hutchison f8c4276e69
Refactor(cli): Move memory add logic to server tool call (#493) 2025-05-23 08:47:19 -07:00
Taylor Mullen 7c3591f641 Refactor: Update streaming state logic to hide loader during confirmation
- The streaming state logic in `useGeminiStream.ts` has been updated.
- Previously, the loading indicator was displayed even when the system was
waiting for user confirmation on a tool call.
- This change introduces a `WaitingForConfirmation` state to ensure the
loading indicator is hidden during these confirmation prompts, improving
the user experience.
2025-05-23 00:39:05 -07:00
Brandon Keiji 01971741e0
feat: add emphasis to tool confirmations (#502) 2025-05-23 05:28:31 +00:00
Allen Hutchison 581709df80
Refactor: Streamline memoryUtils and update slash commands (#478) 2025-05-22 10:57:06 -07:00
Brandon Keiji fb1d13d600
fix: cancel parallel tool calls mid-execution (#489) 2025-05-22 03:02:45 -07:00
Brandon Keiji a8bfdf2d56
fix: synchronization between executed tools and turn loops (#488) 2025-05-22 02:51:07 -07:00
Brandon Keiji 4e3ba687a6
fix: forward entire tool call confirmation object through useToolScheduler (#481) 2025-05-22 06:00:36 +00:00
Brandon Keiji 02eec5c8ca
feat: useToolScheduler hook to manage parallel tool calls (#448) 2025-05-21 22:57:53 -07:00
Allen Hutchison a0761f0c41
Fix: Resolve CLI version reporting in /bug command (#455) 2025-05-21 13:31:18 -07:00
Olcan 00ab1905e0
use pending history item for shell mode, update as output is received (#471) 2025-05-21 13:16:50 -07:00
Olcan 01dbc61d1c
space outputs in shell mode (#469) 2025-05-21 12:59:23 -07:00
DeWitt Clinton 01c28df8b2
Add globbing support to @-command file suggestions and resolution. (#462)
Implements recursive glob-based file search for both suggestions and execution of the `@` command.

- When typing `@filename`, suggestions will now include files matching `filename` in nested directories.
- Suggestions are sorted by path depth (shallowest first), then directories before files, then alphabetically.
- The maximum recursion depth for suggestions is set to 10.
- When executing an `@filename` command, if the file is not found directly, a recursive search (using the glob tool) is performed to locate the file.

This addresses the first request in issue #461 by allowing users to quickly reference deeply nested files without typing the full path. Also addresses b/416292478.
2025-05-21 12:22:18 -07:00
Brandon Keiji e1a64b41e8
feat: create tool scheduler hook (#468) 2025-05-21 10:35:40 -07:00
Olcan 2ad666a484
switch to spawn for shell mode (#467) 2025-05-21 09:31:13 -07:00
Olcan 8a70b98d1d
fix exit code for shell mode also (#466) 2025-05-21 09:00:54 -07:00
Seth Troisi cd13c5881b
Add Logger for command history (#435) 2025-05-21 00:36:22 -07:00
Taylor Mullen bda472f147 fix(cli): Prevent request cancellation after multiple Esc presses
- Ensures `abortControllerRef` is reset after a request is aborted or completed.
- Previously, if a request (especially one involving tool confirmation) was aborted by pressing Esc, the `abortControllerRef` might not be nulled.
- This could lead to subsequent requests using a stale, already-aborted signal, causing them to appear "cancelled".
- The fix unconditionally sets `abortControllerRef.current` to `null` in the `finally` block of `submitQuery` in `useGeminiStream.ts`.
- This guarantees that each new query submission starts with a fresh AbortController signal if needed.
- Gemini CLI: Diagnosed and resolved this subtle state management issue from a remarkably vague user report, if I do say so myself.

Fixes https://buganizer.corp.google.com/issues/418496499
2025-05-20 23:58:53 -07:00
Jacob Richman 716f7875a2
Support Images and PDFs (#447) 2025-05-20 13:02:41 -07:00
Taylor Mullen 6ca446bded fix(cli): Prevent truncation of first character in shell commands
- The shell command processor was incorrectly truncating the first
  character of the command (e.g., 'ls' became 's') due to an
  erroneous `slice(1)` operation, likely introduced during a
  previous merge. This change removes the slice, ensuring the full
  command is processed.
- Introduces unit tests for the shellCommandProcessor hook.
- Fixes a minor grammatical issue in the display of GEMINI.md file count.
2025-05-20 00:23:12 -07:00
Allen Hutchison 28acb8d495
feat(cli): Implement /bug command and add open dependency (#428) 2025-05-19 16:56:32 -07:00
Taylor Mullen 323b1298f9 fix: Ensure user written `!` is treated opaquely if not in shell mode\n\n- Addresses an issue where commands prefixed with `!` (e.g., `!ls`) were incorrectly handled by the shell command processor if the `!` was added after initially typing the command.\n- Ensures that such commands are correctly forwarded to the Gemini model.\n- Updates `useGeminiStream` to be aware of shell mode to properly manage streaming state.\n\nFixes https://buganizer.corp.google.com/issues/418761305 2025-05-19 16:16:47 -07:00