@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"],"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"]}
@@ -0,0 +1,76 @@
1
+ import { A as AgentState, C as Checkpoint } from './recording.types-Ck7pbikw.js';
2
+
3
+ type ReplayState = 'idle' | 'playing' | 'paused' | 'stopped' | 'completed';
4
+ type ReplaySpeed = 'slow' | 'normal' | 'fast' | 'instant';
5
+ interface ReplaySession {
6
+ id: string;
7
+ recordingId: string;
8
+ state: ReplayState;
9
+ currentStep: number;
10
+ totalSteps: number;
11
+ speed: ReplaySpeed;
12
+ startedAt: number;
13
+ completedAt?: number;
14
+ modifications: ReplayModification[];
15
+ differences: ReplayDifference[];
16
+ }
17
+ interface ReplayConfig {
18
+ speedMultiplier: number;
19
+ pauseOnDecisions: boolean;
20
+ pauseOnErrors: boolean;
21
+ pauseOnToolCalls: boolean;
22
+ executeTools: boolean;
23
+ executeLLM: boolean;
24
+ compareResults: boolean;
25
+ trackDifferences: boolean;
26
+ }
27
+ interface ReplayModification {
28
+ stepIndex: number;
29
+ type: ReplayModificationType;
30
+ data?: Record<string, unknown>;
31
+ }
32
+ type ReplayModificationType = 'skip' | 'modify' | 'insert' | 'replace';
33
+ interface ReplayResult {
34
+ sessionId: string;
35
+ recordingId: string;
36
+ success: boolean;
37
+ stepsReplayed: number;
38
+ differences: ReplayDifference[];
39
+ finalState: AgentState;
40
+ startedAt: number;
41
+ completedAt: number;
42
+ durationMs: number;
43
+ }
44
+ interface ReplayDifference {
45
+ stepIndex: number;
46
+ path: string;
47
+ original: unknown;
48
+ replayed: unknown;
49
+ type: 'added' | 'removed' | 'changed';
50
+ }
51
+ interface ReplayComparison {
52
+ original: unknown;
53
+ modified: unknown;
54
+ identical: boolean;
55
+ differences: ReplayDifference[];
56
+ costDelta?: number;
57
+ tokenDelta?: number;
58
+ qualityDelta?: number;
59
+ durationDelta: number;
60
+ }
61
+ interface StateRestoreOptions {
62
+ checkpoint?: Checkpoint;
63
+ stepIndex?: number;
64
+ includeMemory?: boolean;
65
+ includeContext?: boolean;
66
+ validate?: boolean;
67
+ }
68
+ interface StateRestoreResult {
69
+ success: boolean;
70
+ state: AgentState;
71
+ stepIndex: number;
72
+ checkpoint?: string;
73
+ validationErrors?: string[];
74
+ }
75
+
76
+ export type { ReplayState as R, StateRestoreOptions as S, ReplaySpeed as a, ReplaySession as b, ReplayConfig as c, ReplayModification as d, ReplayModificationType as e, ReplayResult as f, ReplayDifference as g, ReplayComparison as h, StateRestoreResult as i };
@@ -0,0 +1,135 @@
1
+ import { t as RecordingStorageAdapter, m as Recording, C as Checkpoint } from '../recording.types-Ck7pbikw.js';
2
+
3
+ interface FileSystem {
4
+ readFile(path: string): Promise<string>;
5
+ writeFile(path: string, content: string): Promise<void>;
6
+ exists(path: string): Promise<boolean>;
7
+ mkdir(path: string, options?: {
8
+ recursive?: boolean;
9
+ }): Promise<void>;
10
+ readdir(path: string): Promise<string[]>;
11
+ unlink(path: string): Promise<void>;
12
+ stat(path: string): Promise<{
13
+ isFile(): boolean;
14
+ isDirectory(): boolean;
15
+ mtime: Date;
16
+ }>;
17
+ }
18
+ interface FileStorageOptions {
19
+ basePath: string;
20
+ extension?: string;
21
+ compress?: boolean;
22
+ prettyPrint?: boolean;
23
+ fs: FileSystem;
24
+ }
25
+ interface RecordingMeta {
26
+ id: string;
27
+ agentId: string;
28
+ agentName: string;
29
+ status: string;
30
+ startedAt: number;
31
+ endedAt?: number;
32
+ durationMs: number;
33
+ stepsCount: number;
34
+ filePath: string;
35
+ fileSize?: number;
36
+ }
37
+ declare class FileStorage implements RecordingStorageAdapter {
38
+ private options;
39
+ private initialized;
40
+ constructor(options: FileStorageOptions);
41
+ initialize(): Promise<void>;
42
+ save(recording: Recording): Promise<void>;
43
+ load(id: string): Promise<Recording | undefined>;
44
+ delete(id: string): Promise<boolean>;
45
+ list(): Promise<RecordingMeta[]>;
46
+ query(options: {
47
+ agentId?: string;
48
+ status?: string;
49
+ startAfter?: number;
50
+ startBefore?: number;
51
+ limit?: number;
52
+ }): Promise<RecordingMeta[]>;
53
+ saveCheckpoint(checkpoint: Checkpoint): Promise<void>;
54
+ loadCheckpoint(id: string): Promise<Checkpoint | undefined>;
55
+ listCheckpoints(recordingId: string): Promise<Checkpoint[]>;
56
+ private saveMetadata;
57
+ private getRecordingPath;
58
+ private getMetadataPath;
59
+ private getCheckpointPath;
60
+ private joinPath;
61
+ getStats(): Promise<{
62
+ totalRecordings: number;
63
+ totalCheckpoints: number;
64
+ totalSizeBytes: number;
65
+ }>;
66
+ }
67
+ declare function createFileStorage(options: FileStorageOptions): FileStorage;
68
+
69
+ interface MemoryStorageOptions {
70
+ maxRecordings?: number;
71
+ maxSizeBytes?: number;
72
+ deepCopy?: boolean;
73
+ }
74
+ declare class MemoryStorage implements RecordingStorageAdapter {
75
+ private recordings;
76
+ private checkpoints;
77
+ private options;
78
+ private totalSize;
79
+ constructor(options?: MemoryStorageOptions);
80
+ save(recording: Recording): Promise<void>;
81
+ load(id: string): Promise<Recording | undefined>;
82
+ delete(id: string): Promise<boolean>;
83
+ list(): Promise<Array<{
84
+ id: string;
85
+ agentId: string;
86
+ agentName: string;
87
+ status: string;
88
+ startedAt: number;
89
+ endedAt?: number;
90
+ durationMs: number;
91
+ stepsCount: number;
92
+ }>>;
93
+ query(options: {
94
+ agentId?: string;
95
+ status?: string;
96
+ startAfter?: number;
97
+ startBefore?: number;
98
+ limit?: number;
99
+ }): Promise<Array<{
100
+ id: string;
101
+ agentId: string;
102
+ agentName: string;
103
+ status: string;
104
+ startedAt: number;
105
+ endedAt?: number;
106
+ durationMs: number;
107
+ stepsCount: number;
108
+ }>>;
109
+ saveCheckpoint(checkpoint: Checkpoint): void;
110
+ loadCheckpoint(id: string): Checkpoint | undefined;
111
+ deleteCheckpoint(id: string): boolean;
112
+ listCheckpoints(recordingId: string): Checkpoint[];
113
+ private ensureCapacity;
114
+ private evictOldest;
115
+ clear(): void;
116
+ getStats(): {
117
+ totalRecordings: number;
118
+ totalCheckpoints: number;
119
+ totalSizeBytes: number;
120
+ maxRecordings: number;
121
+ maxSizeBytes: number;
122
+ utilizationPercent: number;
123
+ };
124
+ exportAll(): {
125
+ recordings: Recording[];
126
+ checkpoints: Checkpoint[];
127
+ };
128
+ importAll(data: {
129
+ recordings: Recording[];
130
+ checkpoints?: Checkpoint[];
131
+ }): void;
132
+ }
133
+ declare function createMemoryStorage(options?: MemoryStorageOptions): MemoryStorage;
134
+
135
+ export { FileStorage, type FileStorageOptions, type FileSystem, MemoryStorage, type MemoryStorageOptions, type RecordingMeta, createFileStorage, createMemoryStorage };