import type { NativePluginApiV1, NativePluginPreviewApiV1, PluginActivationApiV1, PluginDisposable } from "./api-types.js";
import type { NativePluginManifestV2, PluginManifestV2 } from "./manifest-types.js";
export type PluginActivationCleanup = void | (() => void | Promise<void>) | PluginDisposable;
export type NativePluginActivation = (api: PluginActivationApiV1) => PluginActivationCleanup | Promise<PluginActivationCleanup>;
export interface NativePluginDefinition {
    activate: NativePluginActivation;
    deactivate?(): void | Promise<void>;
}
/**
 * Defines the default export consumed by the native plugin loader while
 * retaining the activation function's precise type for author tooling.
 */
export declare function definePlugin<T extends NativePluginActivation | NativePluginDefinition>(plugin: T): T;
/**
 * Validates, clones, and freezes a manifest authored in TypeScript. JSON
 * manifests should use parsePluginManifestV2() at their validation boundary.
 */
export declare function definePluginManifest<const T extends PluginManifestV2>(manifest: T): T;
export type ActiveNativePluginApi = NativePluginApiV1;
export type PreviewNativePluginApi = NativePluginPreviewApiV1;
export type NativePluginManifest = NativePluginManifestV2;
