/**
 * OrchestratorHub — the one thing the web server talks to for cross-agent
 * session state. Owns every registered AgentObserver, merges their sessions
 * into one normalized list, and re-emits a single "update" event.
 *
 * Replaces the bare single-purpose ClaudeCodeWatcher wiring in server.ts:
 * instead of one watcher, the hub fans out over all enabled integrations.
 */
import { EventEmitter } from "node:events";
import type { AgentIntegrationConfig, AgentSession, VisibilityTier } from "./types.js";
export interface OrchestratorConfig {
    /** Per-integration config, keyed by integration name. */
    integrations: Record<string, AgentIntegrationConfig>;
    /** Global visibility tier; integrations may override per-entry. */
    visibility: VisibilityTier;
}
/** Default config when ~/.lisa/agents.json is absent: just Claude Code, at
 *  the "activity" tier (Tier 2 — structural, no conversation content). */
export declare const DEFAULT_ORCHESTRATOR_CONFIG: OrchestratorConfig;
type Log = (msg: string) => void;
export declare class OrchestratorHub extends EventEmitter {
    private observers;
    private readonly cfg;
    private readonly log;
    private started;
    private readonly registerBuiltins;
    constructor(cfg: OrchestratorConfig, opts?: {
        log?: Log;
        registerBuiltins?: boolean;
    });
    /** Instantiate + start every enabled integration. Idempotent. */
    start(): Promise<void>;
    stop(): Promise<void>;
    /**
     * Merged snapshot across all observers. Sorted by recency (newest first)
     * so the UI + advisor see a single ranked stream.
     */
    list(): AgentSession[];
    /** Sessions for one agent kind. */
    listByAgent(agent: string): AgentSession[];
}
/** Load ~/.lisa/agents.json, falling back to the default config. */
export declare function loadOrchestratorConfig(path: string): Promise<OrchestratorConfig>;
export {};
//# sourceMappingURL=hub.d.ts.map