import React, { useState, useEffect } from 'react'; import { CLIChatView } from './CLIChatView'; import { useNavigate } from 'react-router-dom'; import { Button } from '../ui/button'; import { Badge } from '../ui/badge'; import { Terminal, Settings, History, MessageSquare, ArrowLeft, RefreshCw } from 'lucide-react'; import { generateSessionId } from '../../sessions'; import { type View, ViewOptions } from '../../App'; import { MainPanelLayout } from '../Layout/MainPanelLayout'; interface ChatMessage { role: string; content: string; id?: string; timestamp?: number; [key: string]: unknown; } interface ChatState { id: string; title: string; messageHistoryIndex: number; messages: ChatMessage[]; } interface CLIHubProps { chat: ChatState; setChat: (chat: ChatState) => void; setView: (view: View, viewOptions?: ViewOptions) => void; } export const CLIHub: React.FC = ({ chat, setChat, setView }) => { const navigate = useNavigate(); const [sessionId, setSessionId] = useState(chat.id || generateSessionId()); // Update chat when session changes useEffect(() => { setChat({ ...chat, id: sessionId, title: `CLI Session - ${sessionId}`, messageHistoryIndex: 0, messages: [], }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [sessionId, setChat]); const handleNewSession = () => { const newSessionId = generateSessionId(); setSessionId(newSessionId); }; const handleRestartSession = () => { // Force restart by changing session ID const newSessionId = generateSessionId(); setSessionId(newSessionId); }; return ( {/* Header */}

Goose CLI Experience

Exact CLI behavior with GUI enhancements

CLI Mode
{/* CLI Chat View */}
{/* Footer */}
Session: {sessionId} CLI Mode Active
); };