Agent (AcpPanel): - Follow state: an isAtBottom ref + state. A scroll listener on the ScrollArea viewport keeps them in sync. The auto-scroll effect only fires scrollIntoView when the ref is true, so the user can scroll up to read history without the panel snapping back to the bottom. - Jump-to-latest button: when !isAtBottom, an absolute-positioned '↓ Jump to latest' pill appears at the bottom of the ScrollArea; clicking it scrolls back to the bottom and re-enables follow. - Bottom padding: messages container is now 'p-3 pb-6' and the trailing sentinel is 'h-8 shrink-0', so the last bubble has breathing room above the composer and isn't visually clipped. Terminal (TerminalPanel): - xterm container is now 'px-2 pt-2 pb-8' so the bottom row of the terminal isn't covered by the hint/status bar above the composer (or, in the standalone TerminalPanel, by the tab bar). Both panels: extra bottom padding so the last line of content is never hidden by an adjacent control.
codespace-web
Frontend IDE shell for the codespace Go backend.
Scope
This package is the codespace web IDE. It connects to the Go backend:
the file explorer and editor call the file APIs, the toolbar drives the
process start/stop/restart endpoints, and the terminal streams the
running OpenCode process over the WebSocket endpoint
/api/workspaces/:id/process/ws.
Commands
| Command | Purpose |
|---|---|
pnpm install |
Install dependencies |
pnpm dev |
Start the Vite dev server (proxies /api and /healthz to http://localhost:8080) |
pnpm lint |
Run ESLint |
pnpm build |
Type-check and build for production |
Stack
- Vite + React 19 + TypeScript
- Tailwind CSS v4
- react-router v7
- Zustand for local UI state
- TanStack Query for API state
@monaco-editor/reacteditor wrapper@xterm/xterm+@xterm/addon-fitterminal wrapperreact-resizable-panelsfor layout splitslucide-reactfor icons
Non-goals
- Authentication
- i18n
- Tests (no test framework until business logic is added)