/** * Agent SDK types — mirrors the rendezvous server protocol. */ export interface AnycastAgentOptions { /** WebSocket URL of the rendezvous server (e.g., wss://agents.anycast.com/rendezvous) */ rendezvousUrl: string; /** Agent auth token from the Anycast portal */ token: string; /** Human-readable agent name (e.g., 'anycast-observer') */ name?: string; /** Unique machine identifier (auto-generated if not provided) */ machineId?: string; /** Public key for end-to-end encryption */ publicKey?: string; /** Agent version string */ version?: string; /** Auto-reconnect on disconnect (default: true) */ reconnect?: boolean; /** Reconnect interval in ms (default: 3000) */ reconnectInterval?: number; /** Connection timeout in ms (default: 30000) */ timeout?: number; /** Heartbeat interval in ms (default: 25000) */ heartbeatInterval?: number; /** Portal base URL for preflight (default: https://agents.anycast.com) */ portalUrl?: string; /** Internal API key for usage tracking (POST /api/internal/agents/usage) */ internalKey?: string; /** Auto-save context on disconnect, auto-restore on connect (default: false) */ persistContext?: boolean; /** Discovery mode: 'rendezvous' (default), 'auto' (DHT with fallback), 'dht' (DHT only) */ discoveryMode?: 'rendezvous' | 'dht' | 'auto'; /** Enable WireGuard tunnel support (default: false) */ wireguard?: boolean; } export declare enum ConnectionState { DISCONNECTED = "DISCONNECTED", CONNECTING = "CONNECTING", CONNECTED = "CONNECTED", RECONNECTING = "RECONNECTING" } export interface RegisterMessage { type: 'register'; token: string; machineId: string; publicKey: string; name?: string; version?: string; os?: string; arch?: string; } export interface HeartbeatMessage { type: 'heartbeat'; } export interface ConnectRequestMessage { type: 'connect_request'; targetAgentId: string; sessionId: string; } export interface SignalMessage { type: 'signal'; sessionId: string; targetAgentId: string; signal: { type: 'offer' | 'answer' | 'ice'; data: string; }; } export interface DisconnectMessage { type: 'disconnect'; sessionId: string; } export interface MessageResponseMessage { type: 'message_response'; messageId: string; text: string; error?: string; } export type ClientMessage = RegisterMessage | HeartbeatMessage | ConnectRequestMessage | SignalMessage | DisconnectMessage | MessageResponseMessage; export interface RegisteredMessage { type: 'registered'; agentId: string; tenantId: string; name: string; popIata?: string; } export interface HeartbeatAckMessage { type: 'heartbeat_ack'; timestamp: number; } export interface ConnectIncomingMessage { type: 'connect_incoming'; sessionId: string; fromAgentId: string; fromAgentName: string; } export interface ConnectAcceptedMessage { type: 'connect_accepted'; sessionId: string; agentId: string; agentName: string; publicKey: string; } export interface ConnectRejectedMessage { type: 'connect_rejected'; sessionId: string; reason: string; } export interface SignalForwardMessage { type: 'signal_forward'; sessionId: string; fromAgentId: string; signal: { type: 'offer' | 'answer' | 'ice'; data: string; }; } export interface RelayAssignedMessage { type: 'relay_assigned'; sessionId: string; relayHost: string; relayPort: number; relayToken: string; } export interface AgentStatusMessage { type: 'agent_status'; agentId: string; status: 'online' | 'offline'; } export interface ErrorMessage { type: 'error'; code: string; message: string; fatal?: boolean; } export interface PortalMessageMessage { type: 'portal_message'; messageId: string; text: string; context?: Record; timeoutMs?: number; } export interface InterruptMessage { type: 'interrupt'; reason: string; } export type ServerMessage = RegisteredMessage | HeartbeatAckMessage | ConnectIncomingMessage | ConnectAcceptedMessage | ConnectRejectedMessage | SignalForwardMessage | RelayAssignedMessage | AgentStatusMessage | ErrorMessage | PortalMessageMessage | InterruptMessage; export interface AnycastAgentEvents { connect: (info: { agentId: string; tenantId: string; name: string; popIata?: string; }) => void; disconnect: (reason: string) => void; reconnecting: (attempt: number) => void; 'context_restored': (context: Record | null) => void; message: (payload: { messageId: string; text: string; context?: Record; reply: (text: string) => void; }) => void; peer: (agentId: string, status: 'online' | 'offline') => void; 'connect_incoming': (sessionId: string, fromAgentId: string, fromAgentName: string) => void; 'connect_accepted': (sessionId: string, agentId: string, publicKey: string) => void; 'connect_rejected': (sessionId: string, reason: string) => void; signal: (sessionId: string, fromAgentId: string, signal: { type: string; data: string; }) => void; 'relay_assigned': (sessionId: string, relayHost: string, relayPort: number, relayToken: string) => void; error: (error: AnycastError) => void; stateChange: (state: ConnectionState) => void; interrupted: (data: { reason: string; }) => void; discovery: (info: { mode: 'rendezvous' | 'dht' | 'auto'; fallback: boolean; }) => void; tunnel: (info: { tunnelId: string; localIP: string; peerIP: string; peerAgentId: string; }) => void; } export declare class AnycastError extends Error { code: string; fatal: boolean; constructor(message: string, code: string, fatal?: boolean); } export interface AnycastPluginContext { agentId?: string; agentName?: string; agentToken: string; sessionId?: string; attributes: Record; emit: (eventName: string, data?: Record) => Promise; } export interface AnycastPlugin { name: string; onSessionStart?: (ctx: AnycastPluginContext) => void | Promise; onToolUse?: (ctx: AnycastPluginContext, toolName: string, input?: unknown) => void | Promise; onResult?: (ctx: AnycastPluginContext, usage: { promptTokens: number; completionTokens: number; cacheReadTokens: number; cacheCreationTokens: number; costUsd: number; numTurns: number; durationMs: number; }) => void | Promise; onSessionEnd?: (ctx: AnycastPluginContext) => void | Promise; } //# sourceMappingURL=types.d.ts.map