diff --git a/webview-ui/src/components/ChatRow.tsx b/webview-ui/src/components/ChatRow.tsx index 07cd491..112c38d 100644 --- a/webview-ui/src/components/ChatRow.tsx +++ b/webview-ui/src/components/ChatRow.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react" import { ClaudeMessage, ClaudeAsk, ClaudeSay } from "@shared/ExtensionMessage" -import { VSCodeButton, VSCodeProgressRing, VSCodeTag } from "@vscode/webview-ui-toolkit/react" +import { VSCodeButton, VSCodeProgressRing, VSCodeBadge } from "@vscode/webview-ui-toolkit/react" interface ChatRowProps { message: ClaudeMessage @@ -10,29 +10,71 @@ const ChatRow: React.FC = ({ message }) => { const [isExpanded, setIsExpanded] = useState(false) const cost = message.text != null && message.say === "api_req_started" ? JSON.parse(message.text).cost : undefined - const getIconAndTitle = (type: ClaudeAsk | ClaudeSay | undefined): [JSX.Element | null, string | null] => { + const getIconAndTitle = (type: ClaudeAsk | ClaudeSay | undefined): [JSX.Element | null, JSX.Element | null] => { + const normalColor = "var(--vscode-foreground)" + const errorColor = "var(--vscode-errorForeground)" + const successColor = "var(--vscode-testing-iconPassed)" + switch (type) { case "request_limit_reached": return [ - , - "Max Requests Reached", + , + Max Requests Reached, ] case "error": return [ - , - "Error", + , + Error, ] case "command": - return [, "Command"] + return [ + , + Command, + ] case "completion_result": return [ , - "Task Completed", + style={{ color: successColor, marginBottom: "-1.5px" }}>, + Task Completed, ] case "tool": - return [, "Tool"] + return [ + , + Tool, + ] + case "api_req_started": + return [ + cost ? ( + + ) : ( +
+
+ +
+
+ ), + + {cost ? "API Request Complete" : "Making API Request..."} + , + ] default: return [null, null] } @@ -44,85 +86,73 @@ const ChatRow: React.FC = ({ message }) => { const headerStyle: React.CSSProperties = { display: "flex", alignItems: "center", - justifyContent: "left", gap: "10px", marginBottom: "10px", } const contentStyle: React.CSSProperties = { - marginLeft: "20px", + margin: 0, } switch (message.type) { case "say": switch (message.say) { - case "task": - return ( -
-

Task

-

{message.text}

-
- ) case "api_req_started": return ( -
-
- Made API request... - {cost ? ( - - ) : ( - - )} - {cost && {cost}} - setIsExpanded(!isExpanded)}> - - +
+
+ {icon} + {title} + {cost && ${Number(cost).toFixed(4)}}
+ setIsExpanded(!isExpanded)}> + +
) case "api_req_finished": return null // Hide this message type case "tool": - case "error": case "text": - case "command_output": return ( <> {title && (
{icon} -

{title}

+ {title}
)} -
-									{message.text}
-								
+

{message.text}

+ + ) + case "error": + return ( + <> + {title && ( +
+ {icon} + {title} +
+ )} +

+ {message.text} +

) case "completion_result": return ( -
+ <>
{icon} -

{title}

+ {title}
-

{message.text}

-
+

+ {message.text} +

+ ) default: return ( @@ -130,7 +160,7 @@ const ChatRow: React.FC = ({ message }) => { {title && (
{icon} -

{title}

+ {title}
)}

{message.text}

@@ -144,7 +174,7 @@ const ChatRow: React.FC = ({ message }) => { <>
{icon} -

{title}

+ {title}

Your task has reached the maximum request limit (maxRequestsPerTask, you can change @@ -157,11 +187,11 @@ const ChatRow: React.FC = ({ message }) => { <>

{icon} -

{title}

+ {title}

Claude would like to run this command. Do you allow this?

-
+									
 										{message.text}
 									
@@ -170,16 +200,14 @@ const ChatRow: React.FC = ({ message }) => { case "completion_result": if (message.text) { return ( -
+
{icon} -

{title}

+ {title}
-

{message.text}

+

+ {message.text} +

) } else { @@ -191,7 +219,7 @@ const ChatRow: React.FC = ({ message }) => { {title && (
{icon} -

{title}

+ {title}
)}

{message.text}

@@ -208,7 +236,7 @@ const ChatRow: React.FC = ({ message }) => { return (
{renderContent()} {isExpanded && message.say === "api_req_started" && ( diff --git a/webview-ui/src/components/ChatView.tsx b/webview-ui/src/components/ChatView.tsx index 859587e..ce68cf3 100644 --- a/webview-ui/src/components/ChatView.tsx +++ b/webview-ui/src/components/ChatView.tsx @@ -128,7 +128,7 @@ const ChatView = ({ messages }: ChatViewProps) => { overflow: "hidden", }}> {
{(primaryButtonText || secondaryButtonText) && ( -
+
{primaryButtonText && ( { )}
)} -
+
{ position: "absolute", right: "18px", height: `${textAreaHeight}px`, - bottom: "10px", + bottom: "12px", display: "flex", alignItems: "center", }}> diff --git a/webview-ui/src/components/TaskHeader.tsx b/webview-ui/src/components/TaskHeader.tsx index 6df185e..a2aa1f5 100644 --- a/webview-ui/src/components/TaskHeader.tsx +++ b/webview-ui/src/components/TaskHeader.tsx @@ -15,7 +15,7 @@ const TaskHeader: React.FC = ({ taskText, tokensIn, tokensOut, return (