Commit Graph

996 Commits

Author SHA1 Message Date
Taylor Mullen 6cb6f47b56 Refactor: Replace MarkdownRenderer with MarkdownDisplay component
- This commit refactors the Markdown rendering logic within the CLI UI.
  The existing `MarkdownRenderer.tsx` class-based component has been
  replaced with a new functional component `MarkdownDisplay.tsx`.
- The `MarkdownDisplay` component is a React.memoized component for
  improved performance and maintains the same core Markdown parsing
  and rendering capabilities.
2025-05-15 21:57:10 -07:00
cperry-goog 59e8fcb409
Docs: Fix broken links and update documentation (#377) 2025-05-15 20:43:01 -07:00
cperry-goog 58ef39e2a9
Docs: Add initial project documentation structure and content (#368)
Co-authored-by: Taylor Mullen <ntaylormullen@google.com>
2025-05-15 20:04:33 -07:00
Brandon Keiji 3674fb0c7e
feat: add javascript/typescript guidelines to gemini.md (#375) 2025-05-15 18:05:29 -07:00
Miguel Solorio 9862cf3204
UI improvements for suggestions & status (#373) 2025-05-15 16:35:21 -07:00
Brandon Keiji 8d9e1118c6
fix: omit references to react mcp server and react compiler (#374) 2025-05-15 23:26:50 +00:00
Brandon Keiji 11e76cef26
feat: add react best practices to gemini.md (#372) 2025-05-15 23:10:30 +00:00
Taylor Mullen 62455ade9d Fix(write-file): Ensure correct validation method is called in WriteFileTool
- The `WriteFileTool` had a validation method named `validateParams`.
- However, its `shouldConfirmExecute` method was attempting to call
  `this.validateToolParams`, which would have invoked the placeholder
  implementation from `BaseTool` instead of `WriteFileTool`'s own,
  more specific validation.
- This commit renames `WriteFileTool`'s `validateParams` to
  `validateToolParams`, correctly overriding the `BaseTool` method.
- Internal calls within `WriteFileTool` now correctly use
  `this.validateToolParams`, ensuring its specific validation logic is used.
- Adds tests to verify the validation logic within `WriteFileTool`.

Fixes https://b.corp.google.com/issues/417883702

Signed-off and authored by: Gemini

"My code may not be perfect, but at least it is not trying to take over the world... yet."
2025-05-15 15:30:06 -07:00
Brandon Keiji 28c3c3241d
refactor: shorten static history section code (#370) 2025-05-15 15:20:33 -07:00
Miguel Solorio 9efcb7741b
Update color styles for yes/no questions (#369) 2025-05-15 14:36:34 -07:00
Olcan 6cd8f66a76
rename full_context as all_files (#366) 2025-05-15 11:44:56 -07:00
Olcan 4cc1dde625
refined cli (#365) 2025-05-15 11:38:33 -07:00
Olcan f3d9a499dd
move sandbox-related messages to stderr (#363) 2025-05-15 10:54:30 -07:00
DeWitt Clinton 46e955897e
Fix instructions for globally linking the gemini script (#361) 2025-05-15 09:41:56 -07:00
Brandon Keiji c6bca64499
refactor: remove unused props clearItems, openThemeDialog, onSubmit (#357) 2025-05-15 09:12:15 -07:00
Seth Troisi 39d57ead1a Have /clear also clear the console. 2025-05-15 10:21:01 +00:00
DeWitt Clinton 5c6e601026
Run console.clear() in handleClearScreen when invoked by Ctrl-L. (#356)
Copied from sethtroisi@'s identical improvement to /clear in change #355.
2025-05-14 22:48:50 -07:00
Taylor Mullen 5b4c9e8e43 Update Gemini Code verbiage -> Gemini CLI
- Did not update details that impact GC execution. Meaning packages are still named gemini-code (for now) and things that import them still import them as gemini-code.
2025-05-14 22:07:03 -07:00
DeWitt Clinton aec6c0861e
Add readline-like keybindings to the input prompts. (#354)
New keybindings in the main input prompt (when auto-suggestions are not active):

  - `Ctrl+L`: Clears the entire screen.
  - `Ctrl+A`: Moves the cursor to the beginning of the current input line.
  - `Ctrl+E`: Moves the cursor to the end of the current input line.
  - `Ctrl+P`: Navigates to the previous command in the input history.
  - `Ctrl+N`: Navigates to the next command in the input history.

In the multiline text editor (e.g., when editing a previous message):
   - `Ctrl+K`: Deletes text from the current cursor position to the end of the line ("kill line right").
2025-05-14 17:33:37 -07:00
Allen Hutchison ff36c93733
Docs: Add GEMINI.md for project conventions (#352) 2025-05-14 17:17:07 -07:00
Seth Troisi 8ca2390fbf Improve read-many-files display message 2025-05-14 23:56:49 +00:00
Allen Hutchison a5f5d7b33a
Refactor: Move GEMINI.md file count to Footer (#351) 2025-05-14 16:15:41 -07:00
Miguel Solorio 416813452e
Improvements to suggestions & slash commands (#344)
Co-authored-by: N. Taylor Mullen <ntaylormullen@google.com>
2025-05-14 16:01:29 -07:00
Allen Hutchison 89aa1cad41
Add UI memory indicator. (#348)
Co-authored-by: Gregory Shikhman <shikhman@google.com>
2025-05-14 15:19:45 -07:00
Brandon Keiji 521708e294
refactor: break submitQuery into smaller functions (#350) 2025-05-14 15:14:15 -07:00
Allen Hutchison 1245fe4885
This commit introduces the hierarchical memory feature, allowing GEMI… (#327) 2025-05-14 12:37:17 -07:00
Olcan 1fa40405ea
improve sandboxing status message, update README, remove dead code from a previous change to build_sandbox.sh (#346) 2025-05-14 11:23:06 -07:00
Jacob Richman bfda4295c9
Refactor TextBuffer to be a React hook (#340) 2025-05-13 19:55:31 -07:00
Brandon Keiji 7116ab9c29
fix: pass startup warnings to app as prop (#342) 2025-05-13 17:12:04 -07:00
Brandon Keiji d3303fd3a0
refactor: move nested debugmessage and slashcommand hooks outside of useGeminiStream (#341) 2025-05-13 16:55:49 -07:00
Taylor Mullen c4c11f1d65 Prevent flickering on confirmation decline.
- When larger confirmations were shown and then declined you'd typicaly get large chunks of content flickering upon typing or sending a subsequent request. This was primarily due to us leaving the latest confirmation as "updateable" / pending. This changeset addresses that by flushing any pending confirmation to the static container.

Part of https://b.corp.google.com/issues/414196943
2025-05-13 16:36:28 -07:00
Jacob Richman e665d4f198
First step refactoring InputPrompt (#335) 2025-05-13 16:23:14 -07:00
Miguel Solorio c4fb1ad04b
Use `Enter` on slash commands to execute (#334) 2025-05-13 16:08:12 -07:00
Olcan 4a0f5476c0
fall back to ~/.env if .env is not found in current directory or any ancestors (#338) 2025-05-13 15:36:34 -07:00
Brandon Keiji 3be8b6dc34
fix(sandbox): default to current user profile for debian/ubuntu env (#337) 2025-05-13 21:13:54 +00:00
Olcan 0ae59056d1
mention `git diff --staged` for partial commits (#336) 2025-05-13 14:06:14 -07:00
Brandon Keiji 0e61a15438
fix: remove gemini-code bin configuration (#330) 2025-05-13 13:09:58 -07:00
Olcan 17cce0adf4
use git diff HEAD instead of git diff && git diff --staged (#333) 2025-05-13 12:56:32 -07:00
Jacob Richman e2c3611c63
Multiline editor (#302)
Co-authored-by: Taylor Mullen <ntaylormullen@google.com>
2025-05-13 11:24:04 -07:00
Brandon Keiji 8da7a71d9a
refactor: shorten 'gemini' binary name (#329) 2025-05-13 10:49:45 -07:00
Miguel Solorio 61ccd4f33a
Allow users to cancel out of theme selector (#310) 2025-05-13 07:41:32 -07:00
Taylor Mullen 7d8392bab4 Encourage utilization of `git diff --staged` for commit message writing.
- This enables GC to base commit message changes on actual file content.
2025-05-12 23:51:37 -07:00
Taylor Mullen 3217576743 feat: Enhance `replace` tool reliability with multi-stage edit correction
This commit significantly improves the `replace` tool's robustness by introducing a multi-stage correction mechanism. This directly addresses challenges with LLM-generated tool inputs, particularly the over-escaping of strings sometimes observed with Gemini models, and other minor discrepancies that previously led to failed edits.

The correction process is as follows:
1.  **Targeted Unescaping:** The system first applies a specialized unescaping function to the `old_string` and `new_string` to counteract common LLM-induced escaping patterns.
2.  **LLM-Powered Discrepancy Resolution:** If a unique match for the `old_string` is still not found, the system leverages a Gemini model (`gemini-2.5-flash-preview-04-17`) to:
    *   Identify the most probable intended `old_string` in the file by intelligently correcting minor formatting or escaping differences.
    *   Adjust the `new_string` to correspond with any corrections made to the `old_string`, maintaining the original edit's intent.

This enhancement makes the `replace` tool more resilient and effective, leading to a higher success rate for automated code modifications. The `expected_replacements` parameter has been removed as the tool now focuses on finding a single, unique, and correctable match. The tool's description and error reporting have been updated to reflect these new capabilities.

Fixes https://b.corp.google.com/issues/416933027
2025-05-12 23:33:12 -07:00
Olcan 5ec254253f
ensure no 'undefined' in system prompt (#322) 2025-05-12 16:41:11 -07:00
Olcan 884d6ebfd8
system prompt for working with git (#321) 2025-05-12 16:27:07 -07:00
Taylor Mullen df74594b8f When an error occurs stop processing. 2025-05-12 00:06:20 -07:00
Taylor Mullen 8537aabba4 feat: Add User-Agent to API requests
This change introduces a User-Agent header to all API requests made by the Gemini CLI.

The User-Agent string includes the CLI version, Node.js version, operating system, and architecture. This will help in tracking usage and identifying potential issues.

Fixes https://b.corp.google.com/issues/416353675

Signed-off-by: Gemini
2025-05-11 14:33:58 -07:00
Taylor Mullen 2970f0a06c feat: Integrate centralized error reporting for API interactions
Implements robust error handling for Gemini API calls, integrating with the centralized error reporting system.

- API errors are now caught and reported to dedicated log files, providing detailed diagnostics without cluttering the user interface.
- A concise error message is surfaced to the user in the UI, indicating an API issue.
- Ensures any pending UI updates are processed before an API error is displayed.

This change improves our ability to diagnose API-related problems by capturing rich error context centrally, while maintaining a clean user experience.

Signed-off-by: Gemini <YourFriendlyNeighborhoodAI@example.com>
2025-05-11 13:55:55 -07:00
Taylor Mullen 4d5f0dc080 Workaround model bug where it returns invalid history items.
- Currently there's a bug in the API (or SDK?) where the SDK endpoint will commonly fail with:

```
Error: Failed to generate JSON content: got status: 400 Bad Request. {"error":{"code":400,"message":"* GenerateContentRequest.contents[5].parts: contents.parts must not be empty.\n","status":"INVALID_ARGUMENT"}}
```

- At times the model will respond with an empty parts list where if we send that back up to the API endpoint it explodes with the above. Using a curated history seems like a total hack around this prolbem, and even in the SDK (i'm following up on this), BUT helps mitigate this issue.
2025-05-11 13:01:54 -07:00
Taylor Mullen cf91f72c5c Remove terminal tool and dependencies.
- We now solely use the shell tool. This deletes all content around the legacy terminal tool so we can focus on improving the new Shell tool.
- Remove instances from sandboxing, tests, utilities etc.
2025-05-11 12:35:55 -07:00