/** * 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; getPrice(symbol: string): Promise; } export interface MockExchangeOptions { prices: Record; 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; getPrice(symbol: string): Promise; }