TUI Dashboard (yqmev)

The yqmev TUI is an interactive terminal dashboard built with Bubble Tea and Lip Gloss. It provides real-time visibility into the MEV engine, live auction streams, bundle monitoring, and an integrated Q AI chat interface -- all from your terminal.

Installation

Go Install

go install github.com/yoorquezt-labs/yoorquezt-mev/cmd/yqtui@latest

Homebrew

brew tap yoorquezt/tap
brew install yqtui

npm

npm install -g @yoorquezt/yqtui

curl

curl -sSL https://install.yoorquezt.io/yqtui | bash

Quick Start

# Connect to local MEV engine
yqtui

# Connect to a remote gateway
yqtui --gateway wss://gateway.yoorquezt.io

# With authentication
YQMEV_API_KEY=your-key yqtui --gateway wss://gateway.yoorquezt.io

Tabs

The TUI has 6 tabs, navigable with Tab / Shift+Tab or number keys 1-6.

1. Overview

Summary of engine health, connected chains, active relays, recent blocks, and P&L.

2. Auction (Live WebSocket)

Real-time sealed-bid auction stream over WebSocket. Displays incoming bids, auction rounds, winners, and settlement status. Data updates in real time via the gateway's subscription API.

┌─ Auction #4821 ──────────────────────────────────┐
│ Status: SETTLING     Block: 19,482,301            │
│ Bids: 14             Winner: 0xA3f2...            │
│ Winning Bid: 0.0847 ETH   Protocol Fee: 0.0042    │
│ Settlement TX: 0x8bc1...  (2 confirmations)       │
└───────────────────────────────────────────────────┘

3. Bundles

Monitor submitted bundles: status (pending, landed, failed), gas usage, profit, and target block. Filter by status or bundle hash.

4. Protection

View OFA-protected transactions. Shows intercepted swaps, detected MEV, backrun status, and user rebate amounts.

5. Intents

Track intent submissions, solver matches, fulfillment progress, and settlement outcomes.

6. Q AI

Integrated Q AI chat. Ask natural language questions about MEV activity, get forensic reports, and trigger engine actions (with confirmation).

You: What's the profit from the last 24 hours?
Q:   Total profit (24h): 2.847 ETH across 142 landed bundles.
     Top strategy: triangular arb (1.23 ETH, 43%).
     Top chain: Ethereum mainnet (2.1 ETH).

Key Bindings

KeyAction
Tab / Shift+TabSwitch tabs
1-6Jump to tab
j / k or Up / DownScroll list
EnterSelect / expand item
/Filter / search
rRefresh current view
q / Ctrl+CQuit
?Show help overlay

Environment Variables

VariableDescriptionDefault
YQMEV_GATEWAY_URLWebSocket gateway URLws://localhost:9099
YQMEV_API_KEYAPI key for authentication(none)
YQMEV_REFRESH_INTERVALData refresh interval2s
YQMEV_THEMEColor theme (dark, light)dark
YQMEV_LOG_FILELog file path(stderr)

Bundle Monitoring

The Bundles tab provides detailed monitoring:

  • Real-time status tracking -- see bundles transition from pending to simulated to landed or failed.
  • Profit breakdown -- gas cost, coinbase transfer, net profit per bundle.
  • Chain grouping -- bundles grouped by target chain with per-chain P&L.
  • Hash lookup -- press / and paste a bundle hash to jump directly to it.
  • Auto-refresh -- configurable polling interval with manual refresh via r.

Q AI Tab Integration

The Q AI tab connects to the Q AI API and supports:

  • Natural language queries about engine state, profits, and strategies.
  • Streaming responses displayed token-by-token.
  • Tool confirmations for mutating actions (e.g., "submit this bundle" requires explicit y confirmation).
  • Context awareness of the current view -- ask "what's this bundle?" while viewing one.
# Example: ask Q AI about a specific bundle
You: Analyze bundle 0xabc123...
Q:   Bundle 0xabc123 is a triangular arb on Ethereum:
     Path: WETH → USDC (Uniswap V3) → DAI (Curve) → WETH (SushiSwap)
     Expected profit: 0.032 ETH (after gas)
     Status: Landed in block 19,482,305

Code Examples

Programmatic Access

The TUI uses the same client SDK available to your applications:

package main

import (
    "context"
    "fmt"
    "github.com/yoorquezt-labs/yoorquezt-sdk-mev-go"
)

func main() {
    c, err := yqmev.Dial("ws://localhost:9099")
    if err != nil {
        panic(err)
    }
    defer c.Close()

    // Subscribe to auction events (same feed as TUI Auction tab)
    ch, err := c.Subscribe(context.Background(), "auction")
    if err != nil {
        panic(err)
    }

    for event := range ch {
        fmt.Printf("Auction event: %s\n", event)
    }
}

TypeScript

import { MEVGatewayClient } from "@yoorquezt/sdk-mev";

const gw = new MEVGatewayClient("ws://localhost:9099");

// Stream auction events
const sub = await gw.subscribe("auction");
sub.on("data", (event) => {
  console.log("Auction:", event);
});
Edit this page