interface AddEpisodeOptions {
    groupId?: string;
    source?: string;
    sourceDescription?: string;
}
interface SearchOptions {
    groupIds?: string[];
    maxResults?: number;
}
interface GraphitiNode {
    name: string;
    uuid: string;
    summary: string;
    group_id: string;
    [key: string]: unknown;
}
interface GraphitiFact {
    uuid: string;
    fact: string;
    valid_at: string | null;
    invalid_at: string | null;
    [key: string]: unknown;
}
/**
 * MCP client wrapper for the Graphiti temporal knowledge graph.
 *
 * Connects to the Graphiti MCP server running inside the indusk-infra container.
 * Lazy connection — connects on first call, not at construction.
 * Graceful degradation — returns null/empty on connection failure, never throws.
 */
export declare class GraphitiClient {
    private client;
    private transport;
    private connected;
    private connecting;
    private serverUrl;
    private projectName;
    constructor(projectName: string, serverUrl?: string);
    /**
     * Lazily connect to the Graphiti MCP server.
     * Returns true if connected, false if connection failed.
     * Multiple concurrent calls share the same connection attempt.
     */
    connect(): Promise<boolean>;
    private doConnect;
    private getClient;
    /**
     * Add an episode to the knowledge graph.
     *
     * @param name - Short name for the episode (e.g., "auth-refactor decision")
     * @param body - Episode content to extract entities and facts from
     * @param options - groupId defaults to project name, source defaults to "text"
     * @returns Success response or null on failure
     */
    addEpisode(name: string, body: string, options?: AddEpisodeOptions): Promise<{
        success: boolean;
    } | null>;
    /**
     * Search for entity nodes in the knowledge graph.
     *
     * @param query - Natural language search query
     * @param options - groupIds defaults to [projectName, "shared"] for cross-group search
     * @returns Array of matching nodes, or empty array on failure
     */
    searchNodes(query: string, options?: SearchOptions): Promise<GraphitiNode[]>;
    /**
     * Search for facts (relationships between entities) in the knowledge graph.
     *
     * @param query - Natural language search query
     * @param options - groupIds defaults to [projectName, "shared"] for cross-group search
     * @returns Array of matching facts, or empty array on failure
     */
    searchFacts(query: string, options?: SearchOptions): Promise<GraphitiFact[]>;
    /**
     * Check if the Graphiti server is reachable and healthy.
     *
     * @returns Status object or null if unreachable
     */
    getStatus(): Promise<{
        status: string;
    } | null>;
    /**
     * Resolve group IDs for search — always includes "shared" for cross-group search.
     * If caller provides groupIds, uses those. Otherwise defaults to [projectName, "shared"].
     * Deduplicates "shared" if already present.
     */
    private resolveGroupIds;
    /**
     * Disconnect from the Graphiti MCP server.
     */
    disconnect(): Promise<void>;
}
export {};
