@poolzin/poolbot-office 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Dt28lMGE.js","sources":["../../src/components/console/dashboard/DashboardPage.tsx","../../src/components/console/agents/AgentsPage.tsx","../../src/components/console/channels/ChannelsPage.tsx","../../src/components/console/skills/SkillsPage.tsx","../../src/components/console/cron/CronPage.tsx","../../src/components/console/settings/SettingsPage.tsx","../../src/components/office-2d/furniture/Desk.tsx","../../src/components/office-2d/furniture/Chair.tsx","../../src/components/office-2d/furniture/Plant.tsx","../../src/components/office-2d/CollaborationLines.tsx","../../src/components/office-2d/OfficeLayout2D.tsx","../../src/components/office-3d/AgentCharacter.tsx","../../src/components/office-3d/SkillHologram.tsx","../../src/components/office-3d/SpawnPortal.tsx","../../src/components/office-3d/Environment3D.tsx","../../src/components/office-3d/OfficeLayout3D.tsx","../../src/components/chat/ChatDockBar.tsx","../../src/components/chat/MessageBubble.tsx","../../src/components/chat/StreamingIndicator.tsx","../../src/components/chat/AgentSelector.tsx","../../src/components/chat/ChatDialog.tsx","../../src/App.tsx","../../src/main.tsx"],"sourcesContent":["/**\n * Dashboard Page Component\n * \n * Main dashboard with overview stats, alerts, and quick navigation\n */\n\nimport React from 'react';\n\nexport interface DashboardStats {\n totalAgents: number;\n activeAgents: number;\n totalChannels: number;\n connectedChannels: number;\n totalSkills: number;\n enabledSkills: number;\n totalCronJobs: number;\n activeCronJobs: number;\n messagesToday: number;\n tokensToday: number;\n uptime: number;\n errorCount: number;\n}\n\nexport interface DashboardAlert {\n id: string;\n type: 'info' | 'warning' | 'error' | 'success';\n title: string;\n message: string;\n timestamp: number;\n actionable?: boolean;\n onAction?: () => void;\n}\n\nexport interface DashboardPageProps {\n stats: DashboardStats;\n alerts: DashboardAlert[];\n onDismissAlert: (alertId: string) => void;\n onNavigate: (page: string) => void;\n}\n\nexport const DashboardPage: React.FC<DashboardPageProps> = ({\n stats,\n alerts,\n onDismissAlert,\n onNavigate,\n}) => {\n const StatCard: React.FC<{\n title: string;\n value: number | string;\n subtitle?: string;\n icon: string;\n color: string;\n onClick?: () => void;\n }> = ({ title, value, subtitle, icon, color, onClick }) => (\n <div\n onClick={onClick}\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '20px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n cursor: onClick ? 'pointer' : 'default',\n transition: 'transform 0.2s, box-shadow 0.2s',\n }}\n onMouseEnter={(e) => {\n if (onClick) {\n e.currentTarget.style.transform = 'translateY(-4px)';\n e.currentTarget.style.boxShadow = '0 4px 16px rgba(0, 0, 0, 0.15)';\n }\n }}\n onMouseLeave={(e) => {\n if (onClick) {\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.1)';\n }\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', marginBottom: '12px' }}>\n <span style={{ fontSize: '24px', marginRight: '12px' }}>{icon}</span>\n <span style={{ fontWeight: 'bold', color: '#2C3E50', fontSize: '14px' }}>{title}</span>\n </div>\n <div style={{ fontSize: '32px', fontWeight: 'bold', color, marginBottom: '4px' }}>\n {value}\n </div>\n {subtitle && (\n <div style={{ fontSize: '12px', color: '#7F8C8D' }}>{subtitle}</div>\n )}\n </div>\n );\n\n const AlertBanner: React.FC<{ alert: DashboardAlert }> = ({ alert }) => {\n const colors = {\n info: { bg: '#D6EAF8', border: '#3498DB', text: '#2874A6' },\n warning: { bg: '#FDEBD0', border: '#F39C12', text: '#B9770E' },\n error: { bg: '#FADBD8', border: '#E74C3C', text: '#C0392B' },\n success: { bg: '#D5F5E3', border: '#27AE60', text: '#1E8449' },\n };\n\n const color = colors[alert.type];\n\n return (\n <div\n style={{\n backgroundColor: color.bg,\n borderLeft: `4px solid ${color.border}`,\n padding: '12px 16px',\n borderRadius: '8px',\n marginBottom: '12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <div>\n <div style={{ fontWeight: 'bold', color: color.text, marginBottom: '4px' }}>\n {alert.title}\n </div>\n <div style={{ fontSize: '14px', color: color.text }}>{alert.message}</div>\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n {alert.actionable && alert.onAction && (\n <button\n onClick={alert.onAction}\n style={{\n backgroundColor: color.border,\n color: 'white',\n border: 'none',\n padding: '6px 12px',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '12px',\n }}\n >\n Action\n </button>\n )}\n <button\n onClick={() => onDismissAlert(alert.id)}\n style={{\n background: 'none',\n border: 'none',\n fontSize: '18px',\n cursor: 'pointer',\n color: color.text,\n padding: '0 4px',\n }}\n >\n ✕\n </button>\n </div>\n </div>\n );\n };\n\n return (\n <div style={{ padding: '24px', maxWidth: '1400px', margin: '0 auto' }}>\n {/* Header */}\n <div style={{ marginBottom: '24px' }}>\n <h1 style={{ fontSize: '28px', fontWeight: 'bold', color: '#2C3E50', margin: 0 }}>\n Dashboard\n </h1>\n <p style={{ color: '#7F8C8D', margin: '8px 0 0 0' }}>\n Overview of your PoolBot system\n </p>\n </div>\n\n {/* Alerts */}\n {alerts.length > 0 && (\n <div style={{ marginBottom: '24px' }}>\n {alerts.map((alert) => (\n <AlertBanner key={alert.id} alert={alert} />\n ))}\n </div>\n )}\n\n {/* Stats Grid */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))',\n gap: '20px',\n marginBottom: '24px',\n }}\n >\n <StatCard\n title=\"Total Agents\"\n value={stats.totalAgents}\n subtitle={`${stats.activeAgents} active`}\n icon=\"🤖\"\n color=\"#3498DB\"\n onClick={() => onNavigate('agents')}\n />\n <StatCard\n title=\"Channels\"\n value={stats.totalChannels}\n subtitle={`${stats.connectedChannels} connected`}\n icon=\"💬\"\n color=\"#2ECC71\"\n onClick={() => onNavigate('channels')}\n />\n <StatCard\n title=\"Skills\"\n value={stats.enabledSkills}\n subtitle={`${stats.totalSkills} available`}\n icon=\"⚡\"\n color=\"#F39C12\"\n onClick={() => onNavigate('skills')}\n />\n <StatCard\n title=\"Cron Jobs\"\n value={stats.activeCronJobs}\n subtitle={`${stats.totalCronJobs} total`}\n icon=\"⏰\"\n color=\"#9B59B6\"\n onClick={() => onNavigate('cron')}\n />\n <StatCard\n title=\"Messages Today\"\n value={stats.messagesToday.toLocaleString()}\n icon=\"💭\"\n color=\"#1ABC9C\"\n onClick={() => onNavigate('chat')}\n />\n <StatCard\n title=\"Tokens Today\"\n value={stats.tokensToday.toLocaleString()}\n icon=\"🎫\"\n color=\"#E74C3C\"\n onClick={() => onNavigate('settings')}\n />\n </div>\n\n {/* Quick Actions */}\n <div style={{ marginTop: '24px' }}>\n <h2 style={{ fontSize: '20px', fontWeight: 'bold', color: '#2C3E50', marginBottom: '16px' }}>\n Quick Actions\n </h2>\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))',\n gap: '12px',\n }}\n >\n {[\n { icon: '➕', label: 'Add Agent', page: 'agents' },\n { icon: '🔌', label: 'Connect Channel', page: 'channels' },\n { icon: '📦', label: 'Install Skill', page: 'skills' },\n { icon: '⏱️', label: 'Create Cron Job', page: 'cron' },\n { icon: '💾', label: 'Backup Config', page: 'settings' },\n { icon: '📊', label: 'View Logs', page: 'logs' },\n ].map((action) => (\n <button\n key={action.label}\n onClick={() => onNavigate(action.page)}\n style={{\n backgroundColor: 'white',\n border: '1px solid #E0E0E0',\n borderRadius: '8px',\n padding: '12px 16px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n cursor: 'pointer',\n transition: 'all 0.2s',\n textAlign: 'left',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#F5F5F5';\n e.currentTarget.style.borderColor = '#3498DB';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'white';\n e.currentTarget.style.borderColor = '#E0E0E0';\n }}\n >\n <span style={{ fontSize: '20px' }}>{action.icon}</span>\n <span style={{ fontWeight: '500', color: '#2C3E50' }}>{action.label}</span>\n </button>\n ))}\n </div>\n </div>\n\n {/* System Info */}\n <div\n style={{\n marginTop: '24px',\n padding: '16px',\n backgroundColor: '#F8F9FA',\n borderRadius: '8px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <div style={{ fontSize: '14px', color: '#7F8C8D' }}>\n <span style={{ marginRight: '16px' }}>\n ⏱️ Uptime: {Math.floor(stats.uptime / 3600)}h {Math.floor((stats.uptime % 3600) / 60)}m\n </span>\n <span>\n ⚠️ Errors: {stats.errorCount}\n </span>\n </div>\n <button\n onClick={() => window.location.reload()}\n style={{\n backgroundColor: '#3498DB',\n color: 'white',\n border: 'none',\n padding: '8px 16px',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n 🔄 Refresh\n </button>\n </div>\n </div>\n );\n};\n\nexport default DashboardPage;\n","/**\n * Agents Management Page\n * \n * List, create, edit, and delete agents\n */\n\nimport React, { useState } from 'react';\n\nexport interface Agent {\n id: string;\n name: string;\n status: 'idle' | 'working' | 'speaking' | 'error' | 'offline';\n model: string;\n createdAt: number;\n lastActiveAt?: number;\n sessionCount: number;\n messageCount: number;\n}\n\nexport interface AgentsPageProps {\n agents: Agent[];\n onCreateAgent: (name: string, model: string) => void;\n onDeleteAgent: (agentId: string) => void;\n onSelectAgent: (agentId: string) => void;\n}\n\nexport const AgentsPage: React.FC<AgentsPageProps> = ({\n agents,\n onCreateAgent,\n onDeleteAgent,\n onSelectAgent,\n}) => {\n const [showCreateModal, setShowCreateModal] = useState(false);\n const [newAgentName, setNewAgentName] = useState('');\n const [selectedModel, setSelectedModel] = useState('gpt-4o');\n\n const getStatusColor = (status: Agent['status']) => {\n const colors = {\n idle: '#95A5A6',\n working: '#3498DB',\n speaking: '#2ECC71',\n error: '#E74C3C',\n offline: '#BDC3C7',\n };\n return colors[status];\n };\n\n const getStatusEmoji = (status: Agent['status']) => {\n const emojis = {\n idle: '😴',\n working: '💻',\n speaking: '💬',\n error: '❌',\n offline: '⚫',\n };\n return emojis[status];\n };\n\n const handleCreate = () => {\n if (newAgentName.trim()) {\n onCreateAgent(newAgentName.trim(), selectedModel);\n setNewAgentName('');\n setShowCreateModal(false);\n }\n };\n\n return (\n <div style={{ padding: '24px', maxWidth: '1400px', margin: '0 auto' }}>\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '24px',\n }}\n >\n <div>\n <h1 style={{ fontSize: '28px', fontWeight: 'bold', color: '#2C3E50', margin: 0 }}>\n Agents\n </h1>\n <p style={{ color: '#7F8C8D', margin: '8px 0 0 0' }}>\n {agents.length} agents • {agents.filter((a) => a.status === 'working').length} active\n </p>\n </div>\n <button\n onClick={() => setShowCreateModal(true)}\n style={{\n backgroundColor: '#3498DB',\n color: 'white',\n border: 'none',\n padding: '12px 24px',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n }}\n >\n ➕ Add Agent\n </button>\n </div>\n\n {/* Agents Grid */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: '16px',\n }}\n >\n {agents.map((agent) => (\n <div\n key={agent.id}\n onClick={() => onSelectAgent(agent.id)}\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '20px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n cursor: 'pointer',\n transition: 'all 0.2s',\n border: '2px solid transparent',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = 'translateY(-4px)';\n e.currentTarget.style.boxShadow = '0 4px 16px rgba(0, 0, 0, 0.15)';\n e.currentTarget.style.borderColor = '#3498DB';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = '0 2px 8px rgba(0, 0, 0, 0.1)';\n e.currentTarget.style.borderColor = 'transparent';\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '16px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <span style={{ fontSize: '32px' }}>🤖</span>\n <div>\n <div style={{ fontWeight: 'bold', color: '#2C3E50', fontSize: '16px' }}>\n {agent.name}\n </div>\n <div\n style={{\n fontSize: '12px',\n color: getStatusColor(agent.status),\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <span>{getStatusEmoji(agent.status)}</span>\n <span>{agent.status}</span>\n </div>\n </div>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n onDeleteAgent(agent.id);\n }}\n style={{\n background: 'none',\n border: 'none',\n fontSize: '18px',\n cursor: 'pointer',\n color: '#E74C3C',\n padding: '4px',\n }}\n >\n 🗑️\n </button>\n </div>\n\n {/* Stats */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '12px',\n paddingTop: '16px',\n borderTop: '1px solid #F0F0F0',\n }}\n >\n <div>\n <div style={{ fontSize: '12px', color: '#7F8C8D', marginBottom: '4px' }}>\n Model\n </div>\n <div style={{ fontWeight: '500', color: '#2C3E50', fontSize: '14px' }}>\n {agent.model}\n </div>\n </div>\n <div>\n <div style={{ fontSize: '12px', color: '#7F8C8D', marginBottom: '4px' }}>\n Sessions\n </div>\n <div style={{ fontWeight: '500', color: '#2C3E50', fontSize: '14px' }}>\n {agent.sessionCount}\n </div>\n </div>\n <div>\n <div style={{ fontSize: '12px', color: '#7F8C8D', marginBottom: '4px' }}>\n Messages\n </div>\n <div style={{ fontWeight: '500', color: '#2C3E50', fontSize: '14px' }}>\n {agent.messageCount.toLocaleString()}\n </div>\n </div>\n <div>\n <div style={{ fontSize: '12px', color: '#7F8C8D', marginBottom: '4px' }}>\n Last Active\n </div>\n <div style={{ fontWeight: '500', color: '#2C3E50', fontSize: '14px' }}>\n {agent.lastActiveAt\n ? new Date(agent.lastActiveAt).toLocaleTimeString('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n })\n : 'Never'}\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {agents.length === 0 && (\n <div\n style={{\n textAlign: 'center',\n padding: '60px 20px',\n color: '#7F8C8D',\n }}\n >\n <div style={{ fontSize: '64px', marginBottom: '16px' }}>🤖</div>\n <div style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '8px' }}>\n No agents yet\n </div>\n <div style={{ marginBottom: '16px' }}>Create your first agent to get started</div>\n <button\n onClick={() => setShowCreateModal(true)}\n style={{\n backgroundColor: '#3498DB',\n color: 'white',\n border: 'none',\n padding: '12px 24px',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n ➕ Create Agent\n </button>\n </div>\n )}\n\n {/* Create Modal */}\n {showCreateModal && (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1000,\n }}\n onClick={() => setShowCreateModal(false)}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n width: '400px',\n maxWidth: '90vw',\n }}\n >\n <h2 style={{ fontSize: '20px', fontWeight: 'bold', marginBottom: '16px' }}>\n Create New Agent\n </h2>\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n fontWeight: '500',\n marginBottom: '8px',\n color: '#2C3E50',\n }}\n >\n Agent Name\n </label>\n <input\n type=\"text\"\n value={newAgentName}\n onChange={(e) => setNewAgentName(e.target.value)}\n placeholder=\"My Assistant\"\n style={{\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #E0E0E0',\n borderRadius: '6px',\n fontSize: '14px',\n outline: 'none',\n }}\n />\n </div>\n <div style={{ marginBottom: '24px' }}>\n <label\n style={{\n display: 'block',\n fontWeight: '500',\n marginBottom: '8px',\n color: '#2C3E50',\n }}\n >\n Model\n </label>\n <select\n value={selectedModel}\n onChange={(e) => setSelectedModel(e.target.value)}\n style={{\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #E0E0E0',\n borderRadius: '6px',\n fontSize: '14px',\n outline: 'none',\n backgroundColor: 'white',\n }}\n >\n <option value=\"gpt-4o\">GPT-4o</option>\n <option value=\"gpt-4o-mini\">GPT-4o Mini</option>\n <option value=\"claude-3-5-sonnet\">Claude 3.5 Sonnet</option>\n <option value=\"claude-3-opus\">Claude 3 Opus</option>\n </select>\n </div>\n <div style={{ display: 'flex', gap: '12px', justifyContent: 'flex-end' }}>\n <button\n onClick={() => setShowCreateModal(false)}\n style={{\n backgroundColor: '#E0E0E0',\n color: '#2C3E50',\n border: 'none',\n padding: '10px 20px',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!newAgentName.trim()}\n style={{\n backgroundColor: newAgentName.trim() ? '#3498DB' : '#BDC3C7',\n color: 'white',\n border: 'none',\n padding: '10px 20px',\n borderRadius: '6px',\n cursor: newAgentName.trim() ? 'pointer' : 'not-allowed',\n fontSize: '14px',\n }}\n >\n Create Agent\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default AgentsPage;\n","/**\n * Channels Management Page\n * \n * Configure and manage communication channels\n */\n\nimport React from 'react';\n\nexport interface Channel {\n id: string;\n type: 'telegram' | 'discord' | 'slack' | 'whatsapp' | 'signal';\n name: string;\n status: 'connected' | 'disconnected' | 'connecting' | 'error';\n lastSeen?: number;\n messageCount: number;\n config?: Record<string, unknown>;\n}\n\nexport interface ChannelsPageProps {\n channels: Channel[];\n onConnect: (channelId: string) => void;\n onDisconnect: (channelId: string) => void;\n onConfigure: (channelId: string) => void;\n}\n\nexport const ChannelsPage: React.FC<ChannelsPageProps> = ({\n channels,\n onConnect,\n onDisconnect,\n onConfigure,\n}) => {\n const getTypeEmoji = (type: Channel['type']) => {\n const emojis = {\n telegram: '✈️',\n discord: '🎮',\n slack: '💼',\n whatsapp: '📱',\n signal: '🔒',\n };\n return emojis[type];\n };\n\n const getStatusColor = (status: Channel['status']) => {\n const colors = {\n connected: '#2ECC71',\n disconnected: '#95A5A6',\n connecting: '#F39C12',\n error: '#E74C3C',\n };\n return colors[status];\n };\n\n return (\n <div style={{ padding: '24px', maxWidth: '1400px', margin: '0 auto' }}>\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '24px',\n }}\n >\n <div>\n <h1 style={{ fontSize: '28px', fontWeight: 'bold', color: '#2C3E50', margin: 0 }}>\n Channels\n </h1>\n <p style={{ color: '#7F8C8D', margin: '8px 0 0 0' }}>\n {channels.length} channels •{' '}\n {channels.filter((c) => c.status === 'connected').length} connected\n </p>\n </div>\n <button\n style={{\n backgroundColor: '#3498DB',\n color: 'white',\n border: 'none',\n padding: '12px 24px',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n }}\n >\n ➕ Add Channel\n </button>\n </div>\n\n {/* Channels Grid */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(350px, 1fr))',\n gap: '16px',\n }}\n >\n {channels.map((channel) => (\n <div\n key={channel.id}\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '20px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n border: `2px solid ${\n channel.status === 'connected' ? '#2ECC71' : 'transparent'\n }`,\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '16px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <span style={{ fontSize: '32px' }}>{getTypeEmoji(channel.type)}</span>\n <div>\n <div style={{ fontWeight: 'bold', color: '#2C3E50', fontSize: '16px' }}>\n {channel.name}\n </div>\n <div\n style={{\n fontSize: '12px',\n color: getStatusColor(channel.status),\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <div\n style={{\n width: '8px',\n height: '8px',\n backgroundColor: getStatusColor(channel.status),\n borderRadius: '50%',\n }}\n />\n <span>{channel.status}</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Stats */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n paddingTop: '16px',\n borderTop: '1px solid #F0F0F0',\n marginBottom: '16px',\n }}\n >\n <div>\n <div style={{ fontSize: '12px', color: '#7F8C8D', marginBottom: '4px' }}>\n Messages\n </div>\n <div style={{ fontWeight: '500', color: '#2C3E50' }}>\n {channel.messageCount.toLocaleString()}\n </div>\n </div>\n <div>\n <div style={{ fontSize: '12px', color: '#7F8C8D', marginBottom: '4px' }}>\n Last Seen\n </div>\n <div style={{ fontWeight: '500', color: '#2C3E50' }}>\n {channel.lastSeen\n ? new Date(channel.lastSeen).toLocaleTimeString('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n })\n : 'Never'}\n </div>\n </div>\n </div>\n\n {/* Actions */}\n <div style={{ display: 'flex', gap: '8px' }}>\n {channel.status === 'connected' ? (\n <button\n onClick={() => onDisconnect(channel.id)}\n style={{\n flex: 1,\n backgroundColor: '#E74C3C',\n color: 'white',\n border: 'none',\n padding: '10px',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Disconnect\n </button>\n ) : (\n <button\n onClick={() => onConnect(channel.id)}\n style={{\n flex: 1,\n backgroundColor: '#2ECC71',\n color: 'white',\n border: 'none',\n padding: '10px',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Connect\n </button>\n )}\n <button\n onClick={() => onConfigure(channel.id)}\n style={{\n flex: 1,\n backgroundColor: '#3498DB',\n color: 'white',\n border: 'none',\n padding: '10px',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Configure\n </button>\n </div>\n </div>\n ))}\n </div>\n\n {channels.length === 0 && (\n <div\n style={{\n textAlign: 'center',\n padding: '60px 20px',\n color: '#7F8C8D',\n }}\n >\n <div style={{ fontSize: '64px', marginBottom: '16px' }}>💬</div>\n <div style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '8px' }}>\n No channels configured\n </div>\n <div>Add a channel to start communicating with your agents</div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ChannelsPage;\n","/**\n * Skills Marketplace Page\n * \n * Browse, install, and manage skills\n */\n\nimport React, { useState } from 'react';\n\nexport interface Skill {\n id: string;\n name: string;\n description: string;\n category: string;\n installed: boolean;\n version: string;\n author: string;\n downloads: number;\n rating: number;\n}\n\nexport interface SkillsPageProps {\n skills: Skill[];\n onInstall: (skillId: string) => void;\n onUninstall: (skillId: string) => void;\n}\n\nexport const SkillsPage: React.FC<SkillsPageProps> = ({\n skills,\n onInstall,\n onUninstall,\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState('all');\n\n const categories = ['all', ...Array.from(new Set(skills.map((s) => s.category)))];\n\n const filteredSkills = skills.filter((skill) => {\n const matchesSearch =\n skill.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n skill.description.toLowerCase().includes(searchQuery.toLowerCase());\n const matchesCategory = selectedCategory === 'all' || skill.category === selectedCategory;\n return matchesSearch && matchesCategory;\n });\n\n return (\n <div style={{ padding: '24px', maxWidth: '1400px', margin: '0 auto' }}>\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '24px',\n }}\n >\n <div>\n <h1 style={{ fontSize: '28px', fontWeight: 'bold', color: '#2C3E50', margin: 0 }}>\n Skills Marketplace\n </h1>\n <p style={{ color: '#7F8C8D', margin: '8px 0 0 0' }}>\n {skills.filter((s) => s.installed).length} installed • {skills.length} available\n </p>\n </div>\n </div>\n\n {/* Filters */}\n <div\n style={{\n display: 'flex',\n gap: '12px',\n marginBottom: '24px',\n flexWrap: 'wrap',\n }}\n >\n <input\n type=\"text\"\n placeholder=\"Search skills...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={{\n flex: '1',\n minWidth: '200px',\n padding: '10px 14px',\n border: '1px solid #E0E0E0',\n borderRadius: '8px',\n fontSize: '14px',\n outline: 'none',\n }}\n />\n <select\n value={selectedCategory}\n onChange={(e) => setSelectedCategory(e.target.value)}\n style={{\n padding: '10px 14px',\n border: '1px solid #E0E0E0',\n borderRadius: '8px',\n fontSize: '14px',\n outline: 'none',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n {categories.map((cat) => (\n <option key={cat} value={cat}>\n {cat === 'all' ? 'All Categories' : cat}\n </option>\n ))}\n </select>\n </div>\n\n {/* Skills Grid */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))',\n gap: '16px',\n }}\n >\n {filteredSkills.map((skill) => (\n <div\n key={skill.id}\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '20px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: '12px',\n }}\n >\n <div style={{ flex: 1 }}>\n <div\n style={{\n fontWeight: 'bold',\n color: '#2C3E50',\n fontSize: '16px',\n marginBottom: '4px',\n }}\n >\n {skill.name}\n </div>\n <div style={{ fontSize: '12px', color: '#7F8C8D', marginBottom: '8px' }}>\n v{skill.version} • by {skill.author}\n </div>\n </div>\n <span\n style={{\n backgroundColor: skill.installed ? '#D5F5E3' : '#F0F0F0',\n color: skill.installed ? '#27AE60' : '#7F8C8D',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n fontWeight: '500',\n }}\n >\n {skill.installed ? '✓ Installed' : 'Available'}\n </span>\n </div>\n\n {/* Description */}\n <p style={{ fontSize: '14px', color: '#7F8C8D', marginBottom: '16px', flex: 1 }}>\n {skill.description}\n </p>\n\n {/* Stats */}\n <div\n style={{\n display: 'flex',\n gap: '16px',\n fontSize: '12px',\n color: '#7F8C8D',\n marginBottom: '16px',\n }}\n >\n <span>⬇️ {skill.downloads.toLocaleString()}</span>\n <span>⭐ {skill.rating.toFixed(1)}</span>\n <span>📦 {skill.category}</span>\n </div>\n\n {/* Action */}\n <button\n onClick={() => (skill.installed ? onUninstall(skill.id) : onInstall(skill.id))}\n style={{\n width: '100%',\n padding: '10px',\n backgroundColor: skill.installed ? '#E74C3C' : '#3498DB',\n color: 'white',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n }}\n >\n {skill.installed ? '🗑️ Uninstall' : '📦 Install'}\n </button>\n </div>\n ))}\n </div>\n\n {filteredSkills.length === 0 && (\n <div\n style={{\n textAlign: 'center',\n padding: '60px 20px',\n color: '#7F8C8D',\n }}\n >\n <div style={{ fontSize: '64px', marginBottom: '16px' }}>🔍</div>\n <div style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '8px' }}>\n No skills found\n </div>\n <div>Try adjusting your search or filters</div>\n </div>\n )}\n </div>\n );\n};\n\nexport default SkillsPage;\n","/**\n * Cron Jobs Management Page\n * \n * Schedule and manage automated tasks\n */\n\nimport React from 'react';\n\nexport interface CronJob {\n id: string;\n name: string;\n schedule: string;\n agent: string;\n command: string;\n enabled: boolean;\n lastRun?: number;\n nextRun?: number;\n successCount: number;\n failureCount: number;\n}\n\nexport interface CronPageProps {\n jobs: CronJob[];\n onCreateJob: (job: Omit<CronJob, 'id' | 'successCount' | 'failureCount'>) => void;\n onDeleteJob: (jobId: string) => void;\n onToggleJob: (jobId: string, enabled: boolean) => void;\n onRunNow: (jobId: string) => void;\n}\n\nexport const CronPage: React.FC<CronPageProps> = ({\n jobs,\n onCreateJob,\n onDeleteJob,\n onToggleJob,\n onRunNow,\n}) => {\n return (\n <div style={{ padding: '24px', maxWidth: '1400px', margin: '0 auto' }}>\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '24px',\n }}\n >\n <div>\n <h1 style={{ fontSize: '28px', fontWeight: 'bold', color: '#2C3E50', margin: 0 }}>\n Scheduled Jobs\n </h1>\n <p style={{ color: '#7F8C8D', margin: '8px 0 0 0' }}>\n {jobs.length} jobs • {jobs.filter((j) => j.enabled).length} active\n </p>\n </div>\n <button\n onClick={() =>\n onCreateJob({\n name: 'New Job',\n schedule: '0 * * * *',\n agent: 'default',\n command: 'echo \"Hello\"',\n enabled: true,\n })\n }\n style={{\n backgroundColor: '#3498DB',\n color: 'white',\n border: 'none',\n padding: '12px 24px',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n }}\n >\n ➕ Create Job\n </button>\n </div>\n\n {/* Jobs Table */}\n <div\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n overflow: 'hidden',\n }}\n >\n {/* Table Header */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: '2fr 1.5fr 1.5fr 1fr 1fr 1fr',\n padding: '16px 20px',\n backgroundColor: '#F8F9FA',\n borderBottom: '1px solid #E0E0E0',\n fontWeight: 'bold',\n fontSize: '12px',\n color: '#7F8C8D',\n textTransform: 'uppercase',\n }}\n >\n <div>Name</div>\n <div>Schedule</div>\n <div>Agent</div>\n <div>Last Run</div>\n <div>Success/Fail</div>\n <div>Actions</div>\n </div>\n\n {/* Jobs */}\n {jobs.map((job) => (\n <div\n key={job.id}\n style={{\n display: 'grid',\n gridTemplateColumns: '2fr 1.5fr 1.5fr 1fr 1fr 1fr',\n padding: '16px 20px',\n borderBottom: '1px solid #F0F0F0',\n alignItems: 'center',\n opacity: job.enabled ? 1 : 0.6,\n }}\n >\n <div>\n <div style={{ fontWeight: '500', color: '#2C3E50', marginBottom: '4px' }}>\n {job.name}\n </div>\n <div style={{ fontSize: '12px', color: '#7F8C8D' }}>{job.command}</div>\n </div>\n <div style={{ fontFamily: 'monospace', fontSize: '13px', color: '#2C3E50' }}>\n {job.schedule}\n </div>\n <div style={{ color: '#2C3E50' }}>{job.agent}</div>\n <div style={{ fontSize: '13px', color: '#7F8C8D' }}>\n {job.lastRun\n ? new Date(job.lastRun).toLocaleString('pt-BR', {\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n })\n : 'Never'}\n </div>\n <div style={{ display: 'flex', gap: '8px', fontSize: '13px' }}>\n <span style={{ color: '#27AE60' }}>✓ {job.successCount}</span>\n <span style={{ color: '#E74C3C' }}>✗ {job.failureCount}</span>\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n onClick={() => onRunNow(job.id)}\n style={{\n backgroundColor: '#3498DB',\n color: 'white',\n border: 'none',\n padding: '6px 12px',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '12px',\n }}\n >\n ▶️ Run\n </button>\n <button\n onClick={() => onToggleJob(job.id, !job.enabled)}\n style={{\n backgroundColor: job.enabled ? '#F39C12' : '#27AE60',\n color: 'white',\n border: 'none',\n padding: '6px 12px',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '12px',\n }}\n >\n {job.enabled ? '⏸️ Pause' : '▶️ Resume'}\n </button>\n <button\n onClick={() => onDeleteJob(job.id)}\n style={{\n backgroundColor: '#E74C3C',\n color: 'white',\n border: 'none',\n padding: '6px 12px',\n borderRadius: '4px',\n cursor: 'pointer',\n fontSize: '12px',\n }}\n >\n 🗑️\n </button>\n </div>\n </div>\n ))}\n\n {jobs.length === 0 && (\n <div\n style={{\n padding: '60px 20px',\n textAlign: 'center',\n color: '#7F8C8D',\n }}\n >\n <div style={{ fontSize: '64px', marginBottom: '16px' }}>⏰</div>\n <div style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '8px' }}>\n No scheduled jobs\n </div>\n <div>Create your first scheduled job to automate tasks</div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default CronPage;\n","/**\n * Settings Page\n * \n * Configure PoolBot settings, providers, and preferences\n */\n\nimport React, { useState } from 'react';\n\nexport interface SettingsPageProps {\n gatewayUrl: string;\n language: string;\n theme: 'light' | 'dark';\n onGatewayChange: (url: string) => void;\n onLanguageChange: (lang: string) => void;\n onThemeChange: (theme: 'light' | 'dark') => void;\n onSave: () => void;\n}\n\nexport const SettingsPage: React.FC<SettingsPageProps> = ({\n gatewayUrl,\n language,\n theme,\n onGatewayChange,\n onLanguageChange,\n onThemeChange,\n onSave,\n}) => {\n const [localGateway, setLocalGateway] = useState(gatewayUrl);\n const [localLanguage, setLocalLanguage] = useState(language);\n const [localTheme, setLocalTheme] = useState<'light' | 'dark'>(theme);\n const [saved, setSaved] = useState(false);\n\n const handleSave = () => {\n onGatewayChange(localGateway);\n onLanguageChange(localLanguage);\n onThemeChange(localTheme);\n onSave();\n setSaved(true);\n setTimeout(() => setSaved(false), 2000);\n };\n\n return (\n <div style={{ padding: '24px', maxWidth: '800px', margin: '0 auto' }}>\n {/* Header */}\n <div style={{ marginBottom: '24px' }}>\n <h1 style={{ fontSize: '28px', fontWeight: 'bold', color: '#2C3E50', margin: 0 }}>\n Settings\n </h1>\n <p style={{ color: '#7F8C8D', margin: '8px 0 0 0' }}>\n Configure your PoolBot preferences\n </p>\n </div>\n\n {/* Settings Sections */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '24px' }}>\n {/* Gateway Settings */}\n <div\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n }}\n >\n <h2 style={{ fontSize: '18px', fontWeight: 'bold', color: '#2C3E50', marginBottom: '16px' }}>\n 🔌 Gateway Connection\n </h2>\n <div>\n <label\n style={{\n display: 'block',\n fontWeight: '500',\n marginBottom: '8px',\n color: '#2C3E50',\n }}\n >\n Gateway URL\n </label>\n <input\n type=\"text\"\n value={localGateway}\n onChange={(e) => setLocalGateway(e.target.value)}\n placeholder=\"ws://localhost:18789\"\n style={{\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #E0E0E0',\n borderRadius: '6px',\n fontSize: '14px',\n outline: 'none',\n }}\n />\n <p style={{ fontSize: '12px', color: '#7F8C8D', marginTop: '8px' }}>\n WebSocket URL for PoolBot Gateway connection\n </p>\n </div>\n </div>\n\n {/* Appearance */}\n <div\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n }}\n >\n <h2 style={{ fontSize: '18px', fontWeight: 'bold', color: '#2C3E50', marginBottom: '16px' }}>\n 🎨 Appearance\n </h2>\n\n {/* Theme */}\n <div style={{ marginBottom: '20px' }}>\n <label\n style={{\n display: 'block',\n fontWeight: '500',\n marginBottom: '8px',\n color: '#2C3E50',\n }}\n >\n Theme\n </label>\n <div style={{ display: 'flex', gap: '12px' }}>\n <button\n onClick={() => setLocalTheme('light')}\n style={{\n flex: 1,\n padding: '12px',\n backgroundColor: localTheme === 'light' ? '#3498DB' : '#F0F0F0',\n color: localTheme === 'light' ? 'white' : '#2C3E50',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n }}\n >\n ☀️ Light\n </button>\n <button\n onClick={() => setLocalTheme('dark')}\n style={{\n flex: 1,\n padding: '12px',\n backgroundColor: localTheme === 'dark' ? '#3498DB' : '#F0F0F0',\n color: localTheme === 'dark' ? 'white' : '#2C3E50',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n }}\n >\n 🌙 Dark\n </button>\n </div>\n </div>\n\n {/* Language */}\n <div>\n <label\n style={{\n display: 'block',\n fontWeight: '500',\n marginBottom: '8px',\n color: '#2C3E50',\n }}\n >\n Language\n </label>\n <select\n value={localLanguage}\n onChange={(e) => setLocalLanguage(e.target.value)}\n style={{\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #E0E0E0',\n borderRadius: '6px',\n fontSize: '14px',\n outline: 'none',\n backgroundColor: 'white',\n }}\n >\n <option value=\"pt-BR\">🇧🇷 Português (Brasil)</option>\n <option value=\"en\">🇺🇸 English</option>\n <option value=\"es\">🇪🇸 Español</option>\n </select>\n </div>\n </div>\n\n {/* About */}\n <div\n style={{\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n }}\n >\n <h2 style={{ fontSize: '18px', fontWeight: 'bold', color: '#2C3E50', marginBottom: '16px' }}>\n ℹ️ About\n </h2>\n <div style={{ fontSize: '14px', color: '#7F8C8D', lineHeight: '1.8' }}>\n <div><strong>PoolBot Office</strong></div>\n <div>Version: 0.1.0</div>\n <div>Build: 2026.3.22</div>\n <div style={{ marginTop: '12px' }}>\n Visual monitoring & management frontend for PoolBot Multi-Agent system\n </div>\n </div>\n </div>\n\n {/* Save Button */}\n <button\n onClick={handleSave}\n style={{\n backgroundColor: saved ? '#27AE60' : '#3498DB',\n color: 'white',\n border: 'none',\n padding: '14px 28px',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500',\n width: '100%',\n }}\n >\n {saved ? '✓ Saved!' : '💾 Save Settings'}\n </button>\n </div>\n </div>\n );\n};\n\nexport default SettingsPage;\n","/**\n * Desk Component\n * \n * Renders an isometric desk for agent workstations\n */\n\nimport React from 'react';\n\nexport interface DeskProps {\n x: number;\n y: number;\n width?: number;\n height?: number;\n occupied?: boolean;\n agentName?: string;\n onClick?: () => void;\n}\n\nexport const Desk: React.FC<DeskProps> = ({\n x,\n y,\n width = 120,\n height = 80,\n occupied = false,\n agentName,\n onClick,\n}) => {\n const deskColor = occupied ? '#4ECDC4' : '#95A5A6';\n const shadowColor = 'rgba(0, 0, 0, 0.2)';\n\n return (\n <g\n transform={`translate(${x}, ${y})`}\n onClick={onClick}\n style={{ cursor: onClick ? 'pointer' : 'default' }}\n >\n {/* Shadow */}\n <ellipse\n cx={width / 2}\n cy={height + 10}\n rx={width / 2}\n ry={height / 4}\n fill={shadowColor}\n />\n\n {/* Desk surface (isometric) */}\n <path\n d={`M 0,${height / 2} L ${width / 2},0 L ${width},${height / 2} L ${width / 2},${height} Z`}\n fill={deskColor}\n stroke=\"#2C3E50\"\n strokeWidth=\"2\"\n />\n\n {/* Desk legs */}\n <line\n x1={width * 0.25}\n y1={height / 2}\n x2={width * 0.25}\n y2={height + 5}\n stroke=\"#2C3E50\"\n strokeWidth=\"2\"\n />\n <line\n x1={width * 0.75}\n y1={height / 2}\n x2={width * 0.75}\n y2={height + 5}\n stroke=\"#2C3E50\"\n strokeWidth=\"2\"\n />\n\n {/* Computer monitor */}\n <rect\n x={width / 2 - 20}\n y={height / 4 - 15}\n width=\"40\"\n height=\"25\"\n fill=\"#34495E\"\n stroke=\"#2C3E50\"\n strokeWidth=\"1\"\n />\n <rect\n x={width / 2 - 18}\n y={height / 4 - 13}\n width=\"36\"\n height=\"21\"\n fill={occupied ? '#2ECC71' : '#7F8C8D'}\n />\n\n {/* Agent name label */}\n {agentName && (\n <text\n x={width / 2}\n y={-10}\n textAnchor=\"middle\"\n fontSize=\"12\"\n fill=\"#2C3E50\"\n fontWeight=\"bold\"\n >\n {agentName}\n </text>\n )}\n\n {/* Occupied indicator */}\n {occupied && (\n <circle\n cx={width - 10}\n cy={10}\n r=\"6\"\n fill=\"#2ECC71\"\n stroke=\"#27AE60\"\n strokeWidth=\"1\"\n />\n )}\n </g>\n );\n};\n\nexport default Desk;\n","/**\n * Chair Component\n * \n * Renders an isometric office chair\n */\n\nimport React from 'react';\n\nexport interface ChairProps {\n x: number;\n y: number;\n occupied?: boolean;\n color?: string;\n rotation?: number;\n onClick?: () => void;\n}\n\nexport const Chair: React.FC<ChairProps> = ({\n x,\n y,\n occupied = false,\n color = '#E74C3C',\n rotation = 0,\n onClick,\n}) => {\n const shadowColor = 'rgba(0, 0, 0, 0.2)';\n\n return (\n <g\n transform={`translate(${x}, ${y}) rotate(${rotation})`}\n onClick={onClick}\n style={{ cursor: onClick ? 'pointer' : 'default' }}\n >\n {/* Shadow */}\n <ellipse\n cx=\"0\"\n cy=\"25\"\n rx=\"20\"\n ry=\"8\"\n fill={shadowColor}\n />\n\n {/* Chair base */}\n <path\n d=\"M -15,15 L 0,5 L 15,15 L 0,25 Z\"\n fill=\"#34495E\"\n stroke=\"#2C3E50\"\n strokeWidth=\"1\"\n />\n\n {/* Chair leg */}\n <rect\n x=\"-3\"\n y=\"-10\"\n width=\"6\"\n height=\"20\"\n fill=\"#7F8C8D\"\n />\n\n {/* Seat */}\n <ellipse\n cx=\"0\"\n cy=\"-10\"\n rx=\"18\"\n ry=\"12\"\n fill={color}\n stroke=\"#2C3E50\"\n strokeWidth=\"2\"\n />\n\n {/* Backrest */}\n <path\n d=\"M -15,-25 L 15,-25 L 15,-5 L -15,-5 Z\"\n fill={occupied ? '#C0392B' : color}\n stroke=\"#2C3E50\"\n strokeWidth=\"1\"\n opacity=\"0.8\"\n />\n\n {/* Occupied indicator */}\n {occupied && (\n <circle\n cx=\"0\"\n cy=\"-10\"\n r=\"8\"\n fill=\"#F39C12\"\n opacity=\"0.5\"\n />\n )}\n </g>\n );\n};\n\nexport default Chair;\n","/**\n * Plant Component\n * \n * Renders a decorative office plant\n */\n\nimport React from 'react';\n\nexport interface PlantProps {\n x: number;\n y: number;\n size?: 'small' | 'medium' | 'large';\n type?: 'succulent' | 'fern' | 'tree';\n onClick?: () => void;\n}\n\nexport const Plant: React.FC<PlantProps> = ({\n x,\n y,\n size = 'medium',\n type = 'succulent',\n onClick,\n}) => {\n const sizeMap = {\n small: { width: 30, height: 40 },\n medium: { width: 50, height: 70 },\n large: { width: 80, height: 120 },\n };\n\n const { width, height } = sizeMap[size];\n const shadowColor = 'rgba(0, 0, 0, 0.2)';\n\n const renderPlant = () => {\n switch (type) {\n case 'fern':\n return (\n <>\n {/* Fern leaves */}\n {[...Array(5)].map((_, i) => (\n <path\n key={i}\n d={`M 0,${-height / 2} Q ${20 - i * 8},${-height / 2 + 20} ${30 - i * 5},${-height / 2 + 40}`}\n stroke=\"#27AE60\"\n strokeWidth=\"3\"\n fill=\"none\"\n />\n ))}\n {[...Array(5)].map((_, i) => (\n <path\n key={`left-${i}`}\n d={`M 0,${-height / 2} Q ${-20 + i * 8},${-height / 2 + 20} ${-30 + i * 5},${-height / 2 + 40}`}\n stroke=\"#27AE60\"\n strokeWidth=\"3\"\n fill=\"none\"\n />\n ))}\n </>\n );\n\n case 'tree':\n return (\n <>\n {/* Trunk */}\n <rect\n x={-5}\n y={0}\n width=\"10\"\n height={height / 2}\n fill=\"#8B4513\"\n />\n {/* Foliage */}\n <ellipse\n cx=\"0\"\n cy={-height / 3}\n rx={width / 2}\n ry={height / 3}\n fill=\"#229954\"\n stroke=\"#1E8449\"\n strokeWidth=\"2\"\n />\n </>\n );\n\n case 'succulent':\n default:\n return (\n <>\n {/* Pot */}\n <path\n d={`M ${-width / 4},${height / 4} L ${width / 4},${height / 4} L ${width / 6},${height / 2} L ${-width / 6},${height / 2} Z`}\n fill=\"#D35400\"\n stroke=\"#BA4A00\"\n strokeWidth=\"1\"\n />\n {/* Succulent leaves */}\n {[...Array(8)].map((_, i) => {\n const angle = (i / 8) * Math.PI * 2;\n const leafX = Math.cos(angle) * 15;\n const leafY = Math.sin(angle) * 15;\n return (\n <ellipse\n key={i}\n cx={leafX}\n cy={leafY - 10}\n rx=\"5\"\n ry=\"12\"\n fill=\"#58D68D\"\n stroke=\"#27AE60\"\n strokeWidth=\"1\"\n transform={`rotate(${(i / 8) * 360} ${leafX} ${leafY - 10})`}\n />\n );\n })}\n </>\n );\n }\n };\n\n return (\n <g\n transform={`translate(${x}, ${y})`}\n onClick={onClick}\n style={{ cursor: onClick ? 'pointer' : 'default' }}\n >\n {/* Shadow */}\n <ellipse\n cx=\"0\"\n cy={height / 2 + 5}\n rx={width / 2}\n ry={height / 6}\n fill={shadowColor}\n />\n\n {/* Plant */}\n {renderPlant()}\n </g>\n );\n};\n\nexport default Plant;\n","/**\n * Collaboration Lines Component\n * \n * Renders animated lines showing inter-agent message flow and collaboration\n */\n\nimport React, { useEffect, useState } from 'react';\n\nexport interface CollaborationLine {\n fromX: number;\n fromY: number;\n toX: number;\n toY: number;\n active?: boolean;\n messageCount?: number;\n color?: string;\n}\n\nexport interface CollaborationLinesProps {\n lines: CollaborationLine[];\n animated?: boolean;\n showLabels?: boolean;\n}\n\nexport const CollaborationLines: React.FC<CollaborationLinesProps> = ({\n lines,\n animated = true,\n showLabels = false,\n}) => {\n const [animationOffset, setAnimationOffset] = useState(0);\n\n // Animate lines\n useEffect(() => {\n if (!animated) return;\n\n const interval = setInterval(() => {\n setAnimationOffset((prev) => (prev + 2) % 20);\n }, 50);\n\n return () => clearInterval(interval);\n }, [animated]);\n\n const getLineColor = (line: CollaborationLine): string => {\n if (line.color) return line.color;\n if (line.active) return '#2ECC71';\n return '#BDC3C7';\n };\n\n const getLineWidth = (line: CollaborationLine): number => {\n if (!line.messageCount) return 2;\n if (line.messageCount > 100) return 6;\n if (line.messageCount > 50) return 4;\n return 2;\n };\n\n return (\n <svg\n className=\"collaboration-lines\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n zIndex: 1,\n }}\n >\n <defs>\n {/* Animated dash pattern */}\n {animated && (\n <pattern\n id=\"dashPattern\"\n patternUnits=\"userSpaceOnUse\"\n width=\"20\"\n height=\"20\"\n >\n <line\n x1=\"0\"\n y1=\"10\"\n x2=\"15\"\n y2=\"10\"\n stroke=\"#3498DB\"\n strokeWidth=\"2\"\n strokeDasharray=\"10,10\"\n strokeDashoffset={-animationOffset}\n />\n </pattern>\n )}\n\n {/* Gradient for active lines */}\n <linearGradient id=\"activeGradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" stopColor=\"#3498DB\" stopOpacity=\"0\" />\n <stop offset=\"50%\" stopColor=\"#3498DB\" stopOpacity=\"1\" />\n <stop offset=\"100%\" stopColor=\"#3498DB\" stopOpacity=\"0\" />\n </linearGradient>\n\n {/* Arrow marker */}\n <marker\n id=\"arrowhead\"\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"9\"\n refY=\"3.5\"\n orient=\"auto\"\n >\n <polygon\n points=\"0 0, 10 3.5, 0 7\"\n fill=\"#3498DB\"\n opacity=\"0.6\"\n />\n </marker>\n </defs>\n\n {lines.map((line, index) => {\n const color = getLineColor(line);\n const width = getLineWidth(line);\n\n return (\n <g key={index}>\n {/* Base line */}\n <line\n x1={line.fromX}\n y1={line.fromY}\n x2={line.toX}\n y2={line.toY}\n stroke={color}\n strokeWidth={width}\n strokeOpacity={line.active ? 0.6 : 0.3}\n strokeLinecap=\"round\"\n />\n\n {/* Animated overlay for active lines */}\n {animated && line.active && (\n <line\n x1={line.fromX}\n y1={line.fromY}\n x2={line.toX}\n y2={line.toY}\n stroke=\"url(#activeGradient)\"\n strokeWidth={width + 2}\n strokeOpacity=\"0.8\"\n strokeLinecap=\"round\"\n strokeDasharray=\"10,10\"\n strokeDashoffset={-animationOffset}\n />\n )}\n\n {/* Direction indicator for active lines */}\n {line.active && (\n <line\n x1={line.fromX}\n y1={line.fromY}\n x2={line.toX}\n y2={line.toY}\n stroke={color}\n strokeWidth=\"1\"\n strokeOpacity=\"0.4\"\n markerEnd=\"url(#arrowhead)\"\n />\n )}\n\n {/* Message count label */}\n {showLabels && line.messageCount !== undefined && (\n <g>\n <rect\n x={(line.fromX + line.toX) / 2 - 20}\n y={(line.fromY + line.toY) / 2 - 10}\n width=\"40\"\n height=\"20\"\n fill=\"rgba(44, 62, 80, 0.8)\"\n rx=\"4\"\n />\n <text\n x={(line.fromX + line.toX) / 2}\n y={(line.fromY + line.toY) / 2 + 4}\n textAnchor=\"middle\"\n fontSize=\"11\"\n fill=\"#ECF0F1\"\n fontWeight=\"bold\"\n >\n {line.messageCount > 999\n ? `${(line.messageCount / 1000).toFixed(1)}k`\n : line.messageCount}\n </text>\n </g>\n )}\n </g>\n );\n })}\n </svg>\n );\n};\n\nexport default CollaborationLines;\n","/**\n * Office Layout 2D Component\n * \n * Main 2D isometric office floor plan with agent desks, furniture, and collaboration lines\n */\n\nimport React, { useMemo } from 'react';\nimport { Desk } from './furniture/Desk';\nimport { Chair } from './furniture/Chair';\nimport { Plant } from './furniture/Plant';\nimport { CollaborationLines, type CollaborationLine } from './CollaborationLines';\n\nexport interface AgentPosition {\n id: string;\n name: string;\n x: number;\n y: number;\n status: 'idle' | 'working' | 'speaking' | 'error' | 'offline';\n deskX: number;\n deskY: number;\n}\n\nexport interface OfficeLayout2DProps {\n agents: AgentPosition[];\n width?: number;\n height?: number;\n showCollaborationLines?: boolean;\n showFurniture?: boolean;\n onAgentClick?: (agentId: string) => void;\n onDeskClick?: (agentId: string) => void;\n}\n\nexport const OfficeLayout2D: React.FC<OfficeLayout2DProps> = ({\n agents,\n width = 1200,\n height = 800,\n showCollaborationLines = true,\n showFurniture = true,\n onAgentClick,\n onDeskClick,\n}) => {\n // Generate collaboration lines between agents\n const collaborationLines: CollaborationLine[] = useMemo(() => {\n if (!showCollaborationLines) return [];\n\n const lines: CollaborationLine[] = [];\n const workingAgents = agents.filter((a) => a.status === 'working' || a.status === 'speaking');\n\n // Create lines between working agents\n for (let i = 0; i < workingAgents.length; i++) {\n for (let j = i + 1; j < workingAgents.length; j++) {\n const from = workingAgents[i];\n const to = workingAgents[j];\n\n // Only show lines for agents that are close to each other\n const distance = Math.sqrt(\n Math.pow(from.deskX - to.deskX, 2) + Math.pow(from.deskY - to.deskY, 2)\n );\n\n if (distance < 400) {\n lines.push({\n fromX: from.deskX + 60, // Center of desk\n fromY: from.deskY + 40,\n toX: to.deskX + 60,\n toY: to.deskY + 40,\n active: from.status === 'speaking' || to.status === 'speaking',\n messageCount: Math.floor(Math.random() * 150), // Mock data\n });\n }\n }\n }\n\n return lines;\n }, [agents, showCollaborationLines]);\n\n // Generate decorative plants\n const plants = useMemo(() => {\n if (!showFurniture) return [];\n\n return [\n { x: 50, y: 50, size: 'large' as const, type: 'tree' as const },\n { x: width - 100, y: 50, size: 'medium' as const, type: 'fern' as const },\n { x: 50, y: height - 100, size: 'medium' as const, type: 'succulent' as const },\n { x: width - 100, y: height - 100, size: 'large' as const, type: 'tree' as const },\n ];\n }, [width, height, showFurniture]);\n\n // Get agent status color\n const getStatusColor = (status: AgentPosition['status']): string => {\n switch (status) {\n case 'idle':\n return '#95A5A6';\n case 'working':\n return '#3498DB';\n case 'speaking':\n return '#2ECC71';\n case 'error':\n return '#E74C3C';\n case 'offline':\n return '#BDC3C7';\n default:\n return '#95A5A6';\n }\n };\n\n return (\n <div\n className=\"office-layout-2d\"\n style={{\n position: 'relative',\n width,\n height,\n backgroundColor: '#ECF0F1',\n borderRadius: '8px',\n overflow: 'hidden',\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)',\n }}\n >\n {/* Floor pattern */}\n <svg\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n zIndex: 0,\n }}\n >\n <pattern\n id=\"floorPattern\"\n patternUnits=\"userSpaceOnUse\"\n width=\"40\"\n height=\"40\"\n >\n <rect width=\"40\" height=\"40\" fill=\"#ECF0F1\" />\n <path\n d=\"M 0,0 L 40,40 M 40,0 L 0,40\"\n stroke=\"#BDC3C7\"\n strokeWidth=\"0.5\"\n opacity=\"0.3\"\n />\n </pattern>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#floorPattern)\" />\n </svg>\n\n {/* Collaboration lines (behind furniture) */}\n {showCollaborationLines && (\n <CollaborationLines lines={collaborationLines} animated showLabels />\n )}\n\n {/* Decorative plants */}\n {showFurniture &&\n plants.map((plant, index) => (\n <Plant\n key={index}\n x={plant.x}\n y={plant.y}\n size={plant.size}\n type={plant.type}\n />\n ))}\n\n {/* Agent desks and chairs */}\n {agents.map((agent) => (\n <React.Fragment key={agent.id}>\n {/* Desk */}\n <Desk\n x={agent.deskX}\n y={agent.deskY}\n occupied={agent.status !== 'offline'}\n agentName={agent.name}\n onClick={() => onDeskClick?.(agent.id)}\n />\n\n {/* Chair */}\n <Chair\n x={agent.deskX + 60}\n y={agent.deskY + 100}\n occupied={agent.status !== 'offline' && agent.status !== 'idle'}\n color={getStatusColor(agent.status)}\n rotation={agent.status === 'working' ? -15 : 0}\n onClick={() => onAgentClick?.(agent.id)}\n />\n\n {/* Status indicator */}\n {agent.status === 'speaking' && (\n <g transform={`translate(${agent.deskX + 60}, ${agent.deskY - 30})`}>\n <circle cx=\"0\" cy=\"0\" r=\"12\" fill=\"#2ECC71\" opacity=\"0.8\">\n <animate\n attributeName=\"r\"\n values=\"10;14;10\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n <animate\n attributeName=\"opacity\"\n values=\"0.6;1;0.6\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n <text\n x=\"0\"\n y=\"4\"\n textAnchor=\"middle\"\n fontSize=\"10\"\n fill=\"white\"\n fontWeight=\"bold\"\n >\n 💬\n </text>\n </g>\n )}\n\n {/* Error indicator */}\n {agent.status === 'error' && (\n <g transform={`translate(${agent.deskX + 60}, ${agent.deskY - 30})`}>\n <circle cx=\"0\" cy=\"0\" r=\"12\" fill=\"#E74C3C\" />\n <text\n x=\"0\"\n y=\"4\"\n textAnchor=\"middle\"\n fontSize=\"12\"\n fill=\"white\"\n fontWeight=\"bold\"\n >\n !\n </text>\n </g>\n )}\n </React.Fragment>\n ))}\n\n {/* Office zones labels */}\n <div\n style={{\n position: 'absolute',\n top: 20,\n left: 20,\n fontSize: '14px',\n fontWeight: 'bold',\n color: '#2C3E50',\n backgroundColor: 'rgba(255, 255, 255, 0.8)',\n padding: '8px 12px',\n borderRadius: '4px',\n zIndex: 10,\n }}\n >\n 📍 Zone A - Development Team\n </div>\n\n <div\n style={{\n position: 'absolute',\n bottom: 20,\n right: 20,\n fontSize: '12px',\n color: '#7F8C8D',\n backgroundColor: 'rgba(255, 255, 255, 0.8)',\n padding: '4px 8px',\n borderRadius: '4px',\n zIndex: 10,\n }}\n >\n {agents.length} agents • {agents.filter((a) => a.status === 'working').length} working •{' '}\n {agents.filter((a) => a.status === 'speaking').length} speaking\n </div>\n </div>\n );\n};\n\nexport default OfficeLayout2D;\n","/**\n * Agent Character 3D Component\n * \n * Renders a 3D character model for agents using React Three Fiber\n */\n\nimport React, { useRef, useMemo } from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nexport type AgentStatus = 'idle' | 'working' | 'speaking' | 'error' | 'offline';\n\nexport interface AgentCharacterProps {\n position?: [number, number, number];\n rotation?: [number, number, number];\n status: AgentStatus;\n agentName?: string;\n scale?: number;\n onClick?: () => void;\n}\n\nexport const AgentCharacter: React.FC<AgentCharacterProps> = ({\n position = [0, 0, 0],\n rotation = [0, 0, 0],\n status,\n agentName,\n scale = 1,\n onClick,\n}) => {\n const groupRef = useRef<THREE.Group>(null);\n const headRef = useRef<THREE.Mesh>(null);\n\n // Get color based on status\n const statusColor = useMemo(() => {\n switch (status) {\n case 'idle':\n return '#95A5A6';\n case 'working':\n return '#3498DB';\n case 'speaking':\n return '#2ECC71';\n case 'error':\n return '#E74C3C';\n case 'offline':\n return '#BDC3C7';\n default:\n return '#95A5A6';\n }\n }, [status]);\n\n // Animate character based on status\n useFrame((state) => {\n if (!groupRef.current || !headRef.current) return;\n\n const time = state.clock.getElapsedTime();\n\n // Breathing animation for all states\n groupRef.current.position.y = position[1] + Math.sin(time * 2) * 0.02;\n\n // Speaking animation\n if (status === 'speaking') {\n headRef.current.scale.setScalar(1 + Math.sin(time * 8) * 0.05);\n } else if (status === 'working') {\n // Typing animation (slight head movement)\n headRef.current.rotation.y = Math.sin(time * 4) * 0.1;\n } else if (status === 'error') {\n // Error shake animation\n groupRef.current.rotation.z = Math.sin(time * 20) * 0.05;\n } else {\n // Reset rotations\n headRef.current.rotation.y = 0;\n groupRef.current.rotation.z = 0;\n }\n });\n\n return (\n <group\n ref={groupRef}\n position={position}\n rotation={rotation}\n scale={[scale, scale, scale]}\n onClick={onClick}\n >\n {/* Body */}\n <mesh position={[0, 0.5, 0]} castShadow receiveShadow>\n <capsuleGeometry args={[0.15, 0.5, 8, 16]} />\n <meshStandardMaterial color={statusColor} />\n </mesh>\n\n {/* Head */}\n <mesh ref={headRef} position={[0, 1.1, 0]} castShadow receiveShadow>\n <sphereGeometry args={[0.2, 16, 16]} />\n <meshStandardMaterial color=\"#F5D6BA\" />\n </mesh>\n\n {/* Status indicator (glow above head) */}\n {status !== 'offline' && (\n <mesh position={[0, 1.5, 0]}>\n <sphereGeometry args={[0.08, 16, 16]} />\n <meshBasicMaterial\n color={statusColor}\n transparent\n opacity={0.6}\n />\n <pointLight color={statusColor} intensity={0.5} distance={2} />\n </mesh>\n )}\n\n {/* Name label (billboard - always faces camera) */}\n {agentName && (\n <sprite position={[0, 1.8, 0]} scale={[0.8, 0.2, 1]}>\n <spriteMaterial>\n <canvasTexture\n attach=\"map\"\n image={(() => {\n const canvas = document.createElement('canvas');\n canvas.width = 256;\n canvas.height = 64;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.fillStyle = 'rgba(44, 62, 80, 0.8)';\n ctx.roundRect(0, 0, 256, 64, 8);\n ctx.fill();\n ctx.fillStyle = '#ECF0F1';\n ctx.font = 'bold 24px Arial';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(agentName, 128, 32);\n }\n return canvas;\n })()}\n />\n </spriteMaterial>\n </sprite>\n )}\n\n {/* Shadow */}\n <mesh position={[0, 0.01, 0]} rotation={[-Math.PI / 2, 0, 0]} receiveShadow>\n <circleGeometry args={[0.3, 16]} />\n <meshBasicMaterial color=\"#000000\" transparent opacity={0.3} />\n </mesh>\n </group>\n );\n};\n\nexport default AgentCharacter;\n","/**\n * Skill Hologram 3D Component\n * \n * Renders a holographic display showing agent skills\n */\n\nimport React, { useRef, useMemo } from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nexport interface SkillHologramProps {\n position?: [number, number, number];\n skills?: string[];\n activeSkill?: string;\n scale?: number;\n color?: string;\n}\n\nexport const SkillHologram: React.FC<SkillHologramProps> = ({\n position = [0, 1.5, 0],\n skills = ['search', 'code', 'analyze'],\n activeSkill,\n scale = 1,\n color = '#3498DB',\n}) => {\n const hologramRef = useRef<THREE.Group>(null);\n\n // Animate hologram\n useFrame((state) => {\n if (!hologramRef.current) return;\n\n const time = state.clock.getElapsedTime();\n\n // Rotation\n hologramRef.current.rotation.y = time * 0.5;\n\n // Floating animation\n hologramRef.current.position.y = position[1] + Math.sin(time * 2) * 0.1;\n\n // Pulse effect\n const pulse = 1 + Math.sin(time * 4) * 0.05;\n hologramRef.current.scale.set(pulse, pulse, pulse);\n });\n\n // Generate skill rings\n const skillRings = useMemo(() => {\n return skills.map((skill, index) => {\n const angle = (index / skills.length) * Math.PI * 2;\n const radius = 0.5;\n return {\n skill,\n x: Math.cos(angle) * radius,\n z: Math.sin(angle) * radius,\n isActive: skill === activeSkill,\n };\n });\n }, [skills, activeSkill]);\n\n return (\n <group ref={hologramRef} position={position} scale={[scale, scale, scale]}>\n {/* Base hologram disk */}\n <mesh rotation={[-Math.PI / 2, 0, 0]} position={[0, 0, 0]}>\n <ringGeometry args={[0.3, 0.6, 32]} />\n <meshBasicMaterial\n color={color}\n transparent\n opacity={0.3}\n side={THREE.DoubleSide}\n />\n </mesh>\n\n {/* Outer rotating ring */}\n <mesh rotation={[-Math.PI / 2, 0, 0]} position={[0, 0.01, 0]}>\n <torusGeometry args={[0.6, 0.02, 16, 32]} />\n <meshBasicMaterial color={color} transparent opacity={0.6} />\n </mesh>\n\n {/* Skill nodes */}\n {skillRings.map((ring, index) => (\n <group key={index} position={[ring.x, 0.2, ring.z]}>\n {/* Node sphere */}\n <mesh castShadow>\n <sphereGeometry args={[0.08, 16, 16]} />\n <meshStandardMaterial\n color={ring.isActive ? '#2ECC71' : color}\n emissive={ring.isActive ? '#2ECC71' : color}\n emissiveIntensity={ring.isActive ? 0.5 : 0.2}\n />\n </mesh>\n\n {/* Connection line to center */}\n <mesh position={[ring.x * -0.5, 0, ring.z * -0.5]}>\n <cylinderGeometry args={[0.01, 0.01, 0.5, 8]} />\n <meshBasicMaterial color={color} transparent opacity={0.4} />\n </mesh>\n\n {/* Active indicator */}\n {ring.isActive && (\n <mesh>\n <sphereGeometry args={[0.12, 16, 16]} />\n <meshBasicMaterial color=\"#2ECC71\" transparent opacity={0.3} />\n </mesh>\n )}\n </group>\n ))}\n\n {/* Hologram beam (vertical lines) */}\n {[0, 1, 2, 3].map((i) => {\n const angle = (i / 4) * Math.PI * 2;\n const x = Math.cos(angle) * 0.5;\n const z = Math.sin(angle) * 0.5;\n return (\n <mesh\n key={i}\n position={[x, 0.5, z]}\n rotation={[0, 0, Math.atan2(z, x)]}\n >\n <cylinderGeometry args={[0.01, 0.01, 1, 8]} />\n <meshBasicMaterial color={color} transparent opacity={0.3} />\n </mesh>\n );\n })}\n\n {/* Central data core */}\n <mesh position={[0, 0.5, 0]}>\n <octahedronGeometry args={[0.15, 0]} />\n <meshStandardMaterial\n color={color}\n emissive={color}\n emissiveIntensity={0.5}\n wireframe\n />\n </mesh>\n </group>\n );\n};\n\nexport default SkillHologram;\n","/**\n * Spawn Portal 3D Component\n * \n * Renders a portal effect when agents spawn into the office\n */\n\nimport React, { useRef } from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nexport interface SpawnPortalProps {\n position?: [number, number, number];\n scale?: number;\n color?: string;\n onComplete?: () => void;\n}\n\nexport const SpawnPortal: React.FC<SpawnPortalProps> = ({\n position = [0, 0, 0],\n scale = 1,\n color = '#3498DB',\n onComplete,\n}) => {\n const portalRef = useRef<THREE.Group>(null);\n const startTime = useRef(Date.now());\n\n useFrame(() => {\n if (!portalRef.current) return;\n\n const elapsed = Date.now() - startTime.current;\n const duration = 2000; // 2 seconds\n const progress = Math.min(elapsed / duration, 1);\n\n // Scale up animation\n const scaleProgress = Math.sin(progress * Math.PI);\n portalRef.current.scale.set(\n scale * scaleProgress,\n scale * scaleProgress,\n scale * scaleProgress\n );\n\n // Rotation\n portalRef.current.rotation.y += 0.05;\n\n // Fade out at the end\n if (progress > 0.8 && onComplete) {\n onComplete();\n }\n });\n\n return (\n <group ref={portalRef} position={position}>\n {/* Outer ring */}\n <mesh rotation={[-Math.PI / 2, 0, 0]}>\n <torusGeometry args={[0.8, 0.1, 16, 32]} />\n <meshBasicMaterial color={color} transparent opacity={0.8} />\n </mesh>\n\n {/* Middle ring (counter-rotating) */}\n <mesh rotation={[-Math.PI / 2, 0, 0]} scale={[0.8, 0.8, 0.8]}>\n <torusGeometry args={[0.6, 0.08, 16, 32]} />\n <meshBasicMaterial color=\"#2ECC71\" transparent opacity={0.6} />\n </mesh>\n\n {/* Inner ring */}\n <mesh rotation={[-Math.PI / 2, 0, 0]} scale={[0.6, 0.6, 0.6]}>\n <torusGeometry args={[0.4, 0.06, 16, 32]} />\n <meshBasicMaterial color=\"#F39C12\" transparent opacity={0.4} />\n </mesh>\n\n {/* Portal energy field */}\n <mesh rotation={[-Math.PI / 2, 0, 0]}>\n <circleGeometry args={[0.8, 32]} />\n <meshBasicMaterial\n color={color}\n transparent\n opacity={0.2}\n side={THREE.DoubleSide}\n />\n </mesh>\n\n {/* Particle effects */}\n {Array.from({ length: 20 }).map((_, i) => {\n const angle = (i / 20) * Math.PI * 2;\n const radius = 0.7 + Math.sin(Date.now() * 0.005 + i) * 0.1;\n return (\n <mesh\n key={i}\n position={[\n Math.cos(angle) * radius,\n Math.sin(Date.now() * 0.01 + i) * 0.2,\n Math.sin(angle) * radius,\n ]}\n >\n <sphereGeometry args={[0.03, 8, 8]} />\n <meshBasicMaterial color=\"#FFF\" transparent opacity={0.8} />\n </mesh>\n );\n })}\n\n {/* Light beam from above */}\n <mesh position={[0, 1, 0]} rotation={[Math.PI, 0, 0]}>\n <cylinderGeometry args={[0.1, 0.8, 2, 16]} />\n <meshBasicMaterial color={color} transparent opacity={0.3} />\n </mesh>\n </group>\n );\n};\n\nexport default SpawnPortal;\n","/**\n * Environment 3D Component\n * \n * Renders the 3D office environment with floor, walls, and lighting\n */\n\nimport React from 'react';\nimport { Environment, ContactShadows } from '@react-three/drei';\n\nexport interface Environment3DProps {\n width?: number;\n height?: number;\n showGrid?: boolean;\n}\n\nexport const Environment3D: React.FC<Environment3DProps> = ({\n width = 20,\n height = 15,\n showGrid = true,\n}) => {\n return (\n <>\n {/* Floor */}\n <mesh rotation={[-Math.PI / 2, 0, 0]} position={[0, 0, 0]} receiveShadow>\n <planeGeometry args={[width, height]} />\n <meshStandardMaterial\n color=\"#ECF0F1\"\n roughness={0.8}\n metalness={0.2}\n />\n </mesh>\n\n {/* Grid helper */}\n {showGrid && (\n <gridHelper\n args={[width, 20, '#BDC3C7', '#BDC3C7']}\n position={[0, 0.01, 0]}\n />\n )}\n\n {/* Walls (optional, for enclosed office) */}\n <mesh\n rotation={[0, 0, 0]}\n position={[0, 1.5, -height / 2]}\n receiveShadow\n >\n <boxGeometry args={[width, 3, 0.1]} />\n <meshStandardMaterial color=\"#BDC3C7\" transparent opacity={0.5} />\n </mesh>\n\n <mesh\n rotation={[0, 0, 0]}\n position={[-width / 2, 1.5, 0]}\n receiveShadow\n >\n <boxGeometry args={[0.1, 3, height]} />\n <meshStandardMaterial color=\"#BDC3C7\" transparent opacity={0.5} />\n </mesh>\n\n {/* Lighting */}\n <ambientLight intensity={0.5} />\n\n <directionalLight\n position={[10, 10, 5]}\n intensity={1}\n castShadow\n shadow-mapSize-width={2048}\n shadow-mapSize-height={2048}\n />\n\n <pointLight position={[0, 5, 0]} intensity={0.5} color=\"#3498DB\" />\n\n {/* Environment map for reflections */}\n <Environment preset=\"city\" />\n\n {/* Contact shadows */}\n <ContactShadows\n position={[0, 0.01, 0]}\n opacity={0.4}\n scale={20}\n blur={2}\n far={4.5}\n />\n </>\n );\n};\n\nexport default Environment3D;\n","/**\n * Office Layout 3D Component\n * \n * Main 3D office scene with agents, furniture, and effects\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { Canvas, useThree } from '@react-three/fiber';\nimport { OrbitControls, PerspectiveCamera, Stats } from '@react-three/drei';\n\nimport { AgentCharacter, type AgentStatus } from './AgentCharacter';\nimport { SkillHologram } from './SkillHologram';\nimport { SpawnPortal } from './SpawnPortal';\nimport { Environment3D } from './Environment3D';\n\nexport interface Agent3DPosition {\n id: string;\n name: string;\n position: [number, number, number];\n rotation?: [number, number, number];\n status: AgentStatus;\n skills?: string[];\n activeSkill?: string;\n}\n\nexport interface OfficeLayout3DProps {\n agents: Agent3DPosition[];\n width?: number;\n height?: number;\n showGrid?: boolean;\n showStats?: boolean;\n onAgentClick?: (agentId: string) => void;\n autoRotate?: boolean;\n}\n\n// Camera controller component\nfunction CameraController({ autoRotate }: { autoRotate?: boolean }) {\n const controls = useThree((state) => state.controls as any);\n\n useEffect(() => {\n if (controls && autoRotate) {\n controls.autoRotate = true;\n controls.autoRotateSpeed = 0.5;\n }\n }, [controls, autoRotate]);\n\n return null;\n}\n\nexport const OfficeLayout3D: React.FC<OfficeLayout3DProps> = ({\n agents,\n width = 20,\n height = 15,\n showGrid = true,\n showStats = false,\n onAgentClick,\n autoRotate = false,\n}) => {\n const [spawningAgents, setSpawningAgents] = useState<string[]>([]);\n\n // Track newly spawned agents\n useEffect(() => {\n agents.forEach((agent) => {\n if (!spawningAgents.includes(agent.id)) {\n setSpawningAgents((prev) => [...prev, agent.id]);\n }\n });\n }, [agents, spawningAgents]);\n\n const handleSpawnComplete = (agentId: string) => {\n setSpawningAgents((prev) => prev.filter((id) => id !== agentId));\n };\n\n return (\n <div\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n }}\n >\n <Canvas shadows>\n <PerspectiveCamera\n makeDefault\n position={[10, 10, 10]}\n fov={50}\n near={0.1}\n far={1000}\n />\n\n {/* Camera controls */}\n <OrbitControls\n enablePan={true}\n enableZoom={true}\n enableRotate={true}\n minDistance={5}\n maxDistance={50}\n maxPolarAngle={Math.PI / 2 - 0.1}\n />\n\n <CameraController autoRotate={autoRotate} />\n\n {/* Environment */}\n <Environment3D width={width} height={height} showGrid={showGrid} />\n\n {/* Agents */}\n {agents.map((agent) => (\n <React.Fragment key={agent.id}>\n {/* Spawn portal for new agents */}\n {spawningAgents.includes(agent.id) && (\n <SpawnPortal\n position={agent.position}\n scale={1.5}\n color=\"#3498DB\"\n onComplete={() => handleSpawnComplete(agent.id)}\n />\n )}\n\n {/* Agent character */}\n <AgentCharacter\n position={agent.position}\n rotation={agent.rotation || [0, 0, 0]}\n status={agent.status}\n agentName={agent.name}\n scale={spawningAgents.includes(agent.id) ? 0 : 1}\n onClick={() => onAgentClick?.(agent.id)}\n />\n\n {/* Skill hologram for working/speaking agents */}\n {(agent.status === 'working' || agent.status === 'speaking') &&\n agent.skills && (\n <SkillHologram\n position={[\n agent.position[0],\n agent.position[1] + 1,\n agent.position[2],\n ]}\n skills={agent.skills}\n activeSkill={agent.activeSkill}\n scale={0.8}\n color={\n agent.status === 'speaking' ? '#2ECC71' : '#3498DB'\n }\n />\n )}\n </React.Fragment>\n ))}\n\n {/* Stats (optional) */}\n {showStats && <Stats />}\n </Canvas>\n\n {/* UI Overlay */}\n <div\n style={{\n position: 'absolute',\n top: 20,\n left: 20,\n backgroundColor: 'rgba(44, 62, 80, 0.8)',\n color: '#ECF0F1',\n padding: '12px 16px',\n borderRadius: '8px',\n fontSize: '14px',\n zIndex: 10,\n }}\n >\n <div style={{ fontWeight: 'bold', marginBottom: '8px' }}>\n 🏢 3D Office View\n </div>\n <div>Agents: {agents.length}</div>\n <div>Working: {agents.filter((a) => a.status === 'working').length}</div>\n <div>Speaking: {agents.filter((a) => a.status === 'speaking').length}</div>\n <div style={{ marginTop: '8px', fontSize: '12px', opacity: 0.8 }}>\n 🖱️ Drag to rotate • Scroll to zoom • Right-click to pan\n </div>\n </div>\n </div>\n );\n};\n\nexport default OfficeLayout3D;\n","/**\n * Chat Dock Bar Component\n * \n * Bottom-docked chat interface for real-time conversations with agents\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\n\nexport interface ChatDockBarProps {\n isOpen: boolean;\n onToggle: () => void;\n onSend: (message: string) => void;\n agentName?: string;\n isTyping?: boolean;\n disabled?: boolean;\n}\n\nexport const ChatDockBar: React.FC<ChatDockBarProps> = ({\n isOpen,\n onToggle,\n onSend,\n agentName = 'Agent',\n isTyping = false,\n disabled = false,\n}) => {\n const [message, setMessage] = useState('');\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n // Focus input when opened\n useEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (message.trim() && !disabled) {\n onSend(message.trim());\n setMessage('');\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e);\n }\n };\n\n return (\n <div\n className=\"chat-dock-bar\"\n style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: 'rgba(255, 255, 255, 0.98)',\n borderTop: '1px solid #E0E0E0',\n boxShadow: '0 -2px 8px rgba(0, 0, 0, 0.1)',\n zIndex: 1000,\n transform: isOpen ? 'translateY(0)' : 'translateY(calc(100% - 60px))',\n transition: 'transform 0.3s ease',\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 16px',\n borderBottom: '1px solid #E0E0E0',\n cursor: 'pointer',\n }}\n onClick={onToggle}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '18px' }}>💬</span>\n <span style={{ fontWeight: 'bold', color: '#2C3E50' }}>\n Chat with {agentName}\n </span>\n {isTyping && (\n <span\n style={{\n fontSize: '12px',\n color: '#27AE60',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <span className=\"typing-indicator\">\n <span\n style={{\n display: 'inline-block',\n width: '6px',\n height: '6px',\n backgroundColor: '#27AE60',\n borderRadius: '50%',\n animation: 'typing 1.4s infinite',\n }}\n />\n <span\n style={{\n display: 'inline-block',\n width: '6px',\n height: '6px',\n backgroundColor: '#27AE60',\n borderRadius: '50%',\n animation: 'typing 1.4s infinite 0.2s',\n }}\n />\n <span\n style={{\n display: 'inline-block',\n width: '6px',\n height: '6px',\n backgroundColor: '#27AE60',\n borderRadius: '50%',\n animation: 'typing 1.4s infinite 0.4s',\n }}\n />\n </span>\n typing...\n </span>\n )}\n </div>\n <button\n style={{\n background: 'none',\n border: 'none',\n fontSize: '20px',\n cursor: 'pointer',\n color: '#7F8C8D',\n padding: '4px 8px',\n borderRadius: '4px',\n }}\n onClick={(e) => {\n e.stopPropagation();\n onToggle();\n }}\n >\n {isOpen ? '▼' : '▲'}\n </button>\n </div>\n\n {/* Input Area */}\n {isOpen && (\n <form\n onSubmit={handleSubmit}\n style={{\n padding: '16px',\n display: 'flex',\n gap: '12px',\n alignItems: 'flex-end',\n }}\n >\n <textarea\n ref={inputRef}\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={`Message ${agentName}... (Press Enter to send, Shift+Enter for new line)`}\n disabled={disabled}\n rows={Math.min(Math.max(message.split('\\n').length, 1), 5)}\n style={{\n flex: 1,\n padding: '12px',\n border: '1px solid #E0E0E0',\n borderRadius: '8px',\n fontSize: '14px',\n fontFamily: 'inherit',\n resize: 'none',\n minHeight: '44px',\n maxHeight: '120px',\n outline: 'none',\n }}\n />\n <button\n type=\"submit\"\n disabled={!message.trim() || disabled}\n style={{\n padding: '12px 24px',\n backgroundColor: message.trim() && !disabled ? '#3498DB' : '#BDC3C7',\n color: 'white',\n border: 'none',\n borderRadius: '8px',\n fontSize: '14px',\n fontWeight: 'bold',\n cursor: message.trim() && !disabled ? 'pointer' : 'not-allowed',\n transition: 'background-color 0.2s',\n minHeight: '44px',\n }}\n >\n Send\n </button>\n </form>\n )}\n\n {/* CSS for typing animation */}\n <style>{`\n @keyframes typing {\n 0%, 100% { transform: translateY(0); }\n 50% { transform: translateY(-4px); }\n }\n `}</style>\n </div>\n );\n};\n\nexport default ChatDockBar;\n","/**\n * Message Bubble Component\n * \n * Renders individual chat messages with Markdown support\n */\n\nimport React from 'react';\n\nexport type MessageRole = 'user' | 'assistant' | 'system';\n\nexport interface MessageBubbleProps {\n role: MessageRole;\n content: string;\n timestamp: number;\n agentName?: string;\n isStreaming?: boolean;\n onCopy?: () => void;\n}\n\nexport const MessageBubble: React.FC<MessageBubbleProps> = ({\n role,\n content,\n timestamp,\n agentName,\n isStreaming = false,\n onCopy,\n}) => {\n const formatTime = (ts: number) => {\n return new Date(ts).toLocaleTimeString('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n });\n };\n\n const getBackgroundColor = () => {\n switch (role) {\n case 'user':\n return '#3498DB';\n case 'assistant':\n return '#ECF0F1';\n case 'system':\n return '#FFF3CD';\n default:\n return '#ECF0F1';\n }\n };\n\n const getTextColor = () => {\n return role === 'user' ? '#FFFFFF' : '#2C3E50';\n };\n\n const getAlignment = () => {\n return role === 'user' ? 'flex-end' : 'flex-start';\n };\n\n const getAvatar = () => {\n switch (role) {\n case 'user':\n return '👤';\n case 'assistant':\n return '🤖';\n case 'system':\n return '⚙️';\n default:\n return '💬';\n }\n };\n\n // Simple markdown-like formatting\n const formatContent = (text: string) => {\n return text\n .split('\\n')\n .map((line, i) => (\n <React.Fragment key={i}>\n {line}\n <br />\n </React.Fragment>\n ));\n };\n\n return (\n <div\n className=\"message-bubble\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: getAlignment(),\n marginBottom: '16px',\n }}\n >\n {/* Avatar and name */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '4px',\n maxWidth: '80%',\n }}\n >\n <span style={{ fontSize: '20px' }}>{getAvatar()}</span>\n <span\n style={{\n fontWeight: 'bold',\n color: '#2C3E50',\n fontSize: '14px',\n }}\n >\n {role === 'assistant' ? agentName : role === 'user' ? 'You' : 'System'}\n </span>\n <span\n style={{\n fontSize: '12px',\n color: '#7F8C8D',\n }}\n >\n {formatTime(timestamp)}\n </span>\n </div>\n\n {/* Message bubble */}\n <div\n style={{\n backgroundColor: getBackgroundColor(),\n color: getTextColor(),\n padding: '12px 16px',\n borderRadius: '16px',\n borderBottomRightRadius: role === 'user' ? '4px' : '16px',\n borderBottomLeftRadius: role === 'assistant' ? '4px' : '16px',\n maxWidth: '80%',\n wordBreak: 'break-word',\n position: 'relative',\n }}\n >\n <div style={{ fontSize: '14px', lineHeight: '1.5' }}>\n {formatContent(content)}\n </div>\n\n {/* Streaming indicator */}\n {isStreaming && (\n <span\n className=\"streaming-cursor\"\n style={{\n display: 'inline-block',\n width: '2px',\n height: '16px',\n backgroundColor: getTextColor(),\n marginLeft: '2px',\n animation: 'blink 1s infinite',\n }}\n />\n )}\n\n {/* Copy button (hover) */}\n {onCopy && role !== 'system' && (\n <button\n onClick={onCopy}\n style={{\n position: 'absolute',\n top: '8px',\n right: '8px',\n background: 'rgba(0, 0, 0, 0.1)',\n border: 'none',\n borderRadius: '4px',\n padding: '4px 8px',\n fontSize: '12px',\n cursor: 'pointer',\n opacity: 0,\n transition: 'opacity 0.2s',\n color: getTextColor(),\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.opacity = '1';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = '0';\n }}\n >\n 📋 Copy\n </button>\n )}\n </div>\n\n {/* CSS for blinking cursor */}\n <style>{`\n @keyframes blink {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0; }\n }\n `}</style>\n </div>\n );\n};\n\nexport default MessageBubble;\n","/**\n * Streaming Indicator Component\n * \n * Shows visual feedback when agent is streaming response\n */\n\nimport React from 'react';\n\nexport interface StreamingIndicatorProps {\n isVisible: boolean;\n agentName?: string;\n progress?: number;\n}\n\nexport const StreamingIndicator: React.FC<StreamingIndicatorProps> = ({\n isVisible,\n agentName = 'Agent',\n progress,\n}) => {\n if (!isVisible) return null;\n\n return (\n <div\n className=\"streaming-indicator\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '12px 16px',\n backgroundColor: 'rgba(52, 152, 219, 0.1)',\n borderRadius: '8px',\n marginBottom: '16px',\n border: '1px solid rgba(52, 152, 219, 0.3)',\n }}\n >\n {/* Animated spinner */}\n <div\n style={{\n width: '24px',\n height: '24px',\n border: '3px solid rgba(52, 152, 219, 0.2)',\n borderTop: '3px solid #3498DB',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n\n {/* Status text */}\n <div style={{ flex: 1 }}>\n <div\n style={{\n fontWeight: 'bold',\n color: '#2C3E50',\n fontSize: '14px',\n }}\n >\n {agentName} is thinking...\n </div>\n {progress !== undefined && (\n <div\n style={{\n fontSize: '12px',\n color: '#7F8C8D',\n marginTop: '4px',\n }}\n >\n Generating response... {Math.round(progress)}%\n </div>\n )}\n </div>\n\n {/* Token counter (optional) */}\n <div\n style={{\n fontSize: '12px',\n color: '#7F8C8D',\n backgroundColor: 'rgba(0, 0, 0, 0.05)',\n padding: '4px 8px',\n borderRadius: '4px',\n }}\n >\n ⚡ Streaming\n </div>\n\n {/* CSS for spinner animation */}\n <style>{`\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n};\n\nexport default StreamingIndicator;\n","/**\n * Agent Selector Component\n * \n * Dropdown for selecting which agent to chat with\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\n\nexport interface AgentOption {\n id: string;\n name: string;\n status: 'idle' | 'working' | 'speaking' | 'error' | 'offline';\n avatar?: string;\n}\n\nexport interface AgentSelectorProps {\n agents: AgentOption[];\n selectedAgentId?: string;\n onSelect: (agentId: string) => void;\n disabled?: boolean;\n}\n\nexport const AgentSelector: React.FC<AgentSelectorProps> = ({\n agents,\n selectedAgentId,\n onSelect,\n disabled = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const selectedAgent = agents.find((a) => a.id === selectedAgentId);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const getStatusColor = (status: AgentOption['status']) => {\n switch (status) {\n case 'idle':\n return '#95A5A6';\n case 'working':\n return '#3498DB';\n case 'speaking':\n return '#2ECC71';\n case 'error':\n return '#E74C3C';\n case 'offline':\n return '#BDC3C7';\n default:\n return '#95A5A6';\n }\n };\n\n const getStatusEmoji = (status: AgentOption['status']) => {\n switch (status) {\n case 'idle':\n return '😴';\n case 'working':\n return '💻';\n case 'speaking':\n return '💬';\n case 'error':\n return '❌';\n case 'offline':\n return '⚫';\n default:\n return '🤖';\n }\n };\n\n return (\n <div\n ref={dropdownRef}\n className=\"agent-selector\"\n style={{\n position: 'relative',\n display: 'inline-block',\n width: '200px',\n }}\n >\n {/* Selected agent display */}\n <button\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n style={{\n width: '100%',\n padding: '10px 14px',\n backgroundColor: 'white',\n border: '1px solid #E0E0E0',\n borderRadius: '8px',\n fontSize: '14px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n opacity: disabled ? 0.6 : 1,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '18px' }}>\n {selectedAgent?.avatar || '🤖'}\n </span>\n <span style={{ fontWeight: '500', color: '#2C3E50' }}>\n {selectedAgent?.name || 'Select Agent'}\n </span>\n </div>\n <span\n style={{\n fontSize: '12px',\n color: '#7F8C8D',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n >\n ▼\n </span>\n </button>\n\n {/* Dropdown menu */}\n {isOpen && (\n <div\n style={{\n position: 'absolute',\n top: 'calc(100% + 4px)',\n left: 0,\n right: 0,\n backgroundColor: 'white',\n border: '1px solid #E0E0E0',\n borderRadius: '8px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n zIndex: 1000,\n maxHeight: '300px',\n overflowY: 'auto',\n }}\n >\n {agents.map((agent) => (\n <button\n key={agent.id}\n onClick={() => {\n onSelect(agent.id);\n setIsOpen(false);\n }}\n style={{\n width: '100%',\n padding: '10px 14px',\n backgroundColor:\n agent.id === selectedAgentId ? '#F5F5F5' : 'white',\n border: 'none',\n borderBottom: '1px solid #F0F0F0',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n transition: 'background-color 0.2s',\n textAlign: 'left',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#F5F5F5';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor =\n agent.id === selectedAgentId ? '#F5F5F5' : 'white';\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '18px' }}>{agent.avatar || '🤖'}</span>\n <span\n style={{\n fontWeight: agent.id === selectedAgentId ? '600' : '400',\n color: '#2C3E50',\n }}\n >\n {agent.name}\n </span>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '12px',\n color: getStatusColor(agent.status),\n }}\n >\n <span>{getStatusEmoji(agent.status)}</span>\n <div\n style={{\n width: '8px',\n height: '8px',\n backgroundColor: getStatusColor(agent.status),\n borderRadius: '50%',\n }}\n />\n </div>\n </button>\n ))}\n\n {agents.length === 0 && (\n <div\n style={{\n padding: '20px',\n textAlign: 'center',\n color: '#7F8C8D',\n fontSize: '14px',\n }}\n >\n No agents available\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default AgentSelector;\n","/**\n * Chat Dialog Component\n * \n * Full chat dialog with message history and streaming support\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { ChatDockBar } from './ChatDockBar';\nimport { MessageBubble, type MessageRole } from './MessageBubble';\nimport { StreamingIndicator } from './StreamingIndicator';\nimport { AgentSelector, type AgentOption } from './AgentSelector';\n\nexport interface Message {\n id: string;\n role: MessageRole;\n content: string;\n timestamp: number;\n isStreaming?: boolean;\n}\n\nexport interface ChatDialogProps {\n agents: AgentOption[];\n messages: Message[];\n selectedAgentId?: string;\n isStreaming?: boolean;\n streamingProgress?: number;\n onSendMessage: (message: string) => void;\n onAgentSelect: (agentId: string) => void;\n onCopyMessage?: (messageId: string) => void;\n}\n\nexport const ChatDialog: React.FC<ChatDialogProps> = ({\n agents,\n messages,\n selectedAgentId,\n isStreaming = false,\n streamingProgress,\n onSendMessage,\n onAgentSelect,\n onCopyMessage,\n}) => {\n const [isChatOpen, setIsChatOpen] = useState(true);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll to bottom when new messages arrive\n useEffect(() => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({ behavior: 'smooth' });\n }\n }, [messages]);\n\n const selectedAgent = agents.find((a) => a.id === selectedAgentId);\n\n const handleCopyMessage = (messageId: string) => {\n const message = messages.find((m) => m.id === messageId);\n if (message && onCopyMessage) {\n navigator.clipboard.writeText(message.content);\n onCopyMessage(messageId);\n }\n };\n\n return (\n <div\n style={{\n position: 'fixed',\n bottom: 0,\n right: '20px',\n width: '400px',\n maxWidth: 'calc(100vw - 40px)',\n zIndex: 999,\n }}\n >\n {/* Chat Dock Bar */}\n <ChatDockBar\n isOpen={isChatOpen}\n onToggle={() => setIsChatOpen(!isChatOpen)}\n onSend={onSendMessage}\n agentName={selectedAgent?.name || 'Agent'}\n isTyping={isStreaming}\n />\n\n {/* Message History (shown when chat is open) */}\n {isChatOpen && (\n <div\n style={{\n position: 'absolute',\n bottom: '220px',\n left: 0,\n right: 0,\n maxHeight: '400px',\n overflowY: 'auto',\n backgroundColor: 'rgba(255, 255, 255, 0.98)',\n borderTop: '1px solid #E0E0E0',\n borderTopLeftRadius: '8px',\n borderTopRightRadius: '8px',\n boxShadow: '0 -2px 8px rgba(0, 0, 0, 0.1)',\n }}\n >\n {/* Agent selector */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: '1px solid #E0E0E0',\n backgroundColor: '#F8F9FA',\n borderTopLeftRadius: '8px',\n borderTopRightRadius: '8px',\n }}\n >\n <AgentSelector\n agents={agents}\n selectedAgentId={selectedAgentId}\n onSelect={onAgentSelect}\n />\n </div>\n\n {/* Messages */}\n <div style={{ padding: '16px' }}>\n {messages.map((message) => (\n <MessageBubble\n key={message.id}\n role={message.role}\n content={message.content}\n timestamp={message.timestamp}\n agentName={selectedAgent?.name}\n isStreaming={message.isStreaming}\n onCopy={() => handleCopyMessage(message.id)}\n />\n ))}\n\n {/* Streaming indicator */}\n {isStreaming && (\n <StreamingIndicator\n isVisible={isStreaming}\n agentName={selectedAgent?.name || 'Agent'}\n progress={streamingProgress}\n />\n )}\n\n {/* Auto-scroll anchor */}\n <div ref={messagesEndRef} />\n\n {/* Empty state */}\n {messages.length === 0 && !isStreaming && (\n <div\n style={{\n textAlign: 'center',\n padding: '40px 20px',\n color: '#7F8C8D',\n }}\n >\n <div style={{ fontSize: '48px', marginBottom: '12px' }}>💬</div>\n <div style={{ fontWeight: 'bold', marginBottom: '8px' }}>\n Start a conversation\n </div>\n <div style={{ fontSize: '14px' }}>\n Select an agent and send a message to begin\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default ChatDialog;\n","/**\n * PoolBot Office Main App\n * \n * Main application component with routing and state management\n */\n\nimport React, { useState } from 'react';\nimport { DashboardPage } from './components/console/dashboard/DashboardPage';\nimport { AgentsPage } from './components/console/agents/AgentsPage';\nimport { ChannelsPage } from './components/console/channels/ChannelsPage';\nimport { SkillsPage } from './components/console/skills/SkillsPage';\nimport { CronPage } from './components/console/cron/CronPage';\nimport { SettingsPage } from './components/console/settings/SettingsPage';\nimport { OfficeLayout2D } from './components/office-2d/OfficeLayout2D';\nimport { OfficeLayout3D } from './components/office-3d/OfficeLayout3D';\nimport { ChatDialog } from './components/chat/ChatDialog';\n\ntype Page = 'dashboard' | 'agents' | 'channels' | 'skills' | 'cron' | 'settings' | 'office-2d' | 'office-3d';\ntype ViewMode = '2d' | '3d' | 'console';\n\nexport const App: React.FC = () => {\n const [currentPage, setCurrentPage] = useState<Page>('dashboard');\n const [viewMode, setViewMode] = useState<ViewMode>('console');\n\n // Mock data (would come from WebSocket in real app)\n const [stats] = useState({\n totalAgents: 5,\n activeAgents: 3,\n totalChannels: 4,\n connectedChannels: 3,\n totalSkills: 339,\n enabledSkills: 12,\n totalCronJobs: 8,\n activeCronJobs: 5,\n messagesToday: 1247,\n tokensToday: 45678,\n uptime: 3456,\n errorCount: 2,\n });\n\n const [alerts] = useState([\n {\n id: '1',\n type: 'warning' as const,\n title: 'Gateway Connection',\n message: 'Using mock data - connect to real gateway for live updates',\n timestamp: Date.now(),\n },\n ]);\n\n const [agents] = useState([\n { id: '1', name: 'Assistant', status: 'working' as const, model: 'gpt-4o', createdAt: Date.now(), lastActiveAt: Date.now(), sessionCount: 45, messageCount: 1234 },\n { id: '2', name: 'Researcher', status: 'speaking' as const, model: 'claude-3-5-sonnet', createdAt: Date.now(), lastActiveAt: Date.now(), sessionCount: 32, messageCount: 876 },\n { id: '3', name: 'Coder', status: 'idle' as const, model: 'gpt-4o', createdAt: Date.now(), lastActiveAt: Date.now(), sessionCount: 28, messageCount: 654 },\n ]);\n\n const [channels] = useState([\n { id: '1', type: 'telegram' as const, name: 'Telegram Bot', status: 'connected' as const, lastSeen: Date.now(), messageCount: 567 },\n { id: '2', type: 'discord' as const, name: 'Discord Server', status: 'connected' as const, lastSeen: Date.now(), messageCount: 432 },\n { id: '3', type: 'slack' as const, name: 'Slack Workspace', status: 'disconnected' as const, lastSeen: Date.now() - 3600000, messageCount: 234 },\n ]);\n\n const [skills] = useState([\n { id: '1', name: 'GitHub', description: 'GitHub integration for PRs, issues, and more', category: 'development', installed: true, version: '1.0.0', author: 'OpenClaw', downloads: 1234, rating: 4.8 },\n { id: '2', name: 'Docker', description: 'Docker container management', category: 'development', installed: true, version: '1.0.0', author: 'OpenClaw', downloads: 987, rating: 4.6 },\n { id: '3', name: 'Notion', description: 'Notion database and page management', category: 'productivity', installed: false, version: '1.0.0', author: 'OpenClaw', downloads: 765, rating: 4.5 },\n ]);\n\n const [cronJobs] = useState([\n { id: '1', name: 'Daily Report', schedule: '0 9 * * *', agent: 'Assistant', command: 'generate daily report', enabled: true, lastRun: Date.now() - 3600000, successCount: 45, failureCount: 2 },\n { id: '2', name: 'Weekly Summary', schedule: '0 9 * * 1', agent: 'Researcher', command: 'generate weekly summary', enabled: true, lastRun: Date.now() - 604800000, successCount: 12, failureCount: 0 },\n ]);\n\n const handleNavigate = (page: string) => {\n setCurrentPage(page as Page);\n };\n\n const renderPage = () => {\n switch (currentPage) {\n case 'dashboard':\n return <DashboardPage stats={stats} alerts={alerts} onDismissAlert={() => {}} onNavigate={handleNavigate} />;\n case 'agents':\n return <AgentsPage agents={agents} onCreateAgent={() => {}} onDeleteAgent={() => {}} onSelectAgent={() => {}} />;\n case 'channels':\n return <ChannelsPage channels={channels} onConnect={() => {}} onDisconnect={() => {}} onConfigure={() => {}} />;\n case 'skills':\n return <SkillsPage skills={skills} onInstall={() => {}} onUninstall={() => {}} />;\n case 'cron':\n return <CronPage jobs={cronJobs} onCreateJob={() => {}} onDeleteJob={() => {}} onToggleJob={() => {}} onRunNow={() => {}} />;\n case 'settings':\n return <SettingsPage gatewayUrl=\"ws://localhost:18789\" language=\"pt-BR\" theme=\"light\" onGatewayChange={() => {}} onLanguageChange={() => {}} onThemeChange={() => {}} onSave={() => {}} />;\n case 'office-2d':\n return <OfficeLayout2D agents={[]} width={1200} height={800} />;\n case 'office-3d':\n return <OfficeLayout3D agents={[]} width={20} height={15} />;\n default:\n return <DashboardPage stats={stats} alerts={alerts} onDismissAlert={() => {}} onNavigate={handleNavigate} />;\n }\n };\n\n return (\n <div style={{ minHeight: '100vh', backgroundColor: '#F5F5F5' }}>\n {/* Top Navigation */}\n <nav style={{\n backgroundColor: 'white',\n borderBottom: '1px solid #E0E0E0',\n padding: '12px 24px',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '24px' }}>\n <h1 style={{ fontSize: '20px', fontWeight: 'bold', color: '#2C3E50', margin: 0 }}>\n 🤖 PoolBot Office\n </h1>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n onClick={() => { setViewMode('console'); setCurrentPage('dashboard'); }}\n style={{\n padding: '8px 16px',\n backgroundColor: viewMode === 'console' ? '#3498DB' : 'transparent',\n color: viewMode === 'console' ? 'white' : '#2C3E50',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Console\n </button>\n <button\n onClick={() => { setViewMode('2d'); setCurrentPage('office-2d'); }}\n style={{\n padding: '8px 16px',\n backgroundColor: viewMode === '2d' ? '#3498DB' : 'transparent',\n color: viewMode === '2d' ? 'white' : '#2C3E50',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n 2D Office\n </button>\n <button\n onClick={() => { setViewMode('3d'); setCurrentPage('office-3d'); }}\n style={{\n padding: '8px 16px',\n backgroundColor: viewMode === '3d' ? '#3498DB' : 'transparent',\n color: viewMode === '3d' ? 'white' : '#2C3E50',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n 3D Office\n </button>\n </div>\n </div>\n <div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}>\n <span style={{ fontSize: '14px', color: '#7F8C8D' }}>v0.1.0</span>\n <div style={{ width: '8px', height: '8px', backgroundColor: '#2ECC71', borderRadius: '50%' }} />\n </div>\n </nav>\n\n {/* Side Navigation */}\n <div style={{ display: 'flex' }}>\n {viewMode === 'console' && (\n <aside style={{\n width: '200px',\n backgroundColor: 'white',\n borderRight: '1px solid #E0E0E0',\n padding: '16px 0',\n minHeight: 'calc(100vh - 65px)',\n }}>\n {[\n { id: 'dashboard', icon: '📊', label: 'Dashboard' },\n { id: 'agents', icon: '🤖', label: 'Agents' },\n { id: 'channels', icon: '💬', label: 'Channels' },\n { id: 'skills', icon: '⚡', label: 'Skills' },\n { id: 'cron', icon: '⏰', label: 'Cron' },\n { id: 'settings', icon: '⚙️', label: 'Settings' },\n ].map((item) => (\n <button\n key={item.id}\n onClick={() => setCurrentPage(item.id as Page)}\n style={{\n width: '100%',\n padding: '12px 20px',\n backgroundColor: currentPage === item.id ? '#F5F5F5' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: '14px',\n color: currentPage === item.id ? '#2C3E50' : '#7F8C8D',\n fontWeight: currentPage === item.id ? '600' : '400',\n borderLeft: currentPage === item.id ? '3px solid #3498DB' : '3px solid transparent',\n }}\n >\n <span>{item.icon}</span>\n <span>{item.label}</span>\n </button>\n ))}\n </aside>\n )}\n\n {/* Main Content */}\n <main style={{ flex: 1, padding: viewMode === 'console' ? '0' : '0' }}>\n {renderPage()}\n </main>\n </div>\n\n {/* Chat Widget (only in console mode) */}\n {viewMode === 'console' && (\n <ChatDialog\n agents={agents.map(a => ({ id: a.id, name: a.name, status: a.status, avatar: '🤖' }))}\n messages={[]}\n selectedAgentId={agents[0]?.id}\n isStreaming={false}\n onSendMessage={() => {}}\n onAgentSelect={() => {}}\n />\n )}\n </div>\n );\n};\n\nexport default App;\n","/**\n * PoolBot Office Entry Point\n */\n\nimport React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { App } from './App';\n\n// Import global styles (would be created in full implementation)\nimport './styles/globals.css';\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n <React.StrictMode>\n <App />\n </React.StrictMode>\n);\n"],"names":["DashboardPage","stats","alerts","onDismissAlert","onNavigate","StatCard","title","value","subtitle","icon","color","onClick","jsxs","e","jsx","AlertBanner","alert","action","AgentsPage","agents","onCreateAgent","onDeleteAgent","onSelectAgent","showCreateModal","setShowCreateModal","useState","newAgentName","setNewAgentName","selectedModel","setSelectedModel","getStatusColor","status","getStatusEmoji","handleCreate","a","agent","ChannelsPage","channels","onConnect","onDisconnect","onConfigure","getTypeEmoji","type","c","channel","SkillsPage","skills","onInstall","onUninstall","searchQuery","setSearchQuery","selectedCategory","setSelectedCategory","categories","s","filteredSkills","skill","matchesSearch","matchesCategory","cat","CronPage","jobs","onCreateJob","onDeleteJob","onToggleJob","onRunNow","j","job","SettingsPage","gatewayUrl","language","theme","onGatewayChange","onLanguageChange","onThemeChange","onSave","localGateway","setLocalGateway","localLanguage","setLocalLanguage","localTheme","setLocalTheme","saved","setSaved","handleSave","Desk","x","y","width","height","occupied","agentName","deskColor","Chair","rotation","Plant","size","sizeMap","shadowColor","renderPlant","Fragment","_","i","angle","leafX","leafY","CollaborationLines","lines","animated","showLabels","animationOffset","setAnimationOffset","useEffect","interval","prev","getLineColor","line","getLineWidth","index","OfficeLayout2D","showCollaborationLines","showFurniture","onAgentClick","onDeskClick","collaborationLines","useMemo","workingAgents","from","to","plants","plant","React","AgentCharacter","position","scale","groupRef","useRef","headRef","statusColor","useFrame","state","time","canvas","ctx","SkillHologram","activeSkill","hologramRef","pulse","skillRings","radius","THREE.DoubleSide","ring","z","SpawnPortal","onComplete","portalRef","startTime","elapsed","progress","scaleProgress","Environment3D","showGrid","Environment","ContactShadows","CameraController","autoRotate","controls","useThree","OfficeLayout3D","showStats","spawningAgents","setSpawningAgents","handleSpawnComplete","agentId","id","Canvas","PerspectiveCamera","OrbitControls","Stats","ChatDockBar","isOpen","onToggle","onSend","isTyping","disabled","message","setMessage","inputRef","handleSubmit","handleKeyDown","MessageBubble","role","content","timestamp","isStreaming","onCopy","formatTime","ts","getBackgroundColor","getTextColor","getAlignment","getAvatar","formatContent","text","StreamingIndicator","isVisible","AgentSelector","selectedAgentId","onSelect","setIsOpen","dropdownRef","selectedAgent","handleClickOutside","event","ChatDialog","messages","streamingProgress","onSendMessage","onAgentSelect","onCopyMessage","isChatOpen","setIsChatOpen","messagesEndRef","handleCopyMessage","messageId","App","currentPage","setCurrentPage","viewMode","setViewMode","cronJobs","handleNavigate","page","renderPage","item","_a","ReactDOM"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import"./three-vendor-K0SwQi48.js";
2
- //# sourceMappingURL=react-vendor-yPv9nvZX.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-vendor-yPv9nvZX.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}