| import { ReactFlowProvider } from "@xyflow/react"; |
| import "./App.css"; |
| import { CanvasBuilder } from "./Canvas"; |
| import { Tabs, TabsTrigger, TabsContent, TabsList } from "./components/ui/tabs"; |
| import { Config } from "./Config"; |
| import { Integrations } from "./Integrations"; |
| import { Toaster } from "./components/ui/toaster"; |
| import { ProjectSelect } from "./ProjectSelect"; |
| import { Logs } from "./Monitoring"; |
| import { Overview } from "./Overview"; |
| import { ChatManager } from "./components/ChatManager"; |
| import { useAgents } from "./lib/state"; |
| import { Bot } from "lucide-react"; |
| |
| export default function App() { |
| return ( |
| <ReactFlowProvider> |
| <div className="h-screen flex flex-col p-1"> |
| <AppImpl /> |
| <ChatManager /> |
| <Toaster /> |
| </div> |
| </ReactFlowProvider> |
| ); |
| } |
| |
| function AppImpl() { |
| const agents = useAgents(); |
| return ( |
| <Tabs defaultValue="overview" className="flex-1 flex flex-col min-h-0"> |
| <div className="flex justify-between border-b"> |
| <TabsList className="!rounded-none"> |
| <TabsTrigger value="overview">Overview</TabsTrigger> |
| <TabsTrigger value="canvas">Canvas</TabsTrigger> |
| <TabsTrigger value="monitoring">Monitoring</TabsTrigger> |
| <TabsTrigger value="config">Config</TabsTrigger> |
| <TabsTrigger value="integrations">Integrations</TabsTrigger> |
| {agents.map((a) => { |
| return ( |
| <TabsTrigger |
| key={a.agentName} |
| value={`agent-${a.agentName}`} |
| className="flex flex-row items-center gap-1" |
| > |
| <Bot className="w-4 h-4" /> |
| {a.agentName} |
| </TabsTrigger> |
| ); |
| })} |
| </TabsList> |
| <ProjectSelect className="w-fit min-w-[150px]" /> |
| </div> |
| <TabsContent value="overview" className="!mt-0 flex-1 min-h-0"> |
| <Overview /> |
| </TabsContent> |
| <TabsContent value="canvas" className="!mt-0 flex-1 min-h-0"> |
| <CanvasBuilder /> |
| </TabsContent> |
| <TabsContent value="config" className="!mt-0 flex-1 min-h-0"> |
| <Config /> |
| </TabsContent> |
| <TabsContent value="integrations" className="!mt-0 flex-1 min-h-0"> |
| <Integrations /> |
| </TabsContent> |
| <TabsContent value="monitoring" className="!mt-0 flex-1 min-h-0"> |
| <Logs /> |
| </TabsContent> |
| {agents.map((a) => ( |
| <TabsContent value={`agent-${a.agentName}`} className="!mt-0 flex-1 min-h-0"> |
| <iframe key={a.name} src={a.address} title={a.agentName} className="w-full h-full" /> |
| </TabsContent> |
| ))} |
| </Tabs> |
| ); |
| } |