Commit Graph

5549 Commits

Author SHA1 Message Date
Taylor Mullen
bc6ded6e06 Refactor: Improve UI rendering and address code review comments
This commit addresses several code review comments primarily focused on improving the rendering and stability of the CLI UI.

Key changes include:
- Passing `isPending` and `availableTerminalHeight` props to `MarkdownDisplay` to enable more intelligent rendering of content, especially for pending messages and code blocks.
- Adjusting height calculations in `ToolGroupMessage` and `ToolMessage` to more accurately reflect available space.
- Refining the logic in `App.tsx` for measuring and utilizing terminal height, including renaming `footerRef` to `mainControlsRef` for clarity.
- Ensuring consistent prop drilling for `isPending` and `availableTerminalHeight` through `HistoryItemDisplay`, `GeminiMessage`, and `GeminiMessageContent`.
- In `MarkdownDisplay`, when `isPending` is true and content exceeds `availableTerminalHeight`, the code block will now be truncated with a "... generating more ..." message. If there's insufficient space even for the
message, a simpler "... code is being written ..." will be shown.
2025-05-15 22:57:28 -07:00
Taylor Mullen
4b37d2870e Fix: Prevent UI tearing and improve display of long content
This commit introduces several changes to better manage terminal height and prevent UI tearing, especially when displaying long tool outputs or when the pending history item exceeds the available terminal height.

- Calculate and utilize available terminal height in `App.tsx`, `HistoryItemDisplay.tsx`, `ToolGroupMessage.tsx`, and `ToolMessage.tsx`.
- Refresh the static display area in `App.tsx` when a pending history item is too large, working around an Ink bug (see https://github.com/vadimdemedes/ink/pull/717).
- Truncate long tool output in `ToolMessage.tsx` and indicate the number of hidden lines.
- Refactor `App.tsx` to correctly measure and account for footer height.

Fixes https://b.corp.google.com/issues/414196943
2025-05-15 22:57:28 -07:00
Taylor Mullen
f0ff90cacb Addressed code review comments 2025-05-15 21:57:10 -07:00
Taylor Mullen
f76aff895a 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
467c0eaacd Docs: Fix broken links and update documentation (#377) 2025-05-15 20:43:01 -07:00
cperry-goog
32807477cf 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
769866ca42 feat: add javascript/typescript guidelines to gemini.md (#375) 2025-05-15 18:05:29 -07:00
Miguel Solorio
8d15c21b8e UI improvements for suggestions & status (#373) 2025-05-15 16:35:21 -07:00
Brandon Keiji
9ba0b1813e fix: omit references to react mcp server and react compiler (#374) 2025-05-15 23:26:50 +00:00
Brandon Keiji
a2476d0505 feat: add react best practices to gemini.md (#372) 2025-05-15 23:10:30 +00:00
Taylor Mullen
94da1c7b24 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
b2f47ee66a refactor: shorten static history section code (#370) 2025-05-15 15:20:33 -07:00
Miguel Solorio
84ae325086 Update color styles for yes/no questions (#369) 2025-05-15 14:36:34 -07:00
Olcan
b6a2b700c0 rename full_context as all_files (#366) 2025-05-15 11:44:56 -07:00
Olcan
8f6629c772 refined cli (#365) 2025-05-15 11:38:33 -07:00
Olcan
c540995764 move sandbox-related messages to stderr (#363) 2025-05-15 10:54:30 -07:00
DeWitt Clinton
ee52c742cd Fix instructions for globally linking the gemini script (#361) 2025-05-15 09:41:56 -07:00
Brandon Keiji
baf8eae89c refactor: remove unused props clearItems, openThemeDialog, onSubmit (#357) 2025-05-15 09:12:15 -07:00
Seth Troisi
c7be3c9f57 Have /clear also clear the console. 2025-05-15 10:21:01 +00:00
DeWitt Clinton
aae17081b7 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
62e8371aab 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
63d8f22658 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
551ff1bfa8 Docs: Add GEMINI.md for project conventions (#352) 2025-05-14 17:17:07 -07:00
Seth Troisi
586585a606 Improve read-many-files display message 2025-05-14 23:56:49 +00:00
Allen Hutchison
fb7996c1c7 Refactor: Move GEMINI.md file count to Footer (#351) 2025-05-14 16:15:41 -07:00
Miguel Solorio
92b4e1c342 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
74c6fe5a1f Add UI memory indicator. (#348)
Co-authored-by: Gregory Shikhman <shikhman@google.com>
2025-05-14 15:19:45 -07:00
Brandon Keiji
cfb44d04ee refactor: break submitQuery into smaller functions (#350) 2025-05-14 15:14:15 -07:00
Allen Hutchison
c5985fea09 This commit introduces the hierarchical memory feature, allowing GEMI… (#327) 2025-05-14 12:37:17 -07:00
Olcan
b1ba89b3c9 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
d9dc7a1a03 Refactor TextBuffer to be a React hook (#340) 2025-05-13 19:55:31 -07:00
Brandon Keiji
65648a73f4 fix: pass startup warnings to app as prop (#342) 2025-05-13 17:12:04 -07:00
Brandon Keiji
577ddd6648 refactor: move nested debugmessage and slashcommand hooks outside of useGeminiStream (#341) 2025-05-13 16:55:49 -07:00
Taylor Mullen
5d34f06948 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
81b37e229d First step refactoring InputPrompt (#335) 2025-05-13 16:23:14 -07:00
Miguel Solorio
5bd418e662 Use Enter on slash commands to execute (#334) 2025-05-13 16:08:12 -07:00
Olcan
41d321b85f 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
12efd21076 fix(sandbox): default to current user profile for debian/ubuntu env (#337) 2025-05-13 21:13:54 +00:00
Olcan
aff5165997 mention git diff --staged for partial commits (#336) 2025-05-13 14:06:14 -07:00
Brandon Keiji
e8c774cb6c fix: remove gemini-code bin configuration (#330) 2025-05-13 13:09:58 -07:00
Olcan
a5371d7a22 use git diff HEAD instead of git diff && git diff --staged (#333) 2025-05-13 12:56:32 -07:00
Jacob Richman
78ec631acb Multiline editor (#302)
Co-authored-by: Taylor Mullen <ntaylormullen@google.com>
2025-05-13 11:24:04 -07:00
Brandon Keiji
c16e16fdd6 refactor: shorten 'gemini' binary name (#329) 2025-05-13 10:49:45 -07:00
Miguel Solorio
523a39c331 Allow users to cancel out of theme selector (#310) 2025-05-13 07:41:32 -07:00
Taylor Mullen
bda1ff7ab4 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
9ee6d79a1e 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
3da6ec086f ensure no 'undefined' in system prompt (#322) 2025-05-12 16:41:11 -07:00
Olcan
08caf730c7 system prompt for working with git (#321) 2025-05-12 16:27:07 -07:00
Taylor Mullen
1080b4f13c When an error occurs stop processing. 2025-05-12 00:06:20 -07:00
Taylor Mullen
259c40e015 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