import type { CatalogSource, RemoteCatalog } from '../types/index.js'; export declare const DEFAULT_CATALOG_URL = "https://raw.githubusercontent.com/pathcosmos/slaminar/main/catalog/catalog.json"; export interface FetchResult { catalog: RemoteCatalog; etag?: string; notModified: boolean; } /** * Load a catalog from a local filesystem path. Returns the same `FetchResult` * shape as `fetchRemoteCatalog()` so downstream code (merger, cache) can stay * transport-agnostic. No caching is applied here — local files are cheap to * read and rely on filesystem timestamps, not HTTP ETags. */ export declare function fetchLocalCatalog(uri: string): Promise; /** * Dispatcher — route a `CatalogSource` to the correct fetcher based on * `source.type`. Lets the resolver stay oblivious to transport details. */ export declare function fetchCatalogBySource(source: CatalogSource, etag?: string): Promise; export declare function validateCatalogSchema(data: unknown): data is RemoteCatalog; /** * v0.9.2 P0-8 (F8.a): compare a catalog's `minSlaminarVersion` against the * installed slaminar version. Returns `true` if installed >= required. * * Pragmatic semver: splits on `.`, compares numeric segments left-to-right. * Pre-release suffixes are not honored (uncommon for slaminar). This is a * policy gate, not a full semver library — good enough to reject a catalog * that declares `minSlaminarVersion: "99.0.0"` while we're on 0.9.2. */ export declare function meetsMinSlaminarVersion(minVersion: string, installedVersion?: string): boolean; export declare class IncompatibleCatalogVersionError extends Error { readonly minSlaminarVersion: string; readonly installedVersion: string; readonly sourceUri: string; constructor(minSlaminarVersion: string, installedVersion: string, sourceUri: string); } export declare function fetchRemoteCatalog(url?: string, etag?: string): Promise;