Skip to content

fix(cli): add missing custom theme properties to settings schema#25729

Open
NTaylorMullen wants to merge 1 commit intomainfrom
ntm/gh.25689
Open

fix(cli): add missing custom theme properties to settings schema#25729
NTaylorMullen wants to merge 1 commit intomainfrom
ntm/gh.25689

Conversation

@NTaylorMullen
Copy link
Copy Markdown
Collaborator

Summary

This PR fixes a validation error when using certain properties in a custom theme configuration. Specifically, it adds support for text.response, ui.active, and ui.focus in the settings schema.

Details

  • Added missing properties (text.response, ui.active, ui.focus) to the CustomTheme definition in packages/cli/src/config/settingsSchema.ts.
  • Synchronized the CustomTheme interface in packages/core/src/config/config.ts by adding border.focused (which was already in the schema but missing from the interface).
  • Added a comprehensive validation test case in packages/cli/src/config/settings-validation.test.ts to verify that these properties are now correctly accepted.

Related Issues

Fixes #25689

How to Validate

  1. Run the new validation tests: npm test -w @google/gemini-cli -- src/config/settings-validation.test.ts
  2. Manually verify by creating a custom theme in your settings:
    ui:
      customThemes:
        test-theme:
          type: custom
          name: "Test Theme"
          text:
            response: "#00ff00"
    The CLI should no longer warn about unrecognized keys.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on MacOS

- Add 'text.response', 'ui.active', and 'ui.focus' to CustomTheme schema.
- Synchronize 'CustomTheme' interface in core with schema by adding 'border.focused'.
- Add validation tests for the new properties.

Fixes #25689
@NTaylorMullen NTaylorMullen requested a review from a team as a code owner April 21, 2026 03:52
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a validation issue where specific custom theme properties were being flagged as unrecognized by the CLI. By updating the settings schema and synchronizing the internal interface definitions, the changes ensure that users can fully utilize custom theme configurations without encountering validation errors. A new test case was added to confirm these properties are handled correctly.

Highlights

  • Schema Updates: Added missing properties text.response, ui.active, and ui.focus to the settings schema to ensure proper validation.
  • Interface Synchronization: Updated the CustomTheme interface to include the border.focused property, ensuring consistency between the schema and the codebase.
  • Validation Testing: Introduced a new test case in settings-validation.test.ts to verify that the newly added theme properties are correctly accepted by the validator.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link
Copy Markdown

Size Change: +111 B (0%)

Total Size: 33.7 MB

Filename Size Change
./bundle/chunk-7HZ62EWV.js 0 B -14.5 MB (removed) 🏆
./bundle/chunk-7JYX7OYE.js 0 B -49.2 kB (removed) 🏆
./bundle/chunk-7LSIJV5T.js 0 B -3.8 kB (removed) 🏆
./bundle/chunk-QOIPE2QP.js 0 B -3.43 kB (removed) 🏆
./bundle/chunk-TFETZB54.js 0 B -674 kB (removed) 🏆
./bundle/chunk-USRW35AA.js 0 B -2.72 MB (removed) 🏆
./bundle/core-XRKWYEBZ.js 0 B -46.7 kB (removed) 🏆
./bundle/devtoolsService-JM7UV5K7.js 0 B -28.4 kB (removed) 🏆
./bundle/gemini-HBHBH6VI.js 0 B -576 kB (removed) 🏆
./bundle/interactiveCli-VGZMS7IN.js 0 B -1.3 MB (removed) 🏆
./bundle/liteRtServerManager-56MHLN2Q.js 0 B -2.08 kB (removed) 🏆
./bundle/oauth2-provider-UE6YCM4Y.js 0 B -9.16 kB (removed) 🏆
./bundle/chunk-7AEVCBQ2.js 14.5 MB +14.5 MB (new file) 🆕
./bundle/chunk-B2PSBTF7.js 3.8 kB +3.8 kB (new file) 🆕
./bundle/chunk-BMFBBD53.js 3.43 kB +3.43 kB (new file) 🆕
./bundle/chunk-CKQGDMQL.js 49.2 kB +49.2 kB (new file) 🆕
./bundle/chunk-GZUZJJZV.js 2.72 MB +2.72 MB (new file) 🆕
./bundle/chunk-TEWJPNH5.js 674 kB +674 kB (new file) 🆕
./bundle/core-LIGAWPVA.js 46.7 kB +46.7 kB (new file) 🆕
./bundle/devtoolsService-HKGJVOTX.js 28.4 kB +28.4 kB (new file) 🆕
./bundle/gemini-66GACVGP.js 576 kB +576 kB (new file) 🆕
./bundle/interactiveCli-MF7AHVYG.js 1.3 MB +1.3 MB (new file) 🆕
./bundle/liteRtServerManager-QFUANBCR.js 2.08 kB +2.08 kB (new file) 🆕
./bundle/oauth2-provider-R4CULSVU.js 9.16 kB +9.16 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
./bundle/bundled/third_party/index.js 8 MB 0 B
./bundle/chunk-34MYV7JD.js 2.45 kB 0 B
./bundle/chunk-5AUYMPVF.js 858 B 0 B
./bundle/chunk-5PS3AYFU.js 1.18 kB 0 B
./bundle/chunk-664ZODQF.js 124 kB 0 B
./bundle/chunk-DAHVX5MI.js 206 kB 0 B
./bundle/chunk-IUUIT4SU.js 56.5 kB 0 B
./bundle/chunk-RJTRUG2J.js 39.8 kB 0 B
./bundle/chunk-YIPDXML5.js 1.97 MB 0 B
./bundle/cleanup-GLDYQJA4.js 0 B -932 B (removed) 🏆
./bundle/devtools-36NN55EP.js 696 kB 0 B
./bundle/dist-T73EYRDX.js 356 B 0 B
./bundle/events-XB7DADIJ.js 418 B 0 B
./bundle/examples/hooks/scripts/on-start.js 188 B 0 B
./bundle/examples/mcp-server/example.js 1.43 kB 0 B
./bundle/gemini.js 4.97 kB 0 B
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB 0 B
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB 0 B
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB 0 B
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB 0 B
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB 0 B
./bundle/memoryDiscovery-NXEEFR74.js 980 B 0 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 222 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 229 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 13.4 kB 0 B
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B 0 B
./bundle/sandbox-macos-permissive-open.sb 890 B 0 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB 0 B
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB 0 B
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB 0 B
./bundle/sandbox-macos-strict-open.sb 4.82 kB 0 B
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB 0 B
./bundle/src-QVCVGIUX.js 47 kB 0 B
./bundle/start-UAYHAXS3.js 0 B -622 B (removed) 🏆
./bundle/tree-sitter-7U6MW5PS.js 274 kB 0 B
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB 0 B
./bundle/cleanup-SQO324ZT.js 932 B +932 B (new file) 🆕
./bundle/start-7TZXFB3I.js 622 B +622 B (new file) 🆕

compressed-size-action

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the theme configuration schema and interfaces to support additional properties, including a 'response' field for text, 'active' and 'focus' fields for UI elements, and a 'focused' border style. Corresponding validation tests were added to ensure these new fields are correctly handled. I have no feedback to provide.

};
border?: {
default?: string;
focused?: string;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In packages/cli/src/ui/themes/theme.ts, the createCustomTheme function does not currently read the border.focused property. This means that even if a user defines a focused border color in their settings, it will be ignored and fall back to the default green.

 // packages/cli/src/ui/themes/theme.ts                                                                                                                                                                                                  
                                                                                                                                                                                                                                         
 const colors: ColorsTheme = {                                                                                                                                                                                                           
    ...                                                                                                                                                                                                                                
   FocusColor:                                                                                                                                                                                                                           
     customTheme.ui?.focus ??                                                                                                                                                                                                            
     customTheme.border?.focused ?? // This needs to be added 💚                                                                                                                                                                                
     customTheme.AccentGreen,                                                                                                                                                                                                            
    ...                                                                                                                                                                                                                                
                                                                                                                                                                                                                           
//    

Thanks for improving the custom theme integration 💚

focus: '#00ff00',
gradient: ['#000000', '#ffffff'],
},
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we can add the border field to improve the test 👍 ?

   border: {                                                                                                                                                                                                                                
      default: '#313244',                                                                                                                                                                                                                    
      focused: '#89b4fa',                                                                                                                                                                                 
    },     

Copy link
Copy Markdown

@nidhishgajjar nidhishgajjar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a clean, focused bug fix that addresses a validation error with custom theme properties. The changes are well-structured and properly tested.

What this PR fixes:

  • Users were getting validation errors when using text.response, ui.active, and ui.focus properties in custom theme configurations
  • There was a mismatch between the settings schema and the CustomTheme interface

Code quality:

  • Minimal, focused changes (34 additions, 0 deletions, 3 files)
  • Properly synchronizes the settings schema with the CustomTheme interface
  • Adds comprehensive validation test case covering all the new properties
  • Clean diff that clearly shows the missing properties being added

Testing:

  • Added test case that validates a complex nested customThemes configuration
  • Test covers all the newly added properties (text.response, ui.active, ui.focus)
  • Manual validation steps are clearly documented in the PR description

Documentation:

  • Excellent PR description with clear summary, details, and validation steps
  • Properly references the related issue (#25689)
  • Pre-merge checklist is complete

Approval: This looks good to merge. The fix is targeted, well-implemented, properly tested, and thoroughly documented.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: 'text.response' in custom theme triggers validation error (unrecognized key)

3 participants