"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Textarea } from "@/components/ui/textarea"; import { ArrowLeft, GitBranch, Send, User, Bot } from "lucide-react"; import { getMessageContentString } from "@open-swe/shared/messages"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { ThreadSwitcher } from "./thread-switcher"; import { ThreadDisplayInfo } from "./types"; import { useStream } from "@langchain/langgraph-sdk/react"; import { ManagerGraphState } from "@open-swe/shared/open-swe/manager/types"; import { PlannerGraphState } from "@open-swe/shared/open-swe/planner/types"; import { ActionsRenderer } from "./actions-renderer"; const PROGRAMMER_ASSISTANT_ID = process.env.NEXT_PUBLIC_PROGRAMMER_ASSISTANT_ID; const PLANNER_ASSISTANT_ID = process.env.NEXT_PUBLIC_PLANNER_ASSISTANT_ID; interface ThreadViewProps { stream: ReturnType>; displayThread: ThreadDisplayInfo; allDisplayThreads: ThreadDisplayInfo[]; onThreadSelect: (thread: ThreadDisplayInfo) => void; onBackToHome: () => void; } export function ThreadView({ stream, displayThread, allDisplayThreads, onThreadSelect, onBackToHome, }: ThreadViewProps) { const [chatInput, setChatInput] = useState(""); const plannerThreadId = stream.values?.plannerSession?.threadId; const plannerRunId = stream.values?.plannerSession?.runId; const [programmerSession, setProgrammerSession] = useState(); if (!stream.messages?.length) { return null; } const handleSendMessage = () => { if (chatInput.trim()) { alert("SENDING MANAGER FOLLOWUPS NOT HOOKED UP YET"); setChatInput(""); } }; return (
{/* Header */}
{displayThread.title} • {displayThread.repository}
{/* Main Content - Split Layout */}
{/* Left Side - Chat Interface */}
{/* Chat Messages */}
{stream.messages.map((message) => (
{message.type === "human" ? (
) : (
)}
{message.type === "human" ? "You" : "AI Agent"}
{getMessageContentString(message.content)}
))}
{/* Chat Input - Fixed at bottom */}