diff --git a/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap
index 29a7683d06..06f509f1f6 100644
--- a/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap
@@ -5,7 +5,7 @@ exports[`AskUserDialog > Choice question placeholder > uses default placeholder
1. TypeScript
2. JavaScript
-● 3. Enter a custom value
+● 3. Enter a custom value
Enter to submit · Esc to cancel
"
@@ -16,7 +16,7 @@ exports[`AskUserDialog > Choice question placeholder > uses placeholder for "Oth
1. TypeScript
2. JavaScript
-● 3. Type another language...
+● 3. Type another language...
Enter to submit · Esc to cancel
"
@@ -26,8 +26,8 @@ exports[`AskUserDialog > Scroll Arrows (useAlternateBuffer: false) > shows scrol
"Choose an option
▲
-● 1. Option 1
- Description 1
+● 1. Option 1
+ Description 1
2. Option 2
Description 2
▼
@@ -39,8 +39,8 @@ Enter to select · ↑/↓ to navigate · Esc to cancel
exports[`AskUserDialog > Scroll Arrows (useAlternateBuffer: true) > shows scroll arrows correctly when useAlternateBuffer is true 1`] = `
"Choose an option
-● 1. Option 1
- Description 1
+● 1. Option 1
+ Description 1
2. Option 2
Description 2
3. Option 3
@@ -122,8 +122,8 @@ Enter to submit · Tab/Shift+Tab to edit answers · Esc to cancel
exports[`AskUserDialog > hides progress header for single question 1`] = `
"Which authentication method should we use?
-● 1. OAuth 2.0
- Industry standard, supports SSO
+● 1. OAuth 2.0
+ Industry standard, supports SSO
2. JWT tokens
Stateless, good for APIs
3. Enter a custom value
@@ -135,8 +135,8 @@ Enter to select · ↑/↓ to navigate · Esc to cancel
exports[`AskUserDialog > renders question and options 1`] = `
"Which authentication method should we use?
-● 1. OAuth 2.0
- Industry standard, supports SSO
+● 1. OAuth 2.0
+ Industry standard, supports SSO
2. JWT tokens
Stateless, good for APIs
3. Enter a custom value
@@ -150,8 +150,8 @@ exports[`AskUserDialog > shows Review tab in progress header for multiple questi
Which framework?
-● 1. React
- Component library
+● 1. React
+ Component library
2. Vue
Progressive framework
3. Enter a custom value
@@ -163,8 +163,8 @@ Enter to select · ←/→ to switch questions · Esc to cancel
exports[`AskUserDialog > shows keyboard hints 1`] = `
"Which authentication method should we use?
-● 1. OAuth 2.0
- Industry standard, supports SSO
+● 1. OAuth 2.0
+ Industry standard, supports SSO
2. JWT tokens
Stateless, good for APIs
3. Enter a custom value
@@ -178,8 +178,8 @@ exports[`AskUserDialog > shows progress header for multiple questions 1`] = `
Which database should we use?
-● 1. PostgreSQL
- Relational database
+● 1. PostgreSQL
+ Relational database
2. MongoDB
Document database
3. Enter a custom value
diff --git a/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap
index db1b6d1ba5..073c106ceb 100644
--- a/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap
@@ -19,8 +19,8 @@ Files to Modify
1. Yes, automatically accept edits
Approves plan and allows tools to run automatically
-● 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
+● 2. Yes, manually accept edits
+ Approves plan but requires confirmation for each tool
3. Type your feedback...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
@@ -44,8 +44,8 @@ Files to Modify
- src/index.ts - Add auth middleware
- src/config.ts - Add auth configuration options
-● 1. Yes, automatically accept edits
- Approves plan and allows tools to run automatically
+● 1. Yes, automatically accept edits
+ Approves plan and allows tools to run automatically
2. Yes, manually accept edits
Approves plan but requires confirmation for each tool
3. Type your feedback...
@@ -76,8 +76,8 @@ Implementation Steps
8. Add multi-factor authentication in src/auth/MFAService.ts
... last 22 lines hidden (Ctrl+O to show) ...
-● 1. Yes, automatically accept edits
- Approves plan and allows tools to run automatically
+● 1. Yes, automatically accept edits
+ Approves plan and allows tools to run automatically
2. Yes, manually accept edits
Approves plan but requires confirmation for each tool
3. Type your feedback...
@@ -103,8 +103,8 @@ Files to Modify
- src/index.ts - Add auth middleware
- src/config.ts - Add auth configuration options
-● 1. Yes, automatically accept edits
- Approves plan and allows tools to run automatically
+● 1. Yes, automatically accept edits
+ Approves plan and allows tools to run automatically
2. Yes, manually accept edits
Approves plan but requires confirmation for each tool
3. Type your feedback...
@@ -132,8 +132,8 @@ Files to Modify
1. Yes, automatically accept edits
Approves plan and allows tools to run automatically
-● 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
+● 2. Yes, manually accept edits
+ Approves plan but requires confirmation for each tool
3. Type your feedback...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
@@ -157,8 +157,8 @@ Files to Modify
- src/index.ts - Add auth middleware
- src/config.ts - Add auth configuration options
-● 1. Yes, automatically accept edits
- Approves plan and allows tools to run automatically
+● 1. Yes, automatically accept edits
+ Approves plan and allows tools to run automatically
2. Yes, manually accept edits
Approves plan but requires confirmation for each tool
3. Type your feedback...
@@ -210,8 +210,8 @@ Testing Strategy
- Security penetration testing
- Load testing for session management
-● 1. Yes, automatically accept edits
- Approves plan and allows tools to run automatically
+● 1. Yes, automatically accept edits
+ Approves plan and allows tools to run automatically
2. Yes, manually accept edits
Approves plan but requires confirmation for each tool
3. Type your feedback...
@@ -237,8 +237,8 @@ Files to Modify
- src/index.ts - Add auth middleware
- src/config.ts - Add auth configuration options
-● 1. Yes, automatically accept edits
- Approves plan and allows tools to run automatically
+● 1. Yes, automatically accept edits
+ Approves plan and allows tools to run automatically
2. Yes, manually accept edits
Approves plan but requires confirmation for each tool
3. Type your feedback...
diff --git a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap
index 88a1b0486f..5a2819702e 100644
--- a/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/InputPrompt.test.tsx.snap
@@ -12,8 +12,8 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > expands and c
(r:) Type your message or @path/to/file
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll →
- lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
- ...
+ lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
+ ...
"
`;
@@ -22,8 +22,8 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > expands and c
(r:) Type your message or @path/to/file
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll ←
- lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
- llllllllllllllllllllllllllllllllllllllllllllllllll
+ lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
+ llllllllllllllllllllllllllllllllllllllllllllllllll
"
`;
@@ -31,7 +31,7 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match
"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
(r:) commit
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- git commit -m "feat: add search" in src/app
+ git commit -m "feat: add search" in src/app
"
`;
@@ -39,7 +39,7 @@ exports[`InputPrompt > command search (Ctrl+R when not in shell) > renders match
"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
(r:) commit
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
- git commit -m "feat: add search" in src/app
+ git commit -m "feat: add search" in src/app
"
`;
diff --git a/packages/cli/src/ui/components/__snapshots__/SessionBrowser.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/SessionBrowser.test.tsx.snap
index 583d75d281..15cd8748ae 100644
--- a/packages/cli/src/ui/components/__snapshots__/SessionBrowser.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/SessionBrowser.test.tsx.snap
@@ -6,7 +6,7 @@ exports[`SessionBrowser component > enters search mode, filters sessions, and re
Search: query (Esc to cancel)
Index │ Msgs │ Age │ Match
- ❯ #1 │ 1 │ 10mo │ You: Query is here a… (+1 more)
+ ❯ #1 │ 1 │ 10mo │ You: Query is here a… (+1 more)
▼
"
`;
@@ -17,7 +17,7 @@ exports[`SessionBrowser component > renders a list of sessions and marks current
Sort: s Reverse: r First/Last: g/G
Index │ Msgs │ Age │ Name
- ❯ #1 │ 5 │ 10mo │ Second conversation about dogs (current)
+ ❯ #1 │ 5 │ 10mo │ Second conversation about dogs (current)
#2 │ 2 │ 10mo │ First conversation about cats
▼
"
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg
index b7ad1d10db..18fa114a3e 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Initial-Rendering-should-render-settings-list-with-visual-indicators.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
false
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -112,8 +120,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg
index c088c69139..ba5175de12 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-accessibility-settings-enabled-correctly.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
true*
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -112,8 +120,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg
index 0b981a31c8..ba1aa443f7 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-all-boolean-settings-disabled-correctly.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
false*
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -110,8 +118,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg
index b7ad1d10db..18fa114a3e 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-default-state-correctly.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
false
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -112,8 +120,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg
index b7ad1d10db..18fa114a3e 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-file-filtering-settings-configured-correctly.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
false
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -112,8 +120,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg
index 81d4868518..f473eee125 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-focused-on-scope-selector-correctly.snap.svg
@@ -109,9 +109,15 @@
> Apply To
│
│
+
●
+
+
1.
+
+
User Settings
+
│
│
2. Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg
index 324ed5c2cb..ad6b79cc28 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-mixed-boolean-and-number-settings-correctly.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
false*
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -111,8 +119,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg
index b7ad1d10db..18fa114a3e 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-tools-and-security-settings-correctly.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
false
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -112,8 +120,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg
index e99a5b4cdd..d20034290c 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog-SettingsDialog-Snapshot-Tests-should-render-various-boolean-settings-enabled-correctly.snap.svg
@@ -31,12 +31,20 @@
▲
│
│
+
●
+
+
Vim Mode
+
+
true*
│
│
+
+
Enable Vim keybindings
+
│
│
│
@@ -110,8 +118,12 @@
Apply To
│
│
+
●
+
+
User Settings
+
│
│
Workspace Settings
diff --git a/packages/cli/src/ui/components/__snapshots__/SuggestionsDisplay.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/SuggestionsDisplay.test.tsx.snap
index 775233f30e..3c79a534a2 100644
--- a/packages/cli/src/ui/components/__snapshots__/SuggestionsDisplay.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/SuggestionsDisplay.test.tsx.snap
@@ -7,7 +7,7 @@ exports[`SuggestionsDisplay > handles scrolling 1`] = `
Cmd 7 Description 7
Cmd 8 Description 8
Cmd 9 Description 9
- Cmd 10 Description 10
+ Cmd 10 Description 10
Cmd 11 Description 11
Cmd 12 Description 12
▼
@@ -17,13 +17,13 @@ exports[`SuggestionsDisplay > handles scrolling 1`] = `
exports[`SuggestionsDisplay > highlights active item 1`] = `
" command1 Description 1
- command2 Description 2
+ command2 Description 2
command3 Description 3
"
`;
exports[`SuggestionsDisplay > renders MCP tag for MCP prompts 1`] = `
-" mcp-tool [MCP]
+" mcp-tool [MCP]
"
`;
@@ -33,7 +33,7 @@ exports[`SuggestionsDisplay > renders loading state 1`] = `
`;
exports[`SuggestionsDisplay > renders suggestions list 1`] = `
-" command1 Description 1
+" command1 Description 1
command2 Description 2
command3 Description 3
"
diff --git a/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap
index 4f89811121..f584e7f483 100644
--- a/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap
+++ b/packages/cli/src/ui/components/messages/__snapshots__/RedirectionConfirmation.test.tsx.snap
@@ -7,7 +7,7 @@ Note: Command contains redirection which can be undesirable.
Tip: Toggle auto-edit (Shift+Tab) to allow redirection in the future.
Allow execution of: 'echo, redirection (>)'?
-● 1. Allow once
+● 1. Allow once
2. Allow for this session
3. No, suggest changes (esc)
"
diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap
index 72eda055d5..9e8dfe3a15 100644
--- a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap
+++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage.test.tsx.snap
@@ -6,7 +6,7 @@ ls -la
whoami
Allow execution of 3 commands?
-● 1. Allow once
+● 1. Allow once
2. Allow for this session
3. No, suggest changes (esc)
"
@@ -19,7 +19,7 @@ URLs to fetch:
- https://raw.githubusercontent.com/google/gemini-react/main/README.md
Do you want to proceed?
-● 1. Allow once
+● 1. Allow once
2. Allow for this session
3. No, suggest changes (esc)
"
@@ -29,7 +29,7 @@ exports[`ToolConfirmationMessage > should not display urls if prompt and url are
"https://example.com
Do you want to proceed?
-● 1. Allow once
+● 1. Allow once
2. Allow for this session
3. No, suggest changes (esc)
"
@@ -40,7 +40,7 @@ exports[`ToolConfirmationMessage > should strip BiDi characters from MCP tool an
Tool: testtool
Allow execution of MCP tool "testtool" from server "testserver"?
-● 1. Allow once
+● 1. Allow once
2. Allow tool for this session
3. Allow all server tools for this session
4. No, suggest changes (esc)
@@ -55,7 +55,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for edit confirmations'
╰──────────────────────────────────────────────────────────────────────────────╯
Apply this change?
-● 1. Allow once
+● 1. Allow once
2. Modify with external editor
3. No, suggest changes (esc)
"
@@ -69,7 +69,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for edit confirmations'
╰──────────────────────────────────────────────────────────────────────────────╯
Apply this change?
-● 1. Allow once
+● 1. Allow once
2. Allow for this session
3. Modify with external editor
4. No, suggest changes (esc)
@@ -80,7 +80,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for exec confirmations'
"echo "hello"
Allow execution of: 'echo'?
-● 1. Allow once
+● 1. Allow once
2. No, suggest changes (esc)
"
`;
@@ -89,7 +89,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for exec confirmations'
"echo "hello"
Allow execution of: 'echo'?
-● 1. Allow once
+● 1. Allow once
2. Allow for this session
3. No, suggest changes (esc)
"
@@ -99,7 +99,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for info confirmations'
"https://example.com
Do you want to proceed?
-● 1. Allow once
+● 1. Allow once
2. No, suggest changes (esc)
"
`;
@@ -108,7 +108,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for info confirmations'
"https://example.com
Do you want to proceed?
-● 1. Allow once
+● 1. Allow once
2. Allow for this session
3. No, suggest changes (esc)
"
@@ -119,7 +119,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for mcp confirmations' >
Tool: test-tool
Allow execution of MCP tool "test-tool" from server "test-server"?
-● 1. Allow once
+● 1. Allow once
2. No, suggest changes (esc)
"
`;
@@ -129,7 +129,7 @@ exports[`ToolConfirmationMessage > with folder trust > 'for mcp confirmations' >
Tool: test-tool
Allow execution of MCP tool "test-tool" from server "test-server"?
-● 1. Allow once
+● 1. Allow once
2. Allow tool for this session
3. Allow all server tools for this session
4. No, suggest changes (esc)
diff --git a/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx b/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx
index 2444374c3e..7a89531890 100644
--- a/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx
+++ b/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx
@@ -20,12 +20,16 @@ vi.mock('../../hooks/useSelectionList.js');
const mockTheme = {
text: { primary: 'COLOR_PRIMARY', secondary: 'COLOR_SECONDARY' },
status: { success: 'COLOR_SUCCESS' },
+ ui: { focus: 'COLOR_FOCUS' },
+ background: { focus: 'COLOR_FOCUS_BG' },
} as typeof theme;
vi.mock('../../semantic-colors.js', () => ({
theme: {
text: { primary: 'COLOR_PRIMARY', secondary: 'COLOR_SECONDARY' },
status: { success: 'COLOR_SUCCESS' },
+ ui: { focus: 'COLOR_FOCUS' },
+ background: { focus: 'COLOR_FOCUS_BG' },
},
}));
@@ -161,8 +165,8 @@ describe('BaseSelectionList', () => {
expect(mockRenderItem).toHaveBeenCalledWith(
items[0],
expect.objectContaining({
- titleColor: mockTheme.status.success,
- numberColor: mockTheme.status.success,
+ titleColor: mockTheme.ui.focus,
+ numberColor: mockTheme.ui.focus,
isSelected: true,
}),
);
@@ -207,8 +211,8 @@ describe('BaseSelectionList', () => {
expect(mockRenderItem).toHaveBeenCalledWith(
items[1],
expect.objectContaining({
- titleColor: mockTheme.status.success,
- numberColor: mockTheme.status.success,
+ titleColor: mockTheme.ui.focus,
+ numberColor: mockTheme.ui.focus,
isSelected: true,
}),
);
@@ -267,7 +271,7 @@ describe('BaseSelectionList', () => {
items[0],
expect.objectContaining({
isSelected: true,
- titleColor: mockTheme.status.success,
+ titleColor: mockTheme.ui.focus,
numberColor: mockTheme.text.secondary,
}),
);
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap
index 9fa0f0f79f..1015750761 100644
--- a/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap
+++ b/packages/cli/src/ui/components/shared/__snapshots__/DescriptiveRadioButtonSelect.test.tsx.snap
@@ -1,21 +1,83 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`DescriptiveRadioButtonSelect > should render correctly with custom props 1`] = `
-" 1. Foo Title
- This is Foo.
-● 2. Bar Title
- This is Bar.
- 3. Baz Title
- This is Baz.
+"
+ ERROR Cannot read properties of undefined (reading 'focus')
+
+ src/ui/components/shared/BaseSelectionList.tsx:120:33
+
+ 117: let numberColor = theme.text.primary;
+ 118:
+ 119: if (isSelected) {
+ 120: titleColor = theme.ui.focus;
+ 121: numberColor = theme.ui.focus;
+ 122: } else if (item.disabled) {
+ 123: titleColor = theme.text.secondary;
+
+ - (src/ui/components/shared/BaseSelectionList.tsx:120:33)
+ - at Array.map ()\\t
+ - BaseSelectionList (src/ui/components/shared/BaseSelectionList.tsx:111:21)
+ -Object.react-stack-bott
+ m-frame (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconci
+ ler/cjs/react-reconciler.development.js:15859:20)
+ -renderWithHoo
+ s (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/re
+ act-reconciler.development.js:3221:22)
+ -updateFunctionComp
+ nent (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/c
+ js/react-reconciler.development.js:6475:19)
+ -beginWor
+ (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/react-r
+ econciler.development.js:8009:18)
+ -runWithFiberIn
+ EV (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/r
+ eact-reconciler.development.js:1738:13)
+ -performUnitOfW
+ rk (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/r
+ eact-reconciler.development.js:12834:22)
+ -workLoopSyn
+ (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/reac
+ t-reconciler.development.js:12644:41)
"
`;
exports[`DescriptiveRadioButtonSelect > should render correctly with default props 1`] = `
-"● Foo Title
- This is Foo.
- Bar Title
- This is Bar.
- Baz Title
- This is Baz.
+"
+ ERROR Cannot read properties of undefined (reading 'focus')
+
+ src/ui/components/shared/BaseSelectionList.tsx:120:33
+
+ 117: let numberColor = theme.text.primary;
+ 118:
+ 119: if (isSelected) {
+ 120: titleColor = theme.ui.focus;
+ 121: numberColor = theme.ui.focus;
+ 122: } else if (item.disabled) {
+ 123: titleColor = theme.text.secondary;
+
+ - (src/ui/components/shared/BaseSelectionList.tsx:120:33)
+ - at Array.map ()\\t
+ - BaseSelectionList (src/ui/components/shared/BaseSelectionList.tsx:111:21)
+ -Object.react-stack-bott
+ m-frame (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconci
+ ler/cjs/react-reconciler.development.js:15859:20)
+ -renderWithHoo
+ s (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/re
+ act-reconciler.development.js:3221:22)
+ -updateFunctionComp
+ nent (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/c
+ js/react-reconciler.development.js:6475:19)
+ -beginWor
+ (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/react-r
+ econciler.development.js:8009:18)
+ -runWithFiberIn
+ EV (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/r
+ eact-reconciler.development.js:1738:13)
+ -performUnitOfW
+ rk (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/r
+ eact-reconciler.development.js:12834:22)
+ -workLoopSyn
+ (/Users/keithguerin/Documents/gemini-cli_colors/node_modules/react-reconciler/cjs/reac
+ t-reconciler.development.js:12644:41)
"
`;
diff --git a/packages/cli/src/ui/themes/ansi.ts b/packages/cli/src/ui/themes/ansi.ts
index 9c73109d93..a8c788bf54 100644
--- a/packages/cli/src/ui/themes/ansi.ts
+++ b/packages/cli/src/ui/themes/ansi.ts
@@ -23,7 +23,7 @@ const ansiColors: ColorsTheme = {
Comment: 'gray',
Gray: 'gray',
DarkGray: 'gray',
- SelectionBackground: 'black',
+ FocusBackground: 'black',
GradientColors: ['cyan', 'green'],
};
diff --git a/packages/cli/src/ui/themes/github-light.ts b/packages/cli/src/ui/themes/github-light.ts
index 264a9d7a88..18ac7a709e 100644
--- a/packages/cli/src/ui/themes/github-light.ts
+++ b/packages/cli/src/ui/themes/github-light.ts
@@ -23,6 +23,7 @@ const githubLightColors: ColorsTheme = {
Comment: '#998',
Gray: '#999',
DarkGray: interpolateColor('#999', '#f8f8f8', 0.5),
+ FocusColor: '#458', // AccentBlue for GitHub branding
GradientColors: ['#458', '#008080'],
};
diff --git a/packages/cli/src/ui/themes/holiday.ts b/packages/cli/src/ui/themes/holiday.ts
index b3e72b1cc1..9cd77b43f0 100644
--- a/packages/cli/src/ui/themes/holiday.ts
+++ b/packages/cli/src/ui/themes/holiday.ts
@@ -23,6 +23,7 @@ const holidayColors: ColorsTheme = {
Comment: '#8FBC8F',
Gray: '#D7F5D3',
DarkGray: interpolateColor('#D7F5D3', '#151B18', 0.5),
+ FocusColor: '#33F9FF', // AccentCyan for neon pop
GradientColors: ['#FF0000', '#FFFFFF', '#008000'],
};
diff --git a/packages/cli/src/ui/themes/theme-manager.ts b/packages/cli/src/ui/themes/theme-manager.ts
index 439ecdff59..775f085f6e 100644
--- a/packages/cli/src/ui/themes/theme-manager.ts
+++ b/packages/cli/src/ui/themes/theme-manager.ts
@@ -373,7 +373,7 @@ class ThemeManager {
),
FocusBackground: interpolateColor(
this.terminalBackground,
- colors.AccentGreen,
+ activeTheme.colors.FocusColor ?? activeTheme.colors.AccentGreen,
DEFAULT_SELECTION_OPACITY,
),
};
@@ -418,7 +418,7 @@ class ThemeManager {
ui: {
...semanticColors.ui,
dark: colors.DarkGray,
- focus: colors.AccentGreen,
+ focus: colors.FocusColor ?? colors.AccentGreen,
},
};
} else {
diff --git a/packages/cli/src/ui/themes/theme.test.ts b/packages/cli/src/ui/themes/theme.test.ts
index bba28521f7..da6bd0cbc5 100644
--- a/packages/cli/src/ui/themes/theme.test.ts
+++ b/packages/cli/src/ui/themes/theme.test.ts
@@ -32,7 +32,6 @@ describe('createCustomTheme', () => {
DiffRemoved: '#FF0000',
Comment: '#808080',
Gray: '#cccccc',
- FocusBackground: '#004000',
// DarkGray intentionally omitted to test fallback
};
@@ -104,7 +103,6 @@ describe('validateCustomTheme', () => {
DiffRemoved: '#FF0000',
Comment: '#808080',
Gray: '#808080',
- FocusBackground: '#004000',
};
it('should return isValid: true for a valid theme', () => {
@@ -155,7 +153,6 @@ describe('themeManager.loadCustomThemes', () => {
AccentRed: '#F00',
Comment: '#888',
Gray: '#888',
- FocusBackground: '#040',
};
it('should use values from DEFAULT_THEME when DiffAdded and DiffRemoved are not provided', () => {
diff --git a/packages/cli/src/ui/themes/theme.ts b/packages/cli/src/ui/themes/theme.ts
index 9cb996e5f6..55edcb8018 100644
--- a/packages/cli/src/ui/themes/theme.ts
+++ b/packages/cli/src/ui/themes/theme.ts
@@ -8,12 +8,6 @@ import type { CSSProperties } from 'react';
import type { SemanticColors } from './semantic-tokens.js';
-import {
- resolveColor,
- interpolateColor,
- getThemeTypeFromBackgroundColor,
-} from './color-utils.js';
-
import type { CustomTheme } from '@google/gemini-cli-core';
import {
DEFAULT_BACKGROUND_OPACITY,
@@ -186,6 +180,7 @@ export interface ColorsTheme {
InputBackground?: string;
MessageBackground?: string;
FocusBackground?: string;
+ FocusColor?: string;
GradientColors?: string[];
}
@@ -331,7 +326,7 @@ export class Theme {
this.colors.FocusBackground ??
interpolateColor(
this.colors.Background,
- this.colors.AccentGreen,
+ this.colors.FocusColor ?? this.colors.AccentGreen,
DEFAULT_SELECTION_OPACITY,
),
diff: {
@@ -347,7 +342,7 @@ export class Theme {
comment: this.colors.Gray,
symbol: this.colors.AccentCyan,
dark: this.colors.DarkGray,
- focus: this.colors.AccentGreen,
+ focus: this.colors.FocusColor ?? this.colors.AccentGreen,
gradient: this.colors.GradientColors,
},
status: {
@@ -461,6 +456,7 @@ export function createCustomTheme(customTheme: CustomTheme): Theme {
customTheme.status?.success ?? customTheme.AccentGreen ?? '#3CA84B', // Fallback to a default green if not found
DEFAULT_SELECTION_OPACITY,
),
+ FocusColor: customTheme.ui?.focus ?? customTheme.AccentGreen,
GradientColors: customTheme.ui?.gradient ?? customTheme.GradientColors,
};
@@ -631,7 +627,7 @@ export function createCustomTheme(customTheme: CustomTheme): Theme {
comment: customTheme.ui?.comment ?? colors.Comment,
symbol: customTheme.ui?.symbol ?? colors.Gray,
dark: colors.DarkGray,
- focus: customTheme.ui?.focus ?? colors.AccentGreen,
+ focus: colors.FocusColor ?? colors.AccentGreen,
gradient: customTheme.ui?.gradient ?? colors.GradientColors,
},
status: {
diff --git a/packages/cli/src/ui/themes/xcode.ts b/packages/cli/src/ui/themes/xcode.ts
index 5d20f35c36..105c1d1a00 100644
--- a/packages/cli/src/ui/themes/xcode.ts
+++ b/packages/cli/src/ui/themes/xcode.ts
@@ -23,6 +23,7 @@ const xcodeColors: ColorsTheme = {
Comment: '#007400',
Gray: '#c0c0c0',
DarkGray: interpolateColor('#c0c0c0', '#fff', 0.5),
+ FocusColor: '#1c00cf', // AccentBlue for more vibrance
GradientColors: ['#1c00cf', '#007400'],
};
diff --git a/packages/cli/src/ui/utils/textUtils.test.ts b/packages/cli/src/ui/utils/textUtils.test.ts
index fb0c9786ae..4927486d43 100644
--- a/packages/cli/src/ui/utils/textUtils.test.ts
+++ b/packages/cli/src/ui/utils/textUtils.test.ts
@@ -48,12 +48,12 @@ describe('textUtils', () => {
it('should handle unicode characters that crash string-width', () => {
// U+0602 caused string-width to crash (see #16418)
const char = '';
- expect(getCachedStringWidth(char)).toBe(0);
+ expect(getCachedStringWidth(char)).toBe(1);
});
it('should handle unicode characters that crash string-width with ANSI codes', () => {
const charWithAnsi = '\u001b[31m' + '' + '\u001b[0m';
- expect(getCachedStringWidth(charWithAnsi)).toBe(0);
+ expect(getCachedStringWidth(charWithAnsi)).toBe(1);
});
});