type EventName = 'process:start' | 'agent:start' | 'step:before' | 'tool:before' | 'tool:after' | 'agent:end'; type Listener = (data: any) => void | Promise; export class HookBus { private listeners = new Map(); on(event: EventName, fn: Listener) { if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event)!.push(fn); } async emit(event: EventName, data: any) { const fns = this.listeners.get(event); if (!fns) return; for (const fn of fns) { await fn(data); } } } export const hooks = new HookBus();