import { M as MCard } from './StorageAdapter-Dw1BeOam.js';
export { P as Page, S as StorageEngine } from './StorageAdapter-Dw1BeOam.js';
import { CardCollection, Either, IO, Maybe } from './index.browser.js';
export { ALGORITHM_HIERARCHY, ContentHandle, ContentTypeInterpreter, EVENT_CONSTANTS, ErrorCodes, ExecutionResult, FaroSidecar, FaroSidecarConfig, GTime, HandleValidationError, HashValidator, IndexedDBEngine, JsonRpcRequest, JsonRpcResponse, LensProtocol, LivenessMetric, MCardStore, PolynomialTerm, PrimeHash, Reader, SafetyViolation, ServiceWorkerPTR, State, ValidationRegistry, VerificationStatus, Writer, computeHash, validateHandle, validationRegistry } from './index.browser.js';
export { SqliteWasmEngine } from './storage/SqliteWasmEngine.js';
export { SqliteNodeEngine } from './storage/SqliteNodeEngine.js';
import '@grafana/faro-web-sdk';

/**
 * SandboxWorker - Execute code in isolated Web Worker
 *
 * Provides safe execution environment for PCard logic.
 * Supports multiple runtimes:
 * - JavaScript: Native execution via Function()
 * - Python: Execution via Pyodide (WebAssembly Python)
 *
 * @see https://pyodide.org/en/stable/
 */
/** Supported runtime types */
type RuntimeType = 'javascript' | 'python' | 'js' | 'py';
/**
 * SandboxWorker - Manages Web Worker for isolated execution
 *
 * Supports multiple runtimes:
 * - javascript/js: Native JS execution
 * - python/py: Python via Pyodide (WebAssembly)
 */
declare class SandboxWorker {
    private worker;
    private pythonLoaded;
    private pendingRequests;
    private defaultTimeout;
    /**
     * Initialize the sandbox worker
     */
    init(): Promise<void>;
    private requestCounter;
    /**
     * Execute code in sandbox
     * @param code - Code to execute
     * @param input - Input data for the code
     * @param context - Optional execution context
     * @param runtime - Runtime to use: 'javascript' (default) or 'python'
     */
    execute(code: string, input: unknown, context?: Record<string, unknown>, runtime?: RuntimeType): Promise<unknown>;
    /**
     * Preload a runtime for faster first execution
     * Useful for Python which requires loading Pyodide (~10MB)
     * @param runtime - Runtime to preload: 'python' or 'javascript'
     */
    preloadRuntime(runtime?: RuntimeType): Promise<{
        loaded: boolean;
        runtime: string;
    }>;
    /**
     * Check if Python runtime is loaded
     */
    isPythonLoaded(): boolean;
    /**
     * Verify output matches expected
     * Note: Uses internal JSON-RPC format with direct values
     */
    verify(hash: string, expectedOutput: unknown, actualOutput: unknown): Promise<{
        verified: boolean;
    }>;
    /**
     * Send request and wait for response
     */
    private sendRequest;
    /**
     * Handle worker message
     */
    private handleMessage;
    /**
     * Handle worker error
     */
    private handleError;
    /**
     * Terminate the worker
     */
    terminate(): void;
    /**
     * Set timeout for requests
     */
    setTimeout(ms: number): void;
}

interface NormalizedReadResult {
    text: string;
    originalSize: number;
    originalSha256Prefix: string;
}
/**
 * Stream-read bytes up to byte_cap, decode, and soft wrap.
 */
declare function streamReadNormalizedText(filePath: string, options: {
    byteCap: number;
    wrapWidth: number;
}): Promise<NormalizedReadResult>;
interface FileProcessingResult$1 {
    content: Uint8Array | string;
    filename: string;
    mimeType: string;
    extension: string;
    isBinary: boolean;
    size: number;
}
/**
 * Check if a file is likely to cause processing issues.
 */
declare function isProblematicFile(filePath: string): Promise<boolean>;
/**
 * Safely read a file with limits and timeouts.
 */
declare function readFileSafely(filePath: string, options?: {
    allowPathological?: boolean;
    maxBytes?: number;
}): Promise<Uint8Array>;
/**
 * List files in directory, filtering out problematic ones.
 */
declare function listFiles(dirPath: string, recursive?: boolean): Promise<string[]>;
/**
 * Process a file and return metadata and content.
 */
declare function processFileContent(filePath: string, options?: {
    forceBinary?: boolean;
    allowPathological?: boolean;
    maxBytes?: number;
}): Promise<FileProcessingResult$1>;

type FileIO_NormalizedReadResult = NormalizedReadResult;
declare const FileIO_isProblematicFile: typeof isProblematicFile;
declare const FileIO_listFiles: typeof listFiles;
declare const FileIO_processFileContent: typeof processFileContent;
declare const FileIO_readFileSafely: typeof readFileSafely;
declare const FileIO_streamReadNormalizedText: typeof streamReadNormalizedText;
declare namespace FileIO {
  export { type FileProcessingResult$1 as FileProcessingResult, type FileIO_NormalizedReadResult as NormalizedReadResult, FileIO_isProblematicFile as isProblematicFile, FileIO_listFiles as listFiles, FileIO_processFileContent as processFileContent, FileIO_readFileSafely as readFileSafely, FileIO_streamReadNormalizedText as streamReadNormalizedText };
}

interface FileProcessingResult {
    hash: string;
    contentType?: string;
    isBinary?: boolean;
    filename?: string;
    size?: number;
    filePath: string;
    originalSize?: number;
    originalSha256Prefix?: string;
    metadataOnly?: boolean;
}
declare function processAndStoreFile(filePath: string, collection: CardCollection, options?: {
    allowProblematic?: boolean;
    maxBytesOnProblem?: number;
    metadataOnly?: boolean;
    rootPath?: string;
}): Promise<FileProcessingResult | null>;
interface LoaderMetrics {
    filesCount: number;
    directoriesCount: number;
    directoryLevels: number;
}
interface LoaderResponse {
    metrics: LoaderMetrics;
    results: FileProcessingResult[];
}
declare function loadFileToCollection(targetPath: string, collection: CardCollection, options?: {
    recursive?: boolean;
    includeProblematic?: boolean;
    maxBytesOnProblem?: number;
    metadataOnly?: boolean;
}): Promise<LoaderResponse>;

type Loader_FileProcessingResult = FileProcessingResult;
type Loader_LoaderMetrics = LoaderMetrics;
type Loader_LoaderResponse = LoaderResponse;
declare const Loader_loadFileToCollection: typeof loadFileToCollection;
declare const Loader_processAndStoreFile: typeof processAndStoreFile;
declare namespace Loader {
  export { type Loader_FileProcessingResult as FileProcessingResult, type Loader_LoaderMetrics as LoaderMetrics, type Loader_LoaderResponse as LoaderResponse, Loader_loadFileToCollection as loadFileToCollection, Loader_processAndStoreFile as processAndStoreFile };
}

interface Runtime {
    execute(codeOrPath: string, context: unknown, config: any, chapterDir: string): Promise<unknown>;
}

declare class LLMConfig {
    provider: string;
    model: string | null;
    endpoint_url: string | null;
    api_key: string | null;
    system_prompt: string;
    assistant_instruction: string;
    temperature: number;
    max_tokens: number;
    top_p: number;
    top_k: number | null;
    frequency_penalty: number;
    presence_penalty: number;
    stop_sequences: string[];
    response_format: string;
    json_schema: Record<string, any> | null;
    timeout: number;
    retry_count: number;
    retry_delay: number;
    stream: boolean;
    constructor(data?: Partial<LLMConfig>);
    validate(): void;
    get effective_model(): string;
    get effective_base_url(): string;
    to_provider_params(): Record<string, any>;
    static from_concrete(concrete: any, context?: any): LLMConfig;
}

/**
 * LLM Provider Interface
 *
 * Abstract interface for LLM providers.
 * Replicates mcard.ptr.core.llm.providers.base.LLMProvider
 */

interface ChatMessage {
    role: string;
    content: string;
}
interface LLMProvider {
    provider_name: string;
    /**
     * Generate text completion for a prompt.
     */
    complete(prompt: string, params: Record<string, any>): Promise<Either<string, string>>;
    /**
     * Generate chat completion from messages.
     */
    chat(messages: ChatMessage[], params: Record<string, any>): Promise<Either<string, Record<string, any>>>;
    /**
     * Check if the provider service is available.
     */
    validate_connection(): Promise<boolean>;
    /**
     * List available models from the provider.
     */
    list_models(): Promise<Either<string, string[]>>;
    /**
     * Get provider status information.
     */
    get_status(): Promise<Record<string, any>>;
}

/**
 * LLM Runtime Module
 *
 * Provides LLMRuntime for executing LLM prompts as part of the PTR polyglot runtime system.
 * Replicates mcard.ptr.core.llm.runtime.LLMRuntime
 */

declare class LLMRuntime implements Runtime {
    provider_name: string;
    private _provider;
    constructor(provider_name?: string);
    get provider(): LLMProvider;
    execute(codeOrPath: string, context: unknown, config: any, chapterDir: string): Promise<unknown>;
    private _execute_completion;
    private _execute_chat;
    private _format_response;
}
/**
 * Create a monadic LLM completion execution.
 *
 * Returns IO<Either<string, any>> for functional composition.
 */
declare function promptMonad(prompt: string, config?: Partial<LLMConfig>): IO<Either<string, any>>;
/**
 * Create a monadic LLM chat execution.
 *
 * Returns IO<Either<string, any>> for functional composition.
 */
declare function chatMonad(messages?: any[] | null, prompt?: string | null, system_prompt?: string, config?: Partial<LLMConfig>): IO<Either<string, any>>;

/**
 * Lambda Term - Algebraic Data Type for Lambda Calculus
 *
 * Represents Lambda Calculus terms as content-addressable MCards.
 * Each term variant is stored as JSON in MCard content, with sub-terms
 * referenced by their SHA-256 hashes for structural sharing.
 *
 * The three term constructors mirror the BNF grammar:
 *   M, N ::= x | λx.M | M N
 *
 * @module mcard-js/ptr/lambda/LambdaTerm
 */

/**
 * Variable term: x
 */
interface VarTerm {
    readonly tag: 'Var';
    readonly name: string;
}
/**
 * Abstraction term: λx.M
 * Body is stored as MCard hash for structural sharing
 */
interface AbsTerm {
    readonly tag: 'Abs';
    readonly param: string;
    readonly body: string;
}
/**
 * Application term: M N
 * Both function and argument are MCard hashes
 */
interface AppTerm {
    readonly tag: 'App';
    readonly func: string;
    readonly arg: string;
}
/**
 * Union type for all Lambda terms
 */
type LambdaTerm = VarTerm | AbsTerm | AppTerm;
/**
 * Create a variable term
 */
declare function mkVar(name: string): VarTerm;
/**
 * Create an abstraction term
 */
declare function mkAbs(param: string, bodyHash: string): AbsTerm;
/**
 * Create an application term
 */
declare function mkApp(funcHash: string, argHash: string): AppTerm;
/**
 * Serialize a Lambda term to MCard content (JSON string)
 */
declare function serializeTerm(term: LambdaTerm): string;
/**
 * Deserialize MCard content to Lambda term
 */
declare function deserializeTerm(content: string): LambdaTerm;
/**
 * Create an MCard from a Lambda term
 */
declare function termToMCard(term: LambdaTerm): Promise<MCard>;
/**
 * Extract Lambda term from MCard
 */
declare function mcardToTerm(mcard: MCard): LambdaTerm;
/**
 * Store a Lambda term in the collection and return its hash
 */
declare function storeTerm(collection: CardCollection, term: LambdaTerm): Promise<string>;
/**
 * Retrieve a Lambda term from the collection by hash
 */
declare function loadTerm(collection: CardCollection, hash: string): Promise<LambdaTerm | null>;
/**
 * Check if a term exists in the collection
 */
declare function termExists(collection: CardCollection, hash: string): Promise<boolean>;
/**
 * Pretty-print a Lambda term (shallow - shows hashes for subterms)
 */
declare function prettyPrintShallow(term: LambdaTerm): string;
/**
 * Pretty-print a Lambda term (deep - resolves all subterms from collection)
 */
declare function prettyPrintDeep(collection: CardCollection, hash: string): Promise<string>;
declare function isVar(term: LambdaTerm): term is VarTerm;
declare function isAbs(term: LambdaTerm): term is AbsTerm;
declare function isApp(term: LambdaTerm): term is AppTerm;

/**
 * Free Variables Analysis
 *
 * Computes the set of free variables in a Lambda term.
 * Free variables are those not bound by any enclosing λ.
 *
 * FV(x) = {x}
 * FV(λx.M) = FV(M) \ {x}
 * FV(M N) = FV(M) ∪ FV(N)
 *
 * @module mcard-js/ptr/lambda/FreeVariables
 */

/**
 * Compute free variables of a term (by hash)
 * Returns IO<Maybe<Set<string>>> - Nothing if term not found
 */
declare function freeVariables(collection: CardCollection, termHash: string): IO<Maybe<Set<string>>>;
/**
 * Compute bound variables of a term (by hash)
 * Bound variables are those occurring in binding positions (λx)
 */
declare function boundVariables(collection: CardCollection, termHash: string): IO<Maybe<Set<string>>>;
/**
 * Check if a variable is free in a term
 */
declare function isFreeIn(collection: CardCollection, variable: string, termHash: string): IO<boolean>;
/**
 * Check if a term is closed (has no free variables)
 */
declare function isClosed(collection: CardCollection, termHash: string): IO<boolean>;
/**
 * Generate a fresh variable name that is not in the given set.
 * Uses primes (x, x', x'', ...) to match Python implementation.
 */
declare function generateFresh(base: string, avoid: Set<string>): string;
/**
 * Generate a fresh variable avoiding all variables in a term
 */
declare function generateFreshFor(collection: CardCollection, base: string, termHash: string): Promise<string>;
declare function difference<T>(a: Set<T>, b: Set<T>): Set<T>;
declare function intersection<T>(a: Set<T>, b: Set<T>): Set<T>;

/**
 * Alpha Conversion (α-conversion)
 *
 * Renames bound variables in Lambda terms while preserving meaning.
 *
 * Rule: λx.M ≡α λy.M[x:=y]  (where y is fresh)
 *
 * Alpha conversion is the basis of variable renaming and is essential
 * for avoiding variable capture during beta reduction.
 *
 * @module mcard-js/ptr/lambda/AlphaConversion
 */

/**
 * Alpha-rename: Rename the bound variable of an abstraction
 *
 * λx.M → λy.M[x:=y]
 *
 * @param collection - Card collection for term storage
 * @param absHash - Hash of the abstraction term
 * @param newParam - New name for the bound variable
 * @returns IO<Either<error, newHash>>
 */
declare function alphaRename(collection: CardCollection, absHash: string, newParam: string): IO<Either<string, string>>;
/**
 * Check if two terms are alpha-equivalent
 *
 * Two terms are α-equivalent if they differ only in the names of bound variables.
 *
 * Note: If hashes are equal, terms are definitionally identical (stronger than α-equiv).
 */
declare function alphaEquivalent(collection: CardCollection, hash1: string, hash2: string): IO<Either<string, boolean>>;
/**
 * Alpha-normalize a term using canonical variable names
 *
 * All bound variables are renamed to a₀, a₁, a₂... based on binding depth.
 * This produces a canonical representative of the α-equivalence class.
 */
declare function alphaNormalize(collection: CardCollection, termHash: string): IO<Either<string, string>>;

/**
 * Beta Reduction (β-reduction)
 *
 * The computational heart of Lambda Calculus - function application.
 *
 * Rule: (λx.M) N →β M[x:=N]
 *
 * A term of the form (λx.M) N is called a "beta-redex" (reducible expression).
 * Beta reduction substitutes the argument N for all free occurrences of x in M.
 *
 * IMPORTANT: Must handle capture avoidance - if N contains free variables
 * that would become bound in M, we must α-rename first.
 *
 * @module mcard-js/ptr/lambda/BetaReduction
 */

/**
 * Check if a term is a beta-redex: (λx.M) N
 */
declare function isRedex(collection: CardCollection, termHash: string): IO<boolean>;
/**
 * Find the leftmost-outermost redex (normal order reduction)
 * Returns Maybe<hash of redex>
 */
declare function findLeftmostRedex(collection: CardCollection, termHash: string): IO<Maybe<string>>;
/**
 * Find the leftmost-innermost redex (applicative order reduction)
 */
declare function findInnermostRedex(collection: CardCollection, termHash: string): IO<Maybe<string>>;
/**
 * Perform a single beta reduction step on a redex
 *
 * (λx.M) N →β M[x:=N]
 *
 * @param collection - Card collection
 * @param redexHash - Hash of the application term (λx.M) N
 * @returns Either<error, resultHash>
 */
declare function betaReduce(collection: CardCollection, redexHash: string): IO<Either<string, string>>;
type ReductionStrategy = 'normal' | 'applicative' | 'lazy';
/**
 * Perform one reduction step using the specified strategy
 */
declare function reduceStep(collection: CardCollection, termHash: string, strategy?: ReductionStrategy): IO<Maybe<string>>;
interface NormalizationResult {
    normalForm: string;
    steps: number;
    reductionPath: string[];
}
/**
 * Normalize a term to its normal form (no more redexes)
 *
 * @param collection - Card collection
 * @param termHash - Starting term
 * @param strategy - Reduction strategy
 * @param maxSteps - Maximum reduction steps (prevent infinite loops)
 * @returns Either<error, NormalizationResult>
 */
declare function normalize(collection: CardCollection, termHash: string, strategy?: ReductionStrategy, maxSteps?: number, maxTimeMs?: number, onStep?: (step: number, hash: string) => Promise<void>): IO<Either<string, NormalizationResult>>;
/**
 * Check if a term is in normal form (has no redexes)
 */
declare function isNormalForm(collection: CardCollection, termHash: string): IO<boolean>;
/**
 * Check if a term has a normal form (is normalizing)
 *
 * Note: This is undecidable in general, so we use a bounded check
 */
declare function hasNormalForm(collection: CardCollection, termHash: string, maxSteps?: number): IO<boolean>;

/**
 * Eta Conversion (η-conversion)
 *
 * Captures extensional equality of functions.
 *
 * η-reduction: λx.(f x) →η f  (if x ∉ FV(f))
 * η-expansion: f →η λx.(f x)  (where x is fresh)
 *
 * Two functions are η-equivalent if they produce the same output for all inputs.
 * This is the principle of extensionality: functions are determined by their behavior.
 *
 * @module mcard-js/ptr/lambda/EtaConversion
 */

/**
 * Check if a term is an η-redex: λx.(f x) where x ∉ FV(f)
 */
declare function isEtaRedex(collection: CardCollection, termHash: string): IO<boolean>;
/**
 * Eta reduction: λx.(f x) →η f
 *
 * Only valid if x does not occur free in f.
 *
 * @param collection - Card collection
 * @param termHash - Hash of the abstraction λx.(f x)
 * @returns Maybe<resultHash> - Nothing if not an η-redex
 */
declare function etaReduce(collection: CardCollection, termHash: string): IO<Maybe<string>>;
/**
 * Try eta reduction, returning Either for error handling
 */
declare function etaReduceE(collection: CardCollection, termHash: string): IO<Either<string, string>>;
/**
 * Eta expansion: f →η λx.(f x)
 *
 * Wraps a function in a lambda that immediately applies it.
 * The new variable must be fresh (not occurring in f).
 *
 * @param collection - Card collection
 * @param termHash - Hash of the term to expand
 * @param baseName - Base name for the fresh variable (default: 'x')
 * @returns Hash of the expanded term λx.(f x)
 */
declare function etaExpand(collection: CardCollection, termHash: string, baseName?: string): IO<string>;
/**
 * Check if two terms are η-equivalent
 *
 * Two terms f and g are η-equivalent if:
 * - They are the same, or
 * - One η-reduces to the other, or
 * - They both η-expand to equivalent terms
 */
declare function etaEquivalent(collection: CardCollection, hash1: string, hash2: string): IO<boolean>;
/**
 * Eta-normalize a term by reducing all η-redexes
 */
declare function etaNormalize(collection: CardCollection, termHash: string): IO<string>;
/**
 * Find all η-redexes in a term
 */
declare function findEtaRedexes(collection: CardCollection, termHash: string): IO<string[]>;

/**
 * IO Effects - Observable side-effects for Lambda Calculus computations
 *
 * Implements the IO Monad pattern for CLM:
 *   IO a = World → (a, World')
 *
 * In our context:
 *   Reduction = TermHash → (TermHash', IOEffects)
 *
 * IO effects are purely observational - they do not affect computation results.
 * The same input will always produce the same output regardless of IO configuration.
 *
 * @module mcard-js/ptr/lambda/IOEffects
 */
type IOFormat = 'minimal' | 'verbose' | 'json';
interface NetworkConfig {
    enabled: boolean;
    endpoint?: string;
    method?: 'POST' | 'PUT';
    headers?: Record<string, string>;
}
interface IOEffectsConfig {
    enabled: boolean;
    console?: boolean;
    network?: NetworkConfig;
    onStep?: boolean;
    onComplete?: boolean;
    onError?: boolean;
    format?: IOFormat;
}

/**
 * Lambda Runtime - PTR Runtime for Lambda Calculus
 *
 * Implements α-β-η conversions as a PTR runtime, treating MCard hashes
 * as Lambda terms and performing computations that produce new MCards.
 *
 * This runtime can be used via CLM specifications to define and verify
 * Lambda Calculus reductions.
 *
 * @module mcard-js/ptr/lambda/LambdaRuntime
 */

type LambdaOperation = 'alpha' | 'beta' | 'eta-reduce' | 'eta-expand' | 'normalize' | 'step' | 'alpha-equiv' | 'eta-equiv' | 'alpha-norm' | 'eta-norm' | 'free-vars' | 'is-closed' | 'is-normal' | 'parse' | 'pretty' | 'build' | 'check-readiness' | 'num-add' | 'num-sub' | 'num-mul' | 'num-div' | 'http-request' | 'church-to-int';
interface LambdaConfig {
    operation?: LambdaOperation;
    process?: LambdaOperation;
    action?: LambdaOperation;
    strategy?: ReductionStrategy;
    maxSteps?: number;
    maxTimeMs?: number;
    newName?: string;
    freshVar?: string;
    compareWith?: string;
    io_effects?: Partial<IOEffectsConfig>;
}
interface LambdaRuntimeResult {
    success: boolean;
    result?: unknown;
    error?: string;
    termHash?: string;
    prettyPrint?: string;
}
/**
 * Lambda Calculus Runtime for PTR
 *
 * Executes Lambda Calculus operations on MCard-stored terms.
 */
declare class LambdaRuntime implements Runtime {
    private collection;
    constructor(collection: CardCollection);
    /**
     * Execute a Lambda operation
     *
     * @param codeOrPath - For Lambda runtime, this is the term hash to operate on
     * @param context - Additional context (varies by operation)
     * @param config - Lambda configuration with operation type
     * @param chapterDir - Chapter directory (used for relative paths if needed)
     */
    execute(codeOrPath: string, context: unknown, config: any, chapterDir: string): Promise<LambdaRuntimeResult>;
    private doAlphaRename;
    private doBetaReduce;
    private doEtaReduce;
    private doEtaExpand;
    private doNormalize;
    private doStep;
    private doAlphaEquiv;
    private doEtaEquiv;
    private doAlphaNormalize;
    private doEtaNormalize;
    private doFreeVars;
    private doIsClosed;
    private doIsNormal;
    private doParse;
    private doPretty;
    private doBuild;
    /**
     * Decode a Church numeral to a regular integer.
     * Church numeral n = λf.λx.f^n(x) where f is applied n times.
     *
     * Algorithm:
     * 1. Normalize the term first
     * 2. Expect form: Abs(f, Abs(x, body))
     * 3. Count how many times 'f' appears in application position in body
     */
    private doChurchToInt;
    /**
     * Count applications in a Church numeral body.
     * Church numeral n has the form: λf.λx.f(f(f(...f(x)...)))
     * where f appears n times.
     */
    private countChurchApplications;
    private doCheckReadiness;
    private doNumericOp;
    private doHttpRequest;
}
/**
 * Parse a simple Lambda expression string into MCards
 *
 * Syntax:
 *   x, y, z        - Variables
 *   \x.M or λx.M   - Abstraction
 *   (M N)          - Application
 *   M N            - Application (left-associative)
 *
 * Examples:
 *   \x.x           - Identity function
 *   \f.\x.f x      - Application combinator
 *   (\x.x) y       - Identity applied to y
 */
declare function parseLambdaExpression(collection: CardCollection, expression: string): Promise<string>;

/**
 * Lambda Calculus Module for PTR
 *
 * Implements α-β-η conversions on MCard-stored Lambda terms.
 *
 * This module provides:
 * - LambdaTerm ADT: Var, Abs, App stored as MCard content
 * - Alpha Conversion: Variable renaming
 * - Beta Reduction: Function application
 * - Eta Conversion: Extensional equivalence
 * - LambdaRuntime: PTR-compatible runtime for CLM execution
 *
 * @module mcard-js/ptr/lambda
 */

type index_AbsTerm = AbsTerm;
type index_AppTerm = AppTerm;
type index_LambdaConfig = LambdaConfig;
type index_LambdaOperation = LambdaOperation;
type index_LambdaRuntime = LambdaRuntime;
declare const index_LambdaRuntime: typeof LambdaRuntime;
type index_LambdaRuntimeResult = LambdaRuntimeResult;
type index_LambdaTerm = LambdaTerm;
type index_NormalizationResult = NormalizationResult;
type index_ReductionStrategy = ReductionStrategy;
type index_VarTerm = VarTerm;
declare const index_alphaEquivalent: typeof alphaEquivalent;
declare const index_alphaNormalize: typeof alphaNormalize;
declare const index_alphaRename: typeof alphaRename;
declare const index_betaReduce: typeof betaReduce;
declare const index_boundVariables: typeof boundVariables;
declare const index_deserializeTerm: typeof deserializeTerm;
declare const index_difference: typeof difference;
declare const index_etaEquivalent: typeof etaEquivalent;
declare const index_etaExpand: typeof etaExpand;
declare const index_etaNormalize: typeof etaNormalize;
declare const index_etaReduce: typeof etaReduce;
declare const index_etaReduceE: typeof etaReduceE;
declare const index_findEtaRedexes: typeof findEtaRedexes;
declare const index_findInnermostRedex: typeof findInnermostRedex;
declare const index_findLeftmostRedex: typeof findLeftmostRedex;
declare const index_freeVariables: typeof freeVariables;
declare const index_generateFresh: typeof generateFresh;
declare const index_generateFreshFor: typeof generateFreshFor;
declare const index_hasNormalForm: typeof hasNormalForm;
declare const index_intersection: typeof intersection;
declare const index_isAbs: typeof isAbs;
declare const index_isApp: typeof isApp;
declare const index_isClosed: typeof isClosed;
declare const index_isEtaRedex: typeof isEtaRedex;
declare const index_isFreeIn: typeof isFreeIn;
declare const index_isNormalForm: typeof isNormalForm;
declare const index_isRedex: typeof isRedex;
declare const index_isVar: typeof isVar;
declare const index_loadTerm: typeof loadTerm;
declare const index_mcardToTerm: typeof mcardToTerm;
declare const index_mkAbs: typeof mkAbs;
declare const index_mkApp: typeof mkApp;
declare const index_mkVar: typeof mkVar;
declare const index_normalize: typeof normalize;
declare const index_parseLambdaExpression: typeof parseLambdaExpression;
declare const index_prettyPrintDeep: typeof prettyPrintDeep;
declare const index_prettyPrintShallow: typeof prettyPrintShallow;
declare const index_reduceStep: typeof reduceStep;
declare const index_serializeTerm: typeof serializeTerm;
declare const index_storeTerm: typeof storeTerm;
declare const index_termExists: typeof termExists;
declare const index_termToMCard: typeof termToMCard;
declare namespace index {
  export { type index_AbsTerm as AbsTerm, type index_AppTerm as AppTerm, type index_LambdaConfig as LambdaConfig, type index_LambdaOperation as LambdaOperation, index_LambdaRuntime as LambdaRuntime, type index_LambdaRuntimeResult as LambdaRuntimeResult, type index_LambdaTerm as LambdaTerm, type index_NormalizationResult as NormalizationResult, type index_ReductionStrategy as ReductionStrategy, type index_VarTerm as VarTerm, index_alphaEquivalent as alphaEquivalent, index_alphaNormalize as alphaNormalize, index_alphaRename as alphaRename, index_betaReduce as betaReduce, index_boundVariables as boundVariables, index_deserializeTerm as deserializeTerm, index_difference as difference, index_etaEquivalent as etaEquivalent, index_etaExpand as etaExpand, index_etaNormalize as etaNormalize, index_etaReduce as etaReduce, index_etaReduceE as etaReduceE, index_findEtaRedexes as findEtaRedexes, index_findInnermostRedex as findInnermostRedex, index_findLeftmostRedex as findLeftmostRedex, index_freeVariables as freeVariables, index_generateFresh as generateFresh, index_generateFreshFor as generateFreshFor, index_hasNormalForm as hasNormalForm, index_intersection as intersection, index_isAbs as isAbs, index_isApp as isApp, index_isClosed as isClosed, index_isEtaRedex as isEtaRedex, index_isFreeIn as isFreeIn, index_isNormalForm as isNormalForm, index_isRedex as isRedex, index_isVar as isVar, index_loadTerm as loadTerm, index_mcardToTerm as mcardToTerm, index_mkAbs as mkAbs, index_mkApp as mkApp, index_mkVar as mkVar, index_normalize as normalize, index_parseLambdaExpression as parseLambdaExpression, index_prettyPrintDeep as prettyPrintDeep, index_prettyPrintShallow as prettyPrintShallow, index_reduceStep as reduceStep, index_serializeTerm as serializeTerm, index_storeTerm as storeTerm, index_termExists as termExists, index_termToMCard as termToMCard };
}

/**
 * Type definitions for CLM (Cubical Logic Model) execution.
 */
/**
 * CLM specification structure (parsed from YAML).
 */
interface CLMSpec {
    version: string;
    chapter: {
        id: number;
        title: string;
        mvp_card?: string;
        pkc_task?: string;
    };
    clm: {
        abstract?: {
            concept?: string;
            purpose?: string;
            description?: string;
            goal?: string;
            context?: string;
            success_criteria?: string;
            [key: string]: unknown;
        };
        abstract_spec?: CLMSpec['clm']['abstract'];
        concrete?: {
            manifestation?: string;
            description?: string;
            logic_source?: string;
            runtime?: string;
            builtin?: boolean;
            code_file?: string;
            entry_point?: string;
            inputs?: string[];
            process?: string;
            outputs?: string[];
            action?: string;
            boundary?: 'intrinsic' | 'extrinsic';
            runtimes_config?: RuntimeConfig[];
            [key: string]: unknown;
        };
        concrete_impl?: CLMSpec['clm']['concrete'];
        balanced?: {
            expectation?: string;
            description?: string;
            test_cases?: unknown[];
            examples?: unknown[];
            [key: string]: unknown;
        };
        balanced_exp?: CLMSpec['clm']['balanced'];
    };
    examples?: CLMExample[];
}
/**
 * Runtime configuration for multi-runtime CLMs.
 */
interface RuntimeConfig {
    name: string;
    file?: string;
    binary?: string;
    module?: string;
    entry?: string;
}
/**
 * CLM example definition.
 */
interface CLMExample {
    name: string;
    input?: unknown;
    expected_output?: unknown;
    result_contains?: string;
    [key: string]: unknown;
}
/**
 * Result of executing a single CLM.
 */
interface ExecutionResult {
    success: boolean;
    result?: unknown;
    error?: string;
    executionTime: number;
    clm: {
        chapter: string;
        concept: string;
        manifestation: string;
        boundary?: string;
    };
}
/**
 * Result of executing on a single runtime (for multi-runtime).
 */
interface RuntimeResult {
    runtime: string;
    success: boolean;
    result?: unknown;
    error?: string;
    executionTime: number;
}
/**
 * Result of multi-runtime consensus execution.
 */
interface MultiRuntimeResult {
    success: boolean;
    consensus: boolean;
    results: RuntimeResult[];
    consensusValue?: unknown;
    error?: string;
    executionTime: number;
    clm: {
        chapter: string;
        concept: string;
        manifestation: string;
        boundary?: string;
    };
}
/**
 * Verification result (comparing actual vs expected).
 */
interface VerificationResult {
    verified: boolean;
    expected: unknown;
    actual: unknown;
    executionResult: ExecutionResult;
}
/**
 * Summary of running all examples in a CLM.
 */
interface RunExamplesSummary {
    total: number;
    passed: number;
    results: ExampleRunResult[];
}
/**
 * Result of running a single example.
 */
interface ExampleRunResult {
    case: number;
    name: string;
    input: unknown;
    result: unknown;
    error?: string;
    expected: unknown;
    match: boolean;
}
/**
 * Execution report for external reporting.
 */
interface ExecutionReport {
    status: 'success' | 'failure';
    result?: unknown;
    error?: string;
    chapter_id: number;
    chapter_title: string;
}
/**
 * Summary report for external reporting.
 */
interface SummaryReport {
    status: 'success' | 'failure';
    result: {
        success: boolean;
        total: number;
        results: Array<{
            case: number;
            name: string;
            result: unknown;
            error?: string;
        }>;
    };
    chapter_id: number;
    chapter_title: string;
}
/**
 * CLM banner lines for display.
 */
interface CLMBannerLines {
    header: string[];
}

/**
 * CLMRunner - Execute JavaScript logic from CLM specifications
 *
 * Node.js PTR runtime for interpreting Cubical Logic Models.
 *
 * Refactored to use modular components from ./clm/
 */

declare class CLMRunner {
    private loader;
    private timeout;
    private collection?;
    constructor(basePath?: string, timeout?: number, collection?: CardCollection);
    /**
     * Run a CLM directly from a file path.
     */
    runFile(clmPath: string, input?: unknown): Promise<ExecutionResult>;
    /**
     * Execute a CLM specification with given input.
     *
     * Implements Petri Net Transition Semantics:
     * 1. Constructs PCard (Transition)
     * 2. Checks Pre-conditions (Firing Rule)
     * 3. Executes Logic
     * 4. Produces VerificationVCard (Token)
     * 5. Persists to Collection (Place)
     */
    executeCLM(clm: CLMSpec, chapterDir: string, input: unknown): Promise<ExecutionResult>;
    /**
     * Execute a CLM across multiple runtimes and verify consensus.
     */
    executeMultiRuntime(clm: CLMSpec, chapterDir: string, input: unknown): Promise<MultiRuntimeResult>;
    /**
     * Check if a CLM is a multi-runtime CLM.
     */
    isMultiRuntime(clm: CLMSpec): boolean;
    /**
     * Verify CLM output against expected result.
     */
    verifyCLM(clm: CLMSpec, chapterDir: string, input: unknown, expected: unknown): Promise<VerificationResult>;
    /**
     * Run all examples from a CLM specification.
     */
    runExamples(clm: CLMSpec, chapterDir: string): Promise<Array<{
        name: string;
        result: ExecutionResult;
    }>>;
    /**
     * Summarize example runs.
     */
    summarizeExampleRuns(clm: CLMSpec, results: Array<{
        name: string;
        result: ExecutionResult;
    }>): RunExamplesSummary;
    /**
     * Build CLM banner for display.
     */
    buildCLMBanner(clm: CLMSpec): CLMBannerLines;
    /**
     * Build execution report.
     */
    buildExecutionReport(clm: CLMSpec, execution: ExecutionResult): ExecutionReport;
    /**
     * Build summary report.
     */
    buildSummaryReport(clm: CLMSpec, summary: RunExamplesSummary): SummaryReport;
    private executeLoader;
    private executeNetwork;
    private executeStandard;
    private executeRecursive;
    private resolveCodeOrPath;
    private buildNetworkContext;
    private buildJavaScriptContext;
    private buildRunCLM;
}

export { CLMRunner, CardCollection, Either, FileIO, IO, LLMConfig, LLMRuntime, index as Lambda, LambdaRuntime, Loader, MCard, Maybe, SandboxWorker, chatMonad, promptMonad };
