+ {/* Gateway Warning */}
+ {!isGatewayRunning && (
+
+
+
+ Gateway is not running. Chat functionality is unavailable.
+
+
+ )}
+
{/* Messages Area */}
{loading ? (
@@ -52,112 +328,71 @@ export function Chat() {
) : messages.length === 0 ? (
-
-
-
No messages yet
-
Start a conversation with your AI assistant
-
+
) : (
<>
{messages.map((message) => (
-
- {/* Avatar */}
-
- {message.role === 'user' ? (
-
- ) : (
-
- )}
-
-
- {/* Message Content */}
-
-
{message.content}
-
- {formatRelativeTime(message.timestamp)}
-
-
- {/* Tool Calls */}
- {message.toolCalls && message.toolCalls.length > 0 && (
-
- {message.toolCalls.map((tool) => (
-
-
-
- Tool: {tool.name}
-
-
- Status: {tool.status}
-
-
-
- ))}
-
- )}
-
-
+
))}
+ {sending &&
}
>
)}
+ {/* Error Display */}
+ {error && (
+
-
+
+
-
setInput(e.target.value)}
- onKeyPress={handleKeyPress}
- placeholder="Type a message..."
- disabled={sending}
- className="flex-1"
- />
+
+
-
+
+
+ Press Enter to send, Shift+Enter for new line
+
);
diff --git a/src/styles/globals.css b/src/styles/globals.css
index 05ff10877..6cfebdec8 100644
--- a/src/styles/globals.css
+++ b/src/styles/globals.css
@@ -95,3 +95,66 @@
.focus-ring {
@apply focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2;
}
+
+/* Prose styling for markdown */
+.prose {
+ line-height: 1.6;
+}
+
+.prose p {
+ margin-bottom: 0.75em;
+}
+
+.prose p:last-child {
+ margin-bottom: 0;
+}
+
+.prose ul,
+.prose ol {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ padding-left: 1.5em;
+}
+
+.prose li {
+ margin-bottom: 0.25em;
+}
+
+.prose pre {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+.prose blockquote {
+ border-left: 3px solid hsl(var(--border));
+ padding-left: 1em;
+ margin: 0.5em 0;
+ color: hsl(var(--muted-foreground));
+}
+
+.prose table {
+ width: 100%;
+ border-collapse: collapse;
+ margin: 0.5em 0;
+}
+
+.prose th,
+.prose td {
+ border: 1px solid hsl(var(--border));
+ padding: 0.5em;
+ text-align: left;
+}
+
+.prose th {
+ background: hsl(var(--muted));
+}
+
+/* Typing indicator animation */
+@keyframes bounce {
+ 0%, 60%, 100% {
+ transform: translateY(0);
+ }
+ 30% {
+ transform: translateY(-4px);
+ }
+}