From 2ad59c4ad0797d138008612599744ada3b828bcb Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Tue, 30 Dec 2025 15:24:51 +0200 Subject: [PATCH] refactor: remove unused VSCode components --- AGENTS.md | 2 +- packages/vscode/webview/App.tsx | 283 ------------ .../vscode/webview/components/ChatPanel.tsx | 141 ------ .../webview/components/OpenChamberLogo.tsx | 192 -------- .../vscode/webview/components/SessionItem.tsx | 71 --- .../webview/components/SessionsListView.tsx | 86 ---- .../components/SimpleMessageRenderer.tsx | 76 ---- .../webview/components/VSCodeHeader.tsx | 28 -- .../webview/components/VSCodeLayout.tsx | 14 - .../vscode/webview/hooks/useNavigation.ts | 19 - packages/vscode/webview/stores/chatStore.ts | 413 ------------------ 11 files changed, 1 insertion(+), 1324 deletions(-) delete mode 100644 packages/vscode/webview/App.tsx delete mode 100644 packages/vscode/webview/components/ChatPanel.tsx delete mode 100644 packages/vscode/webview/components/OpenChamberLogo.tsx delete mode 100644 packages/vscode/webview/components/SessionItem.tsx delete mode 100644 packages/vscode/webview/components/SessionsListView.tsx delete mode 100644 packages/vscode/webview/components/SimpleMessageRenderer.tsx delete mode 100644 packages/vscode/webview/components/VSCodeHeader.tsx delete mode 100644 packages/vscode/webview/components/VSCodeLayout.tsx delete mode 100644 packages/vscode/webview/hooks/useNavigation.ts delete mode 100644 packages/vscode/webview/stores/chatStore.ts diff --git a/AGENTS.md b/AGENTS.md index 23f61f2e..c82ab65f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -53,7 +53,7 @@ Express server and CLI in `packages/web`: API adapters in `packages/web/src/api` Native desktop app in `packages/desktop`: Tauri backend in `src-tauri/` (Rust), frontend API adapters in `src/api/` (settings, permissions, diagnostics, files, git, terminal, notifications, tools, updater), bridge layer in `src/lib/` for Tauri IPC communication. ### VS Code Extension Runtime -Extension in `packages/vscode`: Extension entry in `src/` (ChatViewProvider, bridge, theme), webview API adapters in `webview/api/` (bridge, editor, files, permissions, settings, tools), webview components in `webview/components/` (ChatPanel, SessionsListView, VSCodeLayout). +Extension in `packages/vscode`: Extension entry in `src/` (ChatViewProvider, bridge, theme), webview API adapters in `webview/api/` (bridge, editor, files, permissions, settings, tools), bootstrap script in `webview/main.tsx` that loads shared UI. ## Development Commands diff --git a/packages/vscode/webview/App.tsx b/packages/vscode/webview/App.tsx deleted file mode 100644 index b4ed10f8..00000000 --- a/packages/vscode/webview/App.tsx +++ /dev/null @@ -1,283 +0,0 @@ -import React from 'react'; -import { useChatStore } from './stores/chatStore'; -import { useNavigation } from './hooks/useNavigation'; -import { OpenChamberLogo } from './components/OpenChamberLogo'; - -type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'error'; - -function ConnectionStatusBanner({ status, error, onRetry }: { - status: ConnectionStatus; - error?: string; - onRetry: () => void; -}) { - if (status === 'connected') return null; - - // Show full-screen logo for connecting state - if (status === 'connecting') { - return ( -
- -
- ); - } - - const messages: Record = { - disconnected: 'Not connected to OpenCode API', - connecting: '', - connected: '', - error: error || 'Connection error', - }; - - return ( -
- {messages[status]} - {(status === 'disconnected' || status === 'error') && ( - - )} -
- ); -} - -function SessionsList() { - const { sessions, currentSessionId, selectSession, createSession, isLoadingSessions } = useChatStore(); - const { goToChat } = useNavigation(); - const [isCreating, setIsCreating] = React.useState(false); - - const handleSelectSession = async (sessionId: string) => { - await selectSession(sessionId); - goToChat(); - }; - - const handleNewSession = async () => { - setIsCreating(true); - const sessionId = await createSession(); - setIsCreating(false); - if (sessionId) { - goToChat(); - } - }; - - const formatTime = (timestamp?: number) => { - if (!timestamp) return ''; - const date = new Date(timestamp); - const now = new Date(); - const diffDays = Math.floor((now.getTime() - date.getTime()) / 86400000); - if (diffDays === 0) return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); - if (diffDays === 1) return 'Yesterday'; - return date.toLocaleDateString([], { month: 'short', day: 'numeric' }); - }; - - return ( -
-
-

Sessions

- -
- -
- {isLoadingSessions ? ( -
Loading...
- ) : sessions.length === 0 ? ( -
-
No sessions yet
- -
- ) : ( -
- {sessions.map((session) => ( - - ))} -
- )} -
-
- ); -} - -function ChatPanel() { - const { currentSessionId, sessions, messages, sendMessage, abortMessage, isSending, streamingSessionId } = useChatStore(); - const { goToSessions } = useNavigation(); - const [input, setInput] = React.useState(''); - const messagesEndRef = React.useRef(null); - - const currentSession = sessions.find((s) => s.id === currentSessionId); - const sessionMessages = currentSessionId ? messages.get(currentSessionId) || [] : []; - const isStreaming = streamingSessionId === currentSessionId; - - React.useEffect(() => { - messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); - }, [sessionMessages.length]); - - const handleSend = async () => { - if (!input.trim() || isSending) return; - const text = input.trim(); - setInput(''); - await sendMessage(text); - }; - - const handleKeyDown = (e: React.KeyboardEvent) => { - if (e.key === 'Enter' && !e.shiftKey) { - e.preventDefault(); - handleSend(); - } - }; - - return ( -
-
- -

{currentSession?.title || 'New Chat'}

-
- -
- {sessionMessages.length === 0 ? ( -
- Start a conversation -
- ) : ( -
- {sessionMessages.map((msg, idx) => ( - - ))} - {isStreaming && ( -
-
- -
-
- )} -
-
- )} -
- -
-
-