import type { OmniCoreResult } from './baseToolAdapter.js';
export type OmniOperationGate = {
    accepted?: boolean;
    allowed?: boolean;
    reason?: string;
};
export type OmniOperationContext = {
    runtimeId?: string;
    sessionId?: string;
    invocationId?: string;
    dryRun?: boolean;
    guard?: OmniOperationGate;
    allowedInputRoots?: readonly string[];
    allowedOutputRoots?: readonly string[];
    grantedPermissions?: readonly string[];
    requestedScopes?: readonly string[];
    allowedScopes?: readonly string[];
    contract?: OmniOperationGate;
    governance?: OmniOperationGate;
    auditMetadata?: Readonly<Record<string, unknown>>;
};
export type OmniOperationRequest = {
    target?: unknown;
    context?: unknown;
    provider?: OmniOperationProvider;
};
export type OmniOperationProviderRequest = {
    operation: string;
    inputArtifactId?: string;
    parameters: Readonly<Record<string, unknown>>;
};
export type OmniOperationProviderResult = {
    artifactId: string;
    mimeType?: string;
    metadata?: Readonly<Record<string, unknown>>;
};
export type OmniOperationProvider = (request: OmniOperationProviderRequest) => Promise<OmniOperationProviderResult> | OmniOperationProviderResult;
export type OmniOperationDependencyProfile = {
    nativeBinaryRequired: false;
    runtimeOwnsPackageLoading: true;
    packageProfile: string;
    packages: Readonly<Record<string, string>>;
};
export type OmniOperationConfig = {
    toolId: string;
    capability: string;
    route: string;
    mediaKind: 'audio' | 'image' | 'video';
    action: string;
    outputResource: 'audio' | 'image' | 'video' | 'text';
    permissionsRequired: readonly string[];
    requiresInput: boolean;
    requiresOutput: boolean;
    requiresPrompt: boolean;
    unsafeSideEffects: boolean;
    runtimeOperation: string;
    dependencyProfile: OmniOperationDependencyProfile;
};
export type OmniOperationDescriptor = {
    toolId: string;
    capability: string;
    route: string;
    defaultDryRun: true;
    tapOwnsApproval: true;
    permissionsRequired: readonly string[];
    runtimeEntry: 'BaseToolExecutorPort.omni.transformMedia';
    runtimeOwnsMaterial: true;
    baseToolOwnsProviderBodyLowering: false;
    dependencyProfile: OmniOperationDependencyProfile;
};
export type OmniOperationAuditEvent = {
    type: string;
    toolId: string;
    invocationId: string;
    dryRun: boolean;
    metadata: Readonly<Record<string, unknown>>;
};
export type OmniOperationOutput = {
    kind: string;
    target: Readonly<Record<string, unknown>>;
    dispatch: 'dry-run' | 'runtime-omni';
    dryRun: boolean;
    providerCalled: boolean;
    executionBlocked: boolean;
    unsafeSideEffects: boolean;
    permissionsRequired: readonly string[];
    requiresTapApproval: true;
    runtimeEntry: {
        port: 'BaseToolExecutorPort.omni.transformMedia';
        operation: string;
        runtimeOwnsMaterial: true;
        baseToolOwnsProviderBodyLowering: false;
    };
    operationEnvelope: {
        mediaKind: 'audio' | 'image' | 'video';
        action: string;
        outputResource: 'audio' | 'image' | 'video' | 'text';
        plannedOnly: boolean;
        materialized: boolean;
        artifactId?: string;
        mimeType?: string;
    };
    dependencyProfile: OmniOperationDependencyProfile;
    providerMetadata?: Readonly<Record<string, unknown>>;
};
export type OmniOperationResult = OmniCoreResult<OmniOperationOutput>;
export declare function createOmniOperationDescriptor(config: OmniOperationConfig): OmniOperationDescriptor;
export declare function executeOmniOperationCore(config: OmniOperationConfig, request?: OmniOperationRequest): Promise<OmniOperationResult>;
export declare function createOmniOperationPlanner(config: OmniOperationConfig): (request?: OmniOperationRequest) => Promise<OmniOperationResult>;
