/// export { EventEmitter, EventEmitterEvents } from './interface'; import { EventEmitter, Timeout, Timer } from './interface'; // Use function instead of exporting the value to prevent // circular dependency resolution issues caused by other exports in '@openai/agents-core/_shims' export function loadEnv(): Record { return {}; } type EventMap = Record; export class BrowserEventEmitter< EventTypes extends EventMap = Record, > implements EventEmitter { #target = new EventTarget(); on( type: K, listener: (...args: EventTypes[K]) => void, ) { this.#target.addEventListener( type as string, ((event: CustomEvent) => listener(...(event.detail ?? []))) as EventListener, ); return this; } off( type: K, listener: (...args: EventTypes[K]) => void, ) { this.#target.removeEventListener( type as string, ((event: CustomEvent) => listener(...(event.detail ?? []))) as EventListener, ); return this; } emit(type: K, ...args: EventTypes[K]) { const event = new CustomEvent(type as string, { detail: args }); return this.#target.dispatchEvent(event); } once( type: K, listener: (...args: EventTypes[K]) => void, ) { const handler = (...args: EventTypes[K]) => { this.off(type, handler); listener(...args); }; this.on(type, handler); return this; } } export { BrowserEventEmitter as RuntimeEventEmitter }; export const randomUUID = crypto.randomUUID.bind(crypto); export const Readable = class Readable { constructor() {} pipeTo( _destination: WritableStream, _options?: { preventClose?: boolean; preventAbort?: boolean; preventCancel?: boolean; }, ) {} pipeThrough( _transform: TransformStream, _options?: { preventClose?: boolean; preventAbort?: boolean; preventCancel?: boolean; }, ) {} }; export const ReadableStream = globalThis.ReadableStream; export const ReadableStreamController = globalThis.ReadableStreamDefaultController; export const TransformStream = globalThis.TransformStream; export class AsyncLocalStorage { context = null; constructor() {} run(context: any, fn: () => any) { this.context = context; return fn(); } getStore() { return this.context; } enterWith(context: any) { this.context = context; } } export function isBrowserEnvironment(): boolean { return true; } export function isTracingLoopRunningByDefault(): boolean { return false; } export { MCPServerStdio, MCPServerStreamableHttp } from './mcp-server/browser'; class BrowserTimer implements Timer { constructor() {} setTimeout(callback: () => void, ms: number): Timeout { const timeout = setTimeout(callback, ms); timeout.ref = typeof timeout.ref === 'function' ? timeout.ref : () => timeout; timeout.unref = typeof timeout.unref === 'function' ? timeout.unref : () => timeout; timeout.hasRef = typeof timeout.hasRef === 'function' ? timeout.hasRef : () => true; timeout.refresh = typeof timeout.refresh === 'function' ? timeout.refresh : () => timeout; return timeout; } clearTimeout(timeoutId: Timeout | string | number | undefined) { window.clearTimeout(timeoutId as number); } } const timer = new BrowserTimer(); export { timer };