Conversations
@@ -32,7 +32,7 @@ export function SidebarPanel({
size="icon"
onClick={onNewSession}
aria-label="New conversation"
- className="h-7 w-7"
+ className="h-8 w-8 rounded-md"
>
diff --git a/chat-ui/src/components/tool-call-card.tsx b/chat-ui/src/components/tool-call-card.tsx
index daab030a..002ca033 100644
--- a/chat-ui/src/components/tool-call-card.tsx
+++ b/chat-ui/src/components/tool-call-card.tsx
@@ -129,27 +129,67 @@ type StateStyle = {
border: string;
icon: typeof Terminal;
iconClass: string;
- showSpinner?: boolean;
+ badgeClass: string;
};
function getStateStyle(state: ToolCallState["state"]): StateStyle {
switch (state) {
case "pending":
- return { border: "border-muted", icon: Terminal, iconClass: "animate-pulse text-muted-foreground" };
+ return {
+ border: "border-border/60",
+ icon: Terminal,
+ iconClass: "animate-pulse text-muted-foreground",
+ badgeClass: "border-border bg-muted/55 text-muted-foreground",
+ };
case "input_streaming":
- return { border: "border-primary/50 animate-pulse", icon: Terminal, iconClass: "text-primary" };
+ return {
+ border: "border-primary/35 animate-pulse",
+ icon: Terminal,
+ iconClass: "text-primary",
+ badgeClass: "border-primary/25 bg-primary/10 text-primary",
+ };
case "input_complete":
- return { border: "border-border", icon: Terminal, iconClass: "text-foreground" };
+ return {
+ border: "border-border/70",
+ icon: Terminal,
+ iconClass: "text-foreground",
+ badgeClass: "border-border bg-muted/45 text-muted-foreground",
+ };
case "running":
- return { border: "border-primary/40", icon: Loader2, iconClass: "text-primary animate-spin", showSpinner: true };
+ return {
+ border: "border-primary/35",
+ icon: Loader2,
+ iconClass: "text-primary animate-spin",
+ badgeClass: "border-primary/25 bg-primary/10 text-primary",
+ };
case "result":
- return { border: "border-border", icon: Check, iconClass: "text-success" };
+ return {
+ border: "border-border/70",
+ icon: Check,
+ iconClass: "text-success",
+ badgeClass: "border-success/20 bg-success/10 text-success",
+ };
case "error":
- return { border: "border-error", icon: XCircle, iconClass: "text-error" };
+ return {
+ border: "border-error/70",
+ icon: XCircle,
+ iconClass: "text-error",
+ badgeClass: "border-error/25 bg-error/10 text-error",
+ };
case "aborted":
- return { border: "border-muted", icon: AlertCircle, iconClass: "text-muted-foreground line-through" };
+ return {
+ border: "border-border/60",
+ icon: AlertCircle,
+ iconClass: "text-muted-foreground line-through",
+ badgeClass: "border-border bg-muted/45 text-muted-foreground",
+ };
case "blocked":
- return { border: "border-warning", icon: Shield, iconClass: "text-warning" };
+ return {
+ border: "border-warning/70",
+ icon: Shield,
+ iconClass: "text-warning",
+ badgeClass: "border-warning/25 bg-warning/10 text-warning",
+ };
}
}
@@ -170,25 +210,35 @@ export function ToolCallCard({ tool }: { tool: ToolCallState }) {
const isOpen = disclosure.isOpen;
const hasBody = Boolean(output || tool.error || tool.blockReason || inputDetails || tool.fullRef);
+ const detailLabel = isOpen ? "Hide details" : "View details";
return (
-
+