diff --git a/packages/cli/src/ui/__snapshots__/App.test.tsx.snap b/packages/cli/src/ui/__snapshots__/App.test.tsx.snap
index 9e1d66df01..3c068893e3 100644
--- a/packages/cli/src/ui/__snapshots__/App.test.tsx.snap
+++ b/packages/cli/src/ui/__snapshots__/App.test.tsx.snap
@@ -127,9 +127,9 @@ HistoryItemDisplay
│ ls │
│ Allow execution of: 'ls'? │
│ │
-│ ● 1. Allow once │
-│ 2. Allow for this session │
-│ 3. No, suggest changes (esc) │
+│ ● 1. Allow once │
+│ 2. Allow for this session │
+│ 3. No, suggest changes (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
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 2e115ef12c..6ffec898a4 100644
--- a/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/AskUserDialog.test.tsx.snap
@@ -3,9 +3,9 @@
exports[`AskUserDialog > Choice question placeholder > uses default placeholder when not provided 1`] = `
"Select your preferred language:
- 1. TypeScript
- 2. JavaScript
-● 3. Enter a custom value
+ 1. TypeScript
+ 2. JavaScript
+ ● 3. Enter a custom value
Enter to submit · Esc to cancel
"
@@ -14,9 +14,9 @@ Enter to submit · Esc to cancel
exports[`AskUserDialog > Choice question placeholder > uses placeholder for "Other" option when provided 1`] = `
"Select your preferred language:
- 1. TypeScript
- 2. JavaScript
-● 3. Type another language...
+ 1. TypeScript
+ 2. JavaScript
+ ● 3. Type another language...
Enter to submit · Esc to cancel
"
@@ -26,10 +26,10 @@ exports[`AskUserDialog > Scroll Arrows (useAlternateBuffer: false) > shows scrol
"Choose an option
▲
-● 1. Option 1
- Description 1
- 2. Option 2
- Description 2
+ ● 1. Option 1
+ Description 1
+ 2. Option 2
+ Description 2
▼
Enter to select · ↑/↓ to navigate · Esc to cancel
@@ -39,37 +39,37 @@ 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
- 2. Option 2
- Description 2
- 3. Option 3
- Description 3
- 4. Option 4
- Description 4
- 5. Option 5
- Description 5
- 6. Option 6
- Description 6
- 7. Option 7
- Description 7
- 8. Option 8
- Description 8
- 9. Option 9
- Description 9
- 10. Option 10
- Description 10
- 11. Option 11
- Description 11
- 12. Option 12
- Description 12
- 13. Option 13
- Description 13
- 14. Option 14
- Description 14
- 15. Option 15
- Description 15
- 16. Enter a custom value
+ ● 1. Option 1
+ Description 1
+ 2. Option 2
+ Description 2
+ 3. Option 3
+ Description 3
+ 4. Option 4
+ Description 4
+ 5. Option 5
+ Description 5
+ 6. Option 6
+ Description 6
+ 7. Option 7
+ Description 7
+ 8. Option 8
+ Description 8
+ 9. Option 9
+ Description 9
+ 10. Option 10
+ Description 10
+ 11. Option 11
+ Description 11
+ 12. Option 12
+ Description 12
+ 13. Option 13
+ Description 13
+ 14. Option 14
+ Description 14
+ 15. Option 15
+ Description 15
+ 16. Enter a custom value
Enter to select · ↑/↓ to navigate · Esc to cancel
"
@@ -115,20 +115,6 @@ Review your answers:
Tests → (not answered)
Docs → (not answered)
-Enter to submit · / to edit answers · Esc to cancel
-"
-`;
-
-exports[`AskUserDialog > allows navigating to Review tab and back 2`] = `
-"← □ Tests │ □ Docs │ ≡ Review →
-
-Review your answers:
-
-⚠ You have 2 unanswered questions
-
-Tests → (not answered)
-Docs → (not answered)
-
Enter to submit · Tab/Shift+Tab to edit answers · Esc to cancel
"
`;
@@ -136,11 +122,11 @@ 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
- 2. JWT tokens
- Stateless, good for APIs
- 3. Enter a custom value
+ ● 1. OAuth 2.0
+ Industry standard, supports SSO
+ 2. JWT tokens
+ Stateless, good for APIs
+ 3. Enter a custom value
Enter to select · ↑/↓ to navigate · Esc to cancel
"
@@ -149,11 +135,11 @@ 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
- 2. JWT tokens
- Stateless, good for APIs
- 3. Enter a custom value
+ ● 1. OAuth 2.0
+ Industry standard, supports SSO
+ 2. JWT tokens
+ Stateless, good for APIs
+ 3. Enter a custom value
Enter to select · ↑/↓ to navigate · Esc to cancel
"
@@ -164,11 +150,11 @@ exports[`AskUserDialog > shows Review tab in progress header for multiple questi
Which framework?
-● 1. React
- Component library
- 2. Vue
- Progressive framework
- 3. Enter a custom value
+ ● 1. React
+ Component library
+ 2. Vue
+ Progressive framework
+ 3. Enter a custom value
Enter to select · ←/→ to switch questions · Esc to cancel
"
@@ -177,11 +163,11 @@ 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
- 2. JWT tokens
- Stateless, good for APIs
- 3. Enter a custom value
+ ● 1. OAuth 2.0
+ Industry standard, supports SSO
+ 2. JWT tokens
+ Stateless, good for APIs
+ 3. Enter a custom value
Enter to select · ↑/↓ to navigate · Esc to cancel
"
@@ -192,11 +178,11 @@ exports[`AskUserDialog > shows progress header for multiple questions 1`] = `
Which database should we use?
-● 1. PostgreSQL
- Relational database
- 2. MongoDB
- Document database
- 3. Enter a custom value
+ ● 1. PostgreSQL
+ Relational database
+ 2. MongoDB
+ Document database
+ 3. Enter a custom value
Enter to select · ←/→ to switch questions · Esc to cancel
"
@@ -212,20 +198,6 @@ Review your answers:
License → (not answered)
README → (not answered)
-Enter to submit · / to edit answers · Esc to cancel
-"
-`;
-
-exports[`AskUserDialog > shows warning for unanswered questions on Review tab 2`] = `
-"← □ License │ □ README │ ≡ Review →
-
-Review your answers:
-
-⚠ You have 2 unanswered questions
-
-License → (not answered)
-README → (not answered)
-
Enter to submit · Tab/Shift+Tab to edit answers · Esc to cancel
"
`;
diff --git a/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap
index d6b5d66d53..9bdfed35ee 100644
--- a/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/BackgroundShellDisplay.test.tsx.snap
@@ -16,9 +16,9 @@ exports[` > keeps exit code status color even when sel
│ │
│ Select Process (Enter to select, Ctrl+K to kill, Esc to cancel): │
│ │
-│ 1. npm start (PID: 1001) │
-│ 2. tail -f log.txt (PID: 1002) │
-│ ● 3. exit 0 (PID: 1003) (Exit Code: 0) │
+│ 1. npm start (PID: 1001) │
+│ 2. tail -f log.txt (PID: 1002) │
+│ ● 3. exit 0 (PID: 1003) (Exit Code: 0) │
└──────────────────────────────────────────────────────────────────────────────┘
"
`;
@@ -46,8 +46,8 @@ exports[` > renders the process list when isListOpenPr
│ │
│ Select Process (Enter to select, Ctrl+K to kill, Esc to cancel): │
│ │
-│ ● 1. npm start (PID: 1001) │
-│ 2. tail -f log.txt (PID: 1002) │
+│ ● 1. npm start (PID: 1001) │
+│ 2. tail -f log.txt (PID: 1002) │
└──────────────────────────────────────────────────────────────────────────────┘
"
`;
@@ -59,8 +59,8 @@ exports[` > scrolls to active shell when list opens 1`
│ │
│ Select Process (Enter to select, Ctrl+K to kill, Esc to cancel): │
│ │
-│ 1. npm start (PID: 1001) │
-│ ● 2. tail -f log.txt (PID: 1002) │
+│ 1. npm start (PID: 1001) │
+│ ● 2. tail -f log.txt (PID: 1002) │
└──────────────────────────────────────────────────────────────────────────────┘
"
`;
diff --git a/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap
index 3042d13ca0..e84eae0062 100644
--- a/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/EditorSettingsDialog.test.tsx.snap
@@ -4,12 +4,12 @@ exports[`EditorSettingsDialog > renders correctly 1`] = `
"╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ > Select Editor Editor Preference │
-│ ● 1. VS Code │
-│ 2. Vim These editors are currently supported. Please note │
+│ ● 1. VS Code │
+│ 2. Vim These editors are currently supported. Please note │
│ that some editors cannot be used in sandbox mode. │
│ Apply To │
-│ ● 1. User Settings Your preferred editor is: VS Code. │
-│ 2. Workspace Settings │
+│ ● 1. User Settings Your preferred editor is: VS Code. │
+│ 2. Workspace Settings │
│ │
│ (Use Enter to select, Tab to change │
│ focus, Esc to close) │
diff --git a/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap
index c8ebd612af..912f9ad876 100644
--- a/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/EmptyWalletDialog.test.tsx.snap
@@ -16,9 +16,9 @@ exports[`EmptyWalletDialog > rendering > should match snapshot with fallback ava
│ How would you like to proceed? │
│ │
│ │
-│ ● 1. Get AI Credits - Open browser to purchase credits │
-│ 2. Switch to gemini-3-flash-preview │
-│ 3. Stop - Abort request │
+│ ● 1. Get AI Credits - Open browser to purchase credits │
+│ 2. Switch to gemini-3-flash-preview │
+│ 3. Stop - Abort request │
│ │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -40,8 +40,8 @@ exports[`EmptyWalletDialog > rendering > should match snapshot without fallback
│ How would you like to proceed? │
│ │
│ │
-│ ● 1. Get AI Credits - Open browser to purchase credits │
-│ 2. Stop - Abort request │
+│ ● 1. Get AI Credits - Open browser to purchase credits │
+│ 2. Stop - Abort request │
│ │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
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 073c106ceb..657503cebf 100644
--- a/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/ExitPlanModeDialog.test.tsx.snap
@@ -17,11 +17,11 @@ 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
-● 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
- 3. Type your feedback...
+ 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
@@ -44,11 +44,11 @@ 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
- 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
- 3. Type your feedback...
+ ● 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
@@ -76,11 +76,11 @@ 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
- 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
- 3. Type your feedback...
+ ● 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
@@ -103,11 +103,11 @@ 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
- 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
- 3. Type your feedback...
+ ● 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
@@ -130,11 +130,11 @@ 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
-● 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
- 3. Type your feedback...
+ 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
@@ -157,11 +157,11 @@ 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
- 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
- 3. Type your feedback...
+ ● 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
@@ -210,11 +210,11 @@ Testing Strategy
- Security penetration testing
- Load testing for session management
-● 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...
+ ● 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
@@ -237,11 +237,11 @@ 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
- 2. Yes, manually accept edits
- Approves plan but requires confirmation for each tool
- 3. Type your feedback...
+ ● 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...
Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel
"
diff --git a/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap
index e8914dceeb..ebdb80840f 100644
--- a/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/LoopDetectionConfirmation.test.tsx.snap
@@ -7,8 +7,8 @@ exports[`LoopDetectionConfirmation > renders correctly 1`] = `
│ This can happen due to repetitive tool calls or other model behavior. Do you want to keep loop │
│ detection enabled or disable it for this session? │
│ │
- │ ● 1. Keep loop detection enabled (esc) │
- │ 2. Disable loop detection for this session │
+ │ ● 1. Keep loop detection enabled (esc) │
+ │ 2. Disable loop detection for this session │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
"
`;
diff --git a/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap
index bac1f7af36..1d24fbaedb 100644
--- a/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/NewAgentsNotification.test.tsx.snap
@@ -13,8 +13,8 @@ exports[`NewAgentsNotification > renders agent list 1`] = `
│ │ │ │
│ └────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
- │ ● 1. Acknowledge and Enable │
- │ 2. Do not enable (Ask again next time) │
+ │ ● 1. Acknowledge and Enable │
+ │ 2. Do not enable (Ask again next time) │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
"
@@ -37,8 +37,8 @@ exports[`NewAgentsNotification > truncates list if more than 5 agents 1`] = `
│ │ │ │
│ └────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
- │ ● 1. Acknowledge and Enable │
- │ 2. Do not enable (Ask again next time) │
+ │ ● 1. Acknowledge and Enable │
+ │ 2. Do not enable (Ask again next time) │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
"
diff --git a/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap
index 978c5cd17c..85685d4607 100644
--- a/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/OverageMenuDialog.test.tsx.snap
@@ -14,10 +14,10 @@ exports[`OverageMenuDialog > rendering > should match snapshot with fallback ava
│ How would you like to proceed? │
│ │
│ │
-│ ● 1. Use AI Credits - Continue this request (Overage) │
-│ 2. Manage - View balance and purchase more credits │
-│ 3. Switch to gemini-3-flash-preview │
-│ 4. Stop - Abort request │
+│ ● 1. Use AI Credits - Continue this request (Overage) │
+│ 2. Manage - View balance and purchase more credits │
+│ 3. Switch to gemini-3-flash-preview │
+│ 4. Stop - Abort request │
│ │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
@@ -37,9 +37,9 @@ exports[`OverageMenuDialog > rendering > should match snapshot without fallback
│ How would you like to proceed? │
│ │
│ │
-│ ● 1. Use AI Credits - Continue this request (Overage) │
-│ 2. Manage - View balance and purchase more credits │
-│ 3. Stop - Abort request │
+│ ● 1. Use AI Credits - Continue this request (Overage) │
+│ 2. Manage - View balance and purchase more credits │
+│ 3. Stop - Abort request │
│ │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
diff --git a/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap
index 5f5b3c9c27..47fa351635 100644
--- a/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/PolicyUpdateDialog.test.tsx.snap
@@ -7,8 +7,8 @@ exports[`PolicyUpdateDialog > renders correctly and matches snapshot 1`] = `
│ Location: /test/workspace/.gemini/policies │
│ Do you want to accept and load these policies? │
│ │
- │ ● 1. Accept and Load │
- │ 2. Ignore (Use Default Policies) │
+ │ ● 1. Accept and Load │
+ │ 2. Ignore (Use Default Policies) │
│ │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
"
diff --git a/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap
index 77d37faa61..b38a7bbc7b 100644
--- a/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/RewindConfirmation.test.tsx.snap
@@ -14,10 +14,10 @@ exports[`RewindConfirmation > renders correctly with stats 1`] = `
│ │
│ Select an action: │
│ │
-│ ● 1. Rewind conversation and revert code changes │
-│ 2. Rewind conversation │
-│ 3. Revert code changes │
-│ 4. Do nothing (esc) │
+│ ● 1. Rewind conversation and revert code changes │
+│ 2. Rewind conversation │
+│ 3. Revert code changes │
+│ 4. Do nothing (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
"
@@ -32,8 +32,8 @@ exports[`RewindConfirmation > renders correctly without stats 1`] = `
│ │
│ Select an action: │
│ │
-│ ● 1. Rewind conversation │
-│ 2. Do nothing (esc) │
+│ ● 1. Rewind conversation │
+│ 2. Do nothing (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
"
@@ -48,8 +48,8 @@ exports[`RewindConfirmation > renders timestamp when provided 1`] = `
│ │
│ Select an action: │
│ │
-│ ● 1. Rewind conversation │
-│ 2. Do nothing (esc) │
+│ ● 1. Rewind conversation │
+│ 2. Do nothing (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
"
diff --git a/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap
index 06f7d49105..edeae7a228 100644
--- a/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/RewindViewer.test.tsx.snap
@@ -5,11 +5,11 @@ exports[`RewindViewer > Content Filtering > 'removes reference markers' 1`] = `
│ │
│ > Rewind │
│ │
-│ some command @file │
-│ No files have been changed │
+│ some command @file │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -23,11 +23,11 @@ exports[`RewindViewer > Content Filtering > 'strips expanded MCP resource conten
│ │
│ > Rewind │
│ │
-│ read @server3:mcp://demo-resource hello │
-│ No files have been changed │
+│ read @server3:mcp://demo-resource hello │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -41,11 +41,11 @@ exports[`RewindViewer > Content Filtering > 'uses displayContent if present and
│ │
│ > Rewind │
│ │
-│ clean display content │
-│ No files have been changed │
+│ clean display content │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -63,8 +63,8 @@ exports[`RewindViewer > Interaction Selection > 'cancels on Escape' > confirmati
│ │
│ Select an action: │
│ │
-│ ● 1. Rewind conversation │
-│ 2. Do nothing (esc) │
+│ ● 1. Rewind conversation │
+│ 2. Do nothing (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
"
@@ -79,8 +79,8 @@ exports[`RewindViewer > Interaction Selection > 'confirms on Enter' > confirmati
│ │
│ Select an action: │
│ │
-│ ● 1. Rewind conversation │
-│ 2. Do nothing (esc) │
+│ ● 1. Rewind conversation │
+│ 2. Do nothing (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
"
@@ -91,17 +91,17 @@ exports[`RewindViewer > Navigation > handles 'down' navigation > after-down 1`]
│ │
│ > Rewind │
│ │
-│ Q1 │
-│ No files have been changed │
+│ Q1 │
+│ No files have been changed │
│ │
-│ Q2 │
-│ No files have been changed │
+│ Q2 │
+│ No files have been changed │
│ │
-│ Q3 │
-│ No files have been changed │
+│ Q3 │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -115,17 +115,17 @@ exports[`RewindViewer > Navigation > handles 'up' navigation > after-up 1`] = `
│ │
│ > Rewind │
│ │
-│ Q1 │
-│ No files have been changed │
+│ Q1 │
+│ No files have been changed │
│ │
-│ Q2 │
-│ No files have been changed │
+│ Q2 │
+│ No files have been changed │
│ │
-│ ● Q3 │
-│ No files have been changed │
+│ ● Q3 │
+│ No files have been changed │
│ │
-│ Stay at current position │
-│ Cancel rewind and stay here │
+│ Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -139,17 +139,17 @@ exports[`RewindViewer > Navigation > handles cyclic navigation > cyclic-down 1`]
│ │
│ > Rewind │
│ │
-│ Q1 │
-│ No files have been changed │
+│ Q1 │
+│ No files have been changed │
│ │
-│ Q2 │
-│ No files have been changed │
+│ Q2 │
+│ No files have been changed │
│ │
-│ Q3 │
-│ No files have been changed │
+│ Q3 │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -163,17 +163,17 @@ exports[`RewindViewer > Navigation > handles cyclic navigation > cyclic-up 1`] =
│ │
│ > Rewind │
│ │
-│ Q1 │
-│ No files have been changed │
+│ Q1 │
+│ No files have been changed │
│ │
-│ Q2 │
-│ No files have been changed │
+│ Q2 │
+│ No files have been changed │
│ │
-│ ● Q3 │
-│ No files have been changed │
+│ ● Q3 │
+│ No files have been changed │
│ │
-│ Stay at current position │
-│ Cancel rewind and stay here │
+│ Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -187,11 +187,11 @@ exports[`RewindViewer > Rendering > renders 'a single interaction' 1`] = `
│ │
│ > Rewind │
│ │
-│ Hello │
-│ No files have been changed │
+│ Hello │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -205,12 +205,12 @@ exports[`RewindViewer > Rendering > renders 'full text for selected item' 1`] =
│ │
│ > Rewind │
│ │
-│ 1 │
-│ 2... │
-│ No files have been changed │
+│ 1 │
+│ 2... │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -224,8 +224,8 @@ exports[`RewindViewer > Rendering > renders 'nothing interesting for empty conve
│ │
│ > Rewind │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -239,14 +239,14 @@ exports[`RewindViewer > updates content when conversation changes (background up
│ │
│ > Rewind │
│ │
-│ Message 1 │
-│ No files have been changed │
+│ Message 1 │
+│ No files have been changed │
│ │
-│ Message 2 │
-│ No files have been changed │
+│ Message 2 │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -260,11 +260,11 @@ exports[`RewindViewer > updates content when conversation changes (background up
│ │
│ > Rewind │
│ │
-│ Message 1 │
-│ No files have been changed │
+│ Message 1 │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -278,16 +278,16 @@ exports[`RewindViewer > updates selection and expansion on navigation > after-do
│ │
│ > Rewind │
│ │
-│ Line A │
-│ Line B... │
-│ No files have been changed │
+│ Line A │
+│ Line B... │
+│ No files have been changed │
│ │
-│ Line 1 │
-│ Line 2... │
-│ No files have been changed │
+│ Line 1 │
+│ Line 2... │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
@@ -301,16 +301,16 @@ exports[`RewindViewer > updates selection and expansion on navigation > initial-
│ │
│ > Rewind │
│ │
-│ Line A │
-│ Line B... │
-│ No files have been changed │
+│ Line A │
+│ Line B... │
+│ No files have been changed │
│ │
-│ Line 1 │
-│ Line 2... │
-│ No files have been changed │
+│ Line 1 │
+│ Line 2... │
+│ No files have been changed │
│ │
-│ ● Stay at current position │
-│ Cancel rewind and stay here │
+│ ● Stay at current position │
+│ Cancel rewind and stay here │
│ │
│ │
│ (Use Enter to select a message, Esc to close, Right/Left to expand/collapse) │
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 96ac9e7621..22b5e38d91 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
false
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System 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 7a35e051b2..ee9f432b3d 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
true*
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System 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 9c01031ebe..8e0ef3b3a8 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
false*
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System 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 96ac9e7621..22b5e38d91 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
false
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System 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 96ac9e7621..22b5e38d91 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
false
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System 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 f9cf782f72..f049ea698c 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
@@ -110,22 +110,23 @@
│
│
- ●
-
- 1.
-
-
- User Settings
-
+ ●
+
+
+ 1.
+
+
+ User Settings
+
│
│
- 2.
- Workspace Settings
+ 2.
+ Workspace Settings
│
│
- 3.
- System Settings
+ 3.
+ System 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 1866d1ab67..81fd482285 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
false*
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System 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 96ac9e7621..22b5e38d91 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
false
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System 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 739a96cf09..8545e72cb6 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,6 +31,7 @@
▲
│
│
+
●
@@ -39,12 +40,13 @@
true*
+
│
│
-
+
- Enable Vim keybindings
-
+ Enable Vim keybindings
+
│
│
│
@@ -121,17 +123,18 @@
│
│
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System Settings
│
│
│
diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap
index be2dd8d9a2..21f493064e 100644
--- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap
@@ -37,9 +37,9 @@ exports[`SettingsDialog > Initial Rendering > should render settings list with v
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -83,9 +83,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'accessibility settings
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -129,9 +129,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'all boolean settings d
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -175,9 +175,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'default state' correct
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -221,9 +221,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'file filtering setting
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -267,9 +267,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'focused on scope selec
│ ▼ │
│ │
│ > Apply To │
-│ ● 1. User Settings │
-│ 2. Workspace Settings │
-│ 3. System Settings │
+│ ● 1. User Settings │
+│ 2. Workspace Settings │
+│ 3. System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -313,9 +313,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'mixed boolean and numb
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -359,9 +359,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'tools and security set
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -405,9 +405,9 @@ exports[`SettingsDialog > Snapshot Tests > should render 'various boolean settin
│ ▼ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
diff --git a/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap
index 4a5b30fc5c..a08a2ad3aa 100644
--- a/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/ThemeDialog.test.tsx.snap
@@ -5,18 +5,18 @@ exports[`Initial Theme Selection > should default to a dark theme when terminal
│ │
│ > Select Theme Preview │
│ ▲ ┌─────────────────────────────────────────────────┐ │
-│ 1. ANSI Dark │ │ │
-│ 2. Atom One Dark │ 1 # function │ │
-│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
-│ ● 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │
-│ 5. Dracula Dark │ 4 for _ in range(n): │ │
-│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
-│ 7. Holiday Dark │ 6 return a │ │
-│ 8. Shades Of Purple Dark │ │ │
-│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
-│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
-│ 11. Ayu Light │ │ │
-│ 12. Default Light └─────────────────────────────────────────────────┘ │
+│ 1. ANSI Dark │ │ │
+│ 2. Atom One Dark │ 1 # function │ │
+│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
+│ ● 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │
+│ 5. Dracula Dark │ 4 for _ in range(n): │ │
+│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
+│ 7. Holiday Dark │ 6 return a │ │
+│ 8. Shades Of Purple Dark │ │ │
+│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
+│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
+│ 11. Ayu Light │ │ │
+│ 12. Default Light └─────────────────────────────────────────────────┘ │
│ ▼ │
│ │
│ (Use Enter to select, Tab to configure scope, Esc to close) │
@@ -30,18 +30,18 @@ exports[`Initial Theme Selection > should default to a light theme when terminal
│ │
│ > Select Theme Preview │
│ ▲ ┌─────────────────────────────────────────────────┐ │
-│ 1. ANSI Light │ │ │
-│ 2. Ayu Light │ 1 # function │ │
-│ ● 3. Default Light │ 2 def fibonacci(n): │ │
-│ 4. GitHub Light │ 3 a, b = 0, 1 │ │
-│ 5. Google Code Light │ 4 for _ in range(n): │ │
-│ 6. Solarized Light │ 5 a, b = b, a + b │ │
-│ 7. Xcode Light │ 6 return a │ │
-│ 8. ANSI Dark (Incompatible) │ │ │
-│ 9. Atom One Dark (Incompatible) │ 1 - print("Hello, " + name) │ │
-│ 10. Ayu Dark (Incompatible) │ 1 + print(f"Hello, {name}!") │ │
-│ 11. Default Dark (Incompatible) │ │ │
-│ 12. Dracula Dark (Incompatible) └─────────────────────────────────────────────────┘ │
+│ 1. ANSI Light │ │ │
+│ 2. Ayu Light │ 1 # function │ │
+│ ● 3. Default Light │ 2 def fibonacci(n): │ │
+│ 4. GitHub Light │ 3 a, b = 0, 1 │ │
+│ 5. Google Code Light │ 4 for _ in range(n): │ │
+│ 6. Solarized Light │ 5 a, b = b, a + b │ │
+│ 7. Xcode Light │ 6 return a │ │
+│ 8. ANSI Dark (Incompatible) │ │ │
+│ 9. Atom One Dark (Incompatible) │ 1 - print("Hello, " + name) │ │
+│ 10. Ayu Dark (Incompatible) │ 1 + print(f"Hello, {name}!") │ │
+│ 11. Default Dark (Incompatible) │ │ │
+│ 12. Dracula Dark (Incompatible) └─────────────────────────────────────────────────┘ │
│ ▼ │
│ │
│ (Use Enter to select, Tab to configure scope, Esc to close) │
@@ -55,18 +55,18 @@ exports[`Initial Theme Selection > should use the theme from settings even if te
│ │
│ > Select Theme Preview │
│ ▲ ┌─────────────────────────────────────────────────┐ │
-│ ● 1. ANSI Dark │ │ │
-│ 2. Atom One Dark │ 1 # function │ │
-│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
-│ 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │
-│ 5. Dracula Dark │ 4 for _ in range(n): │ │
-│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
-│ 7. Holiday Dark │ 6 return a │ │
-│ 8. Shades Of Purple Dark │ │ │
-│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
-│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
-│ 11. Ayu Light │ │ │
-│ 12. Default Light └─────────────────────────────────────────────────┘ │
+│ ● 1. ANSI Dark │ │ │
+│ 2. Atom One Dark │ 1 # function │ │
+│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
+│ 4. Default Dark (Matches terminal) │ 3 a, b = 0, 1 │ │
+│ 5. Dracula Dark │ 4 for _ in range(n): │ │
+│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
+│ 7. Holiday Dark │ 6 return a │ │
+│ 8. Shades Of Purple Dark │ │ │
+│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
+│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
+│ 11. Ayu Light │ │ │
+│ 12. Default Light └─────────────────────────────────────────────────┘ │
│ ▼ │
│ │
│ (Use Enter to select, Tab to configure scope, Esc to close) │
@@ -79,9 +79,9 @@ exports[`ThemeDialog Snapshots > should render correctly in scope selector mode
"╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ > Apply To │
-│ ● 1. User Settings │
-│ 2. Workspace Settings │
-│ 3. System Settings │
+│ ● 1. User Settings │
+│ 2. Workspace Settings │
+│ 3. System Settings │
│ │
│ (Use Enter to apply scope, Tab to select theme, Esc to close) │
│ │
@@ -94,18 +94,18 @@ exports[`ThemeDialog Snapshots > should render correctly in theme selection mode
│ │
│ > Select Theme Preview │
│ ▲ ┌─────────────────────────────────────────────────┐ │
-│ ● 1. ANSI Dark (Matches terminal) │ │ │
-│ 2. Atom One Dark │ 1 # function │ │
-│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
-│ 4. Default Dark │ 3 a, b = 0, 1 │ │
-│ 5. Dracula Dark │ 4 for _ in range(n): │ │
-│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
-│ 7. Holiday Dark │ 6 return a │ │
-│ 8. Shades Of Purple Dark │ │ │
-│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
-│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
-│ 11. Ayu Light │ │ │
-│ 12. Default Light └─────────────────────────────────────────────────┘ │
+│ ● 1. ANSI Dark (Matches terminal) │ │ │
+│ 2. Atom One Dark │ 1 # function │ │
+│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
+│ 4. Default Dark │ 3 a, b = 0, 1 │ │
+│ 5. Dracula Dark │ 4 for _ in range(n): │ │
+│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
+│ 7. Holiday Dark │ 6 return a │ │
+│ 8. Shades Of Purple Dark │ │ │
+│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
+│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
+│ 11. Ayu Light │ │ │
+│ 12. Default Light └─────────────────────────────────────────────────┘ │
│ ▼ │
│ │
│ (Use Enter to select, Tab to configure scope, Esc to close) │
@@ -119,18 +119,18 @@ exports[`ThemeDialog Snapshots > should render correctly in theme selection mode
│ │
│ > Select Theme Preview │
│ ▲ ┌─────────────────────────────────────────────────┐ │
-│ ● 1. ANSI Dark (Matches terminal) │ │ │
-│ 2. Atom One Dark │ 1 # function │ │
-│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
-│ 4. Default Dark │ 3 a, b = 0, 1 │ │
-│ 5. Dracula Dark │ 4 for _ in range(n): │ │
-│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
-│ 7. Holiday Dark │ 6 return a │ │
-│ 8. Shades Of Purple Dark │ │ │
-│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
-│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
-│ 11. Ayu Light │ │ │
-│ 12. Default Light └─────────────────────────────────────────────────┘ │
+│ ● 1. ANSI Dark (Matches terminal) │ │ │
+│ 2. Atom One Dark │ 1 # function │ │
+│ 3. Ayu Dark │ 2 def fibonacci(n): │ │
+│ 4. Default Dark │ 3 a, b = 0, 1 │ │
+│ 5. Dracula Dark │ 4 for _ in range(n): │ │
+│ 6. GitHub Dark │ 5 a, b = b, a + b │ │
+│ 7. Holiday Dark │ 6 return a │ │
+│ 8. Shades Of Purple Dark │ │ │
+│ 9. Solarized Dark │ 1 - print("Hello, " + name) │ │
+│ 10. ANSI Light │ 1 + print(f"Hello, {name}!") │ │
+│ 11. Ayu Light │ │ │
+│ 12. Default Light └─────────────────────────────────────────────────┘ │
│ ▼ │
│ ╭─────────────────────────────────────────────────╮ │
│ │ DEVELOPER TOOLS (Not visible to users) │ │
diff --git a/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap
index a39d668825..a42161aa9a 100644
--- a/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap
+++ b/packages/cli/src/ui/components/__snapshots__/ToolConfirmationQueue.test.tsx.snap
@@ -10,10 +10,10 @@ exports[`ToolConfirmationQueue > calculates availableContentHeight based on avai
│ 50 line │
│ Apply this change? │
│ │
-│ ● 1. Allow once │
-│ 2. Allow for this session │
-│ 3. Modify with external editor │
-│ 4. No, suggest changes (esc) │
+│ ● 1. Allow once │
+│ 2. Allow for this session │
+│ 3. Modify with external editor │
+│ 4. No, suggest changes (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
"
@@ -32,10 +32,10 @@ exports[`ToolConfirmationQueue > does not render expansion hint when constrainHe
│ ╰──────────────────────────────────────────────────────────────────────────╯ │
│ Apply this change? │
│ │
-│ ● 1. Allow once │
-│ 2. Allow for this session │
-│ 3. Modify with external editor │
-│ 4. No, suggest changes (esc) │
+│ ● 1. Allow once │
+│ 2. Allow for this session │
+│ 3. Modify with external editor │
+│ 4. No, suggest changes (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
"
@@ -52,9 +52,9 @@ exports[`ToolConfirmationQueue > provides more height for ask_user by subtractin
│ Line 5 │
│ Line 6 │
│ │
-│ ● 1. Option 1 │
-│ Desc │
-│ 2. Enter a custom value │
+│ ● 1. Option 1 │
+│ Desc │
+│ 2. Enter a custom value │
│ │
│ Enter to select · ↑/↓ to navigate · Esc to cancel │
╰──────────────────────────────────────────────────────────────────────────────╯
@@ -79,11 +79,11 @@ exports[`ToolConfirmationQueue > renders ExitPlanMode tool confirmation with Suc
│ │
│ Plan content goes here │
│ │
-│ ● 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... │
+│ ● 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... │
│ │
│ Enter to select · ↑/↓ to navigate · Ctrl+X to edit plan · Esc to cancel │
╰──────────────────────────────────────────────────────────────────────────────╯
@@ -100,10 +100,10 @@ exports[`ToolConfirmationQueue > renders expansion hint when content is long and
│ 50 line │
│ Apply this change? │
│ │
-│ ● 1. Allow once │
-│ 2. Allow for this session │
-│ 3. Modify with external editor │
-│ 4. No, suggest changes (esc) │
+│ ● 1. Allow once │
+│ 2. Allow for this session │
+│ 3. Modify with external editor │
+│ 4. No, suggest changes (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
Press Ctrl+O to show more lines
@@ -119,9 +119,9 @@ exports[`ToolConfirmationQueue > renders the confirming tool with progress indic
│ ls │
│ Allow execution of: 'ls'? │
│ │
-│ ● 1. Allow once │
-│ 2. Allow for this session │
-│ 3. No, suggest changes (esc) │
+│ ● 1. Allow once │
+│ 2. Allow for this session │
+│ 3. No, suggest changes (esc) │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
"
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 f584e7f483..1e1ab588ec 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,8 +7,8 @@ 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
- 2. Allow for this session
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. No, suggest changes (esc)
"
`;
diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg
index d1396e2335..1d2deb879e 100644
--- a/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg
+++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolConfirmationMessage-ToolConfirmationMessage-should-render-multiline-shell-scripts-with-correct-newlines-and-syntax-highlighting-SVG-snapshot-.snap.svg
@@ -16,17 +16,18 @@
done
Allow execution of: 'echo'?
- ●
-
- 1.
-
-
- Allow once
-
- 2.
- Allow for this session
- 3.
- No, suggest changes (esc)
+ ●
+
+
+ 1.
+
+
+ Allow once
+
+ 2.
+ Allow for this session
+ 3.
+ No, suggest changes (esc)
\ No newline at end of file
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 3f207df881..e90e5cf9a1 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
@@ -8,9 +8,9 @@ ls -la
whoami
Allow execution of 3 commands?
-● 1. Allow once
- 2. Allow for this session
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. No, suggest changes (esc)
"
`;
@@ -21,9 +21,9 @@ URLs to fetch:
- https://raw.githubusercontent.com/google/gemini-react/main/README.md
Do you want to proceed?
-● 1. Allow once
- 2. Allow for this session
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. No, suggest changes (esc)
"
`;
@@ -31,9 +31,9 @@ exports[`ToolConfirmationMessage > should not display urls if prompt and url are
"https://example.com
Do you want to proceed?
-● 1. Allow once
- 2. Allow for this session
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. No, suggest changes (esc)
"
`;
@@ -44,9 +44,9 @@ for i in 1 2 3; do
done
Allow execution of: 'echo'?
-● 1. Allow once
- 2. Allow for this session
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. No, suggest changes (esc)
"
`;
@@ -55,10 +55,10 @@ exports[`ToolConfirmationMessage > should strip BiDi characters from MCP tool an
Tool: testtool
Allow execution of MCP tool "testtool" from server "testserver"?
-● 1. Allow once
- 2. Allow tool for this session
- 3. Allow all server tools for this session
- 4. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow tool for this session
+ 3. Allow all server tools for this session
+ 4. No, suggest changes (esc)
"
`;
@@ -70,9 +70,9 @@ exports[`ToolConfirmationMessage > with folder trust > 'for edit confirmations'
╰──────────────────────────────────────────────────────────────────────────────╯
Apply this change?
-● 1. Allow once
- 2. Modify with external editor
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Modify with external editor
+ 3. No, suggest changes (esc)
"
`;
@@ -84,10 +84,10 @@ exports[`ToolConfirmationMessage > with folder trust > 'for edit confirmations'
╰──────────────────────────────────────────────────────────────────────────────╯
Apply this change?
-● 1. Allow once
- 2. Allow for this session
- 3. Modify with external editor
- 4. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. Modify with external editor
+ 4. No, suggest changes (esc)
"
`;
@@ -95,8 +95,8 @@ exports[`ToolConfirmationMessage > with folder trust > 'for exec confirmations'
"echo "hello"
Allow execution of: 'echo'?
-● 1. Allow once
- 2. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. No, suggest changes (esc)
"
`;
@@ -104,9 +104,9 @@ exports[`ToolConfirmationMessage > with folder trust > 'for exec confirmations'
"echo "hello"
Allow execution of: 'echo'?
-● 1. Allow once
- 2. Allow for this session
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. No, suggest changes (esc)
"
`;
@@ -114,8 +114,8 @@ exports[`ToolConfirmationMessage > with folder trust > 'for info confirmations'
"https://example.com
Do you want to proceed?
-● 1. Allow once
- 2. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. No, suggest changes (esc)
"
`;
@@ -123,9 +123,9 @@ exports[`ToolConfirmationMessage > with folder trust > 'for info confirmations'
"https://example.com
Do you want to proceed?
-● 1. Allow once
- 2. Allow for this session
- 3. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. Allow for this session
+ 3. No, suggest changes (esc)
"
`;
@@ -134,8 +134,8 @@ 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
- 2. No, suggest changes (esc)
+ ● 1. Allow once
+ 2. No, suggest changes (esc)
"
`;
@@ -144,9 +144,9 @@ 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
- 2. Allow tool for this session
- 3. Allow all server tools for this session
- 4. No, suggest changes (esc)
+ ● 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 12b4edd6c0..d23b030890 100644
--- a/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx
+++ b/packages/cli/src/ui/components/shared/BaseSelectionList.test.tsx
@@ -12,22 +12,10 @@ import {
type RenderItemContext,
} from './BaseSelectionList.js';
import { useSelectionList } from '../../hooks/useSelectionList.js';
-import { Text, getBoundingBox } from 'ink';
+import { Text } from 'ink';
import type { theme } from '../../semantic-colors.js';
-import { useTerminalSize } from '../../hooks/useTerminalSize.js';
-import { useUIState, type UIState } from '../../contexts/UIStateContext.js';
vi.mock('../../hooks/useSelectionList.js');
-vi.mock('../../hooks/useTerminalSize.js');
-vi.mock('../../contexts/UIStateContext.js');
-
-vi.mock('ink', async (importOriginal) => {
- const actual = await importOriginal();
- return {
- ...actual,
- getBoundingBox: vi.fn(),
- };
-});
const mockTheme = {
text: { primary: 'COLOR_PRIMARY', secondary: 'COLOR_SECONDARY' },
@@ -69,18 +57,6 @@ describe('BaseSelectionList', () => {
setActiveIndex: vi.fn(),
});
- vi.mocked(useTerminalSize).mockReturnValue({
- columns: 100,
- rows: 40,
- });
-
- vi.mocked(getBoundingBox).mockReturnValue({
- width: 100,
- height: 10,
- x: 0,
- y: 0,
- });
-
mockRenderItem.mockImplementation(
(
item: { value: string; label: string; disabled?: boolean; key: string },
@@ -106,9 +82,6 @@ describe('BaseSelectionList', () => {
beforeEach(() => {
vi.clearAllMocks();
- vi.mocked(useUIState).mockReturnValue({
- mainAreaWidth: 100,
- } as unknown as UIState);
});
describe('Rendering and Structure', () => {
@@ -119,7 +92,6 @@ describe('BaseSelectionList', () => {
expect(lastFrame()).toContain('Item B');
expect(lastFrame()).toContain('Item C');
- // 3 items. Render count might be higher due to useLayoutEffect for offset.
expect(mockRenderItem).toHaveBeenCalledTimes(items.length);
expect(mockRenderItem).toHaveBeenCalledWith(items[0], expect.any(Object));
unmount();
@@ -527,33 +499,6 @@ describe('BaseSelectionList', () => {
unmount();
});
- it('should apply full-width highlight and offset when horizontally shifted', async () => {
- const horizontalOffset = 10;
- const terminalWidth = 100;
-
- vi.mocked(getBoundingBox).mockReturnValue({
- width: 80,
- height: 10,
- x: horizontalOffset,
- y: 0,
- });
-
- vi.mocked(useTerminalSize).mockReturnValue({
- columns: terminalWidth,
- rows: 40,
- });
-
- const result = await renderComponent({}, 0); // Item A selected
- const { lastFrame, unmount, waitUntilReady } = result;
- await waitUntilReady();
-
- const output = lastFrame();
- expect(output).toContain('Item A');
-
- await expect(result).toMatchSvgSnapshot();
- unmount();
- });
-
it('should show arrows and correct items when scrolled to the middle', async () => {
const { lastFrame, unmount } = await renderComponent(
{ items: longList, maxItemsToShow: MAX_ITEMS, showScrollArrows: true },
diff --git a/packages/cli/src/ui/components/shared/BaseSelectionList.tsx b/packages/cli/src/ui/components/shared/BaseSelectionList.tsx
index d55269a9c2..e5959c5719 100644
--- a/packages/cli/src/ui/components/shared/BaseSelectionList.tsx
+++ b/packages/cli/src/ui/components/shared/BaseSelectionList.tsx
@@ -5,12 +5,10 @@
*/
import type React from 'react';
-import { useEffect, useState, useLayoutEffect, useRef } from 'react';
-import { Text, Box, getBoundingBox, type DOMElement } from 'ink';
+import { useEffect, useState } from 'react';
+import { Text, Box } from 'ink';
import { theme } from '../../semantic-colors.js';
import { useSelectionList } from '../../hooks/useSelectionList.js';
-import { useTerminalSize } from '../../hooks/useTerminalSize.js';
-import { useUIState } from '../../contexts/UIStateContext.js';
import type { SelectionListItem } from '../../hooks/useSelectionList.js';
@@ -35,6 +33,8 @@ export interface BaseSelectionListProps<
wrapAround?: boolean;
focusKey?: string;
priority?: boolean;
+ /** Horizontal padding for items when not selected. Defaults to 2. */
+ horizontalPadding?: number;
renderItem: (item: TItem, context: RenderItemContext) => React.ReactNode;
}
@@ -67,6 +67,7 @@ export function BaseSelectionList<
wrapAround = true,
focusKey,
priority,
+ horizontalPadding = 1,
renderItem,
}: BaseSelectionListProps): React.JSX.Element {
const { activeIndex } = useSelectionList({
@@ -82,23 +83,6 @@ export function BaseSelectionList<
});
const [scrollOffset, setScrollOffset] = useState(0);
- const containerRef = useRef(null);
- const [horizontalOffset, setHorizontalOffset] = useState(0);
- const { columns: terminalWidth } = useTerminalSize();
- const uiState = useUIState();
- const mainAreaWidth = uiState?.mainAreaWidth;
- const effectiveTerminalWidth = mainAreaWidth ?? terminalWidth;
-
- // Measure horizontal offset to allow full-width highlight
- useLayoutEffect(() => {
- if (containerRef.current) {
- const { x } = getBoundingBox(containerRef.current);
- // We want to track the "true" offset relative to the viewport.
- // Since we apply -breakoutAmount as a margin to the SELECTED item,
- // it should not affect the parent container's x coordinate in a standard layout.
- setHorizontalOffset(x);
- }
- }, [terminalWidth, mainAreaWidth]);
// Handle scrolling for long lists
useEffect(() => {
@@ -117,7 +101,7 @@ export function BaseSelectionList<
const numberColumnWidth = String(items.length).length;
return (
-
+
{/* Use conditional coloring instead of conditional rendering */}
{showScrollArrows && items.length > maxItemsToShow && (
{/* Radio button indicator */}
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg
index 0e21bd58a8..6d5b5146be 100644
--- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg
+++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList-BaseSelectionList-Rendering-and-Structure-should-render-the-selection-indicator-or-space-and-layout.snap.svg
@@ -4,8 +4,8 @@
- ● 1. Item A
- 2. Item B
- 3. Item C
+ ● 1. Item A
+ 2. Item B
+ 3. Item C
\ No newline at end of file
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap
index 0e8c869f47..fbfbbd0736 100644
--- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap
+++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSelectionList.test.tsx.snap
@@ -1,47 +1,41 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`BaseSelectionList > Rendering and Structure > should render the selection indicator (● or space) and layout 1`] = `
-"● 1. Item A
- 2. Item B
- 3. Item C"
-`;
-
-exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should apply full-width highlight and offset when horizontally shifted 1`] = `
-"● 1. Item A
- 2. Item B
- 3. Item C"
+" ● 1. Item A
+ 2. Item B
+ 3. Item C"
`;
exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should not show arrows when list fits entirely 1`] = `
-"● 1. Item A
- 2. Item B
- 3. Item C
+" ● 1. Item A
+ 2. Item B
+ 3. Item C
"
`;
exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows and correct items when scrolled to the end 1`] = `
"▲
- 8. Item 8
- 9. Item 9
-● 10. Item 10
+ 8. Item 8
+ 9. Item 9
+ ● 10. Item 10
▼
"
`;
exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows and correct items when scrolled to the middle 1`] = `
"▲
- 4. Item 4
- 5. Item 5
-● 6. Item 6
+ 4. Item 4
+ 5. Item 5
+ ● 6. Item 6
▼
"
`;
exports[`BaseSelectionList > Scroll Arrows (showScrollArrows) > should show arrows with correct colors when enabled (at the top) 1`] = `
"▲
-● 1. Item 1
- 2. Item 2
- 3. Item 3
+ ● 1. Item 1
+ 2. Item 2
+ 3. Item 3
▼
"
`;
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-2.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-2.snap.svg
new file mode 100644
index 0000000000..0e79266e80
--- /dev/null
+++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-2.snap.svg
@@ -0,0 +1,91 @@
+
\ No newline at end of file
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-3.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-3.snap.svg
new file mode 100644
index 0000000000..287c973f6e
--- /dev/null
+++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key-3.snap.svg
@@ -0,0 +1,91 @@
+
\ No newline at end of file
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg
index 2c9c3a626c..287c973f6e 100644
--- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg
+++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-keyboard-navigation-should-navigate-down-with-arrow-key.snap.svg
@@ -65,19 +65,19 @@
Apply To
│
│
-
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System Settings
│
│
│
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg
index fd59640fbe..03c446e98b 100644
--- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg
+++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog-BaseSettingsDialog-rendering-should-render-all-items.snap.svg
@@ -65,19 +65,19 @@
Apply To
│
│
-
- ●
-
- User Settings
-
+ ●
+
+
+ User Settings
+
│
│
- Workspace Settings
+ Workspace Settings
│
│
- System Settings
+ System Settings
│
│
│
diff --git a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap
index acae5124a5..02379cd2c8 100644
--- a/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap
+++ b/packages/cli/src/ui/components/shared/__snapshots__/BaseSettingsDialog.test.tsx.snap
@@ -19,9 +19,37 @@ exports[`BaseSettingsDialog > keyboard navigation > should navigate down with ar
│ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
+│ │
+│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
+│ │
+╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
+`;
+
+exports[`BaseSettingsDialog > keyboard navigation > should navigate down with arrow key 2`] = `
+"╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
+│ │
+│ > Test Settings │
+│ │
+│ Boolean Setting true │
+│ A boolean setting for testing │
+│ │
+│ ● String Setting test-value │
+│ A string setting for testing │
+│ │
+│ Number Setting 42 │
+│ A number setting for testing │
+│ │
+│ Enum Setting option-a │
+│ An enum setting for testing │
+│ │
+│ │
+│ Apply To │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
@@ -47,9 +75,9 @@ exports[`BaseSettingsDialog > rendering > should render all items 1`] = `
│ │
│ │
│ Apply To │
-│ ● User Settings │
-│ Workspace Settings │
-│ System Settings │
+│ ● User Settings │
+│ Workspace Settings │
+│ System Settings │
│ │
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
│ │
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..1940b24074 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,21 @@
// 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.
+" 1. Foo Title
+ This is Foo.
+ ● 2. Bar Title
+ This is Bar.
+ 3. Baz Title
+ This is Baz.
"
`;
exports[`DescriptiveRadioButtonSelect > should render correctly with default props 1`] = `
-"● Foo Title
- This is Foo.
- Bar Title
- This is Bar.
- Baz Title
- This is Baz.
+" ● Foo Title
+ This is Foo.
+ Bar Title
+ This is Bar.
+ Baz Title
+ This is Baz.
"
`;