# QA: Headless Chat (Complete) — Google ADK ## Prerequisites - Demo is deployed and accessible at `/demos/headless-complete` on the dashboard host - Agent backend is healthy (`/api/health`); `GOOGLE_API_KEY` is set on Railway; the ADK backend mounts the shared `_simple_chat` LlmAgent (Gemini 3.1 Flash-Lite) at `/headless_complete` — the demo relies on aimock fixtures to supply tool calls (`get_weather`, `get_stock_price`, `get_revenue_chart`) since the ADK simple agent has no real backend tools - The demo wires `agent="headless-complete"` at `/api/copilotkit-mcp-apps` (shared with the mcp-apps cell) so the Excalidraw MCP server at `MCP_SERVER_URL || https://mcp.excalidraw.com` is available - Note: the demo defines headless-specific `data-testid`s in `chat/message-list.tsx`, `chat/composer.tsx`, `tools/weather-card.tsx`, `tools/stock-card.tsx`, `tools/highlight-note.tsx`, and `tools/chart-card.tsx`. Other checks rely on verbatim text, role selectors, and Tailwind utility classes ## Test Steps ### 1. Basic Functionality - [ ] Navigate to `/demos/headless-complete`; verify the page renders within 3s with a centered card (max-width 3xl, full-height) on a `bg-gray-50` background - [ ] Verify the custom header renders with `

` text "Headless Chat (Complete)" and subtext "Built from scratch on useAgent — no CopilotChat." - [ ] Verify the scrollable messages container (`[data-testid="headless-complete-messages"]`) is present and shows the empty-state hint "Try weather, a stock, a highlighted note, or an Excalidraw sketch." - [ ] Verify the custom composer renders at the bottom: a `