import type { EnvironmentId } from "@t3tools/contracts"; import type { AtomCommandResult } from "@t3tools/client-runtime/state/runtime"; import { isAtomCommandInterrupted, squashAtomCommandFailure, } from "@t3tools/client-runtime/state/runtime"; type RefreshProvidersTarget = { readonly environmentId: EnvironmentId; readonly input: { readonly refreshModels: true }; }; /** Explicit model-picker refresh. Repeated taps share the pending discovery. */ export function createProviderCatalogRefreshRunner( refreshProviders: (target: RefreshProvidersTarget) => Promise, ) { let pending: Promise | null = null; return (environmentId: EnvironmentId): Promise => { if (pending) return pending; pending = refreshProviders({ environmentId, input: { refreshModels: true } }).finally(() => { pending = null; }); return pending; }; } export function providerCatalogRefreshError( result: AtomCommandResult, ): string | null { if (result._tag !== "Failure" || isAtomCommandInterrupted(result)) return null; const error = squashAtomCommandFailure(result); return error instanceof Error ? error.message : "Provider discovery failed."; }