Newer
Older
navi-1 / clients / terminal / tui / events.py
"""Typed events used inside the TUI app and between components."""

from __future__ import annotations

from dataclasses import dataclass

from textual.message import Message


class WsEvent(Message):
    """Raw WebSocket event forwarded from the backend."""

    def __init__(self, payload: dict) -> None:
        self.payload = payload
        super().__init__()


class ConnectionStatusChanged(Message):
    """Fired when WebSocket connection state changes."""

    def __init__(self, connected: bool, detail: str = "") -> None:
        self.connected = connected
        self.detail = detail
        super().__init__()


class UserSubmitted(Message):
    """User pressed Enter in the input box."""

    def __init__(self, text: str) -> None:
        self.text = text
        super().__init__()


class CommandTriggered(Message):
    """User typed a slash command."""

    def __init__(self, name: str, args: str) -> None:
        self.name = name
        self.args = args
        super().__init__()


class PermissionRequest(Message):
    """Tool call requires destructive-operation confirmation."""

    def __init__(self, tool: str, action: str, details: str, callback) -> None:
        self.tool = tool
        self.action = action
        self.details = details
        self.callback = callback
        super().__init__()


@dataclass
class SessionInfo:
    id: str
    profile_id: str
    title: str = ""
    created_at: str = ""


class SessionListUpdated(Message):
    """Sessions list changed (loaded, switched, created)."""

    def __init__(self, sessions: list[SessionInfo], current_id: str | None) -> None:
        self.sessions = sessions
        self.current_id = current_id
        super().__init__()