/**
 * MockExchange — deterministic in-memory exchange used by tests and dev mode.
 *
 * Implements the same `ExchangeClient` contract a real adapter would, so the
 * agent flow can be verified end-to-end without hitting a network or placing
 * real orders. Fills land at the requested price (no slippage) with a
 * configured taker fee in basis points; no latency is simulated.
 *
 * When a real Coinbase/Kraken adapter lands (follow-up PR), it replaces
 * MockExchange at the ExchangeClient seam — no Portfolio or RiskEngine
 * changes required.
 */
import type { Fill, Side } from './portfolio.js';
export interface ExchangeClient {
    placeOrder(order: {
        symbol: string;
        side: Side;
        qty: number;
        priceUsd: number;
    }): Promise<Fill>;
    getPrice(symbol: string): Promise<number | null>;
}
export interface MockExchangeOptions {
    prices: Record<string, number>;
    feeBps: number;
}
export declare class MockExchange implements ExchangeClient {
    private prices;
    private feeBps;
    constructor(opts: MockExchangeOptions);
    /** Update the synthetic price book (e.g. to simulate a move in tests). */
    setPrice(symbol: string, priceUsd: number): void;
    placeOrder(order: {
        symbol: string;
        side: Side;
        qty: number;
        priceUsd: number;
    }): Promise<Fill>;
    getPrice(symbol: string): Promise<number | null>;
}
