/** * AgentWorker — Standalone agent process that registers with the daemon, * connects via WebSocket, sends heartbeats, and executes tasks. * * Modes: * - In-process: Spawned by `memi agent spawn `, uses engine directly * - Remote: Connects to a running daemon via WebSocket on ports 9223-9232 * * Usage: * Spawned by `memi agent spawn ` or run directly. * Connects to the bridge, registers itself, sends heartbeats, * and claims tasks matching its role. */ import { EventEmitter } from "events"; import type { AgentRegistryEntry, AgentRole } from "../plugin/shared/contracts.js"; export type AgentWorkerMode = "in-process" | "remote"; export interface AgentWorkerConfig { id: string; name: string; role: AgentRole; mode: AgentWorkerMode; daemonHost: string; daemonPort: number; heartbeatIntervalMs: number; reconnectIntervalMs: number; } export declare class AgentWorker extends EventEmitter { private config; private heartbeatTimer; private reconnectTimer; private ws; private running; private _connected; constructor(config: Partial & { role: AgentRole; }); /** Build the registry entry for this worker. */ toRegistryEntry(): AgentRegistryEntry; /** Start the worker. In remote mode, connects to daemon via WebSocket. */ start(): Promise; /** Stop the worker and disconnect. */ stop(): void; get id(): string; get role(): AgentRole; get name(): string; get isRunning(): boolean; get connected(): boolean; get mode(): AgentWorkerMode; /** Send a task result back to the daemon (remote mode). */ sendTaskResult(taskId: string, result?: unknown, error?: string): void; /** Connect to the daemon by scanning ports 9223-9232. */ private connectRemote; private connectToPort; private setupMessageHandler; private handleTaskEnvelope; private scheduleReconnect; /** Send heartbeat ping over WebSocket (remote mode). */ private sendHeartbeat; /** Get capabilities for this role. */ private getCapabilities; }