diff --git a/src/app/chat/page.tsx b/src/app/chat/page.tsx
new file mode 100644
index 0000000..7946b00
--- /dev/null
+++ b/src/app/chat/page.tsx
@@ -0,0 +1,37 @@
+"use client";
+
+import ChatComponent from "@/components/ChatComponent";
+import { Button } from "@/components/ui/button";
+import { ArrowLeft, Maximize2 } from "lucide-react";
+import Link from "next/link";
+
+export default function ChatPage() {
+ return (
+
+ {/* Header for full-page chat */}
+
+
+ {/* Main Chat Area */}
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/k8s-dashboard/Sidebar.tsx b/src/app/k8s-dashboard/Sidebar.tsx
index b1e6c77..b0d67c5 100644
--- a/src/app/k8s-dashboard/Sidebar.tsx
+++ b/src/app/k8s-dashboard/Sidebar.tsx
@@ -16,10 +16,12 @@ import {
Clock,
Play,
Lock,
- Zap
+ Zap,
+ MessageSquareShare
} from "lucide-react";
import Image from "next/image";
import { useState, useEffect } from "react";
+import Link from "next/link";
export type ToolType =
| "pod-resources"
@@ -122,6 +124,18 @@ export default function Sidebar({
))}
+
+
+
+
+
+
);
diff --git a/src/components/ChatComponent.tsx b/src/components/ChatComponent.tsx
index d2c99b2..8d64f11 100644
--- a/src/components/ChatComponent.tsx
+++ b/src/components/ChatComponent.tsx
@@ -4,6 +4,7 @@ import { useState, useRef, useEffect, FormEvent } from "react";
import { Button } from "./ui/button";
import { Input } from "./ui/input";
import { Card } from "./ui/card";
+import { cn } from "@/lib/utils";
import {
Send,
X,
@@ -19,6 +20,7 @@ import {
Trash2,
RotateCcw,
MessageSquare,
+ ExternalLink,
} from "lucide-react";
import {
DropdownMenu,
@@ -30,10 +32,12 @@ import { useChat } from "./ChatContext";
import type { ChatSession } from "./ChatContext";
import { WebLLMProvider, useWebLLM } from "./WebLLMProvider";
import * as webllm from "@mlc-ai/web-llm";
+import Link from "next/link";
interface ChatComponentProps {
isOpen?: boolean;
onClose?: () => void;
+ isFullPage?: boolean;
}
export default function ChatComponent(props: ChatComponentProps) {
@@ -47,8 +51,9 @@ export default function ChatComponent(props: ChatComponentProps) {
function ChatComponentInner({
isOpen: controlledIsOpen,
onClose,
+ isFullPage = false,
}: ChatComponentProps) {
- const [isOpen, setIsOpen] = useState(!!controlledIsOpen);
+ const [isOpen, setIsOpen] = useState(isFullPage || !!controlledIsOpen);
const [model, setModel] = useState("gpt-4o");
const [availableModels, setAvailableModels] = useState<{ id: string; name: string; isLocal?: boolean }[]>([]);
const [input, setInput] = useState("");
@@ -331,15 +336,28 @@ function ChatComponentInner({
return (
{/* Header */}
-
+
ST-K8s Chat
+ {!isFullPage && (
+
+
+
+ )}
@@ -556,10 +576,13 @@ function ChatComponentInner({
className={`flex \${msg.role === "user" ? "justify-end" : "justify-start"}`}
>
{msg.content}
@@ -575,7 +598,10 @@ function ChatComponentInner({
)}
{webllmLoading && webllmProgress && (
-
+
Downloading Model Array into Browser