'use client'; import { useState } from 'react'; import { useWebRTCVoice } from './hooks/use-webrtc-voice'; import { useAudioLevel } from './hooks/use-audio-level'; import { useAudioDevices } from './hooks/use-audio-devices'; import { useEventLog } from './hooks/use-event-log'; import VolumeBar from './components/volume-bar'; import MuteButton from './components/mute-button'; import DeviceSelector from './components/device-selector'; import AgentStatus from './components/agent-status'; import ActivityLogPanel from './components/activity-log-panel'; export default function VoiceClient() { const [isMuted, setIsMuted] = useState(false); // Initialize event logging const { logs, agentStatus, addLog, clearLogs } = useEventLog(); const { isConnected, isConnecting, error, stream, connect, disconnect } = useWebRTCVoice({ onEvent: addLog }); const { devices, selectedDeviceId, setSelectedDeviceId, error: devicesError, } = useAudioDevices(); const volume = useAudioLevel(stream); function handleConnect() { connect(selectedDeviceId); } function handleMuteToggle() { if (!stream) return; const newMutedState = !isMuted; stream.getAudioTracks().forEach(track => { track.enabled = !newMutedState; }); setIsMuted(newMutedState); } return (
⚠️ {devicesError}
{devicesError.includes('HTTPS') && (For mobile access, use HTTPS or a tunneling service like ngrok or Cloudflare Tunnel.
)}Connected - Speak to interact with AI
)} {/* Activity Log Panel */}