CLAUDE.md@src/Content/Presentation/Presentation.WebUI · git:20260814.b2784f5 · 2026-08-14 · sha256 c23b8979ec1f9101

CLAUDE.md@src/Content/Presentation/Presentation.WebUI git:20260814.b2784f5A

Immutable. This exact content never changes and is served at /api/v1/blob/c23b8979ec1f9101.

# Presentation.WebUI

End-user chat/agent UI. React SPA, separate stack from the rest of the .NET solution — treat as its own project, not a Presentation-layer C# concern.

## Stack
- React 19, TypeScript, Vite 8, Tailwind 4
- TanStack Query (server state), Zustand (client state), React Router 8, React Hook Form + Zod
- Radix UI / Base UI + shadcn components
- MSAL (`@azure/msal-browser`/`msal-react`) for auth, `@microsoft/signalr` for realtime, `@ag-ui/client` for agent-run streaming
- `react-markdown` + `rehype-highlight`/`rehype-sanitize`/`remark-gfm` for rendering agent output
- Vitest + Testing Library (unit), Playwright (e2e)

## Commands (run from this directory)
- `npm run dev` — dev server
- `npm run dev:all` — dev server + `Presentation.AgentHub` API concurrently
- `npm run build` — `tsc -b && vite build`
- `npm run typecheck` — `tsc -b` only
- `npm run lint` — eslint
- `npm test` / `npm run test:watch` / `npm run test:coverage` — Vitest
- `npm run test:e2e` — Playwright

## Layout
- `src/features/` — feature folders: `agents/`, `chat/` (+ `widgets/`), `commands/`, `config/`, `conversations/`, `mcp/`
- `src/components/` — `ui/` (shadcn-generated primitives), `layout/`, `theme/`
- `src/views/`, `src/stores/`, `src/hooks/`, `src/lib/`, `src/types/`
- Tests are co-located in `__tests__/` subfolders next to the code they cover (`features/chat/__tests__/`, `hooks/__tests__/`, `lib/__tests__/`, etc.), plus a shared `src/test/` for setup/helpers

## Notes
- Backing API is `Presentation.AgentHub` — `npm run dev:all` runs both together.
- `dist/`, `coverage/`, `test-results/`, `node_modules/` are build/test output — never hand-edit, never treat as source when exploring.