/** * State service abstraction for persisting user preferences * Supports multiple backends: * - FileStateProvider: File-based storage for stdio/npm usage (single-user) * - PostgresStateProvider: PostgreSQL storage for HTTP/SSE server (multi-user) */ /** * State data structure */ export interface StateData { defaultProjectUuid?: string; baseUrl?: string; } /** * State provider interface - abstraction for different storage backends */ export interface StateProvider { /** * Get the default project UUID for a user * @param userIdentifier - User email or identifier (ignored in single-user mode) */ getDefaultProjectUuid(userIdentifier?: string): Promise; /** * Set the default project UUID for a user * @param projectUuid - The project UUID to set as default * @param userIdentifier - User email or identifier (ignored in single-user mode) */ setDefaultProjectUuid(projectUuid: string, userIdentifier?: string): Promise; /** * Clear the default project UUID for a user * @param userIdentifier - User email or identifier (ignored in single-user mode) */ clearDefaultProjectUuid(userIdentifier?: string): Promise; /** * Get the base URL (only used in stdio mode for instance switching) * @param userIdentifier - User email or identifier (ignored in single-user mode) */ getBaseUrl(userIdentifier?: string): Promise; /** * Set the base URL (only used in stdio mode for instance switching) * @param baseUrl - The base URL to set * @param userIdentifier - User email or identifier (ignored in single-user mode) */ setBaseUrl(baseUrl: string, userIdentifier?: string): Promise; /** * Clear the base URL * @param userIdentifier - User email or identifier (ignored in single-user mode) */ clearBaseUrl(userIdentifier?: string): Promise; /** * Clear all state for a user * @param userIdentifier - User email or identifier (ignored in single-user mode) */ clearAll(userIdentifier?: string): Promise; /** * Get all state data for a user * @param userIdentifier - User email or identifier (ignored in single-user mode) */ getAll(userIdentifier?: string): Promise; } /** * File-based state provider for stdio/npm usage (single-user mode) * Stores state in ~/.neubird-mcp/state.json (falls back to ~/.hawkeye-mcp/state.json for existing installs) */ export declare class FileStateProvider implements StateProvider { private statePath; private state; constructor(); /** * Load state from file (synchronous, called on construction) */ private loadSync; /** * Save state to file */ private save; getDefaultProjectUuid(_userIdentifier?: string): Promise; setDefaultProjectUuid(projectUuid: string, _userIdentifier?: string): Promise; clearDefaultProjectUuid(_userIdentifier?: string): Promise; getBaseUrl(_userIdentifier?: string): Promise; setBaseUrl(baseUrl: string, _userIdentifier?: string): Promise; clearBaseUrl(_userIdentifier?: string): Promise; clearAll(_userIdentifier?: string): Promise; getAll(_userIdentifier?: string): Promise; } /** * Get the file state provider singleton * Used for stdio mode (backwards compatibility) */ export declare function getFileStateProvider(): FileStateProvider; /** * State provider factory - creates the appropriate provider based on transport mode * @param transportMode - 'stdio' or 'http' (defaults to TRANSPORT_MODE env var or 'stdio') */ export declare function createStateProviderAsync(transportMode?: string): Promise; /** * State provider factory (synchronous version) * For HTTP mode, this will throw - use createStateProviderAsync instead * @param transportMode - 'stdio' or 'http' (defaults to TRANSPORT_MODE env var or 'stdio') */ export declare function createStateProvider(transportMode?: string): StateProvider; /** * Get the default state provider * Automatically selects the appropriate backend based on TRANSPORT_MODE */ export declare function getStateProvider(): StateProvider; /** * Set a custom state provider (useful for testing or dependency injection) */ export declare function setStateProvider(provider: StateProvider): void; /** * Reset the state provider (useful for testing) */ export declare function resetStateProvider(): void;