export type Role = 'admin' | 'public';
export type Channel = 'browser' | 'whatsapp' | 'telegram' | 'webchat' | 'email';
export interface SpawnRequest {
    senderId: string;
    role: Role;
    channel: Channel;
}
export interface Session {
    /** intrinsic claude session id (the JSONL basename Claude
     *  Code wrote on disk). Single identifier per Claude process for its
     *  entire lifetime; identical across alive→ended and across manager
     *  restarts. The manager mints zero ids of its own. */
    sessionId: string;
    pid: number;
    url: string;
    startedAt: string;
    senderId: string;
    role: Role;
    channel: Channel;
}
export interface PtyHandle {
    readonly pid: number;
    onData(cb: (data: string) => void): {
        dispose(): void;
    };
    onExit(cb: (e: {
        exitCode: number;
        signal?: number;
    }) => void): {
        dispose(): void;
    };
    write(data: string): void;
    kill(signal?: string): void;
    /** Release the pty master fd. Task 170 — node-pty's IPty typings omit
     *  this, but UnixTerminal exposes it; without it the master fd lingers
     *  until V8 GC finalizes the IPty's socket, accumulating under load.
     *  stopSession calls this with `?.()` so test mocks may omit it. */
    destroy?(): void;
}
export type Logger = (line: string) => void;
//# sourceMappingURL=types.d.ts.map