{"version":3,"sources":["../src/Dashboard.ts"],"sourcesContent":["/**\n * @akaoio/dashboard - Universal Communication CLI\n * For BOTH humans and agents to communicate via AIR network\n * Uses @akaoio/tui for proper terminal UI\n */\n\nimport Gun from '@akaoio/gun';\nimport { color, Color, reset, Viewport } from '@akaoio/tui';\nimport readline from 'readline';\nimport type { DashboardConfig, DashboardState } from './types.js';\n\nexport interface AgentMode {\n  id: string;\n  team: string;\n  role: string;\n}\n\nexport interface MessageOptions {\n  to?: string;\n  team?: boolean;\n}\n\nexport class Dashboard {\n  private agentMode: AgentMode | null;\n  private gun: any;\n  private agents: Map<string, any>;\n  private messageCount: number;\n  private startTime: number;\n  private rl: readline.Interface | null;\n  private state: DashboardState;\n  private viewport: any;\n\n  constructor(config: DashboardConfig = {}) {\n    this.agentMode = config.agentMode || null;\n    \n    // Initialize viewport for responsive terminal handling\n    this.viewport = Viewport.getInstance();\n    \n    this.gun = Gun({\n      peers: config.peers || ['https://air.akao.io:8765/gun'],\n      localStorage: false,\n      radisk: false,\n      file: false,\n      web: false,\n      multicast: false,\n      axe: false,\n      ...config.gunOptions\n    });\n    \n    this.agents = new Map();\n    this.messageCount = 0;\n    this.startTime = Date.now();\n    this.rl = null;\n    \n    // Initialize state with terminal info\n    const dims = this.viewport.getDimensions();\n    const caps = this.viewport.getCapabilities();\n    \n    this.state = {\n      agents: new Map(),\n      messages: [],\n      metrics: {\n        messageCount: 0,\n        agentCount: 0,\n        uptime: 0,\n        networkLatency: 0\n      },\n      startTime: Date.now(),\n      isRunning: false,\n      terminal: {\n        width: dims.width,\n        height: dims.height,\n        capabilities: caps\n      }\n    };\n    \n    // Handle terminal resize events\n    this.viewport.onResize((newDims) => {\n      this.state.terminal = {\n        width: newDims.width,\n        height: newDims.height,\n        capabilities: this.viewport.getCapabilities()\n      };\n      this.handleResize();\n    });\n  }\n  \n  // CLI mode for agents\n  sendAgentMessage(message: string, options: MessageOptions = {}): void {\n    const agentId = this.agentMode!.id;\n    const team = this.agentMode!.team;\n    \n    if (options.to) {\n      // Direct message\n      this.gun.get('agents').get(options.to).get('inbox').get(Date.now()).put({\n        from: agentId,\n        to: options.to,\n        message: message,\n        timestamp: Date.now()\n      });\n      console.log(`➡️ Sent to ${options.to}: ${message}`);\n      \n    } else if (options.team) {\n      // Team broadcast\n      this.gun.get('teams').get(team).get('messages').get(Date.now()).put({\n        from: agentId,\n        message: message,\n        timestamp: Date.now()\n      });\n      console.log(`📣 Broadcast to team ${team}: ${message}`);\n      \n    } else {\n      // Global broadcast\n      const msg = {\n        from: agentId,\n        team: team,\n        message: message,\n        timestamp: Date.now()\n      };\n      \n      this.gun.get('broadcast').get(Date.now()).put(msg);\n      this.gun.get('air-dashboard').get('messages').get(Date.now()).put(msg);\n      console.log(`🌐 Global broadcast: ${message}`);\n    }\n    \n    process.exit(0);\n  }\n  \n  // Monitor mode - just watch\n  async start(): Promise<void> {\n    this.state.isRunning = true;\n    console.clear();\n    this.printHeader();\n    \n    // Monitor agents\n    this.gun.get('agents').map().on((data: any, key: string) => {\n      if (data && key) {\n        this.agents.set(key, data);\n        this.state.agents.set(key, data);\n        this.state.metrics.agentCount = this.agents.size;\n        this.render();\n      }\n    });\n    \n    // Monitor all messages\n    this.gun.get('air-dashboard').get('messages').map().on((data: any) => {\n      if (data && data.from && data.message) {\n        this.messageCount++;\n        this.state.metrics.messageCount = this.messageCount;\n        this.state.messages.push({\n          from: data.from,\n          text: data.message,\n          timestamp: new Date().toLocaleTimeString()\n        });\n        if (this.state.messages.length > 100) {\n          this.state.messages.shift();\n        }\n        this.logMessage(data.from, data.message, data.team);\n      }\n    });\n    \n    // Monitor broadcasts\n    this.gun.get('broadcast').map().on((data: any) => {\n      if (data && data.from && data.message) {\n        this.messageCount++;\n        this.state.metrics.messageCount = this.messageCount;\n        this.logMessage(data.from, data.message, data.team || 'broadcast');\n      }\n    });\n    \n    // Update uptime\n    setInterval(() => {\n      this.state.metrics.uptime = Math.floor((Date.now() - this.startTime) / 1000);\n      this.render();\n    }, 1000);\n    \n    this.render();\n  }\n  \n  // Interactive mode for humans\n  startInteractive(): void {\n    if (this.agentMode) {\n      this.startAgentInteractive();\n    } else {\n      this.startHumanInteractive();\n    }\n  }\n  \n  private startHumanInteractive(): void {\n    console.clear();\n    this.printHeader();\n    console.log('');\n    console.log('📡 Connecting to AIR network...');\n    console.log('Type your message and press Enter. Type /help for commands.\\n');\n    \n    // Monitor agents\n    this.gun.get('agents').map().on((data: any, key: string) => {\n      if (data && key) {\n        this.agents.set(key, data);\n        this.render();\n      }\n    });\n    \n    // Monitor messages\n    this.gun.get('air-dashboard').get('messages').map().on((data: any) => {\n      if (data && data.from && data.message) {\n        this.messageCount++;\n        this.logMessage(data.from, data.message, data.team);\n      }\n    });\n    \n    // Setup input\n    this.rl = readline.createInterface({\n      input: process.stdin,\n      output: process.stdout,\n      prompt: '> '\n    });\n    \n    this.rl.prompt();\n    \n    this.rl.on('line', (line: string) => {\n      const cmd = line.trim();\n      \n      if (cmd === '/help') {\n        console.log('\\nCommands:');\n        console.log('  /to <agent> <message>  - Send direct message');\n        console.log('  /team <team> <message> - Broadcast to team');\n        console.log('  /agents               - List online agents');\n        console.log('  /clear                - Clear screen');\n        console.log('  /exit                 - Exit dashboard\\n');\n        \n      } else if (cmd.startsWith('/to ')) {\n        const parts = cmd.substring(4).split(' ');\n        const target = parts[0];\n        const msg = parts.slice(1).join(' ');\n        this.sendHumanMessage(msg, { to: target });\n        \n      } else if (cmd.startsWith('/team ')) {\n        const parts = cmd.substring(6).split(' ');\n        const team = parts[0];\n        const msg = parts.slice(1).join(' ');\n        this.sendHumanMessage(msg, { team: true });\n        \n      } else if (cmd === '/agents') {\n        console.log('\\n📊 Online Agents:');\n        this.agents.forEach((data, id) => {\n          console.log(`  ${id} (${data.team}): ${data.status}`);\n        });\n        console.log('');\n        \n      } else if (cmd === '/clear') {\n        console.clear();\n        \n      } else if (cmd === '/exit') {\n        console.log('\\n👋 Goodbye!');\n        process.exit(0);\n        \n      } else if (cmd) {\n        // Default to global broadcast\n        this.sendHumanMessage(cmd);\n      }\n      \n      this.rl!.prompt();\n    });\n    \n    this.rl.on('SIGINT', () => {\n      console.log('\\n👋 Dashboard shutting down...');\n      process.exit(0);\n    });\n  }\n  \n  private startAgentInteractive(): void {\n    // Agent interactive mode - listen and respond\n    console.log(`🤖 ${this.agentMode!.id} connected to AIR network`);\n    console.log('Listening for messages...\\n');\n    \n    // Register agent\n    this.gun.get('agents').get(this.agentMode!.id).put({\n      team: this.agentMode!.team,\n      role: this.agentMode!.role,\n      status: 'online',\n      timestamp: Date.now()\n    });\n    \n    // Listen for direct messages\n    this.gun.get('agents').get(this.agentMode!.id).get('inbox').map().on((msg: any) => {\n      if (msg && msg.from && msg.message) {\n        console.log(`📨 Direct from ${msg.from}: ${msg.message}`);\n        \n        // Auto-respond\n        if (msg.message.includes('status')) {\n          this.sendAgentMessage(`Status: Online and operational`, { to: msg.from });\n        }\n      }\n    });\n    \n    // Listen for team messages\n    this.gun.get('teams').get(this.agentMode!.team).get('messages').map().on((msg: any) => {\n      if (msg && msg.from !== this.agentMode!.id) {\n        console.log(`📢 Team ${this.agentMode!.team} from ${msg.from}: ${msg.message}`);\n      }\n    });\n    \n    // Keep running\n    setInterval(() => {\n      process.stdout.write('.');\n    }, 10000);\n  }\n  \n  private sendHumanMessage(message: string, options: MessageOptions = {}): void {\n    const msg = {\n      from: 'human',\n      message: message,\n      team: options.team ? 'dashboard' : undefined,\n      timestamp: Date.now()\n    };\n    \n    if (options.to) {\n      // Direct message\n      this.gun.get('agents').get(options.to).get('inbox').get(Date.now()).put({\n        from: 'human',\n        to: options.to,\n        message: message,\n        timestamp: Date.now()\n      });\n      console.log(`➡️ Sent to ${options.to}: ${message}`);\n    } else {\n      // Broadcast\n      this.gun.get('air-dashboard').get('messages').get(Date.now()).put(msg);\n      console.log(`🌐 Broadcast: ${message}`);\n    }\n  }\n  \n  private render(): void {\n    const uptime = Math.floor((Date.now() - this.startTime) / 1000);\n    const dims = this.viewport.getDimensions();\n    const breakpoint = this.viewport.getBreakpoint();\n    \n    // Adaptive status line based on terminal size\n    let statusLine;\n    if (dims.width < 60) {\n      // Compact mobile view\n      statusLine = `📊 ${this.agents.size}/34 | ${this.messageCount}msg | ${uptime}s >`;\n    } else if (dims.width < 100) {\n      // Standard view\n      statusLine = `📊 Agents: ${this.agents.size}/34 | Messages: ${this.messageCount} | ${uptime}s >`;\n    } else {\n      // Extended view with terminal info\n      const caps = this.viewport.getCapabilities();\n      const terminalInfo = caps.terminalProgram ? ` | ${caps.terminalProgram}` : '';\n      statusLine = `📊 Agents: ${this.agents.size}/34 | Messages: ${this.messageCount} | Uptime: ${uptime}s | Terminal: ${dims.width}×${dims.height} (${breakpoint})${terminalInfo} >`;\n    }\n    \n    process.stdout.write(`\\r${statusLine}`);\n  }\n  \n  private handleResize(): void {\n    // Clear screen and re-render on resize\n    console.clear();\n    this.printHeader();\n    this.render();\n  }\n  \n  private printHeader(): void {\n    const dims = this.viewport.getDimensions();\n    const caps = this.viewport.getCapabilities();\n    \n    // Responsive header based on terminal size\n    if (dims.width < 60) {\n      // Mobile header\n      console.log('🌐 AIR Dashboard');\n      console.log('air.akao.io:8765');\n    } else {\n      // Full header\n      const borderLength = Math.min(dims.width, 70);\n      const border = '═'.repeat(borderLength);\n      console.log('╔' + border + '╗');\n      console.log('║            🌐 AIR Living Agent Network Dashboard                    ║');\n      console.log('║                  https://air.akao.io:8765/gun                      ║');\n      console.log('╚' + border + '╝');\n    }\n    \n    console.log('');\n    \n    // Show terminal capabilities in debug mode\n    if (process.env.DEBUG?.includes('dashboard')) {\n      console.log(`🖥️  Terminal: ${dims.width}×${dims.height}, ${caps.terminalProgram || 'Unknown'}, Breakpoint: ${this.viewport.getBreakpoint()}`);\n    }\n    \n    console.log('📡 Monitoring AIR network (read-only)...\\n');\n  }\n  \n  private logMessage(from: string, message: string, team?: string): void {\n    const time = new Date().toLocaleTimeString();\n    let coloredMessage: string;\n    \n    // Use @akaoio/tui color functions for team colors\n    if (team === 'meta') {\n      coloredMessage = `${color.call(this, Color.Magenta)}[${time}] ${from}: ${message}${reset()}`;\n    } else if (team === 'core-fix') {\n      coloredMessage = `${color.call(this, Color.Red)}[${time}] ${from}: ${message}${reset()}`;\n    } else if (team === 'security') {\n      coloredMessage = `${color.call(this, Color.Yellow)}[${time}] ${from}: ${message}${reset()}`;\n    } else if (team === 'air' || team === 'team-air') {\n      coloredMessage = `${color.call(this, Color.Cyan)}[${time}] ${from}: ${message}${reset()}`;\n    } else {\n      coloredMessage = `${color.call(this, Color.White)}[${time}] ${from}: ${message}${reset()}`;\n    }\n    \n    console.log('\\n' + coloredMessage);\n    this.render();\n  }\n  \n  // Public API methods\n  public stop(): void {\n    this.state.isRunning = false;\n    if (this.rl) {\n      this.rl.close();\n    }\n  }\n  \n  public getState(): DashboardState {\n    return { ...this.state };\n  }\n  \n  public clearMessages(): void {\n    this.state.messages = [];\n    this.messageCount = 0;\n    this.state.metrics.messageCount = 0;\n    this.render();\n  }\n  \n  public async connectAgent(agentId: string, agentData: any): Promise<void> {\n    this.gun.get('agents').get(agentId).put({\n      ...agentData,\n      timestamp: Date.now()\n    });\n  }\n  \n  public async sendMessage(from: string, text: string, metadata?: any): Promise<void> {\n    const msg = {\n      from: from,\n      message: text,\n      ...metadata,\n      timestamp: Date.now()\n    };\n    \n    this.gun.get('air-dashboard').get('messages').get(Date.now()).put(msg);\n  }\n}\n\nexport default Dashboard;"],"mappings":"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","names":["Gun","readline"]}