@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/utils/diff.ts","../../src/replay/StateRestorer.ts","../../src/replay/ReplayController.ts","../../src/replay/ReplayEngine.ts","../../src/analysis/WhatIfEngine.ts","../../src/analysis/FailureAnalyzer.ts"],"names":["state","EventEmitter","result"],"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 * 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 * 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 * 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"]}
@@ -0,0 +1,24 @@
1
+ import { g as ReplayDifference } from './replay.types-C9hJizI-.js';
2
+
3
+ interface Difference {
4
+ path: string[];
5
+ kind: 'N' | 'D' | 'E' | 'A';
6
+ lhs?: unknown;
7
+ rhs?: unknown;
8
+ index?: number;
9
+ item?: Difference;
10
+ }
11
+ declare function diff(lhs: unknown, rhs: unknown, path?: string[]): Difference[];
12
+ declare function toReplayDifferences(diffs: Difference[], stepIndex: number): ReplayDifference[];
13
+ declare function applyPatch<T>(target: T, patch: Difference): T;
14
+ declare function summarizeDiff(diffs: Difference[]): {
15
+ added: number;
16
+ removed: number;
17
+ changed: number;
18
+ paths: string[];
19
+ };
20
+ declare function isEqual(a: unknown, b: unknown): boolean;
21
+ declare function getAtPath(obj: unknown, path: string[]): unknown;
22
+ declare function setAtPath<T>(obj: T, path: string[], value: unknown): T;
23
+
24
+ export { type Difference as D, applyPatch as a, setAtPath as b, diff as d, getAtPath as g, isEqual as i, summarizeDiff as s, toReplayDifferences as t };