import type { Client } from '@libsql/client';
import type { StorageDomains } from '@mastra/core/storage';
import { MastraCompositeStore } from '@mastra/core/storage';
import { AgentsLibSQL } from './domains/agents/index.js';
import { BackgroundTasksLibSQL } from './domains/background-tasks/index.js';
import { BlobsLibSQL } from './domains/blobs/index.js';
import { ChannelsLibSQL } from './domains/channels/index.js';
import { DatasetsLibSQL } from './domains/datasets/index.js';
import { ExperimentsLibSQL } from './domains/experiments/index.js';
import { FavoritesLibSQL } from './domains/favorites/index.js';
import { HarnessLibSQL } from './domains/harness/index.js';
import { MCPClientsLibSQL } from './domains/mcp-clients/index.js';
import { MCPServersLibSQL } from './domains/mcp-servers/index.js';
import { MemoryLibSQL } from './domains/memory/index.js';
import { NotificationsLibSQL } from './domains/notifications/index.js';
import { ObservabilityLibSQL } from './domains/observability/index.js';
import { PromptBlocksLibSQL } from './domains/prompt-blocks/index.js';
import { SchedulesLibSQL } from './domains/schedules/index.js';
import { ScorerDefinitionsLibSQL } from './domains/scorer-definitions/index.js';
import { ScoresLibSQL } from './domains/scores/index.js';
import { SkillsLibSQL } from './domains/skills/index.js';
import { ThreadStateLibSQL } from './domains/thread-state/index.js';
import { ToolProviderConnectionsLibSQL } from './domains/tool-provider-connections/index.js';
import { WorkflowsLibSQL } from './domains/workflows/index.js';
import { WorkspacesLibSQL } from './domains/workspaces/index.js';
export { AgentsLibSQL, BackgroundTasksLibSQL, BlobsLibSQL, ChannelsLibSQL, DatasetsLibSQL, ExperimentsLibSQL, HarnessLibSQL, MCPClientsLibSQL, MCPServersLibSQL, MemoryLibSQL, NotificationsLibSQL, ObservabilityLibSQL, PromptBlocksLibSQL, SchedulesLibSQL, ScorerDefinitionsLibSQL, ScoresLibSQL, SkillsLibSQL, FavoritesLibSQL, ThreadStateLibSQL, ToolProviderConnectionsLibSQL, WorkflowsLibSQL, WorkspacesLibSQL, };
export type { LibSQLDomainConfig } from './db/index.js';
export type LibSQLStorageDomain = keyof StorageDomains;
export type LibSQLLocalPragmaOptions = {
    /**
     * SQLite PRAGMA cache_size value for local databases.
     * Negative values are interpreted as kibibytes by SQLite.
     * @default -16000
     */
    cacheSize?: number;
    /**
     * SQLite PRAGMA mmap_size value in bytes for local databases.
     * @default 134217728
     */
    mmapSize?: number;
};
/**
 * Base configuration options shared across LibSQL configurations
 */
export type LibSQLBaseConfig = {
    id: string;
    /**
     * Maximum number of retries for write operations if an SQLITE_BUSY error occurs.
     * @default 5
     */
    maxRetries?: number;
    /**
     * Initial backoff time in milliseconds for retrying write operations on SQLITE_BUSY.
     * The backoff time will double with each retry (exponential backoff).
     * @default 100
     */
    initialBackoffMs?: number;
    /**
     * SQLite `busy_timeout` (in milliseconds) applied to the underlying connection
     * for local (`file:`/`:memory:`) databases. When a write hits a locked
     * database, the driver waits up to this long for the lock to clear instead of
     * failing immediately with `SQLITE_BUSY`. Requires `@libsql/client` >= 0.17.4,
     * which also ensures the timeout survives connections created after
     * `transaction()` (see libsql-client-ts#288/#345).
     *
     * Has no effect for remote (`libsql://`/`https://`) clients or when an existing
     * `client` is supplied.
     * @default 5000
     */
    connectionTimeoutMs?: number;
    /**
     * Overrides local SQLite PRAGMA values used for startup/read performance.
     * Only applies to local file and in-memory databases.
     */
    localPragmas?: LibSQLLocalPragmaOptions;
    /**
     * When true, automatic initialization (table creation/migrations) is disabled.
     * This is useful for CI/CD pipelines where you want to:
     * 1. Run migrations explicitly during deployment (not at runtime)
     * 2. Use different credentials for schema changes vs runtime operations
     *
     * When disableInit is true:
     * - The storage will not automatically create/alter tables on first use
     * - You must call `storage.init()` explicitly in your CI/CD scripts
     *
     * @example
     * // In CI/CD script:
     * const storage = new LibSQLStore({ ...config, disableInit: false });
     * await storage.init(); // Explicitly run migrations
     *
     * // In runtime application:
     * const storage = new LibSQLStore({ ...config, disableInit: true });
     * // No auto-init, tables must already exist
     */
    disableInit?: boolean;
};
export type LibSQLConfig = (LibSQLBaseConfig & {
    url: string;
    authToken?: string;
}) | (LibSQLBaseConfig & {
    client: Client;
});
/**
 * LibSQL/Turso storage adapter for Mastra.
 *
 * Access domain-specific storage via `getStore()`:
 *
 * @example
 * ```typescript
 * const storage = new LibSQLStore({ id: 'my-store', url: 'file:./dev.db' });
 *
 * // Access memory domain
 * const memory = await storage.getStore('memory');
 * await memory?.saveThread({ thread });
 *
 * // Access workflows domain
 * const workflows = await storage.getStore('workflows');
 * await workflows?.persistWorkflowSnapshot({ workflowName, runId, snapshot });
 * ```
 */
export declare class LibSQLStore extends MastraCompositeStore {
    private client;
    private readonly maxRetries;
    private readonly initialBackoffMs;
    private readonly connectionTimeoutMs;
    private readonly pragmasReady;
    private readonly isLocalDb;
    private readonly localPragmas;
    stores: StorageDomains;
    constructor(config: LibSQLConfig);
    private applyLocalPragmas;
    private getStoresToInit;
    private initDomainsSequentially;
    private initDomainsInParallel;
    init(): Promise<void>;
    /**
     * Closes the underlying libsql client, releasing all OS file handles.
     *
     * For local file databases, first runs PRAGMA wal_checkpoint(TRUNCATE) and
     * switches back to journal_mode=DELETE so that Windows releases the -wal
     * and -shm sidecar files promptly. Without this, the handles stay open
     * until process exit, causing EBUSY errors when callers try to fs.rm the
     * storage directory after Mastra.shutdown().
     *
     * Remote (Turso) databases skip the WAL pragmas and just close the client.
     *
     * Safe to call more than once; subsequent calls are no-ops.
     */
    close(): Promise<void>;
}
export { LibSQLStore as DefaultStorage };
//# sourceMappingURL=index.d.ts.map