apiVersion: capsule.dev/v0.1 kind: Capsule name: lkmeet-video-conference-core version: 0.1.0 type: subsystem purpose: summary: 'Encapsulates the core client-side logic and UI components for a LiveKit video conference. This includes handling room connection, E2EE setup, and rendering the main conference view, providing a robust foundation for any LiveKit video application. ' owns: - LiveKit room connection and management - E2EE setup and integration - Main video conference UI rendering does_not_own: - Pre-join UI - Landing page or room selection logic interfaces: provides: - kind: library name: VideoConferenceClientImpl description: React component for connecting to a LiveKit room with custom parameters. - kind: library name: PageClientImpl description: React component for connecting to a LiveKit room with pre-join and dynamic parameters. requires: - kind: http_api name: /api/connection-details from_capsule: lkmeet-livekit-auth-api description: Required by PageClientImpl to fetch connection details. dependencies: capsules: - name: lkmeet-livekit-client-utils version: '>=0.1.0' - name: lkmeet-livekit-ui-components version: '>=0.1.0' agent: summary_for_ai: 'This capsule contains the core client-side video conference logic. Focus on robust LiveKit room connection, E2EE integration, and handling user choices. Ensure seamless integration with `livekit-client` and `@livekit/components-react`. Error handling for connection and media device access is crucial. ' verification: invariants: - Room connection must be stable and handle disconnections gracefully. - E2EE setup must correctly initialize the worker and key provider. - Video and audio tracks must be enabled based on user choices. - Error messages must be user-friendly and actionable. x-reuse: notes: 'The `CONN_DETAILS_ENDPOINT` is hardcoded to `/api/connection-details`. This will need to be updated if the API route changes in a different project. The `alert` messages for `DeviceUnsupportedError` and other errors are hardcoded and might need to be customized or replaced with a more generic notification system. The default `videoCodec` ''vp9'' is hardcoded in `PageClientImpl.tsx`. ' x-reconstruct: install: install.json