import type { SupabaseClient } from '@supabase/supabase-js';
import type { AgentBasicInformation } from '../../../../book-2.0/agent-source/AgentBasicInformation';
import type { string_book } from '../../../../book-2.0/agent-source/string_book';
import type { string_agent_name, string_agent_permanent_id } from '../../../../types/typeAliases';
import { AgentCollectionInSupabaseOptions } from './AgentCollectionInSupabaseOptions';
import type { AgentsDatabaseSchema } from './AgentsDatabaseSchema';
/**
 * Options for creating a new agent entry.
 */
type CreateAgentOptions = {
    /**
     * Visibility for the new agent.
     */
    readonly visibility?: 'PRIVATE' | 'UNLISTED' | 'PUBLIC';
    /**
     * Folder identifier to assign the new agent to.
     */
    readonly folderId?: number | null;
    /**
     * Sort order for the agent within its parent folder.
     */
    readonly sortOrder?: number;
};
/**
 * Optional controls for persisting one source update.
 */
type UpdateAgentSourceOptions = {
    /**
     * Optional human-readable history milestone name saved with the snapshot.
     */
    readonly versionName?: string | null;
};
/**
 * One saved Agent history row without the full source payload.
 */
type AgentHistoryMetadata = {
    readonly id: number;
    readonly createdAt: string;
    readonly agentName: string;
    readonly agentHash: string;
    readonly previousAgentHash: string | null;
    readonly promptbookEngineVersion: string;
    readonly versionName: string | null;
};
/**
 * One saved Agent history row including the full source snapshot.
 */
type AgentHistorySnapshot = AgentHistoryMetadata & {
    readonly agentSource: string;
};
/**
 * Agent collection stored in a Supabase table.
 *
 * This class provides a way to manage a collection of agents (pipelines) using Supabase
 * as the storage backend. It supports listing, creating, updating, and soft-deleting agents.
 *
 * Note: This object can work both from Node.js and browser environment depending on the Supabase client provided.
 *
 * @public exported from `@promptbook/core`
 * <- TODO: [🐱‍🚀] Move to `@promptbook/supabase` package
 */
export declare class AgentCollectionInSupabase {
    private readonly supabaseClient;
    readonly options?: AgentCollectionInSupabaseOptions | undefined;
    /**
     * @param supabaseClient - The initialized Supabase client
     * @param options - Configuration options for the collection (e.g., table prefix, verbosity)
     */
    constructor(supabaseClient: SupabaseClient<AgentsDatabaseSchema>, options?: AgentCollectionInSupabaseOptions | undefined);
    /**
     * Gets all agents in the collection
     */
    listAgents(): Promise<ReadonlyArray<AgentBasicInformation>>;
    /**
     * Retrieves the permanent ID of an agent by its name or permanent ID.
     */
    getAgentPermanentId(agentNameOrPermanentId: string_agent_name | string_agent_permanent_id): Promise<string_agent_permanent_id>;
    /**
     * Retrieves the source code of an agent by its name or permanent ID.
     */
    getAgentSource(agentNameOrPermanentId: string_agent_name | string_agent_permanent_id): Promise<string_book>;
    /**
     * Creates a new agent in the collection
     *
     * Note: You can set 'PARENT' in the agent source to inherit from another agent in the collection.
     *
     * @param agentSource - Source content of the agent.
     * @param options - Optional folder placement and ordering data.
     */
    createAgent(agentSource: string_book, options?: CreateAgentOptions): Promise<AgentBasicInformation & Required<Pick<AgentBasicInformation, 'permanentId'>>>;
    /**
     * Updates an existing agent in the collection
     */
    updateAgentSource(permanentId: string_agent_permanent_id, agentSource: string_book, options?: UpdateAgentSourceOptions): Promise<void>;
    /**
     * List agents that are soft deleted (deletedAt IS NOT NULL)
     */
    listDeletedAgents(): Promise<ReadonlyArray<AgentBasicInformation>>;
    /**
     * List history of an agent
     */
    listAgentHistory(permanentId: string_agent_permanent_id): Promise<ReadonlyArray<AgentHistoryMetadata>>;
    /**
     * List history snapshots of an agent including full source snapshots.
     */
    listAgentHistorySnapshots(permanentId: string_agent_permanent_id): Promise<ReadonlyArray<AgentHistorySnapshot>>;
    /**
     * Restore a soft-deleted agent by setting deletedAt to NULL
     */
    restoreAgent(permanentId: string_agent_permanent_id): Promise<void>;
    /**
     * Restore an agent from a specific history entry
     *
     * This will update the current agent with the source from the history entry
     */
    restoreAgentFromHistory(historyId: number, expectedPermanentId?: string_agent_permanent_id): Promise<void>;
    /**
     * Soft delete an agent by setting deletedAt to current timestamp
     */
    deleteAgent(permanentId: string_agent_permanent_id): Promise<void>;
    /**
     * Get the Supabase table name with prefix
     *
     * @param tableName - The original table name
     * @returns The prefixed table name
     */
    private getTableName;
    /**
     * Persists one agent history row and throws when the insert fails.
     *
     * @param historyRow - Row to insert into `AgentHistory`.
     */
    private insertAgentHistoryRow;
    /**
     * Shared loader for Agent history rows.
     *
     * @param permanentId - Agent permanent identifier.
     * @param includeSource - Whether to include full source snapshots.
     * @returns Agent history rows sorted by creation time descending.
     */
    private listAgentHistoryInternal;
}
export {};
/**
 * TODO: [🐱‍🚀] Implement it here correctly and update JSDoc comments here, and on interface + other implementations
 * TODO: Write unit test
 * TODO: [🧠][🚙] `AgentXxx` vs `AgentsXxx` naming convention
 */
