@lov3kaizen/agentsea-debugger 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/helpers.ts","../src/core/Breakpoint.ts","../src/core/Inspector.ts","../src/core/Session.ts","../src/core/Debugger.ts","../src/utils/diff.ts","../src/recording/Snapshot.ts","../src/recording/Checkpoint.ts","../src/recording/Timeline.ts","../src/recording/Recorder.ts","../src/replay/StateRestorer.ts","../src/replay/ReplayController.ts","../src/replay/ReplayEngine.ts","../src/visualization/DecisionTree.ts","../src/visualization/FlowGraph.ts","../src/analysis/WhatIfEngine.ts","../src/analysis/FailureAnalyzer.ts","../src/storage/FileStorage.ts","../src/storage/MemoryStorage.ts","../src/integrations/agentsea/DebugMiddleware.ts","../src/integrations/agentsea/AgentDebugger.ts"],"names":["EventEmitter","duration","DEFAULT_CONFIG","DEFAULT_OPTIONS","state","result","DEFAULT_BUILD_OPTIONS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Helper Utilities\n *\n * Common utility functions for the debugger.\n */\n\nimport { nanoid } from 'nanoid';\n\n/**\n * Generate a unique ID with optional prefix\n */\nexport function generateId(prefix = ''): string {\n const id = nanoid(12);\n return prefix ? `${prefix}_${id}` : id;\n}\n\n/**\n * Get current timestamp in milliseconds\n */\nexport function now(): number {\n return Date.now();\n}\n\n/**\n * Calculate duration between two timestamps\n */\nexport function duration(start: number, end: number = now()): number {\n return end - start;\n}\n\n/**\n * Deep clone an object\n */\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => deepClone(item)) as T;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as T;\n }\n\n if (obj instanceof Map) {\n const clonedMap = new Map();\n obj.forEach((value, key) => {\n clonedMap.set(deepClone(key), deepClone(value));\n });\n return clonedMap as T;\n }\n\n if (obj instanceof Set) {\n const clonedSet = new Set();\n obj.forEach((value) => {\n clonedSet.add(deepClone(value));\n });\n return clonedSet as T;\n }\n\n const clonedObj = {} as T;\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n (clonedObj as Record<string, unknown>)[key] = deepClone(\n (obj as Record<string, unknown>)[key],\n );\n }\n }\n\n return clonedObj;\n}\n\n/**\n * Safely serialize an object to JSON\n */\nexport function safeStringify(obj: unknown, indent = 0): string {\n const seen = new WeakSet();\n\n return JSON.stringify(\n obj,\n (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n\n // Handle special types\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n\n if (value instanceof Map) {\n return Object.fromEntries(value);\n }\n\n if (value instanceof Set) {\n return Array.from(value);\n }\n\n if (typeof value === 'function') {\n return `[Function: ${value.name || 'anonymous'}]`;\n }\n\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n return value;\n },\n indent,\n );\n}\n\n/**\n * Safely parse JSON\n */\nexport function safeParse<T>(json: string, defaultValue?: T): T | undefined {\n try {\n return JSON.parse(json) as T;\n } catch {\n return defaultValue;\n }\n}\n\n/**\n * Format duration in human-readable format\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n\n return `${seconds}s`;\n}\n\n/**\n * Format bytes in human-readable format\n */\nexport function formatBytes(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(2)} ${units[unitIndex]}`;\n}\n\n/**\n * Truncate string to max length\n */\nexport function truncate(\n str: string,\n maxLength: number,\n suffix = '...',\n): string {\n if (str.length <= maxLength) {\n return str;\n }\n return str.slice(0, maxLength - suffix.length) + suffix;\n}\n\n/**\n * Debounce a function\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n fn: T,\n delay: number,\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n fn(...args);\n timeoutId = null;\n }, delay);\n };\n}\n\n/**\n * Sleep for a given duration\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Retry a function with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n maxAttempts = 3,\n baseDelayMs = 100,\n): Promise<T> {\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n if (attempt < maxAttempts - 1) {\n await sleep(baseDelayMs * Math.pow(2, attempt));\n }\n }\n }\n\n throw lastError;\n}\n\n/**\n * Calculate object size in bytes (approximate)\n */\nexport function estimateSize(obj: unknown): number {\n return safeStringify(obj).length * 2; // UTF-16\n}\n","/**\n * Breakpoint\n *\n * Breakpoint management for the debugger.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n Breakpoint,\n BreakpointType,\n BreakpointCondition,\n BreakpointContext,\n ExecutionStep,\n AgentState,\n} from '../types/index.js';\nimport { generateId } from '../utils/helpers.js';\n\n/**\n * Breakpoint manager events\n */\nexport interface BreakpointManagerEvents {\n 'breakpoint:added': (breakpoint: Breakpoint) => void;\n 'breakpoint:removed': (breakpointId: string) => void;\n 'breakpoint:hit': (\n breakpoint: Breakpoint,\n context: BreakpointContext,\n ) => void;\n 'breakpoint:toggled': (breakpoint: Breakpoint) => void;\n}\n\n/**\n * Breakpoint creation options\n */\nexport interface BreakpointOptions {\n /** Breakpoint type */\n type: BreakpointType;\n /** Condition function */\n condition?: BreakpointCondition;\n /** Step number (for step breakpoints) */\n step?: number;\n /** Tool name (for tool breakpoints) */\n toolName?: string;\n /** Description */\n description?: string;\n /** Initially enabled */\n enabled?: boolean;\n}\n\n/**\n * BreakpointManager\n *\n * Manages breakpoints for debug sessions.\n *\n * @example\n * ```typescript\n * const manager = new BreakpointManager();\n *\n * // Add a tool call breakpoint\n * manager.add({\n * type: 'tool-call',\n * toolName: 'database_query',\n * description: 'Break on database queries'\n * });\n *\n * // Check if a step should trigger a breakpoint\n * const hit = manager.check(step, state);\n * if (hit) {\n * console.log('Breakpoint hit:', hit.description);\n * }\n * ```\n */\nexport class BreakpointManager extends EventEmitter<BreakpointManagerEvents> {\n private breakpoints: Map<string, Breakpoint> = new Map();\n\n /**\n * Add a new breakpoint\n */\n add(options: BreakpointOptions): Breakpoint {\n const breakpoint: Breakpoint = {\n id: generateId('bp'),\n type: options.type,\n condition: options.condition,\n step: options.step,\n toolName: options.toolName,\n enabled: options.enabled ?? true,\n hitCount: 0,\n description: options.description,\n };\n\n this.breakpoints.set(breakpoint.id, breakpoint);\n this.emit('breakpoint:added', breakpoint);\n\n return breakpoint;\n }\n\n /**\n * Remove a breakpoint\n */\n remove(id: string): boolean {\n const existed = this.breakpoints.delete(id);\n if (existed) {\n this.emit('breakpoint:removed', id);\n }\n return existed;\n }\n\n /**\n * Get a breakpoint by ID\n */\n get(id: string): Breakpoint | undefined {\n return this.breakpoints.get(id);\n }\n\n /**\n * Get all breakpoints\n */\n getAll(): Breakpoint[] {\n return Array.from(this.breakpoints.values());\n }\n\n /**\n * Get enabled breakpoints\n */\n getEnabled(): Breakpoint[] {\n return this.getAll().filter((bp) => bp.enabled);\n }\n\n /**\n * Toggle breakpoint enabled state\n */\n toggle(id: string): boolean {\n const breakpoint = this.breakpoints.get(id);\n if (breakpoint) {\n breakpoint.enabled = !breakpoint.enabled;\n this.emit('breakpoint:toggled', breakpoint);\n return true;\n }\n return false;\n }\n\n /**\n * Enable a breakpoint\n */\n enable(id: string): boolean {\n const breakpoint = this.breakpoints.get(id);\n if (breakpoint && !breakpoint.enabled) {\n breakpoint.enabled = true;\n this.emit('breakpoint:toggled', breakpoint);\n return true;\n }\n return false;\n }\n\n /**\n * Disable a breakpoint\n */\n disable(id: string): boolean {\n const breakpoint = this.breakpoints.get(id);\n if (breakpoint && breakpoint.enabled) {\n breakpoint.enabled = false;\n this.emit('breakpoint:toggled', breakpoint);\n return true;\n }\n return false;\n }\n\n /**\n * Clear all breakpoints\n */\n clear(): void {\n const ids = Array.from(this.breakpoints.keys());\n this.breakpoints.clear();\n for (const id of ids) {\n this.emit('breakpoint:removed', id);\n }\n }\n\n /**\n * Check if any breakpoint should trigger for a step\n */\n check(step: ExecutionStep, state: AgentState): Breakpoint | null {\n for (const breakpoint of this.getEnabled()) {\n if (this.shouldTrigger(breakpoint, step, state)) {\n breakpoint.hitCount++;\n const context = this.buildContext(step, state);\n this.emit('breakpoint:hit', breakpoint, context);\n return breakpoint;\n }\n }\n return null;\n }\n\n /**\n * Check if a specific breakpoint should trigger\n */\n private shouldTrigger(\n breakpoint: Breakpoint,\n step: ExecutionStep,\n state: AgentState,\n ): boolean {\n // Type-based checks\n switch (breakpoint.type) {\n case 'step':\n if (breakpoint.step !== undefined && step.index !== breakpoint.step) {\n return false;\n }\n break;\n\n case 'tool-call':\n if (step.type !== 'tool-call') {\n return false;\n }\n if (\n breakpoint.toolName &&\n step.toolCall?.name !== breakpoint.toolName\n ) {\n return false;\n }\n break;\n\n case 'tool-result':\n if (step.type !== 'tool-result') {\n return false;\n }\n if (\n breakpoint.toolName &&\n step.toolCall?.name !== breakpoint.toolName\n ) {\n return false;\n }\n break;\n\n case 'decision':\n if (step.type !== 'decision') {\n return false;\n }\n break;\n\n case 'error':\n if (!step.error) {\n return false;\n }\n break;\n\n case 'memory-change':\n if (step.type !== 'memory-write') {\n return false;\n }\n break;\n }\n\n // Custom condition check\n if (breakpoint.condition) {\n const context = this.buildContext(step, state);\n try {\n return breakpoint.condition(context);\n } catch {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Build context for condition evaluation\n */\n private buildContext(\n step: ExecutionStep,\n state: AgentState,\n ): BreakpointContext {\n return {\n step,\n stepIndex: step.index,\n state,\n toolCall: step.toolCall,\n decision: step.decision,\n };\n }\n\n /**\n * Get breakpoint count\n */\n get count(): number {\n return this.breakpoints.size;\n }\n\n /**\n * Get enabled breakpoint count\n */\n get enabledCount(): number {\n return this.getEnabled().length;\n }\n}\n\n/**\n * Create a breakpoint manager instance\n */\nexport function createBreakpointManager(): BreakpointManager {\n return new BreakpointManager();\n}\n\n/**\n * Helper to create common breakpoints\n */\nexport const BreakpointHelpers = {\n /**\n * Break at a specific step\n */\n atStep(step: number, description?: string): BreakpointOptions {\n return {\n type: 'step',\n step,\n description: description ?? `Break at step ${step}`,\n };\n },\n\n /**\n * Break on any tool call\n */\n onToolCall(description?: string): BreakpointOptions {\n return {\n type: 'tool-call',\n description: description ?? 'Break on tool call',\n };\n },\n\n /**\n * Break on specific tool call\n */\n onTool(toolName: string, description?: string): BreakpointOptions {\n return {\n type: 'tool-call',\n toolName,\n description: description ?? `Break on ${toolName}`,\n };\n },\n\n /**\n * Break on any error\n */\n onError(description?: string): BreakpointOptions {\n return {\n type: 'error',\n description: description ?? 'Break on error',\n };\n },\n\n /**\n * Break on decision\n */\n onDecision(condition?: BreakpointCondition): BreakpointOptions {\n return {\n type: 'decision',\n condition,\n description: 'Break on decision',\n };\n },\n\n /**\n * Break on low confidence decision\n */\n onLowConfidence(threshold = 0.7): BreakpointOptions {\n return {\n type: 'decision',\n condition: (ctx) => (ctx.decision?.confidence ?? 1) < threshold,\n description: `Break on confidence < ${threshold}`,\n };\n },\n\n /**\n * Break on memory change\n */\n onMemoryChange(description?: string): BreakpointOptions {\n return {\n type: 'memory-change',\n description: description ?? 'Break on memory change',\n };\n },\n\n /**\n * Custom condition breakpoint\n */\n custom(\n condition: BreakpointCondition,\n description?: string,\n ): BreakpointOptions {\n return {\n type: 'custom',\n condition,\n description: description ?? 'Custom breakpoint',\n };\n },\n};\n","/**\n * Inspector\n *\n * State inspection utilities for debugging.\n */\n\nimport type {\n InspectorResult,\n ExecutionStep,\n AgentState,\n ToolCall,\n Decision,\n MemorySnapshot,\n} from '../types/index.js';\nimport { deepClone, truncate } from '../utils/helpers.js';\n\n/**\n * Inspector configuration\n */\nexport interface InspectorConfig {\n /** Maximum depth for object inspection */\n maxDepth?: number;\n /** Maximum string length for display */\n maxStringLength?: number;\n /** Include full memory in snapshot */\n includeFullMemory?: boolean;\n}\n\n/**\n * Variable watch\n */\nexport interface VariableWatch {\n /** Watch ID */\n id: string;\n /** Variable path */\n path: string;\n /** Current value */\n value: unknown;\n /** Previous value */\n previousValue?: unknown;\n /** Has changed since last check */\n changed: boolean;\n}\n\n/**\n * Inspector\n *\n * Inspects agent state during debugging.\n *\n * @example\n * ```typescript\n * const inspector = new Inspector(steps, state);\n *\n * // Get current state\n * const result = inspector.inspect();\n * console.log('Current step:', result.currentStep);\n * console.log('Tool calls:', result.toolCalls);\n *\n * // Watch a variable\n * inspector.watch('context.user.name');\n * ```\n */\nexport class Inspector {\n private steps: ExecutionStep[];\n private currentStepIndex: number;\n private state: AgentState;\n private watches: Map<string, VariableWatch> = new Map();\n private config: Required<InspectorConfig>;\n\n constructor(\n steps: ExecutionStep[],\n state: AgentState,\n config?: InspectorConfig,\n ) {\n this.steps = steps;\n this.state = state;\n this.currentStepIndex = steps.length > 0 ? steps.length - 1 : -1;\n this.config = {\n maxDepth: config?.maxDepth ?? 10,\n maxStringLength: config?.maxStringLength ?? 1000,\n includeFullMemory: config?.includeFullMemory ?? false,\n };\n }\n\n /**\n * Update the current state\n */\n update(steps: ExecutionStep[], state: AgentState, stepIndex?: number): void {\n this.steps = steps;\n this.state = state;\n this.currentStepIndex =\n stepIndex ?? (steps.length > 0 ? steps.length - 1 : -1);\n this.updateWatches();\n }\n\n /**\n * Get current step index\n */\n getCurrentStepIndex(): number {\n return this.currentStepIndex;\n }\n\n /**\n * Set current step index\n */\n setCurrentStepIndex(index: number): void {\n if (index >= -1 && index < this.steps.length) {\n this.currentStepIndex = index;\n }\n }\n\n /**\n * Inspect current state\n */\n inspect(): InspectorResult {\n const currentStep =\n this.currentStepIndex >= 0 ? this.steps[this.currentStepIndex] : null;\n\n return {\n currentStep,\n stepIndex: this.currentStepIndex,\n totalSteps: this.steps.length,\n state: this.state,\n toolCalls: this.getToolCalls(),\n decisions: this.getDecisions(),\n memory: this.getMemorySnapshot(),\n variables: this.getVariables(),\n callStack: this.getCallStack(),\n };\n }\n\n /**\n * Get current step\n */\n getCurrentStep(): ExecutionStep | null {\n return this.currentStepIndex >= 0\n ? this.steps[this.currentStepIndex]\n : null;\n }\n\n /**\n * Get step at index\n */\n getStep(index: number): ExecutionStep | undefined {\n return this.steps[index];\n }\n\n /**\n * Get all steps\n */\n getSteps(): ExecutionStep[] {\n return [...this.steps];\n }\n\n /**\n * Get steps up to current index\n */\n getStepsUpToCurrent(): ExecutionStep[] {\n return this.steps.slice(0, this.currentStepIndex + 1);\n }\n\n /**\n * Get all tool calls\n */\n getToolCalls(): ToolCall[] {\n const toolCalls: ToolCall[] = [];\n for (const step of this.getStepsUpToCurrent()) {\n if (step.toolCall) {\n toolCalls.push(step.toolCall);\n }\n }\n return toolCalls;\n }\n\n /**\n * Get tool calls for a specific tool\n */\n getToolCallsByName(name: string): ToolCall[] {\n return this.getToolCalls().filter((tc) => tc.name === name);\n }\n\n /**\n * Get all decisions\n */\n getDecisions(): Decision[] {\n const decisions: Decision[] = [];\n for (const step of this.getStepsUpToCurrent()) {\n if (step.decision) {\n decisions.push(step.decision);\n }\n }\n return decisions;\n }\n\n /**\n * Get memory snapshot\n */\n getMemorySnapshot(): MemorySnapshot {\n if (this.config.includeFullMemory) {\n return deepClone(this.state.memory);\n }\n\n return {\n working: this.state.memory.working\n ? (this.summarizeObject(this.state.memory.working) as Record<\n string,\n unknown\n >)\n : undefined,\n shortTerm: this.state.memory.shortTerm\n ? this.state.memory.shortTerm.slice(-10)\n : undefined,\n longTermSummary: this.state.memory.longTermSummary,\n size: this.state.memory.size,\n };\n }\n\n /**\n * Get variables/context\n */\n getVariables(): Record<string, unknown> {\n return deepClone(this.state.context);\n }\n\n /**\n * Get a specific variable by path\n */\n getVariable(path: string): unknown {\n const parts = path.split('.');\n let current: unknown = this.state.context;\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined;\n }\n if (typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n }\n\n /**\n * Get call stack (agent hierarchy)\n */\n getCallStack(): string[] {\n const stack: string[] = [this.state.agentName];\n\n // Build stack from parent steps\n for (let i = this.currentStepIndex; i >= 0; i--) {\n const step = this.steps[i];\n if (step.type === 'handoff' || step.type === 'delegation') {\n const agentName = (step.output as { agentName?: string })?.agentName;\n if (agentName && !stack.includes(agentName)) {\n stack.unshift(agentName);\n }\n }\n }\n\n return stack;\n }\n\n /**\n * Watch a variable\n */\n watch(path: string): VariableWatch {\n const value = this.getVariable(path);\n const watch: VariableWatch = {\n id: `watch_${path}`,\n path,\n value: deepClone(value),\n changed: false,\n };\n this.watches.set(path, watch);\n return watch;\n }\n\n /**\n * Unwatch a variable\n */\n unwatch(path: string): boolean {\n return this.watches.delete(path);\n }\n\n /**\n * Get all watches\n */\n getWatches(): VariableWatch[] {\n return Array.from(this.watches.values());\n }\n\n /**\n * Update watches\n */\n private updateWatches(): void {\n for (const watch of this.watches.values()) {\n const currentValue = this.getVariable(watch.path);\n const previousValue = watch.value;\n\n watch.previousValue = previousValue;\n watch.value = deepClone(currentValue);\n watch.changed =\n JSON.stringify(previousValue) !== JSON.stringify(currentValue);\n }\n }\n\n /**\n * Get changed watches\n */\n getChangedWatches(): VariableWatch[] {\n return this.getWatches().filter((w) => w.changed);\n }\n\n /**\n * Search steps by content\n */\n searchSteps(\n query: string,\n options?: {\n caseSensitive?: boolean;\n types?: string[];\n },\n ): ExecutionStep[] {\n const searchQuery = options?.caseSensitive ? query : query.toLowerCase();\n\n return this.steps.filter((step) => {\n if (options?.types && !options.types.includes(step.type)) {\n return false;\n }\n\n const stepString = JSON.stringify(step);\n const searchIn = options?.caseSensitive\n ? stepString\n : stepString.toLowerCase();\n\n return searchIn.includes(searchQuery);\n });\n }\n\n /**\n * Get step summary\n */\n getStepSummary(step: ExecutionStep): string {\n switch (step.type) {\n case 'input':\n return `Input: ${truncate(String(step.input), 50)}`;\n case 'prompt':\n return `Prompt: ${truncate(String(step.input), 50)}`;\n case 'response':\n return `Response: ${truncate(String(step.output), 50)}`;\n case 'tool-call':\n return `Tool: ${step.toolCall?.name}(${Object.keys(step.toolCall?.arguments ?? {}).join(', ')})`;\n case 'tool-result':\n return `Result: ${step.toolCall?.success ? 'success' : 'failed'}`;\n case 'decision':\n return `Decision: ${step.decision?.chosen.description ?? 'unknown'}`;\n case 'error':\n return `Error: ${step.error?.message ?? 'unknown error'}`;\n default:\n return `${step.type}: step ${step.index}`;\n }\n }\n\n /**\n * Summarize an object for display\n */\n private summarizeObject(obj: unknown, depth = 0): unknown {\n if (depth > this.config.maxDepth) {\n return '[Max depth reached]';\n }\n\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj !== 'object') {\n if (typeof obj === 'string' && obj.length > this.config.maxStringLength) {\n return truncate(obj, this.config.maxStringLength);\n }\n return obj;\n }\n\n if (Array.isArray(obj)) {\n if (obj.length > 10) {\n return [...obj.slice(0, 10), `... and ${obj.length - 10} more`];\n }\n return obj.map((item) => this.summarizeObject(item, depth + 1));\n }\n\n const result: Record<string, unknown> = {};\n const entries = Object.entries(obj as Record<string, unknown>);\n\n for (const [key, value] of entries.slice(0, 20)) {\n result[key] = this.summarizeObject(value, depth + 1);\n }\n\n if (entries.length > 20) {\n result['...'] = `${entries.length - 20} more keys`;\n }\n\n return result;\n }\n\n /**\n * Export inspection data\n */\n export(): Record<string, unknown> {\n return {\n inspection: this.inspect(),\n watches: this.getWatches(),\n steps: this.steps.map((s, i) => ({\n index: i,\n type: s.type,\n summary: this.getStepSummary(s),\n timestamp: s.timestamp,\n durationMs: s.durationMs,\n })),\n };\n }\n}\n\n/**\n * Create an inspector instance\n */\nexport function createInspector(\n steps: ExecutionStep[],\n state: AgentState,\n config?: InspectorConfig,\n): Inspector {\n return new Inspector(steps, state, config);\n}\n","/**\n * Session\n *\n * Debug session management.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n DebugSession,\n DebugSessionState,\n ExecutionStep,\n AgentState,\n Breakpoint,\n StepAction,\n Checkpoint,\n Recording,\n} from '../types/index.js';\nimport { BreakpointManager, type BreakpointOptions } from './Breakpoint.js';\nimport { Inspector } from './Inspector.js';\nimport { generateId, now } from '../utils/helpers.js';\n\n/**\n * Session events\n */\nexport interface SessionEvents {\n 'state:changed': (state: DebugSessionState) => void;\n 'step:executed': (step: ExecutionStep) => void;\n 'step:paused': (step: ExecutionStep, breakpoint?: Breakpoint) => void;\n 'breakpoint:hit': (breakpoint: Breakpoint, step: ExecutionStep) => void;\n 'checkpoint:created': (checkpoint: Checkpoint) => void;\n error: (error: Error) => void;\n}\n\n/**\n * Session configuration\n */\nexport interface SessionConfig {\n /** Agent ID */\n agentId: string;\n /** Auto-checkpoint interval (in steps) */\n checkpointInterval?: number;\n /** Maximum steps */\n maxSteps?: number;\n}\n\n/**\n * DebugSession\n *\n * Manages a debugging session.\n *\n * @example\n * ```typescript\n * const session = new DebugSession({ agentId: 'my-agent' });\n *\n * // Set breakpoints\n * session.setBreakpoint({ type: 'tool-call', toolName: 'search' });\n *\n * // Start session\n * await session.start();\n *\n * // Execute steps\n * const shouldContinue = session.addStep(step);\n * if (!shouldContinue) {\n * // Hit a breakpoint\n * const inspector = session.inspect();\n * // ... inspect state\n * await session.continue();\n * }\n * ```\n */\nexport class DebugSessionManager extends EventEmitter<SessionEvents> {\n private session: DebugSession;\n private steps: ExecutionStep[] = [];\n private state: AgentState;\n private breakpoints: BreakpointManager;\n private checkpoints: Map<string, Checkpoint> = new Map();\n private config: Required<SessionConfig>;\n private pauseResolver?: () => void;\n private stepAction: StepAction = 'continue';\n\n constructor(config: SessionConfig) {\n super();\n\n this.config = {\n agentId: config.agentId,\n checkpointInterval: config.checkpointInterval ?? 0,\n maxSteps: config.maxSteps ?? 10000,\n };\n\n this.breakpoints = new BreakpointManager();\n this.state = this.createInitialState();\n\n this.session = {\n id: generateId('session'),\n agentId: config.agentId,\n state: 'idle',\n startedAt: 0,\n currentStep: -1,\n totalSteps: 0,\n breakpoints: [],\n checkpoints: [],\n };\n\n // Forward breakpoint events\n this.breakpoints.on('breakpoint:hit', (bp, ctx) => {\n this.emit('breakpoint:hit', bp, ctx.step);\n });\n }\n\n /**\n * Get session ID\n */\n get id(): string {\n return this.session.id;\n }\n\n /**\n * Get session state\n */\n get sessionState(): DebugSessionState {\n return this.session.state;\n }\n\n /**\n * Start the debug session\n */\n start(): void {\n if (this.session.state !== 'idle') {\n throw new Error(`Cannot start session in state: ${this.session.state}`);\n }\n\n this.session.state = 'running';\n this.session.startedAt = now();\n this.emit('state:changed', 'running');\n }\n\n /**\n * Stop the debug session\n */\n stop(): void {\n if (\n this.session.state === 'stopped' ||\n this.session.state === 'completed'\n ) {\n return;\n }\n\n this.session.state = 'stopped';\n this.session.endedAt = now();\n\n if (this.pauseResolver) {\n this.pauseResolver();\n this.pauseResolver = undefined;\n }\n\n this.emit('state:changed', 'stopped');\n }\n\n /**\n * Pause the session\n */\n pause(): void {\n if (this.session.state === 'running') {\n this.session.state = 'paused';\n this.emit('state:changed', 'paused');\n }\n }\n\n /**\n * Continue execution\n */\n continue(): void {\n if (this.session.state !== 'paused') {\n return;\n }\n\n this.stepAction = 'continue';\n this.session.state = 'running';\n this.emit('state:changed', 'running');\n\n if (this.pauseResolver) {\n this.pauseResolver();\n this.pauseResolver = undefined;\n }\n }\n\n /**\n * Step over (execute next step)\n */\n stepOver(): void {\n if (this.session.state !== 'paused') {\n return;\n }\n\n this.stepAction = 'step-over';\n this.session.state = 'running';\n this.emit('state:changed', 'running');\n\n if (this.pauseResolver) {\n this.pauseResolver();\n this.pauseResolver = undefined;\n }\n }\n\n /**\n * Step into (go deeper)\n */\n stepInto(): void {\n if (this.session.state !== 'paused') {\n return;\n }\n\n this.stepAction = 'step-into';\n this.session.state = 'running';\n this.emit('state:changed', 'running');\n\n if (this.pauseResolver) {\n this.pauseResolver();\n this.pauseResolver = undefined;\n }\n }\n\n /**\n * Step out (finish current scope)\n */\n stepOut(): void {\n if (this.session.state !== 'paused') {\n return;\n }\n\n this.stepAction = 'step-out';\n this.session.state = 'running';\n this.emit('state:changed', 'running');\n\n if (this.pauseResolver) {\n this.pauseResolver();\n this.pauseResolver = undefined;\n }\n }\n\n /**\n * Add a step to the session\n * Returns true if execution should continue, false if paused\n */\n addStep(step: ExecutionStep, agentState: AgentState): boolean {\n if (this.session.state !== 'running') {\n return false;\n }\n\n // Add step\n this.steps.push(step);\n this.state = agentState;\n this.session.currentStep = step.index;\n this.session.totalSteps = this.steps.length;\n\n this.emit('step:executed', step);\n\n // Check for auto-checkpoint\n if (\n this.config.checkpointInterval > 0 &&\n this.steps.length % this.config.checkpointInterval === 0\n ) {\n this.createCheckpoint({\n name: `auto-checkpoint-${this.steps.length}`,\n automatic: true,\n });\n }\n\n // Check for step-over mode\n if (this.stepAction === 'step-over') {\n this.session.state = 'paused';\n this.stepAction = 'continue';\n this.emit('step:paused', step);\n return false;\n }\n\n // Check breakpoints\n const hitBreakpoint = this.breakpoints.check(step, agentState);\n if (hitBreakpoint) {\n this.session.state = 'paused';\n this.emit('step:paused', step, hitBreakpoint);\n return false;\n }\n\n return true;\n }\n\n /**\n * Wait for continue signal (for async execution)\n */\n async waitForContinue(): Promise<StepAction> {\n if (this.session.state !== 'paused') {\n return 'continue';\n }\n\n return new Promise<StepAction>((resolve) => {\n this.pauseResolver = () => resolve(this.stepAction);\n });\n }\n\n /**\n * Set a breakpoint\n */\n setBreakpoint(options: BreakpointOptions): Breakpoint {\n const bp = this.breakpoints.add(options);\n this.session.breakpoints = this.breakpoints.getAll();\n return bp;\n }\n\n /**\n * Remove a breakpoint\n */\n removeBreakpoint(id: string): boolean {\n const result = this.breakpoints.remove(id);\n this.session.breakpoints = this.breakpoints.getAll();\n return result;\n }\n\n /**\n * Get all breakpoints\n */\n getBreakpoints(): Breakpoint[] {\n return this.breakpoints.getAll();\n }\n\n /**\n * Create a checkpoint\n */\n createCheckpoint(options: {\n name: string;\n description?: string;\n automatic?: boolean;\n }): Checkpoint {\n const checkpoint: Checkpoint = {\n id: generateId('cp'),\n recordingId: this.session.id,\n name: options.name,\n description: options.description,\n stepIndex: this.session.currentStep,\n timestamp: now(),\n state: this.state,\n automatic: options.automatic ?? false,\n };\n\n this.checkpoints.set(checkpoint.id, checkpoint);\n this.session.checkpoints.push(checkpoint.id);\n\n this.emit('checkpoint:created', checkpoint);\n return checkpoint;\n }\n\n /**\n * Get a checkpoint\n */\n getCheckpoint(id: string): Checkpoint | undefined {\n return this.checkpoints.get(id);\n }\n\n /**\n * List all checkpoints\n */\n getCheckpoints(): Checkpoint[] {\n return Array.from(this.checkpoints.values());\n }\n\n /**\n * Restore from a checkpoint\n */\n restoreCheckpoint(id: string): boolean {\n const checkpoint = this.checkpoints.get(id);\n if (!checkpoint) {\n return false;\n }\n\n // Truncate steps to checkpoint\n this.steps = this.steps.slice(0, checkpoint.stepIndex + 1);\n this.state = checkpoint.state;\n this.session.currentStep = checkpoint.stepIndex;\n this.session.totalSteps = this.steps.length;\n\n return true;\n }\n\n /**\n * Get an inspector for current state\n */\n inspect(): Inspector {\n return new Inspector(this.steps, this.state);\n }\n\n /**\n * Get current agent state\n */\n getState(): AgentState {\n return this.state;\n }\n\n /**\n * Get all steps\n */\n getSteps(): ExecutionStep[] {\n return [...this.steps];\n }\n\n /**\n * Get session data\n */\n getSession(): DebugSession {\n return { ...this.session };\n }\n\n /**\n * Mark session as completed\n */\n complete(): void {\n this.session.state = 'completed';\n this.session.endedAt = now();\n this.emit('state:changed', 'completed');\n }\n\n /**\n * Mark session as errored\n */\n error(err: Error): void {\n this.session.state = 'error';\n this.session.endedAt = now();\n this.emit('error', err);\n this.emit('state:changed', 'error');\n }\n\n /**\n * Export session to recording format\n */\n toRecording(): Recording {\n const toolCalls = this.steps\n .filter((s) => s.toolCall)\n .map((s) => s.toolCall!);\n\n const decisions = this.steps\n .filter((s) => s.decision)\n .map((s) => s.decision!);\n\n const tokenUsage = this.steps.reduce(\n (acc, step) => {\n if (step.tokenUsage) {\n acc.prompt += step.tokenUsage.prompt;\n acc.completion += step.tokenUsage.completion;\n acc.total += step.tokenUsage.total;\n }\n return acc;\n },\n { prompt: 0, completion: 0, total: 0 },\n );\n\n return {\n id: this.session.id,\n agentId: this.config.agentId,\n agentName: this.state.agentName,\n status: this.session.state === 'completed' ? 'completed' : 'failed',\n startedAt: this.session.startedAt,\n endedAt: this.session.endedAt,\n durationMs: (this.session.endedAt ?? now()) - this.session.startedAt,\n steps: this.steps,\n toolCalls,\n decisions,\n checkpoints: this.getCheckpoints(),\n initialState: this.createInitialState(),\n finalState: this.state,\n tokenUsage,\n version: '1.0.0',\n };\n }\n\n private createInitialState(): AgentState {\n return {\n agentId: this.config.agentId,\n agentName: 'Unknown',\n model: 'unknown',\n memory: { size: 0 },\n context: {},\n tools: [],\n messages: [],\n };\n }\n}\n\n/**\n * Create a debug session\n */\nexport function createDebugSession(config: SessionConfig): DebugSessionManager {\n return new DebugSessionManager(config);\n}\n","/**\n * Debugger\n *\n * Main debugger class for AI agents.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n DebuggerConfig,\n ExecutionStep,\n AgentState,\n Breakpoint,\n StepType,\n ToolCall,\n Decision,\n TokenUsage,\n Recording,\n Checkpoint,\n} from '../types/index.js';\nimport {\n DebugSessionManager,\n createDebugSession,\n type SessionConfig,\n} from './Session.js';\nimport { BreakpointHelpers, type BreakpointOptions } from './Breakpoint.js';\nimport { Inspector } from './Inspector.js';\nimport { generateId, now, deepClone } from '../utils/helpers.js';\n\n/**\n * Debugger events\n */\nexport interface DebuggerEvents {\n 'session:started': (sessionId: string) => void;\n 'session:ended': (sessionId: string, recording: Recording) => void;\n step: (step: ExecutionStep) => void;\n 'breakpoint:hit': (breakpoint: Breakpoint, step: ExecutionStep) => void;\n paused: (reason: string) => void;\n resumed: () => void;\n error: (error: Error) => void;\n}\n\n/**\n * Agent interface for debugging\n */\nexport interface DebuggableAgent {\n id: string;\n name: string;\n model: string;\n getState?: () => AgentState;\n onStep?: (callback: (step: ExecutionStep) => void) => void;\n}\n\n/**\n * Step builder for creating execution steps\n */\nexport interface StepBuilder {\n input(data: unknown): ExecutionStep;\n prompt(content: string): ExecutionStep;\n response(content: string, usage?: TokenUsage): ExecutionStep;\n toolCall(tool: ToolCall): ExecutionStep;\n toolResult(tool: ToolCall, success: boolean): ExecutionStep;\n decision(decision: Decision): ExecutionStep;\n error(error: Error): ExecutionStep;\n custom(type: StepType, data: unknown): ExecutionStep;\n}\n\n/**\n * Default configuration\n */\nconst DEFAULT_CONFIG: Required<DebuggerConfig> = {\n storagePath: './.debug-sessions',\n recording: {\n enabled: true,\n includePrompts: true,\n includeResponses: true,\n includeToolCalls: true,\n includeMemory: true,\n includeMetadata: true,\n compression: false,\n maxSizeBytes: 100 * 1024 * 1024, // 100MB\n },\n maxSteps: 10000,\n autoCheckpoint: false,\n checkpointInterval: 0,\n profiling: false,\n};\n\n/**\n * Debugger\n *\n * Main debugger for AI agents.\n *\n * @example\n * ```typescript\n * const debugger = new Debugger({\n * storagePath: './debug-sessions',\n * recording: { enabled: true }\n * });\n *\n * // Attach to agent\n * debugger.attach(agent);\n *\n * // Set breakpoints\n * debugger.setBreakpoint({ type: 'tool-call', toolName: 'search' });\n *\n * // Start session\n * const session = await debugger.startSession();\n *\n * // Execute with debugging\n * await agent.execute('Hello');\n * ```\n */\nexport class Debugger extends EventEmitter<DebuggerEvents> {\n private config: Required<DebuggerConfig>;\n private sessions: Map<string, DebugSessionManager> = new Map();\n private currentSession?: DebugSessionManager;\n private attachedAgent?: DebuggableAgent;\n private stepIndex = 0;\n private globalBreakpoints: BreakpointOptions[] = [];\n\n constructor(config?: Partial<DebuggerConfig>) {\n super();\n\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n recording: {\n ...DEFAULT_CONFIG.recording,\n ...config?.recording,\n },\n };\n }\n\n /**\n * Attach to an agent\n */\n attach(agent: DebuggableAgent): void {\n this.attachedAgent = agent;\n\n // Subscribe to agent steps if supported\n if (agent.onStep) {\n agent.onStep((step) => {\n if (this.currentSession) {\n const state = agent.getState?.() ?? this.createDefaultState(agent);\n this.currentSession.addStep(step, state);\n }\n });\n }\n }\n\n /**\n * Detach from agent\n */\n detach(): void {\n this.attachedAgent = undefined;\n }\n\n /**\n * Start a debug session\n */\n startSession(options?: Partial<SessionConfig>): DebugSessionManager {\n const agentId = options?.agentId ?? this.attachedAgent?.id ?? 'unknown';\n\n const session = createDebugSession({\n agentId,\n checkpointInterval: this.config.checkpointInterval,\n maxSteps: this.config.maxSteps,\n ...options,\n });\n\n // Apply global breakpoints\n for (const bp of this.globalBreakpoints) {\n session.setBreakpoint(bp);\n }\n\n // Forward session events\n session.on('breakpoint:hit', (bp, step) => {\n this.emit('breakpoint:hit', bp, step);\n this.emit('paused', `Hit breakpoint: ${bp.description ?? bp.type}`);\n });\n\n session.on('step:executed', (step) => {\n this.emit('step', step);\n });\n\n session.on('error', (error) => {\n this.emit('error', error);\n });\n\n session.start();\n\n this.sessions.set(session.id, session);\n this.currentSession = session;\n this.stepIndex = 0;\n\n this.emit('session:started', session.id);\n\n return session;\n }\n\n /**\n * End the current session\n */\n endSession(): Recording | undefined {\n if (!this.currentSession) {\n return undefined;\n }\n\n this.currentSession.complete();\n const recording = this.currentSession.toRecording();\n\n this.emit('session:ended', this.currentSession.id, recording);\n\n this.currentSession = undefined;\n\n return recording;\n }\n\n /**\n * Get the current session\n */\n getSession(): DebugSessionManager | undefined {\n return this.currentSession;\n }\n\n /**\n * Get a session by ID\n */\n getSessionById(id: string): DebugSessionManager | undefined {\n return this.sessions.get(id);\n }\n\n /**\n * Set a breakpoint (applies to current and future sessions)\n */\n setBreakpoint(options: BreakpointOptions): Breakpoint | undefined {\n this.globalBreakpoints.push(options);\n\n if (this.currentSession) {\n return this.currentSession.setBreakpoint(options);\n }\n\n return undefined;\n }\n\n /**\n * Remove all global breakpoints\n */\n clearBreakpoints(): void {\n this.globalBreakpoints = [];\n\n if (this.currentSession) {\n const bps = this.currentSession.getBreakpoints();\n for (const bp of bps) {\n this.currentSession.removeBreakpoint(bp.id);\n }\n }\n }\n\n /**\n * Continue execution (after breakpoint)\n */\n continue(): void {\n if (this.currentSession) {\n this.currentSession.continue();\n this.emit('resumed');\n }\n }\n\n /**\n * Step over\n */\n stepOver(): void {\n if (this.currentSession) {\n this.currentSession.stepOver();\n }\n }\n\n /**\n * Step into\n */\n stepInto(): void {\n if (this.currentSession) {\n this.currentSession.stepInto();\n }\n }\n\n /**\n * Step out\n */\n stepOut(): void {\n if (this.currentSession) {\n void this.currentSession.stepOut();\n }\n }\n\n /**\n * Pause execution\n */\n pause(): void {\n if (this.currentSession) {\n this.currentSession.pause();\n this.emit('paused', 'Manual pause');\n }\n }\n\n /**\n * Stop execution\n */\n stop(): void {\n if (this.currentSession) {\n this.currentSession.stop();\n }\n }\n\n /**\n * Create a checkpoint\n */\n createCheckpoint(options: {\n name: string;\n description?: string;\n }): Checkpoint | undefined {\n if (this.currentSession) {\n return this.currentSession.createCheckpoint(options);\n }\n return undefined;\n }\n\n /**\n * List checkpoints\n */\n listCheckpoints(): Checkpoint[] {\n return this.currentSession?.getCheckpoints() ?? [];\n }\n\n /**\n * Restore from checkpoint\n */\n restoreCheckpoint(id: string): boolean {\n return this.currentSession?.restoreCheckpoint(id) ?? false;\n }\n\n /**\n * Get an inspector for current state\n */\n inspect(): Inspector | undefined {\n return this.currentSession?.inspect();\n }\n\n /**\n * Record a step manually\n */\n recordStep(step: Partial<ExecutionStep>, state?: AgentState): boolean {\n if (!this.currentSession) {\n return false;\n }\n\n const fullStep: ExecutionStep = {\n id: step.id ?? generateId('step'),\n index: step.index ?? this.stepIndex++,\n type: step.type ?? 'custom',\n timestamp: step.timestamp ?? now(),\n durationMs: step.durationMs ?? 0,\n ...step,\n };\n\n const agentState =\n state ??\n this.attachedAgent?.getState?.() ??\n this.createDefaultState(this.attachedAgent);\n\n return this.currentSession.addStep(fullStep, agentState);\n }\n\n /**\n * Get a step builder for creating steps\n */\n steps(): StepBuilder {\n return {\n input: (data: unknown): ExecutionStep => {\n return this.createStep('input', { input: data });\n },\n\n prompt: (content: string): ExecutionStep => {\n return this.createStep('prompt', { input: content });\n },\n\n response: (content: string, usage?: TokenUsage): ExecutionStep => {\n return this.createStep('response', {\n output: content,\n tokenUsage: usage,\n });\n },\n\n toolCall: (tool: ToolCall): ExecutionStep => {\n return this.createStep('tool-call', {\n toolCall: tool,\n input: tool.arguments,\n });\n },\n\n toolResult: (tool: ToolCall, success: boolean): ExecutionStep => {\n return this.createStep('tool-result', {\n toolCall: { ...tool, success },\n output: tool.result,\n });\n },\n\n decision: (decision: Decision): ExecutionStep => {\n return this.createStep('decision', {\n decision,\n output: decision.chosen,\n });\n },\n\n error: (error: Error): ExecutionStep => {\n return this.createStep('error', {\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n },\n });\n },\n\n custom: (type: StepType, data: unknown): ExecutionStep => {\n return this.createStep(type, data as Record<string, unknown>);\n },\n };\n }\n\n /**\n * Create a step\n */\n private createStep(\n type: StepType,\n data: Record<string, unknown>,\n ): ExecutionStep {\n return {\n id: generateId('step'),\n index: this.stepIndex++,\n type,\n timestamp: now(),\n durationMs: 0,\n ...data,\n };\n }\n\n /**\n * Create default agent state\n */\n private createDefaultState(agent?: DebuggableAgent): AgentState {\n return {\n agentId: agent?.id ?? 'unknown',\n agentName: agent?.name ?? 'Unknown Agent',\n model: agent?.model ?? 'unknown',\n memory: { size: 0 },\n context: {},\n tools: [],\n messages: [],\n };\n }\n\n /**\n * Get configuration\n */\n getConfig(): Readonly<DebuggerConfig> {\n return deepClone(this.config);\n }\n\n /**\n * Get breakpoint helpers\n */\n static get Breakpoints(): typeof BreakpointHelpers {\n return BreakpointHelpers;\n }\n}\n\n/**\n * Create a debugger instance\n */\nexport function createDebugger(config?: Partial<DebuggerConfig>): Debugger {\n return new Debugger(config);\n}\n","/**\n * Diff Utilities\n *\n * State comparison and diff utilities.\n */\n\nimport type { ReplayDifference } from '../types/index.js';\n\n/**\n * Difference type\n */\nexport interface Difference {\n /** Path to the changed value */\n path: string[];\n /** Type of change */\n kind: 'N' | 'D' | 'E' | 'A'; // New, Deleted, Edited, Array\n /** Left-hand side value */\n lhs?: unknown;\n /** Right-hand side value */\n rhs?: unknown;\n /** Array index (for array changes) */\n index?: number;\n /** Item change (for array changes) */\n item?: Difference;\n}\n\n/**\n * Compare two objects and return differences\n */\nexport function diff(\n lhs: unknown,\n rhs: unknown,\n path: string[] = [],\n): Difference[] {\n const differences: Difference[] = [];\n\n if (lhs === rhs) {\n return differences;\n }\n\n // Handle null/undefined\n if (lhs === null || lhs === undefined) {\n if (rhs !== null && rhs !== undefined) {\n differences.push({ path, kind: 'N', rhs });\n }\n return differences;\n }\n\n if (rhs === null || rhs === undefined) {\n differences.push({ path, kind: 'D', lhs });\n return differences;\n }\n\n // Handle different types\n const lhsType = typeof lhs;\n const rhsType = typeof rhs;\n\n if (lhsType !== rhsType) {\n differences.push({ path, kind: 'E', lhs, rhs });\n return differences;\n }\n\n // Handle primitives\n if (lhsType !== 'object') {\n if (lhs !== rhs) {\n differences.push({ path, kind: 'E', lhs, rhs });\n }\n return differences;\n }\n\n // Handle arrays\n if (Array.isArray(lhs) && Array.isArray(rhs)) {\n const maxLen = Math.max(lhs.length, rhs.length);\n\n for (let i = 0; i < maxLen; i++) {\n if (i >= lhs.length) {\n differences.push({\n path,\n kind: 'A',\n index: i,\n item: { path: [...path, String(i)], kind: 'N', rhs: rhs[i] },\n });\n } else if (i >= rhs.length) {\n differences.push({\n path,\n kind: 'A',\n index: i,\n item: { path: [...path, String(i)], kind: 'D', lhs: lhs[i] },\n });\n } else {\n const itemDiffs = diff(lhs[i], rhs[i], [...path, String(i)]);\n differences.push(...itemDiffs);\n }\n }\n\n return differences;\n }\n\n // Handle objects\n if (typeof lhs === 'object' && typeof rhs === 'object') {\n const lhsObj = lhs as Record<string, unknown>;\n const rhsObj = rhs as Record<string, unknown>;\n const allKeys = new Set([...Object.keys(lhsObj), ...Object.keys(rhsObj)]);\n\n for (const key of allKeys) {\n const keyPath = [...path, key];\n\n if (!(key in lhsObj)) {\n differences.push({ path: keyPath, kind: 'N', rhs: rhsObj[key] });\n } else if (!(key in rhsObj)) {\n differences.push({ path: keyPath, kind: 'D', lhs: lhsObj[key] });\n } else {\n const propDiffs = diff(lhsObj[key], rhsObj[key], keyPath);\n differences.push(...propDiffs);\n }\n }\n }\n\n return differences;\n}\n\n/**\n * Convert internal diff to ReplayDifference format\n */\nexport function toReplayDifferences(\n diffs: Difference[],\n stepIndex: number,\n): ReplayDifference[] {\n return diffs.map((d) => ({\n stepIndex,\n path: d.path.join('.'),\n original: d.lhs,\n replayed: d.rhs,\n type: d.kind === 'N' ? 'added' : d.kind === 'D' ? 'removed' : 'changed',\n }));\n}\n\n/**\n * Apply multiple patches to an object\n */\nexport function applyPatches<T>(target: T, patches: Difference[]): T {\n let result = target;\n for (const patch of patches) {\n result = applyPatch(result, patch);\n }\n return result;\n}\n\n/**\n * Apply a patch to an object\n */\nexport function applyPatch<T>(target: T, patch: Difference): T {\n const result = JSON.parse(JSON.stringify(target)) as T;\n\n if (patch.path.length === 0) {\n return patch.rhs as T;\n }\n\n let current: Record<string, unknown> = result as Record<string, unknown>;\n\n for (let i = 0; i < patch.path.length - 1; i++) {\n const key = patch.path[i];\n if (!(key in current)) {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n const lastKey = patch.path[patch.path.length - 1];\n\n switch (patch.kind) {\n case 'N':\n case 'E':\n current[lastKey] = patch.rhs;\n break;\n case 'D':\n delete current[lastKey];\n break;\n case 'A':\n if (Array.isArray(current[lastKey]) && patch.item) {\n const arr = current[lastKey] as unknown[];\n if (patch.item.kind === 'N') {\n arr.splice(patch.index!, 0, patch.item.rhs);\n } else if (patch.item.kind === 'D') {\n arr.splice(patch.index!, 1);\n } else if (patch.item.kind === 'E') {\n arr[patch.index!] = patch.item.rhs;\n }\n }\n break;\n }\n\n return result;\n}\n\n/**\n * Create a summary of changes\n */\nexport function summarizeDiff(diffs: Difference[]): {\n added: number;\n removed: number;\n changed: number;\n paths: string[];\n} {\n const summary = {\n added: 0,\n removed: 0,\n changed: 0,\n paths: [] as string[],\n };\n\n for (const d of diffs) {\n const pathStr = d.path.join('.');\n summary.paths.push(pathStr);\n\n switch (d.kind) {\n case 'N':\n summary.added++;\n break;\n case 'D':\n summary.removed++;\n break;\n case 'E':\n summary.changed++;\n break;\n case 'A':\n if (d.item?.kind === 'N') {\n summary.added++;\n } else if (d.item?.kind === 'D') {\n summary.removed++;\n } else {\n summary.changed++;\n }\n break;\n }\n }\n\n return summary;\n}\n\n/**\n * Check if two objects are deeply equal\n */\nexport function isEqual(a: unknown, b: unknown): boolean {\n return diff(a, b).length === 0;\n}\n\n/**\n * Get value at path\n */\nexport function getAtPath(obj: unknown, path: string[]): unknown {\n let current = obj;\n\n for (const key of path) {\n if (current === null || current === undefined) {\n return undefined;\n }\n if (typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return current;\n}\n\n/**\n * Set value at path\n */\nexport function setAtPath<T>(obj: T, path: string[], value: unknown): T {\n if (path.length === 0) {\n return value as T;\n }\n\n const result = JSON.parse(JSON.stringify(obj)) as T;\n let current: Record<string, unknown> = result as Record<string, unknown>;\n\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (!(key in current) || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n current[path[path.length - 1]] = value;\n return result;\n}\n","/**\n * Snapshot\n *\n * State snapshot management for recordings.\n */\n\nimport type { Snapshot, AgentState } from '../types/index.js';\nimport { generateId, now, deepClone, estimateSize } from '../utils/helpers.js';\nimport { diff, type Difference } from '../utils/diff.js';\n\n/**\n * Snapshot options\n */\nexport interface SnapshotOptions {\n /** Maximum snapshots to keep */\n maxSnapshots?: number;\n /** Whether to store incremental diffs */\n useDiffs?: boolean;\n /** Compression level (0-9) */\n compressionLevel?: number;\n}\n\n/**\n * Snapshot with diff data\n */\nexport interface IncrementalSnapshot extends Snapshot {\n /** Diff from previous snapshot */\n diff?: Difference[];\n /** Whether this is a full snapshot */\n isFull: boolean;\n /** Previous snapshot ID */\n previousId?: string;\n}\n\n/**\n * Default options\n */\nconst DEFAULT_OPTIONS: Required<SnapshotOptions> = {\n maxSnapshots: 100,\n useDiffs: true,\n compressionLevel: 0,\n};\n\n/**\n * SnapshotManager\n *\n * Manages state snapshots for recordings.\n *\n * @example\n * ```typescript\n * const manager = new SnapshotManager({ useDiffs: true });\n *\n * // Create snapshots\n * const snap1 = manager.create(state1, 0);\n * const snap2 = manager.create(state2, 5);\n *\n * // Get snapshot at step\n * const snapshot = manager.getAtStep(3);\n *\n * // Restore state from snapshot\n * const restoredState = manager.restore(snap1.id);\n * ```\n */\nexport class SnapshotManager {\n private snapshots: Map<string, IncrementalSnapshot> = new Map();\n private snapshotOrder: string[] = [];\n private options: Required<SnapshotOptions>;\n private fullSnapshotInterval = 10;\n\n constructor(options?: SnapshotOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n /**\n * Create a snapshot\n */\n create(state: AgentState, stepIndex: number): Snapshot {\n const id = generateId('snap');\n const timestamp = now();\n\n // Determine if this should be a full snapshot\n const shouldBeFull =\n !this.options.useDiffs ||\n this.snapshotOrder.length === 0 ||\n this.snapshotOrder.length % this.fullSnapshotInterval === 0;\n\n let snapshot: IncrementalSnapshot;\n\n if (shouldBeFull) {\n snapshot = {\n id,\n timestamp,\n stepIndex,\n state: deepClone(state),\n size: estimateSize(state),\n isFull: true,\n };\n } else {\n // Get previous snapshot\n const previousId = this.snapshotOrder[this.snapshotOrder.length - 1];\n const previous = this.snapshots.get(previousId);\n\n if (previous) {\n const stateDiff = diff(previous.state, state);\n snapshot = {\n id,\n timestamp,\n stepIndex,\n state: deepClone(state),\n size: estimateSize(state),\n isFull: false,\n diff: stateDiff,\n previousId,\n };\n } else {\n // Fallback to full snapshot\n snapshot = {\n id,\n timestamp,\n stepIndex,\n state: deepClone(state),\n size: estimateSize(state),\n isFull: true,\n };\n }\n }\n\n this.snapshots.set(id, snapshot);\n this.snapshotOrder.push(id);\n\n // Enforce max snapshots\n this.enforceLimit();\n\n return snapshot;\n }\n\n /**\n * Get a snapshot by ID\n */\n get(id: string): Snapshot | undefined {\n return this.snapshots.get(id);\n }\n\n /**\n * Get all snapshots\n */\n getAll(): Snapshot[] {\n return this.snapshotOrder.map((id) => this.snapshots.get(id)!);\n }\n\n /**\n * Get snapshot at or before a step\n */\n getAtStep(stepIndex: number): Snapshot | undefined {\n let closestSnapshot: IncrementalSnapshot | undefined;\n\n for (const id of this.snapshotOrder) {\n const snapshot = this.snapshots.get(id);\n if (snapshot && snapshot.stepIndex <= stepIndex) {\n closestSnapshot = snapshot;\n } else {\n break;\n }\n }\n\n return closestSnapshot;\n }\n\n /**\n * Get snapshot after a step\n */\n getAfterStep(stepIndex: number): Snapshot | undefined {\n for (const id of this.snapshotOrder) {\n const snapshot = this.snapshots.get(id);\n if (snapshot && snapshot.stepIndex > stepIndex) {\n return snapshot;\n }\n }\n return undefined;\n }\n\n /**\n * Get snapshots in a range\n */\n getInRange(startStep: number, endStep: number): Snapshot[] {\n return this.getAll().filter(\n (snap) => snap.stepIndex >= startStep && snap.stepIndex <= endStep,\n );\n }\n\n /**\n * Restore state from a snapshot\n */\n restore(id: string): AgentState | undefined {\n const snapshot = this.snapshots.get(id);\n if (!snapshot) {\n return undefined;\n }\n\n return deepClone(snapshot.state);\n }\n\n /**\n * Get the latest snapshot\n */\n getLatest(): Snapshot | undefined {\n if (this.snapshotOrder.length === 0) {\n return undefined;\n }\n\n const latestId = this.snapshotOrder[this.snapshotOrder.length - 1];\n return this.snapshots.get(latestId);\n }\n\n /**\n * Get the first snapshot\n */\n getFirst(): Snapshot | undefined {\n if (this.snapshotOrder.length === 0) {\n return undefined;\n }\n\n const firstId = this.snapshotOrder[0];\n return this.snapshots.get(firstId);\n }\n\n /**\n * Delete a snapshot\n */\n delete(id: string): boolean {\n const existed = this.snapshots.delete(id);\n if (existed) {\n this.snapshotOrder = this.snapshotOrder.filter((i) => i !== id);\n }\n return existed;\n }\n\n /**\n * Clear all snapshots\n */\n clear(): void {\n this.snapshots.clear();\n this.snapshotOrder = [];\n }\n\n /**\n * Get snapshot count\n */\n get count(): number {\n return this.snapshots.size;\n }\n\n /**\n * Get total size of all snapshots\n */\n getTotalSize(): number {\n let total = 0;\n for (const snapshot of this.snapshots.values()) {\n total += snapshot.size ?? 0;\n }\n return total;\n }\n\n /**\n * Compact snapshots by merging diffs\n */\n compact(): void {\n // Keep only full snapshots and rebuild diffs\n const fullSnapshots = this.getAll().filter(\n (snap) => (snap as IncrementalSnapshot).isFull,\n );\n\n this.clear();\n\n for (const snapshot of fullSnapshots) {\n this.snapshots.set(snapshot.id, snapshot as IncrementalSnapshot);\n this.snapshotOrder.push(snapshot.id);\n }\n }\n\n /**\n * Compare two snapshots\n */\n compare(id1: string, id2: string): Difference[] | undefined {\n const snap1 = this.snapshots.get(id1);\n const snap2 = this.snapshots.get(id2);\n\n if (!snap1 || !snap2) {\n return undefined;\n }\n\n return diff(snap1.state, snap2.state);\n }\n\n /**\n * Export snapshots\n */\n export(): Snapshot[] {\n return this.getAll().map((snap) => ({\n id: snap.id,\n timestamp: snap.timestamp,\n stepIndex: snap.stepIndex,\n state: snap.state,\n size: snap.size,\n }));\n }\n\n /**\n * Import snapshots\n */\n import(snapshots: Snapshot[]): void {\n this.clear();\n\n for (const snapshot of snapshots) {\n const incremental: IncrementalSnapshot = {\n ...snapshot,\n isFull: true,\n };\n this.snapshots.set(snapshot.id, incremental);\n this.snapshotOrder.push(snapshot.id);\n }\n }\n\n /**\n * Enforce max snapshots limit\n */\n private enforceLimit(): void {\n while (this.snapshotOrder.length > this.options.maxSnapshots) {\n const oldestId = this.snapshotOrder.shift();\n if (oldestId) {\n this.snapshots.delete(oldestId);\n }\n }\n }\n}\n\n/**\n * Create a snapshot manager\n */\nexport function createSnapshotManager(\n options?: SnapshotOptions,\n): SnapshotManager {\n return new SnapshotManager(options);\n}\n","/**\n * Checkpoint\n *\n * Checkpoint management for recordings.\n */\n\nimport type { Checkpoint, AgentState } from '../types/index.js';\nimport { generateId, now, deepClone } from '../utils/helpers.js';\n\n/**\n * Checkpoint creation options\n */\nexport interface CheckpointCreateOptions {\n /** Recording ID */\n recordingId: string;\n /** Checkpoint name */\n name: string;\n /** Optional description */\n description?: string;\n /** Step index */\n stepIndex: number;\n /** Agent state at checkpoint */\n state: AgentState;\n /** Whether this was automatically created */\n automatic?: boolean;\n /** Tags for categorization */\n tags?: string[];\n}\n\n/**\n * Checkpoint filter options\n */\nexport interface CheckpointFilterOptions {\n /** Filter by name pattern */\n namePattern?: string | RegExp;\n /** Filter by step range */\n stepRange?: { min?: number; max?: number };\n /** Filter by time range */\n timeRange?: { after?: number; before?: number };\n /** Filter by automatic flag */\n automatic?: boolean;\n /** Filter by tags */\n tags?: string[];\n}\n\n/**\n * CheckpointManager\n *\n * Manages checkpoints for recordings.\n *\n * @example\n * ```typescript\n * const manager = new CheckpointManager();\n *\n * // Create a checkpoint\n * const cp = manager.create({\n * recordingId: 'rec_123',\n * name: 'Before API call',\n * stepIndex: 10,\n * state: currentState,\n * });\n *\n * // Get checkpoints\n * const checkpoints = manager.getAll();\n *\n * // Restore from checkpoint\n * const state = manager.getState(cp.id);\n * ```\n */\nexport class CheckpointManager {\n private checkpoints: Map<string, Checkpoint> = new Map();\n private checkpointOrder: string[] = [];\n\n /**\n * Create a checkpoint\n */\n create(options: CheckpointCreateOptions): Checkpoint {\n const checkpoint: Checkpoint = {\n id: generateId('cp'),\n recordingId: options.recordingId,\n name: options.name,\n description: options.description,\n stepIndex: options.stepIndex,\n timestamp: now(),\n state: deepClone(options.state),\n automatic: options.automatic ?? false,\n };\n\n this.checkpoints.set(checkpoint.id, checkpoint);\n this.checkpointOrder.push(checkpoint.id);\n\n return checkpoint;\n }\n\n /**\n * Get a checkpoint by ID\n */\n get(id: string): Checkpoint | undefined {\n return this.checkpoints.get(id);\n }\n\n /**\n * Get checkpoint by name\n */\n getByName(name: string): Checkpoint | undefined {\n for (const checkpoint of this.checkpoints.values()) {\n if (checkpoint.name === name) {\n return checkpoint;\n }\n }\n return undefined;\n }\n\n /**\n * Get all checkpoints\n */\n getAll(): Checkpoint[] {\n return this.checkpointOrder.map((id) => this.checkpoints.get(id)!);\n }\n\n /**\n * Get checkpoints matching filter\n */\n filter(options: CheckpointFilterOptions): Checkpoint[] {\n return this.getAll().filter((cp) => {\n // Name pattern filter\n if (options.namePattern) {\n if (typeof options.namePattern === 'string') {\n if (!cp.name.includes(options.namePattern)) {\n return false;\n }\n } else if (!options.namePattern.test(cp.name)) {\n return false;\n }\n }\n\n // Step range filter\n if (options.stepRange) {\n if (\n options.stepRange.min !== undefined &&\n cp.stepIndex < options.stepRange.min\n ) {\n return false;\n }\n if (\n options.stepRange.max !== undefined &&\n cp.stepIndex > options.stepRange.max\n ) {\n return false;\n }\n }\n\n // Time range filter\n if (options.timeRange) {\n if (\n options.timeRange.after !== undefined &&\n cp.timestamp < options.timeRange.after\n ) {\n return false;\n }\n if (\n options.timeRange.before !== undefined &&\n cp.timestamp > options.timeRange.before\n ) {\n return false;\n }\n }\n\n // Automatic filter\n if (\n options.automatic !== undefined &&\n cp.automatic !== options.automatic\n ) {\n return false;\n }\n\n return true;\n });\n }\n\n /**\n * Get checkpoint at or before a step\n */\n getAtStep(stepIndex: number): Checkpoint | undefined {\n let closestCheckpoint: Checkpoint | undefined;\n\n for (const id of this.checkpointOrder) {\n const checkpoint = this.checkpoints.get(id);\n if (checkpoint && checkpoint.stepIndex <= stepIndex) {\n closestCheckpoint = checkpoint;\n } else {\n break;\n }\n }\n\n return closestCheckpoint;\n }\n\n /**\n * Get checkpoint after a step\n */\n getAfterStep(stepIndex: number): Checkpoint | undefined {\n for (const id of this.checkpointOrder) {\n const checkpoint = this.checkpoints.get(id);\n if (checkpoint && checkpoint.stepIndex > stepIndex) {\n return checkpoint;\n }\n }\n return undefined;\n }\n\n /**\n * Get checkpoints in step range\n */\n getInRange(startStep: number, endStep: number): Checkpoint[] {\n return this.getAll().filter(\n (cp) => cp.stepIndex >= startStep && cp.stepIndex <= endStep,\n );\n }\n\n /**\n * Get state from checkpoint\n */\n getState(id: string): AgentState | undefined {\n const checkpoint = this.checkpoints.get(id);\n if (!checkpoint) {\n return undefined;\n }\n\n return deepClone(checkpoint.state);\n }\n\n /**\n * Update checkpoint\n */\n update(\n id: string,\n updates: Partial<Pick<Checkpoint, 'name' | 'description'>>,\n ): boolean {\n const checkpoint = this.checkpoints.get(id);\n if (!checkpoint) {\n return false;\n }\n\n if (updates.name !== undefined) {\n checkpoint.name = updates.name;\n }\n if (updates.description !== undefined) {\n checkpoint.description = updates.description;\n }\n\n return true;\n }\n\n /**\n * Delete a checkpoint\n */\n delete(id: string): boolean {\n const existed = this.checkpoints.delete(id);\n if (existed) {\n this.checkpointOrder = this.checkpointOrder.filter((i) => i !== id);\n }\n return existed;\n }\n\n /**\n * Clear all checkpoints\n */\n clear(): void {\n this.checkpoints.clear();\n this.checkpointOrder = [];\n }\n\n /**\n * Get checkpoint count\n */\n get count(): number {\n return this.checkpoints.size;\n }\n\n /**\n * Get the latest checkpoint\n */\n getLatest(): Checkpoint | undefined {\n if (this.checkpointOrder.length === 0) {\n return undefined;\n }\n\n const latestId = this.checkpointOrder[this.checkpointOrder.length - 1];\n return this.checkpoints.get(latestId);\n }\n\n /**\n * Get the first checkpoint\n */\n getFirst(): Checkpoint | undefined {\n if (this.checkpointOrder.length === 0) {\n return undefined;\n }\n\n const firstId = this.checkpointOrder[0];\n return this.checkpoints.get(firstId);\n }\n\n /**\n * Get manual checkpoints only\n */\n getManual(): Checkpoint[] {\n return this.filter({ automatic: false });\n }\n\n /**\n * Get automatic checkpoints only\n */\n getAutomatic(): Checkpoint[] {\n return this.filter({ automatic: true });\n }\n\n /**\n * Export checkpoints\n */\n export(): Checkpoint[] {\n return this.getAll().map((cp) => ({\n id: cp.id,\n recordingId: cp.recordingId,\n name: cp.name,\n description: cp.description,\n stepIndex: cp.stepIndex,\n timestamp: cp.timestamp,\n state: cp.state,\n automatic: cp.automatic,\n }));\n }\n\n /**\n * Import checkpoints\n */\n import(checkpoints: Checkpoint[]): void {\n this.clear();\n\n for (const checkpoint of checkpoints) {\n this.checkpoints.set(checkpoint.id, deepClone(checkpoint));\n this.checkpointOrder.push(checkpoint.id);\n }\n }\n}\n\n/**\n * Create a checkpoint manager\n */\nexport function createCheckpointManager(): CheckpointManager {\n return new CheckpointManager();\n}\n","/**\n * Timeline\n *\n * Timeline management for recordings.\n */\n\nimport type { TimelineEvent, TimelineEventType } from '../types/index.js';\nimport { generateId, now, formatDuration } from '../utils/helpers.js';\n\n/**\n * Timeline event creation options\n */\nexport interface TimelineEventOptions {\n /** Event ID (optional, will be generated) */\n id?: string;\n /** Event type */\n type: string;\n /** Timestamp (optional, defaults to now) */\n timestamp?: number;\n /** Step index */\n stepIndex: number;\n /** Event description */\n description: string;\n /** Duration in ms */\n durationMs?: number;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Timeline marker\n */\nexport interface TimelineMarker {\n /** Marker ID */\n id: string;\n /** Marker name */\n name: string;\n /** Timestamp */\n timestamp: number;\n /** Step index */\n stepIndex: number;\n /** Marker color */\n color?: string;\n /** Description */\n description?: string;\n}\n\n/**\n * Timeline segment\n */\nexport interface TimelineSegment {\n /** Segment ID */\n id: string;\n /** Start step */\n startStep: number;\n /** End step */\n endStep: number;\n /** Start timestamp */\n startTime: number;\n /** End timestamp */\n endTime: number;\n /** Segment name */\n name: string;\n /** Segment type */\n type: string;\n}\n\n/**\n * Timeline filter options\n */\nexport interface TimelineFilterOptions {\n /** Filter by event types */\n types?: string[];\n /** Filter by step range */\n stepRange?: { min?: number; max?: number };\n /** Filter by time range */\n timeRange?: { after?: number; before?: number };\n /** Search in description */\n search?: string;\n}\n\n/**\n * Timeline statistics\n */\nexport interface TimelineStats {\n /** Total events */\n totalEvents: number;\n /** Events by type */\n eventsByType: Record<string, number>;\n /** Total duration */\n totalDurationMs: number;\n /** Average event duration */\n avgEventDurationMs: number;\n /** First event timestamp */\n firstEventTime?: number;\n /** Last event timestamp */\n lastEventTime?: number;\n}\n\n/**\n * Timeline\n *\n * Manages timeline of events for recordings.\n *\n * @example\n * ```typescript\n * const timeline = new Timeline();\n *\n * // Add events\n * timeline.addEvent({\n * type: 'tool-call',\n * stepIndex: 5,\n * description: 'Called search tool',\n * durationMs: 150,\n * });\n *\n * // Add markers\n * timeline.addMarker({\n * name: 'Important decision',\n * stepIndex: 10,\n * });\n *\n * // Query timeline\n * const events = timeline.getEventsInRange(0, 20);\n * const stats = timeline.getStats();\n * ```\n */\nexport class Timeline {\n private events: Map<string, TimelineEvent> = new Map();\n private eventOrder: string[] = [];\n private markers: Map<string, TimelineMarker> = new Map();\n private segments: Map<string, TimelineSegment> = new Map();\n\n /**\n * Add an event to the timeline\n */\n addEvent(options: TimelineEventOptions): TimelineEvent {\n const event: TimelineEvent = {\n id: options.id ?? generateId('evt'),\n type: options.type as TimelineEventType,\n timestamp: options.timestamp ?? now(),\n stepIndex: options.stepIndex,\n summary: options.description ?? '',\n description: options.description,\n durationMs: options.durationMs,\n metadata: options.metadata,\n };\n\n this.events.set(event.id, event);\n this.eventOrder.push(event.id);\n\n return event;\n }\n\n /**\n * Get an event by ID\n */\n getEvent(id: string): TimelineEvent | undefined {\n return this.events.get(id);\n }\n\n /**\n * Get all events\n */\n getEvents(): TimelineEvent[] {\n return this.eventOrder.map((id) => this.events.get(id)!);\n }\n\n /**\n * Get events matching filter\n */\n filterEvents(options: TimelineFilterOptions): TimelineEvent[] {\n return this.getEvents().filter((event) => {\n // Type filter\n if (options.types && !options.types.includes(event.type)) {\n return false;\n }\n\n // Step range filter\n if (options.stepRange) {\n if (\n options.stepRange.min !== undefined &&\n event.stepIndex < options.stepRange.min\n ) {\n return false;\n }\n if (\n options.stepRange.max !== undefined &&\n event.stepIndex > options.stepRange.max\n ) {\n return false;\n }\n }\n\n // Time range filter\n if (options.timeRange) {\n if (\n options.timeRange.after !== undefined &&\n event.timestamp < options.timeRange.after\n ) {\n return false;\n }\n if (\n options.timeRange.before !== undefined &&\n event.timestamp > options.timeRange.before\n ) {\n return false;\n }\n }\n\n // Search filter\n if (options.search) {\n const searchLower = options.search.toLowerCase();\n const description = event.description ?? event.summary ?? '';\n if (!description.toLowerCase().includes(searchLower)) {\n return false;\n }\n }\n\n return true;\n });\n }\n\n /**\n * Get events in step range\n */\n getEventsInRange(startStep: number, endStep: number): TimelineEvent[] {\n return this.filterEvents({\n stepRange: { min: startStep, max: endStep },\n });\n }\n\n /**\n * Get events by type\n */\n getEventsByType(type: string): TimelineEvent[] {\n return this.filterEvents({ types: [type] });\n }\n\n /**\n * Get event at step\n */\n getEventAtStep(stepIndex: number): TimelineEvent | undefined {\n return this.getEvents().find((e) => e.stepIndex === stepIndex);\n }\n\n /**\n * Add a marker\n */\n addMarker(\n options: Omit<TimelineMarker, 'id' | 'timestamp'> & { timestamp?: number },\n ): TimelineMarker {\n const marker: TimelineMarker = {\n id: generateId('mark'),\n name: options.name,\n timestamp: options.timestamp ?? now(),\n stepIndex: options.stepIndex,\n color: options.color,\n description: options.description,\n };\n\n this.markers.set(marker.id, marker);\n return marker;\n }\n\n /**\n * Get all markers\n */\n getMarkers(): TimelineMarker[] {\n return Array.from(this.markers.values());\n }\n\n /**\n * Get marker at step\n */\n getMarkerAtStep(stepIndex: number): TimelineMarker | undefined {\n for (const marker of this.markers.values()) {\n if (marker.stepIndex === stepIndex) {\n return marker;\n }\n }\n return undefined;\n }\n\n /**\n * Remove a marker\n */\n removeMarker(id: string): boolean {\n return this.markers.delete(id);\n }\n\n /**\n * Add a segment\n */\n addSegment(options: Omit<TimelineSegment, 'id'>): TimelineSegment {\n const segment: TimelineSegment = {\n id: generateId('seg'),\n ...options,\n };\n\n this.segments.set(segment.id, segment);\n return segment;\n }\n\n /**\n * Get all segments\n */\n getSegments(): TimelineSegment[] {\n return Array.from(this.segments.values());\n }\n\n /**\n * Get segment containing step\n */\n getSegmentForStep(stepIndex: number): TimelineSegment | undefined {\n for (const segment of this.segments.values()) {\n if (stepIndex >= segment.startStep && stepIndex <= segment.endStep) {\n return segment;\n }\n }\n return undefined;\n }\n\n /**\n * Remove a segment\n */\n removeSegment(id: string): boolean {\n return this.segments.delete(id);\n }\n\n /**\n * Get timeline statistics\n */\n getStats(): TimelineStats {\n const events = this.getEvents();\n\n const eventsByType: Record<string, number> = {};\n let totalDuration = 0;\n\n for (const event of events) {\n eventsByType[event.type] = (eventsByType[event.type] ?? 0) + 1;\n if (event.durationMs) {\n totalDuration += event.durationMs;\n }\n }\n\n return {\n totalEvents: events.length,\n eventsByType,\n totalDurationMs: totalDuration,\n avgEventDurationMs: events.length > 0 ? totalDuration / events.length : 0,\n firstEventTime: events.length > 0 ? events[0].timestamp : undefined,\n lastEventTime:\n events.length > 0 ? events[events.length - 1].timestamp : undefined,\n };\n }\n\n /**\n * Get duration between two steps\n */\n getDurationBetween(startStep: number, endStep: number): number {\n const startEvent = this.getEventAtStep(startStep);\n const endEvent = this.getEventAtStep(endStep);\n\n if (!startEvent || !endEvent) {\n return 0;\n }\n\n return endEvent.timestamp - startEvent.timestamp;\n }\n\n /**\n * Format timeline as text\n */\n format(): string {\n const lines: string[] = [];\n const events = this.getEvents();\n\n for (const event of events) {\n const duration = event.durationMs\n ? ` (${formatDuration(event.durationMs)})`\n : '';\n lines.push(\n `[${event.stepIndex}] ${event.type}: ${event.description}${duration}`,\n );\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Clear the timeline\n */\n clear(): void {\n this.events.clear();\n this.eventOrder = [];\n this.markers.clear();\n this.segments.clear();\n }\n\n /**\n * Get event count\n */\n get count(): number {\n return this.events.size;\n }\n\n /**\n * Export timeline data\n */\n export(): {\n events: TimelineEvent[];\n markers: TimelineMarker[];\n segments: TimelineSegment[];\n } {\n return {\n events: this.getEvents(),\n markers: this.getMarkers(),\n segments: this.getSegments(),\n };\n }\n\n /**\n * Import timeline data\n */\n import(data: {\n events?: TimelineEvent[];\n markers?: TimelineMarker[];\n segments?: TimelineSegment[];\n }): void {\n this.clear();\n\n if (data.events) {\n for (const event of data.events) {\n this.events.set(event.id, event);\n this.eventOrder.push(event.id);\n }\n }\n\n if (data.markers) {\n for (const marker of data.markers) {\n this.markers.set(marker.id, marker);\n }\n }\n\n if (data.segments) {\n for (const segment of data.segments) {\n this.segments.set(segment.id, segment);\n }\n }\n }\n}\n\n/**\n * Create a timeline instance\n */\nexport function createTimeline(): Timeline {\n return new Timeline();\n}\n","/**\n * Recorder\n *\n * Records agent execution for playback and analysis.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n Recording,\n RecordingMetadata,\n RecorderConfig,\n ExecutionStep,\n AgentState,\n TokenUsage,\n RecordingStorageAdapter,\n Checkpoint,\n Snapshot,\n} from '../types/index.js';\nimport { SnapshotManager } from './Snapshot.js';\nimport { CheckpointManager } from './Checkpoint.js';\nimport { Timeline } from './Timeline.js';\nimport { generateId, now, estimateSize, deepClone } from '../utils/helpers.js';\n\n/**\n * Recorder events\n */\nexport interface RecorderEvents {\n 'recording:started': (recordingId: string) => void;\n 'recording:stopped': (recording: Recording) => void;\n 'recording:paused': () => void;\n 'recording:resumed': () => void;\n 'step:recorded': (step: ExecutionStep) => void;\n 'snapshot:created': (snapshot: Snapshot) => void;\n 'checkpoint:created': (checkpoint: Checkpoint) => void;\n error: (error: Error) => void;\n}\n\n/**\n * Recording session state\n */\ntype RecordingState = 'idle' | 'recording' | 'paused' | 'stopped';\n\n/**\n * Default configuration\n */\nconst DEFAULT_CONFIG: Omit<Required<RecorderConfig>, 'storage'> & {\n storage?: RecordingStorageAdapter;\n} = {\n includePrompts: true,\n includeResponses: true,\n includeToolCalls: true,\n includeMemory: true,\n includeMetadata: true,\n compression: false,\n maxSizeBytes: 100 * 1024 * 1024, // 100MB\n autoSnapshot: false,\n snapshotInterval: 0,\n maxRecordings: 1000,\n retentionDays: 30,\n checkpointInterval: 0,\n includeEmbeddings: false,\n storage: undefined,\n};\n\n/**\n * Recorder\n *\n * Records agent execution sessions.\n *\n * @example\n * ```typescript\n * const recorder = new Recorder({\n * includePrompts: true,\n * includeResponses: true,\n * autoSnapshot: true,\n * snapshotInterval: 10,\n * });\n *\n * // Start recording\n * recorder.start('my-agent', initialState);\n *\n * // Record steps\n * recorder.recordStep(step, state);\n *\n * // Stop and get recording\n * const recording = recorder.stop();\n * ```\n */\nexport class Recorder extends EventEmitter<RecorderEvents> {\n private config: Omit<Required<RecorderConfig>, 'storage'> & {\n storage?: RecordingStorageAdapter;\n };\n private state: RecordingState = 'idle';\n private recordingId?: string;\n private agentId?: string;\n private agentName?: string;\n private steps: ExecutionStep[] = [];\n private startedAt = 0;\n private initialState?: AgentState;\n private currentState?: AgentState;\n private snapshots: SnapshotManager;\n private checkpoints: CheckpointManager;\n private timeline: Timeline;\n private storage?: RecordingStorageAdapter;\n private estimatedSize = 0;\n\n constructor(\n config?: Partial<RecorderConfig>,\n storage?: RecordingStorageAdapter,\n ) {\n super();\n\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n\n this.storage = storage;\n this.snapshots = new SnapshotManager();\n this.checkpoints = new CheckpointManager();\n this.timeline = new Timeline();\n }\n\n /**\n * Start recording\n */\n start(agentId: string, initialState: AgentState, agentName?: string): string {\n if (this.state !== 'idle') {\n throw new Error(`Cannot start recording in state: ${this.state}`);\n }\n\n this.recordingId = generateId('rec');\n this.agentId = agentId;\n this.agentName = agentName ?? initialState.agentName;\n this.initialState = deepClone(initialState);\n this.currentState = deepClone(initialState);\n this.steps = [];\n this.startedAt = now();\n this.estimatedSize = 0;\n this.state = 'recording';\n\n // Reset managers\n this.snapshots = new SnapshotManager();\n this.checkpoints = new CheckpointManager();\n this.timeline = new Timeline();\n\n // Create initial snapshot\n this.snapshots.create(initialState, 0);\n\n this.emit('recording:started', this.recordingId);\n\n return this.recordingId;\n }\n\n /**\n * Stop recording\n */\n stop(): Recording {\n if (this.state !== 'recording' && this.state !== 'paused') {\n throw new Error(`Cannot stop recording in state: ${this.state}`);\n }\n\n const recording = this.buildRecording();\n this.state = 'stopped';\n\n this.emit('recording:stopped', recording);\n\n return recording;\n }\n\n /**\n * Pause recording\n */\n pause(): void {\n if (this.state !== 'recording') {\n return;\n }\n\n this.state = 'paused';\n this.emit('recording:paused');\n }\n\n /**\n * Resume recording\n */\n resume(): void {\n if (this.state !== 'paused') {\n return;\n }\n\n this.state = 'recording';\n this.emit('recording:resumed');\n }\n\n /**\n * Record a step\n */\n recordStep(step: ExecutionStep, state: AgentState): boolean {\n if (this.state !== 'recording') {\n return false;\n }\n\n // Check size limit\n const stepSize = estimateSize(step);\n if (this.estimatedSize + stepSize > this.config.maxSizeBytes) {\n this.emit('error', new Error('Recording size limit exceeded'));\n return false;\n }\n\n // Apply filters\n const filteredStep = this.filterStep(step);\n if (!filteredStep) {\n return false;\n }\n\n this.steps.push(filteredStep);\n this.currentState = deepClone(state);\n this.estimatedSize += stepSize;\n\n // Add to timeline\n this.timeline.addEvent({\n id: generateId('evt'),\n type: filteredStep.type,\n timestamp: filteredStep.timestamp,\n stepIndex: filteredStep.index,\n description: this.getStepDescription(filteredStep),\n });\n\n // Auto-snapshot\n if (\n this.config.autoSnapshot &&\n this.config.snapshotInterval > 0 &&\n this.steps.length % this.config.snapshotInterval === 0\n ) {\n const snapshot = this.snapshots.create(state, filteredStep.index);\n this.emit('snapshot:created', snapshot);\n }\n\n this.emit('step:recorded', filteredStep);\n\n return true;\n }\n\n /**\n * Create a checkpoint\n */\n createCheckpoint(name: string, description?: string): Checkpoint | undefined {\n if (this.state !== 'recording' && this.state !== 'paused') {\n return undefined;\n }\n\n if (!this.recordingId || !this.currentState) {\n return undefined;\n }\n\n const stepIndex =\n this.steps.length > 0 ? this.steps[this.steps.length - 1].index : -1;\n\n const checkpoint = this.checkpoints.create({\n recordingId: this.recordingId,\n name,\n description,\n stepIndex,\n state: this.currentState,\n });\n\n // Also create a snapshot for the checkpoint\n this.snapshots.create(this.currentState, stepIndex);\n\n this.emit('checkpoint:created', checkpoint);\n\n return checkpoint;\n }\n\n /**\n * Get current recording state\n */\n getState(): RecordingState {\n return this.state;\n }\n\n /**\n * Get recording ID\n */\n getRecordingId(): string | undefined {\n return this.recordingId;\n }\n\n /**\n * Get steps count\n */\n getStepsCount(): number {\n return this.steps.length;\n }\n\n /**\n * Get estimated size\n */\n getEstimatedSize(): number {\n return this.estimatedSize;\n }\n\n /**\n * Get timeline\n */\n getTimeline(): Timeline {\n return this.timeline;\n }\n\n /**\n * Get snapshots\n */\n getSnapshots(): Snapshot[] {\n return this.snapshots.getAll();\n }\n\n /**\n * Get checkpoints\n */\n getCheckpoints(): Checkpoint[] {\n return this.checkpoints.getAll();\n }\n\n /**\n * Save recording to storage\n */\n async save(): Promise<void> {\n if (!this.storage) {\n throw new Error('No storage adapter configured');\n }\n\n const recording = this.buildRecording();\n await this.storage.save(recording);\n }\n\n /**\n * Filter step based on configuration\n */\n private filterStep(step: ExecutionStep): ExecutionStep | null {\n const filtered = { ...step };\n\n // Filter prompts\n if (!this.config.includePrompts && step.type === 'prompt') {\n return null;\n }\n\n // Filter responses\n if (!this.config.includeResponses && step.type === 'response') {\n return null;\n }\n\n // Filter tool calls\n if (\n !this.config.includeToolCalls &&\n (step.type === 'tool-call' || step.type === 'tool-result')\n ) {\n return null;\n }\n\n // Filter metadata\n if (!this.config.includeMetadata) {\n delete filtered.metadata;\n }\n\n return filtered;\n }\n\n /**\n * Get step description for timeline\n */\n private getStepDescription(step: ExecutionStep): string {\n switch (step.type) {\n case 'input':\n return 'User input received';\n case 'prompt':\n return 'Prompt sent to model';\n case 'response':\n return 'Response received from model';\n case 'tool-call':\n return `Tool called: ${step.toolCall?.name ?? 'unknown'}`;\n case 'tool-result':\n return `Tool result: ${step.toolCall?.success ? 'success' : 'failed'}`;\n case 'decision':\n return `Decision made: ${step.decision?.chosen.description ?? 'unknown'}`;\n case 'error':\n return `Error: ${step.error?.message ?? 'unknown'}`;\n default:\n return `Step: ${step.type}`;\n }\n }\n\n /**\n * Build the recording object\n */\n private buildRecording(): Recording {\n const endedAt = now();\n const toolCalls = this.steps\n .filter((s) => s.toolCall)\n .map((s) => s.toolCall!);\n\n const decisions = this.steps\n .filter((s) => s.decision)\n .map((s) => s.decision!);\n\n const tokenUsage = this.steps.reduce(\n (acc, step) => {\n if (step.tokenUsage) {\n acc.prompt += step.tokenUsage.prompt;\n acc.completion += step.tokenUsage.completion;\n acc.total += step.tokenUsage.total;\n }\n return acc;\n },\n { prompt: 0, completion: 0, total: 0 } as TokenUsage,\n );\n\n const hasErrors = this.steps.some((s) => s.error);\n\n return {\n id: this.recordingId!,\n agentId: this.agentId!,\n agentName: this.agentName ?? 'Unknown',\n status: hasErrors ? 'failed' : 'completed',\n startedAt: this.startedAt,\n endedAt,\n durationMs: endedAt - this.startedAt,\n steps: this.steps,\n toolCalls,\n decisions,\n checkpoints: this.checkpoints.getAll(),\n initialState: this.initialState!,\n finalState: this.currentState!,\n tokenUsage,\n version: '1.0.0',\n metadata: this.config.includeMetadata ? this.buildMetadata() : undefined,\n };\n }\n\n /**\n * Build recording metadata\n */\n private buildMetadata(): RecordingMetadata {\n return {\n totalSteps: this.steps.length,\n totalToolCalls: this.steps.filter((s) => s.type === 'tool-call').length,\n totalDecisions: this.steps.filter((s) => s.type === 'decision').length,\n hasErrors: this.steps.some((s) => s.error),\n compressionUsed: this.config.compression,\n recordingVersion: '1.0.0',\n tags: [],\n };\n }\n}\n\n/**\n * Create a recorder instance\n */\nexport function createRecorder(\n config?: Partial<RecorderConfig>,\n storage?: RecordingStorageAdapter,\n): Recorder {\n return new Recorder(config, storage);\n}\n","/**\n * StateRestorer\n *\n * Restores agent state from recordings and checkpoints.\n */\n\nimport type {\n Recording,\n ExecutionStep,\n AgentState,\n Checkpoint,\n} from '../types/index.js';\nimport { deepClone } from '../utils/helpers.js';\nimport { applyPatches, type Difference } from '../utils/diff.js';\n\n/**\n * State restoration options\n */\nexport interface RestoreOptions {\n /** Include memory state */\n includeMemory?: boolean;\n /** Include context state */\n includeContext?: boolean;\n /** Include message history */\n includeMessages?: boolean;\n /** Include tool states */\n includeTools?: boolean;\n}\n\n/**\n * State validation result\n */\nexport interface StateValidation {\n /** Whether state is valid */\n valid: boolean;\n /** Validation errors */\n errors: string[];\n /** Validation warnings */\n warnings: string[];\n}\n\n/**\n * Default options\n */\nconst DEFAULT_OPTIONS: Required<RestoreOptions> = {\n includeMemory: true,\n includeContext: true,\n includeMessages: true,\n includeTools: true,\n};\n\n/**\n * StateRestorer\n *\n * Restores agent state from recordings and checkpoints.\n *\n * @example\n * ```typescript\n * const restorer = new StateRestorer();\n *\n * // Restore state at a specific step\n * const state = restorer.restore(recording, 10);\n *\n * // Restore from checkpoint\n * const state = restorer.restoreFromCheckpoint(checkpoint);\n *\n * // Validate restored state\n * const validation = restorer.validate(state);\n * ```\n */\nexport class StateRestorer {\n private options: Required<RestoreOptions>;\n private stateCache: Map<string, Map<number, AgentState>> = new Map();\n\n constructor(options?: RestoreOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n /**\n * Restore state at a specific step\n */\n restore(recording: Recording, stepIndex: number): AgentState {\n // Check cache\n const cacheKey = recording.id;\n const recordingCache = this.stateCache.get(cacheKey);\n if (recordingCache?.has(stepIndex)) {\n return deepClone(recordingCache.get(stepIndex)!);\n }\n\n // Handle initial state case (stepIndex -1 or before any steps)\n if (stepIndex < 0) {\n const state = deepClone(recording.initialState);\n if (!recordingCache) {\n this.stateCache.set(cacheKey, new Map());\n }\n this.stateCache.get(cacheKey)!.set(stepIndex, deepClone(state));\n return state;\n }\n\n // Start from initial state or closest checkpoint\n let state: AgentState;\n let startStep: number;\n\n const checkpoint = this.findClosestCheckpoint(recording, stepIndex);\n if (checkpoint) {\n if (checkpoint.stepIndex === stepIndex) {\n // Checkpoint is exactly at target step\n // But we still need to rebuild from beginning as checkpoint may not have complete state\n state = deepClone(recording.initialState);\n startStep = 0;\n } else {\n // Checkpoint before target - apply steps from beginning to checkpoint, then from checkpoint to target\n state = deepClone(recording.initialState);\n startStep = 0;\n }\n } else {\n // No checkpoint, start from initial state\n state = deepClone(recording.initialState);\n startStep = 0;\n }\n\n // Apply steps to reach target (inclusive of stepIndex)\n for (let i = startStep; i <= stepIndex && i < recording.steps.length; i++) {\n state = this.applyStep(state, recording.steps[i]);\n }\n\n // Cache result\n if (!recordingCache) {\n this.stateCache.set(cacheKey, new Map());\n }\n this.stateCache.get(cacheKey)!.set(stepIndex, deepClone(state));\n\n return state;\n }\n\n /**\n * Restore state from a checkpoint\n */\n restoreFromCheckpoint(checkpoint: Checkpoint): AgentState {\n return deepClone(checkpoint.state);\n }\n\n /**\n * Apply a step to state\n */\n applyStep(state: AgentState, step: ExecutionStep): AgentState {\n const newState = deepClone(state);\n\n // Apply based on step type\n switch (step.type) {\n case 'input':\n if (this.options.includeMessages) {\n newState.messages.push({\n role: 'user',\n content: String(step.input),\n });\n }\n break;\n\n case 'prompt':\n // Prompt is the system message or augmented user message\n // Usually doesn't change visible state\n break;\n\n case 'response':\n if (this.options.includeMessages) {\n newState.messages.push({\n role: 'assistant',\n content: String(step.output),\n });\n }\n break;\n\n case 'tool-call':\n if (this.options.includeMessages && step.toolCall) {\n // Add tool call as assistant message\n newState.messages.push({\n role: 'assistant',\n content: `[Calling tool: ${step.toolCall.name}]`,\n toolCalls: [\n {\n id: step.toolCall.id,\n name: step.toolCall.name,\n arguments: step.toolCall.arguments,\n },\n ],\n });\n }\n break;\n\n case 'tool-result':\n if (this.options.includeMessages && step.toolCall) {\n newState.messages.push({\n role: 'tool',\n content: String(step.toolCall.result ?? ''),\n toolCallId: step.toolCall.id,\n });\n }\n break;\n\n case 'memory-write':\n if (this.options.includeMemory && step.output) {\n this.applyMemoryChange(\n newState,\n step.output as Record<string, unknown>,\n );\n }\n break;\n\n case 'memory-read':\n // Read doesn't change state\n break;\n\n case 'decision':\n // Decision might update context\n if (this.options.includeContext && step.decision) {\n newState.context['lastDecision'] = {\n options: step.decision.options.map((o) => o.description),\n chosen: step.decision.chosen.description,\n confidence: step.decision.confidence,\n };\n }\n break;\n\n case 'handoff':\n case 'delegation':\n // Agent handoff might update context\n if (this.options.includeContext && step.output) {\n const output = step.output as {\n agentId?: string;\n agentName?: string;\n };\n newState.context['delegatedTo'] = output.agentId ?? output.agentName;\n }\n break;\n\n case 'error':\n // Error state\n newState.context['lastError'] = step.error;\n break;\n }\n\n return newState;\n }\n\n /**\n * Apply memory changes to state\n */\n private applyMemoryChange(\n state: AgentState,\n changes: Record<string, unknown>,\n ): void {\n for (const [key, value] of Object.entries(changes)) {\n if (key === 'working') {\n state.memory.working = {\n ...state.memory.working,\n ...(value as Record<string, unknown>),\n };\n } else if (key === 'shortTerm' && Array.isArray(value)) {\n state.memory.shortTerm = [...(state.memory.shortTerm ?? []), ...value];\n } else if (key === 'longTermSummary' && typeof value === 'string') {\n state.memory.longTermSummary = value;\n } else if (key === 'size' && typeof value === 'number') {\n state.memory.size = value;\n }\n }\n }\n\n /**\n * Find closest checkpoint before or at step\n */\n private findClosestCheckpoint(\n recording: Recording,\n stepIndex: number,\n ): Checkpoint | undefined {\n let closest: Checkpoint | undefined;\n\n for (const checkpoint of recording.checkpoints) {\n if (checkpoint.stepIndex <= stepIndex) {\n if (!closest || checkpoint.stepIndex > closest.stepIndex) {\n closest = checkpoint;\n }\n }\n }\n\n return closest;\n }\n\n /**\n * Apply a diff patch to state\n */\n applyPatch(state: AgentState, differences: Difference[]): AgentState {\n return applyPatches(state, differences);\n }\n\n /**\n * Validate restored state\n */\n validate(state: AgentState): StateValidation {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Required fields\n if (!state.agentId) {\n errors.push('Missing agentId');\n }\n\n if (!state.agentName) {\n warnings.push('Missing agentName');\n }\n\n if (!state.model) {\n warnings.push('Missing model');\n }\n\n // Memory validation\n if (!state.memory) {\n errors.push('Missing memory object');\n } else {\n if (typeof state.memory.size !== 'number') {\n warnings.push('Memory size should be a number');\n }\n }\n\n // Messages validation\n if (!Array.isArray(state.messages)) {\n errors.push('Messages should be an array');\n } else {\n for (let i = 0; i < state.messages.length; i++) {\n const msg = state.messages[i];\n if (!msg.role) {\n errors.push(`Message ${i} missing role`);\n }\n if (msg.content === undefined && !msg.toolCalls) {\n warnings.push(`Message ${i} has no content or tool calls`);\n }\n // Warn about empty content\n if (typeof msg.content === 'string' && msg.content.trim() === '') {\n warnings.push(`Message ${i} has empty content`);\n }\n }\n }\n\n // Context validation\n if (!state.context || typeof state.context !== 'object') {\n warnings.push('Context should be an object');\n }\n\n // Tools validation\n if (!Array.isArray(state.tools)) {\n warnings.push('Tools should be an array');\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n }\n\n /**\n * Merge two states\n */\n merge(base: AgentState, overlay: Partial<AgentState>): AgentState {\n const merged = deepClone(base);\n\n if (overlay.agentId) {\n merged.agentId = overlay.agentId;\n }\n\n if (overlay.agentName) {\n merged.agentName = overlay.agentName;\n }\n\n if (overlay.model) {\n merged.model = overlay.model;\n }\n\n if (overlay.memory) {\n merged.memory = {\n ...merged.memory,\n ...overlay.memory,\n };\n }\n\n if (overlay.context) {\n merged.context = {\n ...merged.context,\n ...overlay.context,\n };\n }\n\n if (overlay.tools) {\n merged.tools = [...overlay.tools];\n }\n\n if (overlay.messages) {\n merged.messages = [...overlay.messages];\n }\n\n return merged;\n }\n\n /**\n * Create a minimal state\n */\n createMinimalState(\n agentId: string,\n agentName: string,\n model: string,\n ): AgentState {\n return {\n agentId,\n agentName,\n model,\n memory: {\n size: 0,\n },\n context: {},\n tools: [],\n messages: [],\n };\n }\n\n /**\n * Clear state cache\n */\n clearCache(): void {\n this.stateCache.clear();\n }\n\n /**\n * Clear cache for specific recording\n */\n clearRecordingCache(recordingId: string): void {\n this.stateCache.delete(recordingId);\n }\n\n /**\n * Get cache size\n */\n getCacheSize(): number {\n let size = 0;\n for (const cache of this.stateCache.values()) {\n size += cache.size;\n }\n return size;\n }\n}\n\n/**\n * Create a state restorer\n */\nexport function createStateRestorer(options?: RestoreOptions): StateRestorer {\n return new StateRestorer(options);\n}\n","/**\n * ReplayController\n *\n * Controls replay execution flow.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n Recording,\n ReplaySession,\n ReplayConfig,\n ExecutionStep,\n AgentState,\n Checkpoint,\n} from '../types/index.js';\nimport { deepClone } from '../utils/helpers.js';\n\n/**\n * Controller events\n */\nexport interface ReplayControllerEvents {\n 'step:replayed': (step: ExecutionStep, state: AgentState) => void;\n paused: (reason: string) => void;\n resumed: () => void;\n 'checkpoint:reached': (checkpoint: Checkpoint) => void;\n error: (error: Error) => void;\n}\n\n/**\n * Playback state\n */\nexport interface PlaybackState {\n /** Current step index */\n currentStep: number;\n /** Current agent state */\n state: AgentState;\n /** Whether paused */\n isPaused: boolean;\n /** Pause reason */\n pauseReason?: string;\n}\n\n/**\n * ReplayController\n *\n * Controls the flow of replay execution.\n *\n * @example\n * ```typescript\n * const controller = new ReplayController(recording, session, config);\n *\n * // Step forward\n * await controller.stepForward();\n *\n * // Step backward\n * await controller.stepBackward();\n *\n * // Jump to checkpoint\n * await controller.jumpToCheckpoint(checkpointId);\n * ```\n */\nexport class ReplayController extends EventEmitter<ReplayControllerEvents> {\n private recording: Recording;\n private session: ReplaySession;\n private config: Required<ReplayConfig>;\n private playbackState: PlaybackState;\n private stateHistory: Map<number, AgentState> = new Map();\n private checkpointMap: Map<string, Checkpoint> = new Map();\n\n constructor(\n recording: Recording,\n session: ReplaySession,\n config: Required<ReplayConfig>,\n ) {\n super();\n\n this.recording = recording;\n this.session = session;\n this.config = config;\n\n // Initialize playback state\n this.playbackState = {\n currentStep: session.currentStep,\n state: deepClone(recording.initialState),\n isPaused: false,\n };\n\n // Cache initial state\n this.stateHistory.set(-1, deepClone(recording.initialState));\n\n // Build checkpoint map\n for (const checkpoint of recording.checkpoints) {\n this.checkpointMap.set(checkpoint.id, checkpoint);\n }\n }\n\n /**\n * Step forward one step\n */\n stepForward(): ExecutionStep | undefined {\n const nextStep = this.playbackState.currentStep + 1;\n\n if (nextStep >= this.recording.steps.length) {\n return undefined;\n }\n\n const step = this.recording.steps[nextStep];\n const newState = this.applyStep(this.playbackState.state, step);\n\n // Cache state\n this.stateHistory.set(nextStep, deepClone(newState));\n\n this.playbackState.currentStep = nextStep;\n this.playbackState.state = newState;\n this.session.currentStep = nextStep;\n\n this.emit('step:replayed', step, newState);\n\n // Check pause conditions\n this.checkPauseConditions(step);\n\n return step;\n }\n\n /**\n * Step backward one step\n */\n stepBackward(): ExecutionStep | undefined {\n if (this.playbackState.currentStep < 0) {\n // Already before the beginning\n return undefined;\n }\n\n const prevStep = this.playbackState.currentStep - 1;\n\n // Get cached state or rebuild\n let state = this.stateHistory.get(prevStep);\n if (!state) {\n state = this.rebuildStateAt(prevStep);\n this.stateHistory.set(prevStep, deepClone(state));\n }\n\n this.playbackState.currentStep = prevStep;\n this.playbackState.state = deepClone(state);\n this.session.currentStep = Math.max(0, prevStep);\n\n // Return the step at the previous position (currentStep is 1-indexed relative to steps array)\n const stepIndex = prevStep - 1;\n if (stepIndex >= 0 && stepIndex < this.recording.steps.length) {\n const step = this.recording.steps[stepIndex];\n this.emit('step:replayed', step, this.playbackState.state);\n return step;\n }\n\n // At initial state (before any steps)\n return undefined;\n }\n\n /**\n * Jump to a specific step\n */\n jumpToStep(stepIndex: number): ExecutionStep | undefined {\n if (stepIndex < -1 || stepIndex >= this.recording.steps.length) {\n return undefined;\n }\n\n // Get cached state or rebuild\n let state = this.stateHistory.get(stepIndex);\n if (!state) {\n state = this.rebuildStateAt(stepIndex);\n this.stateHistory.set(stepIndex, deepClone(state));\n }\n\n this.playbackState.currentStep = stepIndex;\n this.playbackState.state = deepClone(state);\n this.session.currentStep = Math.max(0, stepIndex);\n\n if (stepIndex >= 0) {\n const step = this.recording.steps[stepIndex];\n this.emit('step:replayed', step, this.playbackState.state);\n return step;\n }\n\n return undefined;\n }\n\n /**\n * Jump to a checkpoint\n */\n jumpToCheckpoint(checkpointId: string): boolean {\n const checkpoint = this.checkpointMap.get(checkpointId);\n if (!checkpoint) {\n return false;\n }\n\n // Use checkpoint state directly\n this.playbackState.currentStep = checkpoint.stepIndex;\n this.playbackState.state = deepClone(checkpoint.state);\n this.session.currentStep = checkpoint.stepIndex;\n\n // Cache checkpoint state\n this.stateHistory.set(checkpoint.stepIndex, deepClone(checkpoint.state));\n\n this.emit('checkpoint:reached', checkpoint);\n\n if (\n checkpoint.stepIndex >= 0 &&\n checkpoint.stepIndex < this.recording.steps.length\n ) {\n const step = this.recording.steps[checkpoint.stepIndex];\n this.emit('step:replayed', step, this.playbackState.state);\n }\n\n return true;\n }\n\n /**\n * Get next checkpoint\n */\n getNextCheckpoint(): Checkpoint | undefined {\n const currentStep = this.playbackState.currentStep;\n\n for (const checkpoint of this.recording.checkpoints) {\n if (checkpoint.stepIndex > currentStep) {\n return checkpoint;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get previous checkpoint\n */\n getPreviousCheckpoint(): Checkpoint | undefined {\n const currentStep = this.playbackState.currentStep;\n let lastCheckpoint: Checkpoint | undefined;\n\n for (const checkpoint of this.recording.checkpoints) {\n if (checkpoint.stepIndex < currentStep) {\n lastCheckpoint = checkpoint;\n } else {\n break;\n }\n }\n\n return lastCheckpoint;\n }\n\n /**\n * Pause playback\n */\n pause(reason?: string): void {\n this.playbackState.isPaused = true;\n this.playbackState.pauseReason = reason;\n this.emit('paused', reason ?? 'Manual pause');\n }\n\n /**\n * Resume playback\n */\n resume(): void {\n this.playbackState.isPaused = false;\n this.playbackState.pauseReason = undefined;\n this.emit('resumed');\n }\n\n /**\n * Get current step\n */\n getCurrentStep(): ExecutionStep | undefined {\n const index = this.playbackState.currentStep;\n if (index >= 0 && index < this.recording.steps.length) {\n return this.recording.steps[index];\n }\n return undefined;\n }\n\n /**\n * Get current state\n */\n getCurrentState(): AgentState {\n return deepClone(this.playbackState.state);\n }\n\n /**\n * Get playback state\n */\n getPlaybackState(): PlaybackState {\n return { ...this.playbackState };\n }\n\n /**\n * Check if at beginning\n */\n isAtBeginning(): boolean {\n return this.playbackState.currentStep <= 0;\n }\n\n /**\n * Check if at end\n */\n isAtEnd(): boolean {\n return this.playbackState.currentStep >= this.recording.steps.length - 1;\n }\n\n /**\n * Get progress percentage\n */\n getProgress(): number {\n if (this.recording.steps.length === 0) {\n return 100;\n }\n return (\n ((this.playbackState.currentStep + 1) / this.recording.steps.length) * 100\n );\n }\n\n /**\n * Apply a step to state\n */\n private applyStep(state: AgentState, step: ExecutionStep): AgentState {\n const newState = deepClone(state);\n\n switch (step.type) {\n case 'input':\n newState.messages.push({\n role: 'user',\n content: String(step.input),\n });\n break;\n\n case 'response':\n newState.messages.push({\n role: 'assistant',\n content: String(step.output),\n });\n break;\n\n case 'tool-call':\n if (step.toolCall) {\n newState.messages.push({\n role: 'assistant',\n content: `[Tool Call: ${step.toolCall.name}]`,\n });\n }\n break;\n\n case 'tool-result':\n if (step.toolCall) {\n newState.messages.push({\n role: 'tool',\n content: String(step.toolCall.result),\n });\n }\n break;\n\n case 'memory-write':\n // Update memory if applicable\n if (step.output && typeof step.output === 'object') {\n Object.assign(newState.memory, step.output);\n }\n break;\n }\n\n return newState;\n }\n\n /**\n * Rebuild state at a specific step\n */\n private rebuildStateAt(targetStep: number): AgentState {\n // Find closest cached state before target\n let startStep = -1;\n let state = deepClone(this.recording.initialState);\n\n for (let i = targetStep; i >= -1; i--) {\n const cached = this.stateHistory.get(i);\n if (cached) {\n startStep = i;\n state = deepClone(cached);\n break;\n }\n }\n\n // Also check checkpoints\n for (const checkpoint of this.recording.checkpoints) {\n if (\n checkpoint.stepIndex > startStep &&\n checkpoint.stepIndex <= targetStep\n ) {\n startStep = checkpoint.stepIndex;\n state = deepClone(checkpoint.state);\n }\n }\n\n // Apply steps from start to target\n for (let i = startStep + 1; i <= targetStep; i++) {\n if (i >= 0 && i < this.recording.steps.length) {\n state = this.applyStep(state, this.recording.steps[i]);\n }\n }\n\n return state;\n }\n\n /**\n * Check pause conditions\n */\n private checkPauseConditions(step: ExecutionStep): void {\n if (this.config.pauseOnDecisions && step.type === 'decision') {\n this.pause('Decision point');\n }\n\n if (this.config.pauseOnErrors && step.error) {\n this.pause('Error occurred');\n }\n\n if (this.config.pauseOnToolCalls && step.type === 'tool-call') {\n this.pause('Tool call');\n }\n }\n\n /**\n * Get all checkpoints\n */\n getCheckpoints(): Checkpoint[] {\n return this.recording.checkpoints;\n }\n\n /**\n * Get steps count\n */\n get stepsCount(): number {\n return this.recording.steps.length;\n }\n}\n\n/**\n * Create a replay controller\n */\nexport function createReplayController(\n recording: Recording,\n session: ReplaySession,\n config: Required<ReplayConfig>,\n): ReplayController {\n return new ReplayController(recording, session, config);\n}\n","/**\n * ReplayEngine\n *\n * Engine for replaying recorded agent executions.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n Recording,\n ExecutionStep,\n AgentState,\n ReplaySession,\n ReplaySpeed,\n ReplayConfig,\n ReplayResult,\n ReplayDifference,\n ReplayModification,\n} from '../types/index.js';\nimport { StateRestorer } from './StateRestorer.js';\nimport { ReplayController } from './ReplayController.js';\nimport { generateId, now, deepClone, sleep } from '../utils/helpers.js';\nimport { diff, toReplayDifferences } from '../utils/diff.js';\n\n/**\n * Replay engine events\n */\nexport interface ReplayEngineEvents {\n 'replay:started': (session: ReplaySession) => void;\n 'replay:paused': (session: ReplaySession) => void;\n 'replay:resumed': (session: ReplaySession) => void;\n 'replay:stopped': (session: ReplaySession) => void;\n 'replay:completed': (result: ReplayResult) => void;\n 'step:replayed': (step: ExecutionStep, state: AgentState) => void;\n 'step:modified': (original: ExecutionStep, modified: ExecutionStep) => void;\n 'divergence:detected': (differences: ReplayDifference[]) => void;\n error: (error: Error) => void;\n}\n\n/**\n * Replay options\n */\nexport interface ReplayOptions {\n /** Replay speed */\n speed?: ReplaySpeed;\n /** Start from step */\n startStep?: number;\n /** End at step */\n endStep?: number;\n /** Modifications to apply */\n modifications?: ReplayModification[];\n /** Whether to execute tools during replay */\n executeTools?: boolean;\n /** Whether to call the actual LLM */\n executeLLM?: boolean;\n /** Callback for tool execution */\n onToolCall?: (step: ExecutionStep) => Promise<unknown>;\n /** Callback for LLM calls */\n onLLMCall?: (step: ExecutionStep) => Promise<string>;\n}\n\n/**\n * Default configuration\n */\nconst DEFAULT_CONFIG: Required<ReplayConfig> = {\n speedMultiplier: 1,\n pauseOnDecisions: false,\n pauseOnErrors: true,\n pauseOnToolCalls: false,\n executeTools: false,\n executeLLM: false,\n compareResults: true,\n trackDifferences: true,\n};\n\n/**\n * ReplayEngine\n *\n * Replays recorded agent executions with modification support.\n *\n * @example\n * ```typescript\n * const engine = new ReplayEngine();\n *\n * // Load a recording\n * const recording = await loadRecording('rec_123');\n *\n * // Start replay\n * const session = engine.start(recording, {\n * speed: 'normal',\n * modifications: [\n * { stepIndex: 5, type: 'modify', data: { input: 'new input' } }\n * ],\n * });\n *\n * // Wait for completion\n * const result = await session.waitForCompletion();\n * ```\n */\nexport class ReplayEngine extends EventEmitter<ReplayEngineEvents> {\n private config: Required<ReplayConfig>;\n private sessions: Map<string, ReplaySession> = new Map();\n private currentSession?: ReplaySession;\n private stateRestorer: StateRestorer;\n private controller?: ReplayController;\n private isRunning = false;\n\n constructor(config?: Partial<ReplayConfig>) {\n super();\n\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n\n this.stateRestorer = new StateRestorer();\n }\n\n /**\n * Start a replay session\n */\n start(recording: Recording, options?: ReplayOptions): ReplaySession {\n const session: ReplaySession = {\n id: generateId('replay'),\n recordingId: recording.id,\n state: 'idle',\n currentStep: options?.startStep ?? 0,\n totalSteps: recording.steps.length,\n speed: options?.speed ?? 'normal',\n startedAt: now(),\n modifications: options?.modifications ?? [],\n differences: [],\n };\n\n this.sessions.set(session.id, session);\n this.currentSession = session;\n\n // Create controller\n this.controller = new ReplayController(recording, session, {\n ...this.config,\n speedMultiplier: this.getSpeedMultiplier(session.speed),\n });\n\n // Forward controller events\n this.controller.on('step:replayed', (step, state) => {\n this.emit('step:replayed', step, state);\n });\n\n this.controller.on('paused', () => {\n session.state = 'paused';\n this.emit('replay:paused', session);\n });\n\n this.controller.on('error', (error) => {\n this.emit('error', error);\n });\n\n this.emit('replay:started', session);\n\n // Run replay in background\n this.runReplay(recording, session, options).catch((error) => {\n this.emit('error', error as Error);\n });\n\n return session;\n }\n\n /**\n * Run the replay loop\n */\n private async runReplay(\n recording: Recording,\n session: ReplaySession,\n options?: ReplayOptions,\n ): Promise<void> {\n this.isRunning = true;\n const startStep = options?.startStep ?? 0;\n const endStep = options?.endStep ?? recording.steps.length - 1;\n\n // Restore initial state\n let currentState = this.stateRestorer.restore(\n recording,\n startStep > 0 ? startStep - 1 : 0,\n );\n\n const replayedSteps: ExecutionStep[] = [];\n const differences: ReplayDifference[] = [];\n\n for (let i = startStep; i <= endStep && this.isRunning; i++) {\n // Check for pause\n while (session.state === 'paused' && this.isRunning) {\n await sleep(100);\n }\n\n if (!this.isRunning) {\n break;\n }\n\n const originalStep = recording.steps[i];\n let step = deepClone(originalStep);\n\n // Apply modifications\n const modification = options?.modifications?.find(\n (m) => m.stepIndex === i,\n );\n if (modification) {\n step = this.applyModification(step, modification);\n this.emit('step:modified', originalStep, step);\n }\n\n // Execute step based on type and options\n const result = await this.executeStep(step, currentState, options);\n\n // Track differences if enabled\n if (this.config.trackDifferences && result.executed) {\n const stepDiffs = this.compareResults(originalStep, result.step);\n if (stepDiffs.length > 0) {\n differences.push(...stepDiffs);\n session.differences = differences;\n this.emit('divergence:detected', stepDiffs);\n }\n }\n\n replayedSteps.push(result.step);\n currentState = result.state;\n session.currentStep = i;\n\n // Apply speed delay\n const delay = this.getStepDelay(step, session.speed);\n if (delay > 0) {\n await sleep(delay);\n }\n\n this.emit('step:replayed', result.step, currentState);\n\n // Check pause conditions\n if (this.shouldPause(step)) {\n session.state = 'paused';\n this.emit('replay:paused', session);\n }\n }\n\n // Build result\n const result: ReplayResult = {\n sessionId: session.id,\n recordingId: recording.id,\n success: this.isRunning,\n stepsReplayed: replayedSteps.length,\n differences,\n finalState: currentState,\n startedAt: session.startedAt,\n completedAt: now(),\n durationMs: now() - session.startedAt,\n };\n\n session.state = 'completed';\n session.completedAt = result.completedAt;\n this.isRunning = false;\n\n this.emit('replay:completed', result);\n }\n\n /**\n * Execute a step during replay\n */\n private async executeStep(\n step: ExecutionStep,\n state: AgentState,\n options?: ReplayOptions,\n ): Promise<{ step: ExecutionStep; state: AgentState; executed: boolean }> {\n const newStep = deepClone(step);\n let newState = deepClone(state);\n let executed = false;\n\n // Handle tool calls\n if (\n step.type === 'tool-call' &&\n options?.executeTools &&\n options?.onToolCall\n ) {\n try {\n const result = await options.onToolCall(step);\n newStep.toolCall = {\n ...newStep.toolCall!,\n result,\n success: true,\n };\n executed = true;\n } catch (error) {\n newStep.toolCall = {\n ...newStep.toolCall!,\n result: (error as Error).message,\n success: false,\n };\n executed = true;\n }\n }\n\n // Handle LLM calls\n if (step.type === 'response' && options?.executeLLM && options?.onLLMCall) {\n try {\n const response = await options.onLLMCall(step);\n newStep.output = response;\n executed = true;\n } catch (error) {\n newStep.error = {\n name: 'LLMError',\n message: (error as Error).message,\n };\n executed = true;\n }\n }\n\n // Update state based on step\n newState = this.updateState(newState, newStep);\n\n return { step: newStep, state: newState, executed };\n }\n\n /**\n * Update state based on step\n */\n private updateState(state: AgentState, step: ExecutionStep): AgentState {\n const newState = deepClone(state);\n\n // Add message for input/response steps\n if (step.type === 'input') {\n newState.messages.push({\n role: 'user',\n content: String(step.input),\n });\n } else if (step.type === 'response') {\n newState.messages.push({\n role: 'assistant',\n content: String(step.output),\n });\n }\n\n return newState;\n }\n\n /**\n * Apply a modification to a step\n */\n private applyModification(\n step: ExecutionStep,\n modification: ReplayModification,\n ): ExecutionStep {\n const modified = deepClone(step);\n\n switch (modification.type) {\n case 'skip':\n // Mark step as skipped\n modified.metadata = {\n ...modified.metadata,\n skipped: true,\n };\n break;\n\n case 'modify':\n // Apply data modifications\n if (modification.data) {\n Object.assign(modified, modification.data);\n }\n break;\n\n case 'insert':\n // Insert is handled at the engine level\n break;\n\n case 'replace':\n // Replace step data\n if (modification.data) {\n return {\n ...modified,\n ...modification.data,\n };\n }\n break;\n }\n\n return modified;\n }\n\n /**\n * Compare original and replayed results\n */\n private compareResults(\n original: ExecutionStep,\n replayed: ExecutionStep,\n ): ReplayDifference[] {\n const differences = diff(original, replayed);\n return toReplayDifferences(differences, original.index);\n }\n\n /**\n * Check if should pause on this step\n */\n private shouldPause(step: ExecutionStep): boolean {\n if (this.config.pauseOnDecisions && step.type === 'decision') {\n return true;\n }\n\n if (this.config.pauseOnErrors && step.error) {\n return true;\n }\n\n if (this.config.pauseOnToolCalls && step.type === 'tool-call') {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get speed multiplier\n */\n private getSpeedMultiplier(speed: ReplaySpeed): number {\n switch (speed) {\n case 'slow':\n return 0.5;\n case 'normal':\n return 1;\n case 'fast':\n return 2;\n case 'instant':\n return 0;\n default:\n return 1;\n }\n }\n\n /**\n * Get delay for step based on speed\n */\n private getStepDelay(step: ExecutionStep, speed: ReplaySpeed): number {\n if (speed === 'instant') {\n return 0;\n }\n\n const baseDelay = step.durationMs ?? 100;\n const multiplier = this.getSpeedMultiplier(speed);\n\n return baseDelay / multiplier;\n }\n\n /**\n * Pause current replay\n */\n pause(): void {\n if (\n this.currentSession &&\n this.currentSession.state !== 'paused' &&\n this.currentSession.state !== 'stopped'\n ) {\n this.currentSession.state = 'paused';\n this.emit('replay:paused', this.currentSession);\n }\n }\n\n /**\n * Resume current replay\n */\n resume(): void {\n if (this.currentSession && this.currentSession.state === 'paused') {\n this.currentSession.state = 'playing';\n this.emit('replay:resumed', this.currentSession);\n }\n }\n\n /**\n * Stop current replay\n */\n stop(): void {\n this.isRunning = false;\n if (this.currentSession) {\n this.currentSession.state = 'stopped';\n this.emit('replay:stopped', this.currentSession);\n }\n }\n\n /**\n * Set replay speed\n */\n setSpeed(speed: ReplaySpeed): void {\n if (this.currentSession) {\n this.currentSession.speed = speed;\n }\n }\n\n /**\n * Jump to step\n */\n jumpToStep(stepIndex: number): void {\n if (!this.currentSession) {\n return;\n }\n\n this.currentSession.currentStep = stepIndex;\n }\n\n /**\n * Get current session\n */\n getSession(): ReplaySession | undefined {\n return this.currentSession;\n }\n\n /**\n * Get session by ID\n */\n getSessionById(id: string): ReplaySession | undefined {\n return this.sessions.get(id);\n }\n\n /**\n * Get all sessions\n */\n getSessions(): ReplaySession[] {\n return Array.from(this.sessions.values());\n }\n}\n\n/**\n * Create a replay engine\n */\nexport function createReplayEngine(\n config?: Partial<ReplayConfig>,\n): ReplayEngine {\n return new ReplayEngine(config);\n}\n","/**\n * DecisionTree\n *\n * Decision tree visualization for agent decision points.\n */\n\nimport type {\n DecisionTree,\n DecisionTreeNode,\n ExecutionStep,\n Decision,\n Recording,\n} from '../types/index.js';\nimport { generateId } from '../utils/helpers.js';\n\n/**\n * Node creation options\n */\nexport interface NodeOptions {\n /** Node label */\n label: string;\n /** Node type */\n type: 'decision' | 'outcome' | 'action' | 'branch';\n /** Decision data */\n decision?: Decision;\n /** Step reference */\n stepIndex?: number;\n /** Parent node ID */\n parentId?: string;\n /** Metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Tree building options\n */\nexport interface TreeBuildOptions {\n /** Include tool calls as nodes */\n includeToolCalls?: boolean;\n /** Include all steps or just decisions */\n allSteps?: boolean;\n /** Maximum depth */\n maxDepth?: number;\n /** Collapse similar nodes */\n collapseSimilar?: boolean;\n}\n\n/**\n * Tree layout options\n */\nexport interface LayoutOptions {\n /** Layout direction */\n direction?: 'horizontal' | 'vertical';\n /** Node spacing */\n nodeSpacing?: number;\n /** Level spacing */\n levelSpacing?: number;\n /** Node width */\n nodeWidth?: number;\n /** Node height */\n nodeHeight?: number;\n}\n\n/**\n * Default options\n */\nconst DEFAULT_BUILD_OPTIONS: Required<TreeBuildOptions> = {\n includeToolCalls: true,\n allSteps: false,\n maxDepth: 50,\n collapseSimilar: false,\n};\n\nconst DEFAULT_LAYOUT_OPTIONS: Required<LayoutOptions> = {\n direction: 'vertical',\n nodeSpacing: 50,\n levelSpacing: 100,\n nodeWidth: 200,\n nodeHeight: 80,\n};\n\n/**\n * DecisionTreeBuilder\n *\n * Builds decision trees from recordings.\n *\n * @example\n * ```typescript\n * const builder = new DecisionTreeBuilder();\n *\n * // Build tree from recording\n * const tree = builder.build(recording);\n *\n * // Add a node\n * const node = builder.addNode({\n * label: 'Choose API',\n * type: 'decision',\n * decision: decisionData,\n * });\n *\n * // Export for visualization\n * const data = builder.export();\n * ```\n */\nexport class DecisionTreeBuilder {\n private nodes: Map<string, DecisionTreeNode> = new Map();\n private rootId?: string;\n private buildOptions: Required<TreeBuildOptions>;\n private layoutOptions: Required<LayoutOptions>;\n\n constructor(buildOptions?: TreeBuildOptions, layoutOptions?: LayoutOptions) {\n this.buildOptions = {\n ...DEFAULT_BUILD_OPTIONS,\n ...buildOptions,\n };\n\n this.layoutOptions = {\n ...DEFAULT_LAYOUT_OPTIONS,\n ...layoutOptions,\n };\n }\n\n /**\n * Build tree from a recording\n */\n build(recording: Recording): DecisionTree {\n this.clear();\n\n // Create root node\n const rootNode = this.addNode({\n label: 'Start',\n type: 'action',\n stepIndex: -1,\n metadata: {\n agentId: recording.agentId,\n agentName: recording.agentName,\n },\n });\n\n this.rootId = rootNode.id;\n let currentParentId = rootNode.id;\n let depth = 0;\n\n // Process steps\n for (const step of recording.steps) {\n if (depth >= this.buildOptions.maxDepth) {\n break;\n }\n\n const node = this.processStep(step, currentParentId, depth);\n\n if (node) {\n if (step.type === 'decision') {\n // Decision creates branches\n currentParentId = node.id;\n depth++;\n } else if (this.buildOptions.allSteps) {\n currentParentId = node.id;\n }\n }\n }\n\n // Add end node\n this.addNode({\n label: recording.status === 'completed' ? 'Complete' : 'Failed',\n type: 'outcome',\n parentId: currentParentId,\n metadata: {\n status: recording.status,\n durationMs: recording.durationMs,\n },\n });\n\n return this.export();\n }\n\n /**\n * Process a step into a node\n */\n private processStep(\n step: ExecutionStep,\n parentId: string,\n depth: number,\n ): DecisionTreeNode | null {\n // Handle decision steps\n if (step.type === 'decision' && step.decision) {\n return this.addDecisionNode(step, parentId, depth);\n }\n\n // Handle tool calls if enabled\n if (this.buildOptions.includeToolCalls && step.type === 'tool-call') {\n return this.addNode({\n label: `Tool: ${step.toolCall?.name ?? 'unknown'}`,\n type: 'action',\n stepIndex: step.index,\n parentId,\n metadata: {\n toolName: step.toolCall?.name,\n arguments: step.toolCall?.arguments,\n },\n });\n }\n\n // Handle all steps if enabled\n if (this.buildOptions.allSteps) {\n return this.addNode({\n label: this.getStepLabel(step),\n type: 'action',\n stepIndex: step.index,\n parentId,\n });\n }\n\n return null;\n }\n\n /**\n * Add a decision node with branches\n */\n private addDecisionNode(\n step: ExecutionStep,\n parentId: string,\n _depth: number,\n ): DecisionTreeNode {\n const decision = step.decision!;\n\n // Create decision node\n const decisionNode = this.addNode({\n label: decision.reason ?? 'Decision',\n type: 'decision',\n decision,\n stepIndex: step.index,\n parentId,\n metadata: {\n confidence: decision.confidence,\n optionsCount: decision.options.length,\n },\n });\n\n // Create branch nodes for each option\n for (const option of decision.options) {\n const isChosen = option.id === decision.chosen.id;\n\n this.addNode({\n label: option.description,\n type: 'branch',\n parentId: decisionNode.id,\n metadata: {\n optionId: option.id,\n chosen: isChosen,\n score: option.score,\n },\n });\n }\n\n return decisionNode;\n }\n\n /**\n * Get label for a step\n */\n private getStepLabel(step: ExecutionStep): string {\n switch (step.type) {\n case 'input':\n return 'User Input';\n case 'prompt':\n return 'Send Prompt';\n case 'response':\n return 'LLM Response';\n case 'tool-call':\n return `Call: ${step.toolCall?.name}`;\n case 'tool-result':\n return `Result: ${step.toolCall?.success ? 'OK' : 'Failed'}`;\n case 'decision':\n return 'Decision';\n case 'error':\n return `Error: ${step.error?.name}`;\n default:\n return step.type;\n }\n }\n\n /**\n * Add a node\n */\n addNode(options: NodeOptions): DecisionTreeNode {\n const id = generateId('node');\n\n const node: DecisionTreeNode = {\n id,\n label: options.label,\n type: options.type,\n decision: options.decision,\n stepIndex: options.stepIndex,\n children: [],\n metadata: options.metadata,\n };\n\n this.nodes.set(id, node);\n\n // Add to parent's children\n if (options.parentId) {\n const parent = this.nodes.get(options.parentId);\n if (parent) {\n parent.children.push(id);\n }\n }\n\n // Set as root if no parent\n if (!options.parentId && !this.rootId) {\n this.rootId = id;\n }\n\n return node;\n }\n\n /**\n * Get a node by ID\n */\n getNode(id: string): DecisionTreeNode | undefined {\n return this.nodes.get(id);\n }\n\n /**\n * Get root node\n */\n getRoot(): DecisionTreeNode | undefined {\n return this.rootId ? this.nodes.get(this.rootId) : undefined;\n }\n\n /**\n * Get all nodes\n */\n getNodes(): DecisionTreeNode[] {\n return Array.from(this.nodes.values());\n }\n\n /**\n * Get nodes at depth\n */\n getNodesAtDepth(depth: number): DecisionTreeNode[] {\n const result: DecisionTreeNode[] = [];\n\n const traverse = (nodeId: string, currentDepth: number) => {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n\n if (currentDepth === depth) {\n result.push(node);\n } else {\n for (const childId of node.children) {\n traverse(childId, currentDepth + 1);\n }\n }\n };\n\n if (this.rootId) {\n traverse(this.rootId, 0);\n }\n\n return result;\n }\n\n /**\n * Get tree depth\n */\n getDepth(): number {\n let maxDepth = 0;\n\n const traverse = (nodeId: string, depth: number) => {\n maxDepth = Math.max(maxDepth, depth);\n\n const node = this.nodes.get(nodeId);\n if (node) {\n for (const childId of node.children) {\n traverse(childId, depth + 1);\n }\n }\n };\n\n if (this.rootId) {\n traverse(this.rootId, 0);\n }\n\n return maxDepth;\n }\n\n /**\n * Find path to node\n */\n findPath(nodeId: string): DecisionTreeNode[] {\n const path: DecisionTreeNode[] = [];\n\n const findParent = (targetId: string): string | null => {\n for (const [id, node] of this.nodes) {\n if (node.children.includes(targetId)) {\n return id;\n }\n }\n return null;\n };\n\n let currentId: string | null = nodeId;\n while (currentId) {\n const node = this.nodes.get(currentId);\n if (node) {\n path.unshift(node);\n }\n currentId = findParent(currentId);\n }\n\n return path;\n }\n\n /**\n * Find nodes by step index\n */\n findByStepIndex(stepIndex: number): DecisionTreeNode[] {\n return this.getNodes().filter((n) => n.stepIndex === stepIndex);\n }\n\n /**\n * Find decision nodes\n */\n findDecisionNodes(): DecisionTreeNode[] {\n return this.getNodes().filter((n) => n.type === 'decision');\n }\n\n /**\n * Clear the tree\n */\n clear(): void {\n this.nodes.clear();\n this.rootId = undefined;\n }\n\n /**\n * Export tree structure\n */\n export(): DecisionTree {\n const root = this.getRoot();\n\n return {\n id: generateId('tree'),\n root: root ?? {\n id: 'empty',\n label: 'Empty Tree',\n type: 'action',\n children: [],\n },\n nodes: this.getNodes(),\n metadata: {\n nodeCount: this.nodes.size,\n depth: this.getDepth(),\n decisionCount: this.findDecisionNodes().length,\n },\n };\n }\n\n /**\n * Export to Mermaid format\n */\n toMermaid(): string {\n const lines: string[] = ['graph TD'];\n\n const traverse = (nodeId: string) => {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n\n const shape = this.getMermaidShape(node);\n lines.push(` ${nodeId}${shape}`);\n\n for (const childId of node.children) {\n const child = this.nodes.get(childId);\n const edgeLabel = child?.metadata?.chosen ? ' --> |chosen|' : ' --> ';\n lines.push(` ${nodeId}${edgeLabel}${childId}`);\n traverse(childId);\n }\n };\n\n if (this.rootId) {\n traverse(this.rootId);\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Get Mermaid shape for node\n */\n private getMermaidShape(node: DecisionTreeNode): string {\n const label = node.label.replace(/\"/g, \"'\");\n\n switch (node.type) {\n case 'decision':\n return `{${label}}`;\n case 'outcome':\n return `((${label}))`;\n case 'branch':\n return `[/${label}/]`;\n default:\n return `[${label}]`;\n }\n }\n\n /**\n * Calculate layout positions\n */\n calculateLayout(): Map<string, { x: number; y: number }> {\n const positions = new Map<string, { x: number; y: number }>();\n\n const levelWidths: number[] = [];\n const levelPositions: number[] = [];\n\n // Calculate width at each level\n const calculateLevelWidths = (nodeId: string, level: number) => {\n if (!levelWidths[level]) {\n levelWidths[level] = 0;\n }\n levelWidths[level]++;\n\n const node = this.nodes.get(nodeId);\n if (node) {\n for (const childId of node.children) {\n calculateLevelWidths(childId, level + 1);\n }\n }\n };\n\n if (this.rootId) {\n calculateLevelWidths(this.rootId, 0);\n }\n\n // Initialize level positions\n for (let i = 0; i < levelWidths.length; i++) {\n levelPositions[i] = 0;\n }\n\n // Assign positions\n const assignPositions = (nodeId: string, level: number) => {\n const node = this.nodes.get(nodeId);\n if (!node) return;\n\n const levelWidth = levelWidths[level] * this.layoutOptions.nodeSpacing;\n const startX = -levelWidth / 2;\n const x = startX + levelPositions[level] * this.layoutOptions.nodeSpacing;\n const y = level * this.layoutOptions.levelSpacing;\n\n positions.set(nodeId, { x, y });\n levelPositions[level]++;\n\n for (const childId of node.children) {\n assignPositions(childId, level + 1);\n }\n };\n\n if (this.rootId) {\n assignPositions(this.rootId, 0);\n }\n\n return positions;\n }\n}\n\n/**\n * Create a decision tree builder\n */\nexport function createDecisionTreeBuilder(\n buildOptions?: TreeBuildOptions,\n layoutOptions?: LayoutOptions,\n): DecisionTreeBuilder {\n return new DecisionTreeBuilder(buildOptions, layoutOptions);\n}\n","/**\n * FlowGraph\n *\n * Execution flow graph visualization.\n */\n\nimport type {\n FlowGraph,\n FlowGraphNode,\n FlowGraphEdge,\n ExecutionStep,\n Recording,\n StepType,\n} from '../types/index.js';\nimport { generateId } from '../utils/helpers.js';\n\n/**\n * Node style configuration\n */\nexport interface NodeStyle {\n /** Fill color */\n fill?: string;\n /** Border color */\n stroke?: string;\n /** Border width */\n strokeWidth?: number;\n /** Shape type */\n shape?: 'rectangle' | 'ellipse' | 'diamond' | 'hexagon';\n /** Font size */\n fontSize?: number;\n /** Text color */\n textColor?: string;\n}\n\n/**\n * Edge style configuration\n */\nexport interface EdgeStyle {\n /** Line color */\n stroke?: string;\n /** Line width */\n strokeWidth?: number;\n /** Line type */\n lineType?: 'solid' | 'dashed' | 'dotted';\n /** Arrow type */\n arrowType?: 'arrow' | 'none' | 'diamond';\n /** Curve type */\n curveType?: 'straight' | 'bezier' | 'step';\n}\n\n/**\n * Graph building options\n */\nexport interface GraphBuildOptions {\n /** Group consecutive steps of same type */\n groupSimilar?: boolean;\n /** Include step durations */\n includeDurations?: boolean;\n /** Include tool call details */\n includeToolDetails?: boolean;\n /** Maximum nodes */\n maxNodes?: number;\n /** Custom node style by type */\n nodeStyles?: Partial<Record<StepType, NodeStyle>>;\n}\n\n/**\n * Default node styles by type\n */\nconst DEFAULT_NODE_STYLES: Record<StepType, NodeStyle> = {\n input: { fill: '#e3f2fd', shape: 'rectangle' },\n prompt: { fill: '#f3e5f5', shape: 'rectangle' },\n response: { fill: '#e8f5e9', shape: 'rectangle' },\n output: { fill: '#c8e6c9', shape: 'rectangle' },\n 'tool-call': { fill: '#fff3e0', shape: 'hexagon' },\n 'tool-result': { fill: '#fff8e1', shape: 'rectangle' },\n decision: { fill: '#fce4ec', shape: 'diamond' },\n error: { fill: '#ffebee', shape: 'rectangle' },\n 'memory-read': { fill: '#e0f7fa', shape: 'ellipse' },\n 'memory-write': { fill: '#e0f2f1', shape: 'ellipse' },\n handoff: { fill: '#ede7f6', shape: 'hexagon' },\n delegation: { fill: '#e8eaf6', shape: 'hexagon' },\n custom: { fill: '#fafafa', shape: 'rectangle' },\n};\n\n/**\n * Default build options\n */\nconst DEFAULT_BUILD_OPTIONS: Required<GraphBuildOptions> = {\n groupSimilar: false,\n includeDurations: true,\n includeToolDetails: true,\n maxNodes: 200,\n nodeStyles: {},\n};\n\n/**\n * FlowGraphBuilder\n *\n * Builds execution flow graphs from recordings.\n *\n * @example\n * ```typescript\n * const builder = new FlowGraphBuilder();\n *\n * // Build graph from recording\n * const graph = builder.build(recording);\n *\n * // Export for visualization\n * const svg = builder.toSVG();\n * const mermaid = builder.toMermaid();\n * ```\n */\nexport class FlowGraphBuilder {\n private nodes: Map<string, FlowGraphNode> = new Map();\n private edges: Map<string, FlowGraphEdge> = new Map();\n private options: Required<GraphBuildOptions>;\n private nodeStyles: Record<StepType, NodeStyle>;\n\n constructor(options?: GraphBuildOptions) {\n this.options = {\n ...DEFAULT_BUILD_OPTIONS,\n ...options,\n };\n\n this.nodeStyles = {\n ...DEFAULT_NODE_STYLES,\n ...options?.nodeStyles,\n };\n }\n\n /**\n * Build graph from a recording\n */\n build(recording: Recording): FlowGraph {\n this.clear();\n\n // Create start node\n const startNode = this.addNode({\n label: 'Start',\n type: 'input',\n metadata: {\n agentId: recording.agentId,\n agentName: recording.agentName,\n },\n });\n\n let previousNodeId = startNode.id;\n let nodeCount = 1;\n\n // Process steps\n for (const step of recording.steps) {\n if (nodeCount >= this.options.maxNodes) {\n break;\n }\n\n // Skip if grouping similar and same type as previous\n if (this.options.groupSimilar && previousNodeId) {\n const prevNode = this.nodes.get(previousNodeId);\n if (prevNode && prevNode.type === step.type) {\n // Update existing node\n this.updateNodeForGroup(prevNode, step);\n continue;\n }\n }\n\n const node = this.createNodeFromStep(step);\n this.nodes.set(node.id, node);\n\n // Create edge from previous node\n if (previousNodeId) {\n this.addEdge(previousNodeId, node.id, {\n durationMs: step.durationMs,\n });\n }\n\n previousNodeId = node.id;\n nodeCount++;\n }\n\n // Create end node\n const endNode = this.addNode({\n label: recording.status === 'completed' ? 'Complete' : 'Failed',\n type: recording.status === 'completed' ? 'response' : 'error',\n metadata: {\n status: recording.status,\n durationMs: recording.durationMs,\n },\n });\n\n if (previousNodeId) {\n this.addEdge(previousNodeId, endNode.id);\n }\n\n return this.export();\n }\n\n /**\n * Create a node from a step\n */\n private createNodeFromStep(step: ExecutionStep): FlowGraphNode {\n const style = this.nodeStyles[step.type] ?? DEFAULT_NODE_STYLES.custom;\n\n const node: FlowGraphNode = {\n id: generateId('node'),\n label: this.getStepLabel(step),\n type: step.type,\n stepIndex: step.index,\n style,\n metadata: this.getStepMetadata(step),\n };\n\n return node;\n }\n\n /**\n * Get label for a step\n */\n private getStepLabel(step: ExecutionStep): string {\n switch (step.type) {\n case 'input':\n return 'User Input';\n case 'prompt':\n return 'Prompt';\n case 'response':\n return 'Response';\n case 'tool-call':\n if (this.options.includeToolDetails && step.toolCall) {\n return `${step.toolCall.name}()`;\n }\n return 'Tool Call';\n case 'tool-result':\n return step.toolCall?.success ? 'Success' : 'Failed';\n case 'decision':\n return step.decision?.reason ?? 'Decision';\n case 'error':\n return step.error?.name ?? 'Error';\n case 'memory-read':\n return 'Read Memory';\n case 'memory-write':\n return 'Write Memory';\n case 'handoff':\n case 'delegation':\n return 'Hand Off';\n default:\n return step.type;\n }\n }\n\n /**\n * Get metadata for a step\n */\n private getStepMetadata(step: ExecutionStep): Record<string, unknown> {\n const metadata: Record<string, unknown> = {\n stepIndex: step.index,\n timestamp: step.timestamp,\n };\n\n if (this.options.includeDurations && step.durationMs) {\n metadata.durationMs = step.durationMs;\n }\n\n if (step.toolCall) {\n metadata.toolName = step.toolCall.name;\n if (this.options.includeToolDetails) {\n metadata.toolArguments = step.toolCall.arguments;\n }\n }\n\n if (step.decision) {\n metadata.confidence = step.decision.confidence;\n metadata.chosenOption = step.decision.chosen.description;\n }\n\n if (step.error) {\n metadata.errorMessage = step.error.message;\n }\n\n return metadata;\n }\n\n /**\n * Update node when grouping similar steps\n */\n private updateNodeForGroup(node: FlowGraphNode, step: ExecutionStep): void {\n const count = (node.metadata?.groupCount as number) ?? 1;\n node.metadata = {\n ...node.metadata,\n groupCount: count + 1,\n lastStepIndex: step.index,\n };\n node.label = `${node.label} (${count + 1})`;\n }\n\n /**\n * Add a node\n */\n addNode(options: {\n label: string;\n type: StepType;\n stepIndex?: number;\n style?: NodeStyle;\n metadata?: Record<string, unknown>;\n }): FlowGraphNode {\n const id = generateId('node');\n const style =\n options.style ??\n this.nodeStyles[options.type] ??\n DEFAULT_NODE_STYLES.custom;\n\n const node: FlowGraphNode = {\n id,\n label: options.label,\n type: options.type,\n stepIndex: options.stepIndex,\n style,\n metadata: options.metadata,\n };\n\n this.nodes.set(id, node);\n return node;\n }\n\n /**\n * Add an edge\n */\n addEdge(\n sourceId: string,\n targetId: string,\n options?: {\n label?: string;\n style?: EdgeStyle;\n durationMs?: number;\n },\n ): FlowGraphEdge {\n const id = generateId('edge');\n\n const edge: FlowGraphEdge = {\n id,\n source: sourceId,\n target: targetId,\n label: options?.label,\n style: options?.style,\n metadata: options?.durationMs\n ? { durationMs: options.durationMs }\n : undefined,\n };\n\n this.edges.set(id, edge);\n return edge;\n }\n\n /**\n * Get a node by ID\n */\n getNode(id: string): FlowGraphNode | undefined {\n return this.nodes.get(id);\n }\n\n /**\n * Get all nodes\n */\n getNodes(): FlowGraphNode[] {\n return Array.from(this.nodes.values());\n }\n\n /**\n * Get nodes by type\n */\n getNodesByType(type: StepType): FlowGraphNode[] {\n return this.getNodes().filter((n) => n.type === type);\n }\n\n /**\n * Get an edge by ID\n */\n getEdge(id: string): FlowGraphEdge | undefined {\n return this.edges.get(id);\n }\n\n /**\n * Get all edges\n */\n getEdges(): FlowGraphEdge[] {\n return Array.from(this.edges.values());\n }\n\n /**\n * Get edges from a node\n */\n getEdgesFrom(nodeId: string): FlowGraphEdge[] {\n return this.getEdges().filter((e) => e.source === nodeId);\n }\n\n /**\n * Get edges to a node\n */\n getEdgesTo(nodeId: string): FlowGraphEdge[] {\n return this.getEdges().filter((e) => e.target === nodeId);\n }\n\n /**\n * Find path between nodes\n */\n findPath(startId: string, endId: string): FlowGraphNode[] | null {\n const visited = new Set<string>();\n const path: FlowGraphNode[] = [];\n\n const dfs = (currentId: string): boolean => {\n if (visited.has(currentId)) {\n return false;\n }\n\n visited.add(currentId);\n const node = this.nodes.get(currentId);\n\n if (!node) {\n return false;\n }\n\n path.push(node);\n\n if (currentId === endId) {\n return true;\n }\n\n for (const edge of this.getEdgesFrom(currentId)) {\n if (dfs(edge.target)) {\n return true;\n }\n }\n\n path.pop();\n return false;\n };\n\n return dfs(startId) ? path : null;\n }\n\n /**\n * Get graph statistics\n */\n getStats(): {\n nodeCount: number;\n edgeCount: number;\n nodesByType: Record<string, number>;\n avgDuration: number;\n } {\n const nodesByType: Record<string, number> = {};\n let totalDuration = 0;\n let durationCount = 0;\n\n for (const node of this.nodes.values()) {\n nodesByType[node.type] = (nodesByType[node.type] ?? 0) + 1;\n\n const duration = node.metadata?.durationMs as number | undefined;\n if (duration) {\n totalDuration += duration;\n durationCount++;\n }\n }\n\n return {\n nodeCount: this.nodes.size,\n edgeCount: this.edges.size,\n nodesByType,\n avgDuration: durationCount > 0 ? totalDuration / durationCount : 0,\n };\n }\n\n /**\n * Clear the graph\n */\n clear(): void {\n this.nodes.clear();\n this.edges.clear();\n }\n\n /**\n * Export graph structure\n */\n export(): FlowGraph {\n return {\n id: generateId('graph'),\n nodes: this.getNodes(),\n edges: this.getEdges(),\n metadata: this.getStats(),\n };\n }\n\n /**\n * Export to Mermaid format\n */\n toMermaid(): string {\n const lines: string[] = ['flowchart TD'];\n\n // Add nodes\n for (const node of this.nodes.values()) {\n const shape = this.getMermaidShape(node);\n lines.push(` ${node.id}${shape}`);\n }\n\n // Add edges\n for (const edge of this.edges.values()) {\n const label = edge.label ? ` |${edge.label}|` : '';\n const arrow = edge.style?.lineType === 'dashed' ? '-.->' : '-->';\n lines.push(` ${edge.source}${arrow}${label}${edge.target}`);\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Get Mermaid shape for node\n */\n private getMermaidShape(node: FlowGraphNode): string {\n const label = node.label.replace(/\"/g, \"'\");\n\n switch (node.style?.shape) {\n case 'ellipse':\n return `([${label}])`;\n case 'diamond':\n return `{${label}}`;\n case 'hexagon':\n return `{{${label}}}`;\n default:\n return `[${label}]`;\n }\n }\n\n /**\n * Export to DOT format (Graphviz)\n */\n toDOT(): string {\n const lines: string[] = ['digraph G {', ' rankdir=TB;'];\n\n // Add nodes\n for (const node of this.nodes.values()) {\n const shape = this.getDOTShape(node);\n const fill = node.style?.fill ?? '#ffffff';\n lines.push(\n ` \"${node.id}\" [label=\"${node.label}\", shape=${shape}, style=filled, fillcolor=\"${fill}\"];`,\n );\n }\n\n // Add edges\n for (const edge of this.edges.values()) {\n const label = edge.label ? `, label=\"${edge.label}\"` : '';\n const style = edge.style?.lineType === 'dashed' ? ', style=dashed' : '';\n lines.push(\n ` \"${edge.source}\" -> \"${edge.target}\" [${label}${style}];`,\n );\n }\n\n lines.push('}');\n return lines.join('\\n');\n }\n\n /**\n * Get DOT shape for node\n */\n private getDOTShape(node: FlowGraphNode): string {\n switch (node.style?.shape) {\n case 'ellipse':\n return 'ellipse';\n case 'diamond':\n return 'diamond';\n case 'hexagon':\n return 'hexagon';\n default:\n return 'box';\n }\n }\n}\n\n/**\n * Create a flow graph builder\n */\nexport function createFlowGraphBuilder(\n options?: GraphBuildOptions,\n): FlowGraphBuilder {\n return new FlowGraphBuilder(options);\n}\n","/**\n * WhatIfEngine\n *\n * What-if scenario testing engine for exploring alternative execution paths.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n Recording,\n ExecutionStep,\n WhatIfScenario,\n ScenarioResult,\n ScenarioComparison,\n ReplayModification,\n} from '../types/index.js';\nimport { ReplayEngine } from '../replay/ReplayEngine.js';\nimport { StateRestorer } from '../replay/StateRestorer.js';\nimport { generateId, now, deepClone } from '../utils/helpers.js';\n\n/**\n * What-if engine events\n */\nexport interface WhatIfEngineEvents {\n 'scenario:created': (scenario: WhatIfScenario) => void;\n 'scenario:started': (scenarioId: string) => void;\n 'scenario:completed': (result: ScenarioResult) => void;\n 'scenario:failed': (scenarioId: string, error: Error) => void;\n 'comparison:completed': (comparison: ScenarioComparison) => void;\n error: (error: Error) => void;\n}\n\n/**\n * Scenario creation options\n */\nexport interface ScenarioOptions {\n /** Scenario name */\n name: string;\n /** Description */\n description?: string;\n /** Base recording to modify */\n recordingId: string;\n /** Modifications to apply */\n modifications: ReplayModification[];\n /** Whether to execute tools */\n executeTools?: boolean;\n /** Whether to call LLM */\n executeLLM?: boolean;\n /** Tool execution callback */\n onToolCall?: (step: ExecutionStep) => Promise<unknown>;\n /** LLM call callback */\n onLLMCall?: (step: ExecutionStep) => Promise<string>;\n}\n\n/**\n * Batch scenario options\n */\nexport interface BatchScenarioOptions {\n /** Base recording */\n recordingId: string;\n /** Parameter variations to test */\n variations: Array<{\n name: string;\n modifications: ReplayModification[];\n }>;\n /** Whether to run in parallel */\n parallel?: boolean;\n}\n\n/**\n * WhatIfEngine\n *\n * Explores alternative execution paths by modifying and replaying recordings.\n *\n * @example\n * ```typescript\n * const engine = new WhatIfEngine();\n *\n * // Create a what-if scenario\n * const scenario = engine.createScenario({\n * name: 'Different API response',\n * recordingId: 'rec_123',\n * modifications: [\n * { stepIndex: 5, type: 'modify', data: { output: 'alternative response' } }\n * ],\n * });\n *\n * // Run the scenario\n * const result = await engine.runScenario(scenario.id, recording);\n *\n * // Compare with original\n * const comparison = engine.compare(recording, result);\n * ```\n */\nexport class WhatIfEngine extends EventEmitter<WhatIfEngineEvents> {\n private scenarios: Map<string, WhatIfScenario> = new Map();\n private results: Map<string, ScenarioResult> = new Map();\n private replayEngine: ReplayEngine;\n private stateRestorer: StateRestorer;\n\n constructor() {\n super();\n this.replayEngine = new ReplayEngine();\n this.stateRestorer = new StateRestorer();\n }\n\n /**\n * Create a what-if scenario\n */\n createScenario(options: ScenarioOptions): WhatIfScenario {\n const scenario: WhatIfScenario = {\n id: generateId('whatif'),\n name: options.name,\n description: options.description,\n baseRecordingId: options.recordingId,\n modifications: options.modifications,\n createdAt: now(),\n status: 'pending',\n };\n\n this.scenarios.set(scenario.id, scenario);\n this.emit('scenario:created', scenario);\n\n return scenario;\n }\n\n /**\n * Run a scenario\n */\n async runScenario(\n scenarioId: string,\n recording: Recording,\n options?: {\n executeTools?: boolean;\n executeLLM?: boolean;\n onToolCall?: (step: ExecutionStep) => Promise<unknown>;\n onLLMCall?: (step: ExecutionStep) => Promise<string>;\n },\n ): Promise<ScenarioResult> {\n const scenario = this.scenarios.get(scenarioId);\n if (!scenario) {\n throw new Error(`Scenario not found: ${scenarioId}`);\n }\n\n scenario.status = 'running';\n this.emit('scenario:started', scenarioId);\n\n try {\n // Run replay with modifications\n this.replayEngine.start(recording, {\n modifications: scenario.modifications,\n executeTools: options?.executeTools,\n executeLLM: options?.executeLLM,\n onToolCall: options?.onToolCall,\n onLLMCall: options?.onLLMCall,\n });\n\n // Wait for completion\n await this.waitForReplayCompletion();\n\n // Get differences from original\n const replaySession = this.replayEngine.getSession();\n const differences = replaySession?.differences ?? [];\n\n // Build result\n const result: ScenarioResult = {\n scenarioId,\n success: true,\n originalRecordingId: recording.id,\n modifiedSteps: scenario.modifications.length,\n differences,\n divergencePoint:\n differences.length > 0 ? differences[0].stepIndex : undefined,\n finalState: replaySession\n ? deepClone(recording.finalState ?? recording.initialState)\n : (recording.finalState ?? recording.initialState),\n executedAt: now(),\n durationMs: now() - scenario.createdAt,\n };\n\n scenario.status = 'completed';\n this.results.set(scenarioId, result);\n this.emit('scenario:completed', result);\n\n return result;\n } catch (error) {\n scenario.status = 'failed';\n this.emit('scenario:failed', scenarioId, error as Error);\n throw error;\n }\n }\n\n /**\n * Wait for replay to complete\n */\n private waitForReplayCompletion(): Promise<void> {\n return new Promise<void>((resolve) => {\n const handler = () => {\n this.replayEngine.off('replay:completed', handler);\n this.replayEngine.off('replay:stopped', handler);\n resolve();\n };\n\n this.replayEngine.on('replay:completed', handler);\n this.replayEngine.on('replay:stopped', handler);\n });\n }\n\n /**\n * Run multiple scenarios in batch\n */\n async runBatch(\n options: BatchScenarioOptions,\n recording: Recording,\n ): Promise<ScenarioResult[]> {\n const scenarios = options.variations.map((v) =>\n this.createScenario({\n name: v.name,\n recordingId: options.recordingId,\n modifications: v.modifications,\n }),\n );\n\n if (options.parallel) {\n return Promise.all(\n scenarios.map((s) => this.runScenario(s.id, recording)),\n );\n } else {\n const results: ScenarioResult[] = [];\n for (const scenario of scenarios) {\n const result = await this.runScenario(scenario.id, recording);\n results.push(result);\n }\n return results;\n }\n }\n\n /**\n * Compare original recording with scenario result\n */\n compare(original: Recording, result: ScenarioResult): ScenarioComparison {\n const scenario = this.scenarios.get(result.scenarioId);\n\n // Calculate outcome difference\n const outcomeChanged =\n original.status !== (result.success ? 'completed' : 'failed');\n\n // Calculate divergence metrics\n const totalSteps = original.steps.length;\n const divergenceStep = result.divergencePoint ?? totalSteps;\n const divergencePercentage =\n ((totalSteps - divergenceStep) / totalSteps) * 100;\n\n return {\n scenarioId: result.scenarioId,\n scenarioName: scenario?.name ?? 'Unknown',\n originalRecordingId: original.id,\n outcomeChanged,\n divergencePoint: result.divergencePoint,\n divergencePercentage,\n differences: result.differences,\n summary: this.generateComparisonSummary(original, result),\n };\n }\n\n /**\n * Generate a summary of the comparison\n */\n private generateComparisonSummary(\n original: Recording,\n result: ScenarioResult,\n ): string {\n const lines: string[] = [];\n\n if (result.divergencePoint !== undefined) {\n lines.push(`Diverged at step ${result.divergencePoint}`);\n } else {\n lines.push('No divergence detected');\n }\n\n lines.push(`${result.modifiedSteps} step(s) modified`);\n lines.push(`${result.differences.length} difference(s) detected`);\n\n return lines.join('. ');\n }\n\n /**\n * Create scenario from a decision point\n */\n createFromDecision(\n recording: Recording,\n stepIndex: number,\n alternativeChoice: string,\n ): WhatIfScenario {\n const step = recording.steps[stepIndex];\n\n if (step.type !== 'decision' || !step.decision) {\n throw new Error('Step is not a decision point');\n }\n\n const alternative = step.decision.options.find(\n (o) => o.id === alternativeChoice || o.description === alternativeChoice,\n );\n\n if (!alternative) {\n throw new Error('Alternative choice not found in decision options');\n }\n\n return this.createScenario({\n name: `What if: ${alternative.description}`,\n description: `Explore alternative decision at step ${stepIndex}`,\n recordingId: recording.id,\n modifications: [\n {\n stepIndex,\n type: 'modify',\n data: {\n decision: {\n ...step.decision,\n chosen: alternative,\n },\n },\n },\n ],\n });\n }\n\n /**\n * Create scenario from a tool result change\n */\n createFromToolResult(\n recording: Recording,\n stepIndex: number,\n alternativeResult: unknown,\n ): WhatIfScenario {\n const step = recording.steps[stepIndex];\n\n if (step.type !== 'tool-result' || !step.toolCall) {\n throw new Error('Step is not a tool result');\n }\n\n return this.createScenario({\n name: `What if: ${step.toolCall.name} returned different result`,\n description: `Explore alternative tool result at step ${stepIndex}`,\n recordingId: recording.id,\n modifications: [\n {\n stepIndex,\n type: 'modify',\n data: {\n toolCall: {\n ...step.toolCall,\n result: alternativeResult,\n },\n },\n },\n ],\n });\n }\n\n /**\n * Create scenario from skipping steps\n */\n createFromSkip(\n recording: Recording,\n stepIndices: number[],\n name?: string,\n ): WhatIfScenario {\n return this.createScenario({\n name: name ?? `What if: Skip steps ${stepIndices.join(', ')}`,\n description: `Skip specific steps in the execution`,\n recordingId: recording.id,\n modifications: stepIndices.map((stepIndex) => ({\n stepIndex,\n type: 'skip' as const,\n })),\n });\n }\n\n /**\n * Get a scenario by ID\n */\n getScenario(id: string): WhatIfScenario | undefined {\n return this.scenarios.get(id);\n }\n\n /**\n * Get all scenarios\n */\n getScenarios(): WhatIfScenario[] {\n return Array.from(this.scenarios.values());\n }\n\n /**\n * Get scenarios for a recording\n */\n getScenariosForRecording(recordingId: string): WhatIfScenario[] {\n return this.getScenarios().filter((s) => s.baseRecordingId === recordingId);\n }\n\n /**\n * Get a result by scenario ID\n */\n getResult(scenarioId: string): ScenarioResult | undefined {\n return this.results.get(scenarioId);\n }\n\n /**\n * Get all results\n */\n getResults(): ScenarioResult[] {\n return Array.from(this.results.values());\n }\n\n /**\n * Delete a scenario\n */\n deleteScenario(id: string): boolean {\n this.results.delete(id);\n return this.scenarios.delete(id);\n }\n\n /**\n * Clear all scenarios\n */\n clear(): void {\n this.scenarios.clear();\n this.results.clear();\n }\n}\n\n/**\n * Create a what-if engine\n */\nexport function createWhatIfEngine(): WhatIfEngine {\n return new WhatIfEngine();\n}\n","/**\n * FailureAnalyzer\n *\n * Analyzes failed agent executions to identify root causes.\n */\n\nimport type {\n Recording,\n ExecutionStep,\n FailureAnalysis,\n ContributingFactor,\n Recommendation,\n StepType,\n} from '../types/index.js';\nimport { generateId, now } from '../utils/helpers.js';\n\n/**\n * Analysis options\n */\nexport interface AnalysisOptions {\n /** Include detailed step analysis */\n includeDetailedSteps?: boolean;\n /** Include memory analysis */\n includeMemoryAnalysis?: boolean;\n /** Include timing analysis */\n includeTimingAnalysis?: boolean;\n /** Custom pattern matchers */\n customPatterns?: FailurePattern[];\n}\n\n/**\n * Failure pattern definition\n */\nexport interface FailurePattern {\n /** Pattern ID */\n id: string;\n /** Pattern name */\n name: string;\n /** Description */\n description: string;\n /** Pattern matcher function */\n matcher: (recording: Recording, steps: ExecutionStep[]) => boolean;\n /** Severity level */\n severity: 'low' | 'medium' | 'high' | 'critical';\n /** Recommendations for this pattern */\n recommendations: string[];\n}\n\n/**\n * Step analysis result\n */\nexport interface StepAnalysis {\n /** Step index */\n stepIndex: number;\n /** Step type */\n type: StepType;\n /** Whether this step is suspicious */\n suspicious: boolean;\n /** Suspicion reasons */\n reasons: string[];\n /** Related steps */\n relatedSteps: number[];\n}\n\n/**\n * Default failure patterns\n */\nconst DEFAULT_PATTERNS: FailurePattern[] = [\n {\n id: 'repeated_tool_failure',\n name: 'Repeated Tool Failures',\n description: 'The same tool failed multiple times in succession',\n matcher: (recording, steps) => {\n const toolFailures = steps.filter(\n (s) => s.type === 'tool-result' && s.toolCall && !s.toolCall.success,\n );\n if (toolFailures.length < 2) return false;\n\n // Check for consecutive failures of same tool\n for (let i = 0; i < toolFailures.length - 1; i++) {\n if (\n toolFailures[i].toolCall?.name === toolFailures[i + 1].toolCall?.name\n ) {\n return true;\n }\n }\n return false;\n },\n severity: 'high',\n recommendations: [\n 'Add retry logic with exponential backoff',\n 'Implement fallback tools',\n 'Add input validation before tool calls',\n ],\n },\n {\n id: 'low_confidence_decision',\n name: 'Low Confidence Decision',\n description: 'A critical decision was made with low confidence',\n matcher: (recording, steps) => {\n return steps.some(\n (s) =>\n s.type === 'decision' && s.decision && s.decision.confidence < 0.5,\n );\n },\n severity: 'medium',\n recommendations: [\n 'Gather more context before making decisions',\n 'Request clarification from user for ambiguous cases',\n 'Add confidence thresholds that trigger fallback behavior',\n ],\n },\n {\n id: 'infinite_loop',\n name: 'Potential Infinite Loop',\n description: 'Similar steps repeated many times without progress',\n matcher: (recording, steps) => {\n const stepTypes = steps.map((s) => s.type);\n const windowSize = 3;\n\n // Need at least 4 repetitions to be considered infinite loop\n const minRepetitions = 4;\n\n for (\n let i = 0;\n i <= stepTypes.length - windowSize * minRepetitions;\n i++\n ) {\n const window1 = stepTypes.slice(i, i + windowSize).join(',');\n let repetitions = 1;\n\n // Count consecutive repetitions\n for (\n let j = i + windowSize;\n j <= stepTypes.length - windowSize;\n j += windowSize\n ) {\n const nextWindow = stepTypes.slice(j, j + windowSize).join(',');\n if (nextWindow === window1) {\n repetitions++;\n } else {\n break;\n }\n }\n\n if (repetitions >= minRepetitions) {\n return true;\n }\n }\n return false;\n },\n severity: 'critical',\n recommendations: [\n 'Add loop detection and break conditions',\n 'Track state changes to detect lack of progress',\n 'Implement maximum iteration limits',\n ],\n },\n {\n id: 'missing_context',\n name: 'Missing Context',\n description: 'Tool or decision made without required context',\n matcher: (recording, steps) => {\n // Check for tool calls immediately after input without context gathering\n for (let i = 0; i < steps.length - 1; i++) {\n if (steps[i].type === 'input' && steps[i + 1].type === 'tool-call') {\n return true;\n }\n }\n return false;\n },\n severity: 'low',\n recommendations: [\n 'Add context gathering step before tool calls',\n 'Use memory retrieval to provide relevant context',\n 'Implement input analysis before action',\n ],\n },\n {\n id: 'memory_overflow',\n name: 'Memory Issues',\n description: 'Memory size grew excessively during execution',\n matcher: (recording) => {\n const initialSize = recording.initialState.memory.size;\n const finalSize = recording.finalState?.memory?.size ?? 0;\n return finalSize > initialSize * 10 && finalSize > 1024 * 1024; // 1MB\n },\n severity: 'medium',\n recommendations: [\n 'Implement memory compaction',\n 'Add memory limits and eviction policies',\n 'Summarize long conversations',\n ],\n },\n {\n id: 'timeout_likely',\n name: 'Slow Execution',\n description: 'Execution took excessively long, possibly due to timeouts',\n matcher: (recording) => {\n const avgDuration = recording.durationMs / recording.steps.length;\n return avgDuration > 10000; // Average > 10 seconds per step\n },\n severity: 'medium',\n recommendations: [\n 'Add timeout handling for external calls',\n 'Implement caching for repeated operations',\n 'Optimize tool implementations',\n ],\n },\n];\n\n/**\n * FailureAnalyzer\n *\n * Analyzes failed agent executions to identify root causes.\n *\n * @example\n * ```typescript\n * const analyzer = new FailureAnalyzer();\n *\n * // Analyze a failed recording\n * const analysis = analyzer.analyze(recording);\n *\n * // Get recommendations\n * console.log('Root cause:', analysis.rootCause);\n * console.log('Recommendations:', analysis.recommendations);\n *\n * // Analyze specific steps\n * const stepAnalysis = analyzer.analyzeSteps(recording.steps);\n * ```\n */\nexport class FailureAnalyzer {\n private patterns: FailurePattern[];\n private options: Required<AnalysisOptions>;\n\n constructor(options?: AnalysisOptions) {\n this.options = {\n includeDetailedSteps: options?.includeDetailedSteps ?? true,\n includeMemoryAnalysis: options?.includeMemoryAnalysis ?? true,\n includeTimingAnalysis: options?.includeTimingAnalysis ?? true,\n customPatterns: options?.customPatterns ?? [],\n };\n\n this.patterns = [...DEFAULT_PATTERNS, ...this.options.customPatterns];\n }\n\n /**\n * Analyze a failed recording\n */\n analyze(recording: Recording): FailureAnalysis {\n const contributingFactors = this.findContributingFactors(recording);\n const rootCause = this.determineRootCause(recording, contributingFactors);\n const recommendations = this.generateRecommendations(contributingFactors);\n const errorStepIndex = this.findErrorStep(recording);\n\n return {\n id: generateId('analysis'),\n recordingId: recording.id,\n analyzedAt: now(),\n rootCause,\n contributingFactors,\n recommendations,\n errorStepIndex,\n errorMessage: this.getErrorMessage(recording, errorStepIndex),\n stackTrace: this.getStackTrace(recording, errorStepIndex),\n severity: this.calculateOverallSeverity(contributingFactors),\n confidence: this.calculateConfidence(contributingFactors),\n };\n }\n\n /**\n * Find contributing factors\n */\n private findContributingFactors(recording: Recording): ContributingFactor[] {\n const factors: ContributingFactor[] = [];\n\n // Check all patterns\n for (const pattern of this.patterns) {\n if (pattern.matcher(recording, recording.steps)) {\n factors.push({\n id: generateId('factor'),\n type: pattern.id,\n description: pattern.description,\n severity: pattern.severity,\n stepIndices: this.findPatternSteps(recording, pattern),\n evidence: this.gatherEvidence(recording, pattern),\n });\n }\n }\n\n // Add error-specific factors\n const errorSteps = recording.steps.filter((s) => s.error);\n for (const step of errorSteps) {\n factors.push({\n id: generateId('factor'),\n type: 'explicit_error',\n description: step.error?.message ?? 'Unknown error',\n severity: 'high',\n stepIndices: [step.index],\n evidence: {\n errorName: step.error?.name,\n errorMessage: step.error?.message,\n errorStack: step.error?.stack,\n },\n });\n }\n\n // Sort by severity\n const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };\n factors.sort(\n (a, b) => severityOrder[a.severity] - severityOrder[b.severity],\n );\n\n return factors;\n }\n\n /**\n * Find steps related to a pattern\n */\n private findPatternSteps(\n recording: Recording,\n pattern: FailurePattern,\n ): number[] {\n const indices: number[] = [];\n\n switch (pattern.id) {\n case 'repeated_tool_failure':\n for (const step of recording.steps) {\n if (\n step.type === 'tool-result' &&\n step.toolCall &&\n !step.toolCall.success\n ) {\n indices.push(step.index);\n }\n }\n break;\n\n case 'low_confidence_decision':\n for (const step of recording.steps) {\n if (\n step.type === 'decision' &&\n step.decision &&\n step.decision.confidence < 0.5\n ) {\n indices.push(step.index);\n }\n }\n break;\n\n default:\n // Return error steps by default\n for (const step of recording.steps) {\n if (step.error) {\n indices.push(step.index);\n }\n }\n }\n\n return indices;\n }\n\n /**\n * Gather evidence for a pattern\n */\n private gatherEvidence(\n recording: Recording,\n pattern: FailurePattern,\n ): Record<string, unknown> {\n const evidence: Record<string, unknown> = {\n patternId: pattern.id,\n patternName: pattern.name,\n };\n\n switch (pattern.id) {\n case 'repeated_tool_failure': {\n const failures = recording.steps.filter(\n (s) => s.type === 'tool-result' && s.toolCall && !s.toolCall.success,\n );\n evidence.failedTools = failures.map((s) => s.toolCall?.name);\n evidence.failureCount = failures.length;\n break;\n }\n\n case 'low_confidence_decision': {\n const lowConfidence = recording.steps.filter(\n (s) =>\n s.type === 'decision' && s.decision && s.decision.confidence < 0.5,\n );\n evidence.decisions = lowConfidence.map((s) => ({\n step: s.index,\n confidence: s.decision?.confidence,\n reason: s.decision?.reason,\n }));\n break;\n }\n\n case 'timeout_likely':\n evidence.totalDuration = recording.durationMs;\n evidence.avgStepDuration =\n recording.durationMs / recording.steps.length;\n break;\n\n case 'memory_overflow':\n evidence.initialMemorySize = recording.initialState.memory.size;\n evidence.finalMemorySize = recording.finalState?.memory?.size ?? 0;\n evidence.growth =\n (recording.finalState?.memory?.size ?? 0) /\n recording.initialState.memory.size;\n break;\n }\n\n return evidence;\n }\n\n /**\n * Determine the root cause\n */\n private determineRootCause(\n recording: Recording,\n factors: ContributingFactor[],\n ): string {\n // Check for explicit error first\n const explicitError = factors.find((f) => f.type === 'explicit_error');\n if (explicitError) {\n return explicitError.description;\n }\n\n // Use highest severity factor\n if (factors.length > 0) {\n return factors[0].description;\n }\n\n // Default analysis\n if (recording.status === 'failed') {\n return 'Execution failed without clear error indication';\n }\n\n return 'No failure detected';\n }\n\n /**\n * Generate recommendations\n */\n private generateRecommendations(\n factors: ContributingFactor[],\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n const seenRecommendations = new Set<string>();\n\n for (const factor of factors) {\n const pattern = this.patterns.find((p) => p.id === factor.type);\n\n if (pattern) {\n for (const rec of pattern.recommendations) {\n if (!seenRecommendations.has(rec)) {\n seenRecommendations.add(rec);\n recommendations.push({\n id: generateId('rec'),\n priority: this.getPriorityFromSeverity(factor.severity),\n title: rec,\n description: `Based on pattern: ${pattern.name}`,\n relatedFactors: [factor.id],\n });\n }\n }\n } else if (factor.type === 'explicit_error') {\n // Handle explicit errors without patterns\n const defaultRecs = [\n 'Review the error message and stack trace',\n 'Add error handling and recovery logic',\n 'Validate inputs before operations',\n ];\n for (const rec of defaultRecs) {\n if (!seenRecommendations.has(rec)) {\n seenRecommendations.add(rec);\n recommendations.push({\n id: generateId('rec'),\n priority: this.getPriorityFromSeverity(factor.severity),\n title: rec,\n description: `Based on explicit error: ${factor.description}`,\n relatedFactors: [factor.id],\n });\n }\n }\n }\n }\n\n // Sort by priority\n recommendations.sort((a, b) => a.priority - b.priority);\n\n return recommendations;\n }\n\n /**\n * Get priority from severity\n */\n private getPriorityFromSeverity(\n severity: ContributingFactor['severity'],\n ): number {\n switch (severity) {\n case 'critical':\n return 1;\n case 'high':\n return 2;\n case 'medium':\n return 3;\n case 'low':\n return 4;\n default:\n return 5;\n }\n }\n\n /**\n * Find the error step\n */\n private findErrorStep(recording: Recording): number | undefined {\n // Find first step with error\n for (const step of recording.steps) {\n if (step.error) {\n return step.index;\n }\n }\n\n // Find last failed tool call\n for (let i = recording.steps.length - 1; i >= 0; i--) {\n const step = recording.steps[i];\n if (\n step.type === 'tool-result' &&\n step.toolCall &&\n !step.toolCall.success\n ) {\n return step.index;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get error message\n */\n private getErrorMessage(\n recording: Recording,\n stepIndex?: number,\n ): string | undefined {\n if (stepIndex === undefined) {\n return undefined;\n }\n\n const step = recording.steps[stepIndex];\n return (\n step?.error?.message ?? (step?.toolCall?.result as string | undefined)\n );\n }\n\n /**\n * Get stack trace\n */\n private getStackTrace(\n recording: Recording,\n stepIndex?: number,\n ): string | undefined {\n if (stepIndex === undefined) {\n return undefined;\n }\n\n const step = recording.steps[stepIndex];\n return step?.error?.stack;\n }\n\n /**\n * Calculate overall severity\n */\n private calculateOverallSeverity(\n factors: ContributingFactor[],\n ): 'low' | 'medium' | 'high' | 'critical' {\n if (factors.length === 0) {\n return 'low';\n }\n\n const severities = factors.map((f) => f.severity);\n\n if (severities.includes('critical')) return 'critical';\n if (severities.includes('high')) return 'high';\n if (severities.includes('medium')) return 'medium';\n return 'low';\n }\n\n /**\n * Calculate analysis confidence\n */\n private calculateConfidence(factors: ContributingFactor[]): number {\n if (factors.length === 0) {\n return 0.3;\n }\n\n // More factors with more evidence = higher confidence\n let confidenceSum = 0;\n\n for (const factor of factors) {\n let factorConfidence = 0.5;\n\n if (factor.type === 'explicit_error') {\n factorConfidence = 0.95;\n } else if (Object.keys(factor.evidence ?? {}).length > 2) {\n factorConfidence = 0.8;\n }\n\n confidenceSum += factorConfidence;\n }\n\n return Math.min(confidenceSum / factors.length, 0.99);\n }\n\n /**\n * Analyze individual steps\n */\n analyzeSteps(steps: ExecutionStep[]): StepAnalysis[] {\n const analyses: StepAnalysis[] = [];\n\n for (const step of steps) {\n const analysis: StepAnalysis = {\n stepIndex: step.index,\n type: step.type,\n suspicious: false,\n reasons: [],\n relatedSteps: [],\n };\n\n // Check for errors\n if (step.error) {\n analysis.suspicious = true;\n analysis.reasons.push(`Error: ${step.error.message}`);\n }\n\n // Check for failed tool calls\n if (\n step.type === 'tool-result' &&\n step.toolCall &&\n !step.toolCall.success\n ) {\n analysis.suspicious = true;\n analysis.reasons.push(`Tool ${step.toolCall.name} failed`);\n }\n\n // Check for low confidence decisions\n if (\n step.type === 'decision' &&\n step.decision &&\n step.decision.confidence < 0.5\n ) {\n analysis.suspicious = true;\n analysis.reasons.push(\n `Low confidence decision (${step.decision.confidence})`,\n );\n }\n\n // Check for unusually long duration\n if (step.durationMs && step.durationMs > 30000) {\n analysis.suspicious = true;\n analysis.reasons.push(`Long duration (${step.durationMs}ms)`);\n }\n\n analyses.push(analysis);\n }\n\n return analyses;\n }\n\n /**\n * Add a custom pattern\n */\n addPattern(pattern: FailurePattern): void {\n this.patterns.push(pattern);\n }\n\n /**\n * Remove a pattern\n */\n removePattern(patternId: string): boolean {\n const index = this.patterns.findIndex((p) => p.id === patternId);\n if (index >= 0) {\n this.patterns.splice(index, 1);\n return true;\n }\n return false;\n }\n\n /**\n * Get all patterns\n */\n getPatterns(): FailurePattern[] {\n return [...this.patterns];\n }\n}\n\n/**\n * Create a failure analyzer\n */\nexport function createFailureAnalyzer(\n options?: AnalysisOptions,\n): FailureAnalyzer {\n return new FailureAnalyzer(options);\n}\n","/**\n * FileStorage\n *\n * File-based storage adapter for recordings.\n */\n\nimport type {\n Recording,\n Checkpoint,\n RecordingStorageAdapter,\n} from '../types/index.js';\nimport { safeStringify, safeParse } from '../utils/helpers.js';\n\n/**\n * File system interface (for Node.js compatibility)\n */\nexport interface FileSystem {\n readFile(path: string): Promise<string>;\n writeFile(path: string, content: string): Promise<void>;\n exists(path: string): Promise<boolean>;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n readdir(path: string): Promise<string[]>;\n unlink(path: string): Promise<void>;\n stat(\n path: string,\n ): Promise<{ isFile(): boolean; isDirectory(): boolean; mtime: Date }>;\n}\n\n/**\n * File storage options\n */\nexport interface FileStorageOptions {\n /** Base directory for storage */\n basePath: string;\n /** File extension */\n extension?: string;\n /** Whether to compress files */\n compress?: boolean;\n /** Whether to pretty print JSON */\n prettyPrint?: boolean;\n /** File system implementation */\n fs: FileSystem;\n}\n\n/**\n * Recording metadata for listing\n */\nexport interface RecordingMeta {\n id: string;\n agentId: string;\n agentName: string;\n status: string;\n startedAt: number;\n endedAt?: number;\n durationMs: number;\n stepsCount: number;\n filePath: string;\n fileSize?: number;\n}\n\n/**\n * FileStorage\n *\n * File-based storage for debug recordings.\n *\n * @example\n * ```typescript\n * import * as fs from 'fs/promises';\n *\n * const storage = new FileStorage({\n * basePath: './debug-recordings',\n * fs: {\n * readFile: (p) => fs.readFile(p, 'utf-8'),\n * writeFile: (p, c) => fs.writeFile(p, c, 'utf-8'),\n * exists: async (p) => fs.access(p).then(() => true).catch(() => false),\n * mkdir: (p, o) => fs.mkdir(p, o),\n * readdir: (p) => fs.readdir(p),\n * unlink: (p) => fs.unlink(p),\n * stat: (p) => fs.stat(p),\n * },\n * });\n *\n * // Save a recording\n * await storage.save(recording);\n *\n * // Load a recording\n * const loaded = await storage.load('rec_123');\n *\n * // List all recordings\n * const recordings = await storage.list();\n * ```\n */\nexport class FileStorage implements RecordingStorageAdapter {\n private options: Required<FileStorageOptions>;\n private initialized = false;\n\n constructor(options: FileStorageOptions) {\n this.options = {\n basePath: options.basePath,\n extension: options.extension ?? '.json',\n compress: options.compress ?? false,\n prettyPrint: options.prettyPrint ?? true,\n fs: options.fs,\n };\n }\n\n /**\n * Initialize storage (create directories)\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n const { fs, basePath } = this.options;\n\n // Create base directory\n const exists = await fs.exists(basePath);\n if (!exists) {\n await fs.mkdir(basePath, { recursive: true });\n }\n\n // Create subdirectories\n const subdirs = ['recordings', 'checkpoints', 'metadata'];\n for (const subdir of subdirs) {\n const path = this.joinPath(basePath, subdir);\n const subdirExists = await fs.exists(path);\n if (!subdirExists) {\n await fs.mkdir(path, { recursive: true });\n }\n }\n\n this.initialized = true;\n }\n\n /**\n * Save a recording\n */\n async save(recording: Recording): Promise<void> {\n await this.initialize();\n\n const { fs, prettyPrint } = this.options;\n const filePath = this.getRecordingPath(recording.id);\n\n const content = prettyPrint\n ? safeStringify(recording, 2)\n : safeStringify(recording);\n\n await fs.writeFile(filePath, content);\n\n // Save metadata separately for quick listing\n await this.saveMetadata(recording);\n\n // Save checkpoints separately\n for (const checkpoint of recording.checkpoints) {\n await this.saveCheckpoint(checkpoint);\n }\n }\n\n /**\n * Load a recording\n */\n async load(id: string): Promise<Recording | undefined> {\n await this.initialize();\n\n const { fs } = this.options;\n const filePath = this.getRecordingPath(id);\n\n const exists = await fs.exists(filePath);\n if (!exists) {\n return undefined;\n }\n\n const content = await fs.readFile(filePath);\n return safeParse<Recording>(content);\n }\n\n /**\n * Delete a recording\n */\n async delete(id: string): Promise<boolean> {\n await this.initialize();\n\n const { fs } = this.options;\n const filePath = this.getRecordingPath(id);\n\n const exists = await fs.exists(filePath);\n if (!exists) {\n return false;\n }\n\n await fs.unlink(filePath);\n\n // Delete metadata\n const metaPath = this.getMetadataPath(id);\n if (await fs.exists(metaPath)) {\n await fs.unlink(metaPath);\n }\n\n return true;\n }\n\n /**\n * List all recordings\n */\n async list(): Promise<RecordingMeta[]> {\n await this.initialize();\n\n const { fs } = this.options;\n const metaDir = this.joinPath(this.options.basePath, 'metadata');\n\n const files = await fs.readdir(metaDir);\n const metas: RecordingMeta[] = [];\n\n for (const file of files) {\n if (file.endsWith(this.options.extension)) {\n const filePath = this.joinPath(metaDir, file);\n const content = await fs.readFile(filePath);\n const meta = safeParse<RecordingMeta>(content);\n if (meta) {\n metas.push(meta);\n }\n }\n }\n\n // Sort by start time descending\n metas.sort((a, b) => b.startedAt - a.startedAt);\n\n return metas;\n }\n\n /**\n * Query recordings\n */\n async query(options: {\n agentId?: string;\n status?: string;\n startAfter?: number;\n startBefore?: number;\n limit?: number;\n }): Promise<RecordingMeta[]> {\n let recordings = await this.list();\n\n // Apply filters\n if (options.agentId) {\n recordings = recordings.filter((r) => r.agentId === options.agentId);\n }\n\n if (options.status) {\n recordings = recordings.filter((r) => r.status === options.status);\n }\n\n if (options.startAfter) {\n recordings = recordings.filter((r) => r.startedAt > options.startAfter!);\n }\n\n if (options.startBefore) {\n recordings = recordings.filter((r) => r.startedAt < options.startBefore!);\n }\n\n // Apply limit\n if (options.limit) {\n recordings = recordings.slice(0, options.limit);\n }\n\n return recordings;\n }\n\n /**\n * Save a checkpoint\n */\n async saveCheckpoint(checkpoint: Checkpoint): Promise<void> {\n await this.initialize();\n\n const { fs, prettyPrint } = this.options;\n const filePath = this.getCheckpointPath(checkpoint.id);\n\n const content = prettyPrint\n ? safeStringify(checkpoint, 2)\n : safeStringify(checkpoint);\n\n await fs.writeFile(filePath, content);\n }\n\n /**\n * Load a checkpoint\n */\n async loadCheckpoint(id: string): Promise<Checkpoint | undefined> {\n await this.initialize();\n\n const { fs } = this.options;\n const filePath = this.getCheckpointPath(id);\n\n const exists = await fs.exists(filePath);\n if (!exists) {\n return undefined;\n }\n\n const content = await fs.readFile(filePath);\n return safeParse<Checkpoint>(content);\n }\n\n /**\n * List checkpoints for a recording\n */\n async listCheckpoints(recordingId: string): Promise<Checkpoint[]> {\n await this.initialize();\n\n const { fs } = this.options;\n const cpDir = this.joinPath(this.options.basePath, 'checkpoints');\n\n const files = await fs.readdir(cpDir);\n const checkpoints: Checkpoint[] = [];\n\n for (const file of files) {\n if (file.endsWith(this.options.extension)) {\n const filePath = this.joinPath(cpDir, file);\n const content = await fs.readFile(filePath);\n const cp = safeParse<Checkpoint>(content);\n if (cp && cp.recordingId === recordingId) {\n checkpoints.push(cp);\n }\n }\n }\n\n // Sort by step index\n checkpoints.sort((a, b) => a.stepIndex - b.stepIndex);\n\n return checkpoints;\n }\n\n /**\n * Save metadata for quick listing\n */\n private async saveMetadata(recording: Recording): Promise<void> {\n const { fs, prettyPrint } = this.options;\n const filePath = this.getMetadataPath(recording.id);\n\n const meta: RecordingMeta = {\n id: recording.id,\n agentId: recording.agentId,\n agentName: recording.agentName,\n status: recording.status,\n startedAt: recording.startedAt,\n endedAt: recording.endedAt,\n durationMs: recording.durationMs,\n stepsCount: recording.steps.length,\n filePath: this.getRecordingPath(recording.id),\n };\n\n const content = prettyPrint ? safeStringify(meta, 2) : safeStringify(meta);\n\n await fs.writeFile(filePath, content);\n }\n\n /**\n * Get recording file path\n */\n private getRecordingPath(id: string): string {\n return this.joinPath(\n this.options.basePath,\n 'recordings',\n `${id}${this.options.extension}`,\n );\n }\n\n /**\n * Get metadata file path\n */\n private getMetadataPath(id: string): string {\n return this.joinPath(\n this.options.basePath,\n 'metadata',\n `${id}${this.options.extension}`,\n );\n }\n\n /**\n * Get checkpoint file path\n */\n private getCheckpointPath(id: string): string {\n return this.joinPath(\n this.options.basePath,\n 'checkpoints',\n `${id}${this.options.extension}`,\n );\n }\n\n /**\n * Join path segments\n */\n private joinPath(...segments: string[]): string {\n return segments.join('/').replace(/\\/+/g, '/');\n }\n\n /**\n * Get storage statistics\n */\n async getStats(): Promise<{\n totalRecordings: number;\n totalCheckpoints: number;\n totalSizeBytes: number;\n }> {\n await this.initialize();\n\n const { fs } = this.options;\n const recordings = await this.list();\n\n let totalSize = 0;\n for (const meta of recordings) {\n const stat = await fs.stat(meta.filePath);\n if (stat) {\n totalSize += (stat as { size?: number }).size ?? 0;\n }\n }\n\n const cpDir = this.joinPath(this.options.basePath, 'checkpoints');\n const cpFiles = await fs.readdir(cpDir);\n\n return {\n totalRecordings: recordings.length,\n totalCheckpoints: cpFiles.length,\n totalSizeBytes: totalSize,\n };\n }\n}\n\n/**\n * Create file storage\n */\nexport function createFileStorage(options: FileStorageOptions): FileStorage {\n return new FileStorage(options);\n}\n","/**\n * MemoryStorage\n *\n * In-memory storage adapter for recordings.\n */\n\nimport type {\n Recording,\n Checkpoint,\n RecordingStorageAdapter,\n} from '../types/index.js';\nimport { deepClone, estimateSize } from '../utils/helpers.js';\n\n/**\n * Memory storage options\n */\nexport interface MemoryStorageOptions {\n /** Maximum recordings to store */\n maxRecordings?: number;\n /** Maximum total size in bytes */\n maxSizeBytes?: number;\n /** Whether to deep clone on save/load */\n deepCopy?: boolean;\n}\n\n/**\n * Recording entry with metadata\n */\ninterface RecordingEntry {\n recording: Recording;\n size: number;\n savedAt: number;\n}\n\n/**\n * Checkpoint entry with metadata\n */\ninterface CheckpointEntry {\n checkpoint: Checkpoint;\n size: number;\n savedAt: number;\n}\n\n/**\n * MemoryStorage\n *\n * In-memory storage for debug recordings.\n * Useful for testing and development.\n *\n * @example\n * ```typescript\n * const storage = new MemoryStorage({\n * maxRecordings: 100,\n * maxSizeBytes: 50 * 1024 * 1024, // 50MB\n * });\n *\n * // Save a recording\n * await storage.save(recording);\n *\n * // Load a recording\n * const loaded = await storage.load('rec_123');\n *\n * // List all recordings\n * const recordings = await storage.list();\n * ```\n */\nexport class MemoryStorage implements RecordingStorageAdapter {\n private recordings: Map<string, RecordingEntry> = new Map();\n private checkpoints: Map<string, CheckpointEntry> = new Map();\n private options: Required<MemoryStorageOptions>;\n private totalSize = 0;\n\n constructor(options?: MemoryStorageOptions) {\n this.options = {\n maxRecordings: options?.maxRecordings ?? 1000,\n maxSizeBytes: options?.maxSizeBytes ?? 100 * 1024 * 1024, // 100MB\n deepCopy: options?.deepCopy ?? true,\n };\n }\n\n /**\n * Save a recording\n */\n save(recording: Recording): Promise<void> {\n const size = estimateSize(recording);\n\n // Check size limit\n if (size > this.options.maxSizeBytes) {\n return Promise.reject(new Error('Recording exceeds maximum size limit'));\n }\n\n // Evict old recordings if needed\n this.ensureCapacity(size);\n\n const entry: RecordingEntry = {\n recording: this.options.deepCopy ? deepClone(recording) : recording,\n size,\n savedAt: Date.now(),\n };\n\n // Update total size\n const existing = this.recordings.get(recording.id);\n if (existing) {\n this.totalSize -= existing.size;\n }\n this.totalSize += size;\n\n this.recordings.set(recording.id, entry);\n\n // Save checkpoints\n for (const checkpoint of recording.checkpoints) {\n this.saveCheckpoint(checkpoint);\n }\n\n return Promise.resolve();\n }\n\n /**\n * Load a recording\n */\n load(id: string): Promise<Recording | undefined> {\n const entry = this.recordings.get(id);\n if (!entry) {\n return Promise.resolve(undefined);\n }\n\n return Promise.resolve(\n this.options.deepCopy ? deepClone(entry.recording) : entry.recording,\n );\n }\n\n /**\n * Delete a recording\n */\n delete(id: string): Promise<boolean> {\n const entry = this.recordings.get(id);\n if (!entry) {\n return Promise.resolve(false);\n }\n\n this.totalSize -= entry.size;\n this.recordings.delete(id);\n\n // Delete associated checkpoints\n for (const checkpoint of entry.recording.checkpoints) {\n this.deleteCheckpoint(checkpoint.id);\n }\n\n return Promise.resolve(true);\n }\n\n /**\n * List all recordings\n */\n list(): Promise<\n Array<{\n id: string;\n agentId: string;\n agentName: string;\n status: string;\n startedAt: number;\n endedAt?: number;\n durationMs: number;\n stepsCount: number;\n }>\n > {\n const results: Array<{\n id: string;\n agentId: string;\n agentName: string;\n status: string;\n startedAt: number;\n endedAt?: number;\n durationMs: number;\n stepsCount: number;\n }> = [];\n\n for (const entry of this.recordings.values()) {\n const r = entry.recording;\n results.push({\n id: r.id,\n agentId: r.agentId,\n agentName: r.agentName,\n status: r.status,\n startedAt: r.startedAt,\n endedAt: r.endedAt,\n durationMs: r.durationMs,\n stepsCount: r.steps.length,\n });\n }\n\n // Sort by start time descending\n results.sort((a, b) => b.startedAt - a.startedAt);\n\n return Promise.resolve(results);\n }\n\n /**\n * Query recordings\n */\n async query(options: {\n agentId?: string;\n status?: string;\n startAfter?: number;\n startBefore?: number;\n limit?: number;\n }): Promise<\n Array<{\n id: string;\n agentId: string;\n agentName: string;\n status: string;\n startedAt: number;\n endedAt?: number;\n durationMs: number;\n stepsCount: number;\n }>\n > {\n let results = await this.list();\n\n // Apply filters\n if (options.agentId) {\n results = results.filter((r) => r.agentId === options.agentId);\n }\n\n if (options.status) {\n results = results.filter((r) => r.status === options.status);\n }\n\n if (options.startAfter) {\n results = results.filter((r) => r.startedAt > options.startAfter!);\n }\n\n if (options.startBefore) {\n results = results.filter((r) => r.startedAt < options.startBefore!);\n }\n\n // Apply limit\n if (options.limit) {\n results = results.slice(0, options.limit);\n }\n\n return results;\n }\n\n /**\n * Save a checkpoint\n */\n saveCheckpoint(checkpoint: Checkpoint): void {\n const size = estimateSize(checkpoint);\n\n const entry: CheckpointEntry = {\n checkpoint: this.options.deepCopy ? deepClone(checkpoint) : checkpoint,\n size,\n savedAt: Date.now(),\n };\n\n // Update total size\n const existing = this.checkpoints.get(checkpoint.id);\n if (existing) {\n this.totalSize -= existing.size;\n }\n this.totalSize += size;\n\n this.checkpoints.set(checkpoint.id, entry);\n }\n\n /**\n * Load a checkpoint\n */\n loadCheckpoint(id: string): Checkpoint | undefined {\n const entry = this.checkpoints.get(id);\n if (!entry) {\n return undefined;\n }\n\n return this.options.deepCopy\n ? deepClone(entry.checkpoint)\n : entry.checkpoint;\n }\n\n /**\n * Delete a checkpoint\n */\n deleteCheckpoint(id: string): boolean {\n const entry = this.checkpoints.get(id);\n if (!entry) {\n return false;\n }\n\n this.totalSize -= entry.size;\n this.checkpoints.delete(id);\n return true;\n }\n\n /**\n * List checkpoints for a recording\n */\n listCheckpoints(recordingId: string): Checkpoint[] {\n const results: Checkpoint[] = [];\n\n for (const entry of this.checkpoints.values()) {\n if (entry.checkpoint.recordingId === recordingId) {\n results.push(\n this.options.deepCopy\n ? deepClone(entry.checkpoint)\n : entry.checkpoint,\n );\n }\n }\n\n // Sort by step index\n results.sort((a, b) => a.stepIndex - b.stepIndex);\n\n return results;\n }\n\n /**\n * Ensure capacity for new data\n */\n private ensureCapacity(requiredSize: number): void {\n // Check recording count limit\n while (this.recordings.size >= this.options.maxRecordings) {\n this.evictOldest();\n }\n\n // Check size limit\n while (this.totalSize + requiredSize > this.options.maxSizeBytes) {\n if (this.recordings.size === 0) {\n break;\n }\n this.evictOldest();\n }\n }\n\n /**\n * Evict the oldest recording\n */\n private evictOldest(): void {\n let oldestId: string | undefined;\n let oldestTime = Infinity;\n\n for (const [id, entry] of this.recordings) {\n if (entry.savedAt < oldestTime) {\n oldestTime = entry.savedAt;\n oldestId = id;\n }\n }\n\n if (oldestId) {\n void this.delete(oldestId);\n }\n }\n\n /**\n * Clear all data\n */\n clear(): void {\n this.recordings.clear();\n this.checkpoints.clear();\n this.totalSize = 0;\n }\n\n /**\n * Get storage statistics\n */\n getStats(): {\n totalRecordings: number;\n totalCheckpoints: number;\n totalSizeBytes: number;\n maxRecordings: number;\n maxSizeBytes: number;\n utilizationPercent: number;\n } {\n return {\n totalRecordings: this.recordings.size,\n totalCheckpoints: this.checkpoints.size,\n totalSizeBytes: this.totalSize,\n maxRecordings: this.options.maxRecordings,\n maxSizeBytes: this.options.maxSizeBytes,\n utilizationPercent: (this.totalSize / this.options.maxSizeBytes) * 100,\n };\n }\n\n /**\n * Export all data\n */\n exportAll(): {\n recordings: Recording[];\n checkpoints: Checkpoint[];\n } {\n const recordings: Recording[] = [];\n const checkpoints: Checkpoint[] = [];\n\n for (const entry of this.recordings.values()) {\n recordings.push(\n this.options.deepCopy ? deepClone(entry.recording) : entry.recording,\n );\n }\n\n for (const entry of this.checkpoints.values()) {\n checkpoints.push(\n this.options.deepCopy ? deepClone(entry.checkpoint) : entry.checkpoint,\n );\n }\n\n return { recordings, checkpoints };\n }\n\n /**\n * Import data\n */\n importAll(data: {\n recordings: Recording[];\n checkpoints?: Checkpoint[];\n }): void {\n for (const recording of data.recordings) {\n void this.save(recording);\n }\n\n if (data.checkpoints) {\n for (const checkpoint of data.checkpoints) {\n this.saveCheckpoint(checkpoint);\n }\n }\n }\n}\n\n/**\n * Create memory storage\n */\nexport function createMemoryStorage(\n options?: MemoryStorageOptions,\n): MemoryStorage {\n return new MemoryStorage(options);\n}\n","/**\n * DebugMiddleware\n *\n * Middleware for integrating debugging into AgentSea agents.\n */\n\nimport type {\n ExecutionStep,\n AgentState,\n StepType,\n ToolCall,\n Decision,\n TokenUsage,\n} from '../../types/index.js';\nimport { Debugger } from '../../core/Debugger.js';\nimport { Recorder } from '../../recording/Recorder.js';\nimport { generateId, now } from '../../utils/helpers.js';\n\n/**\n * Middleware options\n */\nexport interface DebugMiddlewareOptions {\n /** Enable debugging */\n enabled?: boolean;\n /** Enable recording */\n recordEnabled?: boolean;\n /** Debugger instance */\n debugger?: Debugger;\n /** Recorder instance */\n recorder?: Recorder;\n /** Auto-start session */\n autoStart?: boolean;\n /** Include prompts in recording */\n includePrompts?: boolean;\n /** Include responses in recording */\n includeResponses?: boolean;\n}\n\n/**\n * Agent message type\n */\nexport interface AgentMessage {\n role: 'user' | 'assistant' | 'system' | 'tool';\n content: string;\n toolCalls?: Array<{\n id: string;\n name: string;\n arguments: Record<string, unknown>;\n }>;\n toolCallId?: string;\n}\n\n/**\n * Execution context\n */\nexport interface ExecutionContext {\n agentId: string;\n agentName: string;\n model: string;\n messages: AgentMessage[];\n tools: string[];\n memory?: Record<string, unknown>;\n context?: Record<string, unknown>;\n}\n\n/**\n * Step timing tracker\n */\ninterface StepTiming {\n startTime: number;\n type: StepType;\n}\n\n/**\n * DebugMiddleware\n *\n * Middleware for debugging AgentSea agents.\n *\n * @example\n * ```typescript\n * import { Agent } from '@lov3kaizen/agentsea-core';\n * import { DebugMiddleware } from '@lov3kaizen/agentsea-debugger';\n *\n * const middleware = new DebugMiddleware({\n * enabled: true,\n * recordEnabled: true,\n * });\n *\n * // Wrap agent execution\n * const agent = new Agent({\n * middleware: [middleware.createHandler()],\n * });\n *\n * // Or use manually\n * middleware.onInput('Hello');\n * middleware.onToolCall({ name: 'search', arguments: { query: 'test' } });\n * middleware.onResponse('Here is the result...');\n * ```\n */\nexport class DebugMiddleware {\n private options: Required<DebugMiddlewareOptions>;\n private debugger: Debugger;\n private recorder: Recorder;\n private stepIndex = 0;\n private currentTiming?: StepTiming;\n private isSessionActive = false;\n\n constructor(options?: DebugMiddlewareOptions) {\n this.options = {\n enabled: options?.enabled ?? true,\n recordEnabled: options?.recordEnabled ?? true,\n debugger: options?.debugger ?? new Debugger(),\n recorder: options?.recorder ?? new Recorder(),\n autoStart: options?.autoStart ?? true,\n includePrompts: options?.includePrompts ?? true,\n includeResponses: options?.includeResponses ?? true,\n };\n\n this.debugger = this.options.debugger;\n this.recorder = this.options.recorder;\n }\n\n /**\n * Start a debug session\n */\n startSession(context: ExecutionContext): void {\n if (!this.options.enabled || this.isSessionActive) {\n return;\n }\n\n const state = this.contextToState(context);\n\n // Start debugger session\n this.debugger.startSession({\n agentId: context.agentId,\n });\n\n // Start recording if enabled\n if (this.options.recordEnabled) {\n this.recorder.start(context.agentId, state, context.agentName);\n }\n\n this.stepIndex = 0;\n this.isSessionActive = true;\n }\n\n /**\n * End the debug session\n */\n endSession(): void {\n if (!this.isSessionActive) {\n return;\n }\n\n this.debugger.endSession();\n\n if (this.options.recordEnabled) {\n this.recorder.stop();\n }\n\n this.isSessionActive = false;\n }\n\n /**\n * Record user input\n */\n onInput(input: unknown, context?: ExecutionContext): void {\n if (!this.options.enabled) return;\n\n this.finishCurrentStep();\n\n const step = this.createStep('input', {\n input,\n });\n\n this.recordStep(step, context);\n this.startTiming('input');\n }\n\n /**\n * Record prompt sent to model\n */\n onPrompt(prompt: string | AgentMessage[], context?: ExecutionContext): void {\n if (!this.options.enabled || !this.options.includePrompts) return;\n\n this.finishCurrentStep();\n\n const step = this.createStep('prompt', {\n input: prompt,\n });\n\n this.recordStep(step, context);\n this.startTiming('prompt');\n }\n\n /**\n * Record model response\n */\n onResponse(\n response: string,\n usage?: TokenUsage,\n context?: ExecutionContext,\n ): void {\n if (!this.options.enabled || !this.options.includeResponses) return;\n\n this.finishCurrentStep();\n\n const step = this.createStep('response', {\n output: response,\n tokenUsage: usage,\n });\n\n this.recordStep(step, context);\n this.startTiming('response');\n }\n\n /**\n * Record tool call\n */\n onToolCall(\n tool: {\n id?: string;\n name: string;\n arguments: Record<string, unknown>;\n },\n context?: ExecutionContext,\n ): void {\n if (!this.options.enabled) return;\n\n this.finishCurrentStep();\n\n const toolCall: ToolCall = {\n id: tool.id ?? generateId('tool'),\n name: tool.name,\n arguments: tool.arguments,\n };\n\n const step = this.createStep('tool-call', {\n input: tool.arguments,\n toolCall,\n });\n\n this.recordStep(step, context);\n this.startTiming('tool-call');\n }\n\n /**\n * Record tool result\n */\n onToolResult(\n tool: {\n id: string;\n name: string;\n result: unknown;\n success: boolean;\n },\n context?: ExecutionContext,\n ): void {\n if (!this.options.enabled) return;\n\n this.finishCurrentStep();\n\n const toolCall: ToolCall = {\n id: tool.id,\n name: tool.name,\n arguments: {},\n result: tool.result,\n success: tool.success,\n };\n\n const step = this.createStep('tool-result', {\n output: tool.result,\n toolCall,\n });\n\n this.recordStep(step, context);\n this.startTiming('tool-result');\n }\n\n /**\n * Record decision\n */\n onDecision(decision: Decision, context?: ExecutionContext): void {\n if (!this.options.enabled) return;\n\n this.finishCurrentStep();\n\n const step = this.createStep('decision', {\n decision,\n output: decision.chosen,\n });\n\n this.recordStep(step, context);\n this.startTiming('decision');\n }\n\n /**\n * Record error\n */\n onError(error: Error, context?: ExecutionContext): void {\n if (!this.options.enabled) return;\n\n this.finishCurrentStep();\n\n const step = this.createStep('error', {\n error: {\n name: error.name,\n message: error.message,\n stack: error.stack,\n },\n });\n\n this.recordStep(step, context);\n }\n\n /**\n * Record memory write\n */\n onMemoryWrite(\n data: Record<string, unknown>,\n context?: ExecutionContext,\n ): void {\n if (!this.options.enabled) return;\n\n this.finishCurrentStep();\n\n const step = this.createStep('memory-write', {\n output: data,\n });\n\n this.recordStep(step, context);\n this.startTiming('memory-write');\n }\n\n /**\n * Record memory read\n */\n onMemoryRead(\n query: string | Record<string, unknown>,\n result: unknown,\n context?: ExecutionContext,\n ): void {\n if (!this.options.enabled) return;\n\n this.finishCurrentStep();\n\n const step = this.createStep('memory-read', {\n input: query,\n output: result,\n });\n\n this.recordStep(step, context);\n this.startTiming('memory-read');\n }\n\n /**\n * Create a checkpoint\n */\n createCheckpoint(name: string, description?: string): void {\n if (!this.options.enabled || !this.options.recordEnabled) return;\n\n this.recorder.createCheckpoint(name, description);\n }\n\n /**\n * Get the debugger instance\n */\n getDebugger(): Debugger {\n return this.debugger;\n }\n\n /**\n * Get the recorder instance\n */\n getRecorder(): Recorder {\n return this.recorder;\n }\n\n /**\n * Check if session is active\n */\n isActive(): boolean {\n return this.isSessionActive;\n }\n\n /**\n * Create middleware handler for agent\n */\n createHandler(): {\n beforeExecute: (context: ExecutionContext) => Promise<void>;\n afterExecute: (context: ExecutionContext) => Promise<void>;\n onStep: (\n type: StepType,\n data: Record<string, unknown>,\n context: ExecutionContext,\n ) => void;\n onError: (error: Error, context: ExecutionContext) => void;\n } {\n return {\n beforeExecute: (context) => {\n if (this.options.autoStart) {\n this.startSession(context);\n }\n return Promise.resolve();\n },\n afterExecute: () => {\n if (this.options.autoStart) {\n this.endSession();\n }\n return Promise.resolve();\n },\n onStep: (type, data, context) => {\n switch (type) {\n case 'input':\n this.onInput(data.input, context);\n break;\n case 'prompt':\n this.onPrompt(data.prompt as string, context);\n break;\n case 'response':\n this.onResponse(\n data.response as string,\n data.usage as TokenUsage,\n context,\n );\n break;\n case 'tool-call':\n this.onToolCall(\n data.tool as { name: string; arguments: Record<string, unknown> },\n context,\n );\n break;\n case 'tool-result':\n this.onToolResult(\n data.tool as {\n id: string;\n name: string;\n result: unknown;\n success: boolean;\n },\n context,\n );\n break;\n case 'decision':\n this.onDecision(data.decision as Decision, context);\n break;\n }\n },\n onError: (error, context) => {\n this.onError(error, context);\n },\n };\n }\n\n /**\n * Create a step\n */\n private createStep(\n type: StepType,\n data: Partial<ExecutionStep>,\n ): ExecutionStep {\n const duration = this.currentTiming\n ? now() - this.currentTiming.startTime\n : 0;\n\n return {\n id: generateId('step'),\n index: this.stepIndex++,\n type,\n timestamp: now(),\n durationMs: duration,\n ...data,\n };\n }\n\n /**\n * Record a step\n */\n private recordStep(step: ExecutionStep, context?: ExecutionContext): void {\n const state = context\n ? this.contextToState(context)\n : this.createDefaultState();\n\n this.debugger.recordStep(step, state);\n\n if (this.options.recordEnabled) {\n this.recorder.recordStep(step, state);\n }\n }\n\n /**\n * Start timing for a step\n */\n private startTiming(type: StepType): void {\n this.currentTiming = {\n startTime: now(),\n type,\n };\n }\n\n /**\n * Finish current step timing\n */\n private finishCurrentStep(): void {\n this.currentTiming = undefined;\n }\n\n /**\n * Convert context to agent state\n */\n private contextToState(context: ExecutionContext): AgentState {\n return {\n agentId: context.agentId,\n agentName: context.agentName,\n model: context.model,\n memory: {\n working: context.memory,\n size: 0,\n },\n context: context.context ?? {},\n tools: context.tools,\n messages: context.messages.map((m) => ({\n role: m.role,\n content: m.content,\n toolCalls: m.toolCalls,\n toolCallId: m.toolCallId,\n })),\n };\n }\n\n /**\n * Create default state\n */\n private createDefaultState(): AgentState {\n return {\n agentId: 'unknown',\n agentName: 'Unknown',\n model: 'unknown',\n memory: { size: 0 },\n context: {},\n tools: [],\n messages: [],\n };\n }\n}\n\n/**\n * Create debug middleware\n */\nexport function createDebugMiddleware(\n options?: DebugMiddlewareOptions,\n): DebugMiddleware {\n return new DebugMiddleware(options);\n}\n","/**\n * AgentDebugger\n *\n * High-level debugger wrapper for AgentSea agents.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n Recording,\n Breakpoint,\n Checkpoint,\n ReplaySession,\n FailureAnalysis,\n WhatIfScenario,\n ScenarioResult,\n DecisionTree,\n FlowGraph,\n} from '../../types/index.js';\nimport {\n Debugger,\n type DebuggableAgent,\n type DebuggerEvents,\n} from '../../core/Debugger.js';\nimport { Recorder } from '../../recording/Recorder.js';\nimport { ReplayEngine } from '../../replay/ReplayEngine.js';\nimport { FailureAnalyzer } from '../../analysis/FailureAnalyzer.js';\nimport { WhatIfEngine } from '../../analysis/WhatIfEngine.js';\nimport { DecisionTreeBuilder } from '../../visualization/DecisionTree.js';\nimport { FlowGraphBuilder } from '../../visualization/FlowGraph.js';\nimport { MemoryStorage } from '../../storage/MemoryStorage.js';\nimport type { RecordingStorageAdapter } from '../../types/recording.types.js';\nimport { DebugMiddleware, type ExecutionContext } from './DebugMiddleware.js';\n\n/**\n * Agent debugger events\n */\nexport interface AgentDebuggerEvents extends DebuggerEvents {\n 'recording:saved': (recording: Recording) => void;\n 'replay:started': (session: ReplaySession) => void;\n 'replay:completed': (session: ReplaySession) => void;\n 'analysis:completed': (analysis: FailureAnalysis) => void;\n}\n\n/**\n * Agent debugger options\n */\nexport interface AgentDebuggerOptions {\n /** Storage adapter */\n storage?: RecordingStorageAdapter;\n /** Auto-save recordings */\n autoSave?: boolean;\n /** Enable recording */\n recordingEnabled?: boolean;\n /** Enable breakpoints */\n breakpointsEnabled?: boolean;\n}\n\n/**\n * AgentDebugger\n *\n * Comprehensive debugger for AgentSea agents.\n *\n * @example\n * ```typescript\n * const debugger = new AgentDebugger({\n * storage: new FileStorage({ basePath: './debug' }),\n * autoSave: true,\n * });\n *\n * // Attach to agent\n * debugger.attach(agent);\n *\n * // Set breakpoints\n * debugger.breakOnTool('search');\n * debugger.breakOnError();\n *\n * // Run agent\n * await agent.execute('Search for news');\n *\n * // Get recording\n * const recording = await debugger.getRecording();\n *\n * // Analyze failures\n * if (recording.status === 'failed') {\n * const analysis = debugger.analyzeFailure(recording);\n * console.log(analysis.recommendations);\n * }\n *\n * // Replay with modifications\n * const result = await debugger.replay(recording, {\n * modifications: [{ stepIndex: 5, type: 'modify', data: { output: 'new result' } }]\n * });\n * ```\n */\nexport class AgentDebugger extends EventEmitter<AgentDebuggerEvents> {\n private debugger: Debugger;\n private recorder: Recorder;\n private replayEngine: ReplayEngine;\n private failureAnalyzer: FailureAnalyzer;\n private whatIfEngine: WhatIfEngine;\n private middleware: DebugMiddleware;\n private storage: RecordingStorageAdapter;\n private options: Required<AgentDebuggerOptions>;\n private recordings: Map<string, Recording> = new Map();\n private currentRecording?: Recording;\n\n constructor(options?: AgentDebuggerOptions) {\n super();\n\n this.options = {\n storage: options?.storage ?? new MemoryStorage(),\n autoSave: options?.autoSave ?? true,\n recordingEnabled: options?.recordingEnabled ?? true,\n breakpointsEnabled: options?.breakpointsEnabled ?? true,\n };\n\n this.storage = this.options.storage;\n this.debugger = new Debugger();\n this.recorder = new Recorder();\n this.replayEngine = new ReplayEngine();\n this.failureAnalyzer = new FailureAnalyzer();\n this.whatIfEngine = new WhatIfEngine();\n\n // Create middleware with our instances\n this.middleware = new DebugMiddleware({\n debugger: this.debugger,\n recorder: this.recorder,\n enabled: true,\n recordEnabled: this.options.recordingEnabled,\n });\n\n this.setupEventForwarding();\n }\n\n /**\n * Setup event forwarding from components\n */\n private setupEventForwarding(): void {\n // Forward debugger events\n this.debugger.on('session:started', (id) =>\n this.emit('session:started', id),\n );\n this.debugger.on('session:ended', (id, recording) => {\n this.emit('session:ended', id, recording);\n void this.handleRecordingComplete(recording);\n });\n this.debugger.on('step', (step) => this.emit('step', step));\n this.debugger.on('breakpoint:hit', (bp, step) =>\n this.emit('breakpoint:hit', bp, step),\n );\n this.debugger.on('paused', (reason) => this.emit('paused', reason));\n this.debugger.on('resumed', () => this.emit('resumed'));\n this.debugger.on('error', (error) => this.emit('error', error));\n\n // Forward replay events\n this.replayEngine.on('replay:started', (session) =>\n this.emit('replay:started', session),\n );\n this.replayEngine.on('replay:completed', () => {\n const session = this.replayEngine.getSession();\n if (session) {\n this.emit('replay:completed', session);\n }\n });\n }\n\n /**\n * Handle recording completion\n */\n private async handleRecordingComplete(recording: Recording): Promise<void> {\n this.currentRecording = recording;\n this.recordings.set(recording.id, recording);\n\n if (this.options.autoSave) {\n await this.storage.save(recording);\n this.emit('recording:saved', recording);\n }\n }\n\n /**\n * Attach to an agent\n */\n attach(agent: DebuggableAgent): void {\n this.debugger.attach(agent);\n }\n\n /**\n * Detach from agent\n */\n detach(): void {\n this.debugger.detach();\n }\n\n /**\n * Get the middleware for agent integration\n */\n getMiddleware(): DebugMiddleware {\n return this.middleware;\n }\n\n /**\n * Start a debug session\n */\n startSession(context: ExecutionContext): void {\n this.middleware.startSession(context);\n }\n\n /**\n * End the debug session\n */\n endSession(): Recording | undefined {\n this.middleware.endSession();\n return this.currentRecording;\n }\n\n // ============ Breakpoint Methods ============\n\n /**\n * Set a breakpoint on tool calls\n */\n breakOnTool(toolName?: string): Breakpoint | undefined {\n if (!this.options.breakpointsEnabled) return undefined;\n\n return this.debugger.setBreakpoint({\n type: 'tool-call',\n toolName,\n description: toolName ? `Break on ${toolName}` : 'Break on any tool call',\n });\n }\n\n /**\n * Set a breakpoint on errors\n */\n breakOnError(): Breakpoint | undefined {\n if (!this.options.breakpointsEnabled) return undefined;\n\n return this.debugger.setBreakpoint({\n type: 'error',\n description: 'Break on error',\n });\n }\n\n /**\n * Set a breakpoint on decisions\n */\n breakOnDecision(): Breakpoint | undefined {\n if (!this.options.breakpointsEnabled) return undefined;\n\n return this.debugger.setBreakpoint({\n type: 'decision',\n description: 'Break on decision',\n });\n }\n\n /**\n * Set a breakpoint at a specific step\n */\n breakAtStep(step: number): Breakpoint | undefined {\n if (!this.options.breakpointsEnabled) return undefined;\n\n return this.debugger.setBreakpoint({\n type: 'step',\n step,\n description: `Break at step ${step}`,\n });\n }\n\n /**\n * Set a custom breakpoint\n */\n setBreakpoint(\n options: Parameters<Debugger['setBreakpoint']>[0],\n ): Breakpoint | undefined {\n if (!this.options.breakpointsEnabled) return undefined;\n return this.debugger.setBreakpoint(options);\n }\n\n /**\n * Clear all breakpoints\n */\n clearBreakpoints(): void {\n this.debugger.clearBreakpoints();\n }\n\n // ============ Execution Control ============\n\n /**\n * Continue execution\n */\n continue(): void {\n this.debugger.continue();\n }\n\n /**\n * Step over\n */\n stepOver(): void {\n this.debugger.stepOver();\n }\n\n /**\n * Step into\n */\n stepInto(): void {\n this.debugger.stepInto();\n }\n\n /**\n * Step out\n */\n stepOut(): void {\n this.debugger.stepOut();\n }\n\n /**\n * Pause execution\n */\n pause(): void {\n this.debugger.pause();\n }\n\n /**\n * Stop execution\n */\n stop(): void {\n this.debugger.stop();\n }\n\n // ============ Checkpoints ============\n\n /**\n * Create a checkpoint\n */\n createCheckpoint(name: string, description?: string): Checkpoint | undefined {\n return this.debugger.createCheckpoint({ name, description });\n }\n\n /**\n * List checkpoints\n */\n listCheckpoints(): Checkpoint[] {\n return this.debugger.listCheckpoints();\n }\n\n /**\n * Restore from checkpoint\n */\n restoreCheckpoint(id: string): boolean {\n return this.debugger.restoreCheckpoint(id);\n }\n\n // ============ Recording & Replay ============\n\n /**\n * Get current recording\n */\n getRecording(): Recording | undefined {\n return this.currentRecording;\n }\n\n /**\n * Load a recording\n */\n async loadRecording(id: string): Promise<Recording | undefined> {\n const result = await this.storage.load(id);\n return result ?? undefined;\n }\n\n /**\n * List recordings\n */\n async listRecordings(): Promise<\n Array<{\n id: string;\n agentId: string;\n agentName: string;\n status: string;\n startedAt: number;\n }>\n > {\n const result = await this.storage.list();\n // Handle different return types from storage adapters\n if (Array.isArray(result)) {\n return result as Array<{\n id: string;\n agentId: string;\n agentName: string;\n status: string;\n startedAt: number;\n }>;\n }\n // RecordingListResult type\n return (result as { recordings: unknown[] }).recordings as Array<{\n id: string;\n agentId: string;\n agentName: string;\n status: string;\n startedAt: number;\n }>;\n }\n\n /**\n * Replay a recording\n */\n replay(\n recording: Recording,\n options?: Parameters<ReplayEngine['start']>[1],\n ): ReplaySession {\n return this.replayEngine.start(recording, options);\n }\n\n /**\n * Get replay engine\n */\n getReplayEngine(): ReplayEngine {\n return this.replayEngine;\n }\n\n // ============ Analysis ============\n\n /**\n * Analyze a failed recording\n */\n analyzeFailure(recording: Recording): FailureAnalysis {\n const analysis = this.failureAnalyzer.analyze(recording);\n this.emit('analysis:completed', analysis);\n return analysis;\n }\n\n /**\n * Get failure analyzer\n */\n getFailureAnalyzer(): FailureAnalyzer {\n return this.failureAnalyzer;\n }\n\n // ============ What-If Scenarios ============\n\n /**\n * Create a what-if scenario\n */\n createWhatIfScenario(\n recording: Recording,\n modifications: WhatIfScenario['modifications'],\n name?: string,\n ): WhatIfScenario {\n return this.whatIfEngine.createScenario({\n name: name ?? 'What-if scenario',\n recordingId: recording.id,\n modifications,\n });\n }\n\n /**\n * Run a what-if scenario\n */\n async runWhatIfScenario(\n scenarioId: string,\n recording: Recording,\n ): Promise<ScenarioResult> {\n return this.whatIfEngine.runScenario(scenarioId, recording);\n }\n\n /**\n * Get what-if engine\n */\n getWhatIfEngine(): WhatIfEngine {\n return this.whatIfEngine;\n }\n\n // ============ Visualization ============\n\n /**\n * Build decision tree from recording\n */\n buildDecisionTree(recording: Recording): DecisionTree {\n const builder = new DecisionTreeBuilder();\n return builder.build(recording);\n }\n\n /**\n * Build flow graph from recording\n */\n buildFlowGraph(recording: Recording): FlowGraph {\n const builder = new FlowGraphBuilder();\n return builder.build(recording);\n }\n\n // ============ Inspection ============\n\n /**\n * Inspect current state\n */\n inspect() {\n return this.debugger.inspect();\n }\n\n /**\n * Get underlying debugger\n */\n getDebugger(): Debugger {\n return this.debugger;\n }\n\n /**\n * Get storage\n */\n getStorage(): RecordingStorageAdapter {\n return this.storage;\n }\n}\n\n/**\n * Create an agent debugger\n */\nexport function createAgentDebugger(\n options?: AgentDebuggerOptions,\n): AgentDebugger {\n return new AgentDebugger(options);\n}\n"]}