summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/components/messages/UserShellMessage.tsx
diff options
context:
space:
mode:
authorTaylor Mullen <[email protected]>2025-05-18 01:18:32 -0700
committerN. Taylor Mullen <[email protected]>2025-05-18 01:25:50 -0700
commite4d978da7ce5422cd4d2a92d369985df6387ad79 (patch)
treea1be044381a5c34b97cb1be8b790c4dd0ae01c3e /packages/cli/src/ui/components/messages/UserShellMessage.tsx
parent0d4e0fe6477712f4781438b84096690d2e3c208e (diff)
feat(cli): Introduce toggleable shell mode with enhanced UI
- Implements a toggleable shell mode, removing the need to prefix every command with `!`. - Users can now enter and exit shell mode by typing `!` as the first character in an empty input prompt. - The input prompt visually indicates active shell mode with a distinct color and `! ` prefix. - Shell command history items (`user_shell`) are now visually differentiated from regular user messages. - This provides a cleaner and more streamlined user experience for frequent shell interactions. Fixes https://b.corp.google.com/issues/418509745
Diffstat (limited to 'packages/cli/src/ui/components/messages/UserShellMessage.tsx')
-rw-r--r--packages/cli/src/ui/components/messages/UserShellMessage.tsx25
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/cli/src/ui/components/messages/UserShellMessage.tsx b/packages/cli/src/ui/components/messages/UserShellMessage.tsx
new file mode 100644
index 00000000..946ca7e7
--- /dev/null
+++ b/packages/cli/src/ui/components/messages/UserShellMessage.tsx
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import React from 'react';
+import { Box, Text } from 'ink';
+import { Colors } from '../../colors.js';
+
+interface UserShellMessageProps {
+ text: string;
+}
+
+export const UserShellMessage: React.FC<UserShellMessageProps> = ({ text }) => {
+ // Remove leading '!' if present, as App.tsx adds it for the processor.
+ const commandToDisplay = text.startsWith('!') ? text.substring(1) : text;
+
+ return (
+ <Box>
+ <Text color={Colors.AccentCyan}>$ </Text>
+ <Text>{commandToDisplay}</Text>
+ </Box>
+ );
+};