@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.
- package/LICENSE +21 -0
- package/README.md +364 -0
- package/dist/Recorder-Dc9qR2V2.d.ts +138 -0
- package/dist/ReplayEngine-Dyyqy5bw.d.ts +54 -0
- package/dist/analysis/index.d.ts +4 -0
- package/dist/analysis/index.js +1840 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/diff-CLShBdWe.d.ts +24 -0
- package/dist/index-1W27DYJt.d.ts +366 -0
- package/dist/index-DRrKPSo9.d.ts +233 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +6232 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/agentsea/index.d.ts +8 -0
- package/dist/integrations/agentsea/index.js +5826 -0
- package/dist/integrations/agentsea/index.js.map +1 -0
- package/dist/recording/index.d.ts +91 -0
- package/dist/recording/index.js +1207 -0
- package/dist/recording/index.js.map +1 -0
- package/dist/recording.types-Ck7pbikw.d.ts +281 -0
- package/dist/replay/index.d.ts +80 -0
- package/dist/replay/index.js +1112 -0
- package/dist/replay/index.js.map +1 -0
- package/dist/replay.types-C9hJizI-.d.ts +76 -0
- package/dist/storage/index.d.ts +135 -0
- package/dist/storage/index.js +588 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/visualization/index.d.ts +123 -0
- package/dist/visualization/index.js +789 -0
- package/dist/visualization/index.js.map +1 -0
- package/dist/visualization.types-dWjGE037.d.ts +98 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/helpers.ts","../../src/utils/diff.ts","../../src/recording/Snapshot.ts","../../src/recording/Checkpoint.ts","../../src/recording/Timeline.ts","../../src/recording/Recorder.ts"],"names":[],"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 * Snapshot\n *\n * State snapshot management for recordings.\n */\n\nimport type { Snapshot, AgentState } from '../types/index.js';\nimport { generateId, now, deepClone, estimateSize } from '../utils/helpers.js';\nimport { diff, type Difference } from '../utils/diff.js';\n\n/**\n * Snapshot options\n */\nexport interface SnapshotOptions {\n /** Maximum snapshots to keep */\n maxSnapshots?: number;\n /** Whether to store incremental diffs */\n useDiffs?: boolean;\n /** Compression level (0-9) */\n compressionLevel?: number;\n}\n\n/**\n * Snapshot with diff data\n */\nexport interface IncrementalSnapshot extends Snapshot {\n /** Diff from previous snapshot */\n diff?: Difference[];\n /** Whether this is a full snapshot */\n isFull: boolean;\n /** Previous snapshot ID */\n previousId?: string;\n}\n\n/**\n * Default options\n */\nconst DEFAULT_OPTIONS: Required<SnapshotOptions> = {\n maxSnapshots: 100,\n useDiffs: true,\n compressionLevel: 0,\n};\n\n/**\n * SnapshotManager\n *\n * Manages state snapshots for recordings.\n *\n * @example\n * ```typescript\n * const manager = new SnapshotManager({ useDiffs: true });\n *\n * // Create snapshots\n * const snap1 = manager.create(state1, 0);\n * const snap2 = manager.create(state2, 5);\n *\n * // Get snapshot at step\n * const snapshot = manager.getAtStep(3);\n *\n * // Restore state from snapshot\n * const restoredState = manager.restore(snap1.id);\n * ```\n */\nexport class SnapshotManager {\n private snapshots: Map<string, IncrementalSnapshot> = new Map();\n private snapshotOrder: string[] = [];\n private options: Required<SnapshotOptions>;\n private fullSnapshotInterval = 10;\n\n constructor(options?: SnapshotOptions) {\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n }\n\n /**\n * Create a snapshot\n */\n create(state: AgentState, stepIndex: number): Snapshot {\n const id = generateId('snap');\n const timestamp = now();\n\n // Determine if this should be a full snapshot\n const shouldBeFull =\n !this.options.useDiffs ||\n this.snapshotOrder.length === 0 ||\n this.snapshotOrder.length % this.fullSnapshotInterval === 0;\n\n let snapshot: IncrementalSnapshot;\n\n if (shouldBeFull) {\n snapshot = {\n id,\n timestamp,\n stepIndex,\n state: deepClone(state),\n size: estimateSize(state),\n isFull: true,\n };\n } else {\n // Get previous snapshot\n const previousId = this.snapshotOrder[this.snapshotOrder.length - 1];\n const previous = this.snapshots.get(previousId);\n\n if (previous) {\n const stateDiff = diff(previous.state, state);\n snapshot = {\n id,\n timestamp,\n stepIndex,\n state: deepClone(state),\n size: estimateSize(state),\n isFull: false,\n diff: stateDiff,\n previousId,\n };\n } else {\n // Fallback to full snapshot\n snapshot = {\n id,\n timestamp,\n stepIndex,\n state: deepClone(state),\n size: estimateSize(state),\n isFull: true,\n };\n }\n }\n\n this.snapshots.set(id, snapshot);\n this.snapshotOrder.push(id);\n\n // Enforce max snapshots\n this.enforceLimit();\n\n return snapshot;\n }\n\n /**\n * Get a snapshot by ID\n */\n get(id: string): Snapshot | undefined {\n return this.snapshots.get(id);\n }\n\n /**\n * Get all snapshots\n */\n getAll(): Snapshot[] {\n return this.snapshotOrder.map((id) => this.snapshots.get(id)!);\n }\n\n /**\n * Get snapshot at or before a step\n */\n getAtStep(stepIndex: number): Snapshot | undefined {\n let closestSnapshot: IncrementalSnapshot | undefined;\n\n for (const id of this.snapshotOrder) {\n const snapshot = this.snapshots.get(id);\n if (snapshot && snapshot.stepIndex <= stepIndex) {\n closestSnapshot = snapshot;\n } else {\n break;\n }\n }\n\n return closestSnapshot;\n }\n\n /**\n * Get snapshot after a step\n */\n getAfterStep(stepIndex: number): Snapshot | undefined {\n for (const id of this.snapshotOrder) {\n const snapshot = this.snapshots.get(id);\n if (snapshot && snapshot.stepIndex > stepIndex) {\n return snapshot;\n }\n }\n return undefined;\n }\n\n /**\n * Get snapshots in a range\n */\n getInRange(startStep: number, endStep: number): Snapshot[] {\n return this.getAll().filter(\n (snap) => snap.stepIndex >= startStep && snap.stepIndex <= endStep,\n );\n }\n\n /**\n * Restore state from a snapshot\n */\n restore(id: string): AgentState | undefined {\n const snapshot = this.snapshots.get(id);\n if (!snapshot) {\n return undefined;\n }\n\n return deepClone(snapshot.state);\n }\n\n /**\n * Get the latest snapshot\n */\n getLatest(): Snapshot | undefined {\n if (this.snapshotOrder.length === 0) {\n return undefined;\n }\n\n const latestId = this.snapshotOrder[this.snapshotOrder.length - 1];\n return this.snapshots.get(latestId);\n }\n\n /**\n * Get the first snapshot\n */\n getFirst(): Snapshot | undefined {\n if (this.snapshotOrder.length === 0) {\n return undefined;\n }\n\n const firstId = this.snapshotOrder[0];\n return this.snapshots.get(firstId);\n }\n\n /**\n * Delete a snapshot\n */\n delete(id: string): boolean {\n const existed = this.snapshots.delete(id);\n if (existed) {\n this.snapshotOrder = this.snapshotOrder.filter((i) => i !== id);\n }\n return existed;\n }\n\n /**\n * Clear all snapshots\n */\n clear(): void {\n this.snapshots.clear();\n this.snapshotOrder = [];\n }\n\n /**\n * Get snapshot count\n */\n get count(): number {\n return this.snapshots.size;\n }\n\n /**\n * Get total size of all snapshots\n */\n getTotalSize(): number {\n let total = 0;\n for (const snapshot of this.snapshots.values()) {\n total += snapshot.size ?? 0;\n }\n return total;\n }\n\n /**\n * Compact snapshots by merging diffs\n */\n compact(): void {\n // Keep only full snapshots and rebuild diffs\n const fullSnapshots = this.getAll().filter(\n (snap) => (snap as IncrementalSnapshot).isFull,\n );\n\n this.clear();\n\n for (const snapshot of fullSnapshots) {\n this.snapshots.set(snapshot.id, snapshot as IncrementalSnapshot);\n this.snapshotOrder.push(snapshot.id);\n }\n }\n\n /**\n * Compare two snapshots\n */\n compare(id1: string, id2: string): Difference[] | undefined {\n const snap1 = this.snapshots.get(id1);\n const snap2 = this.snapshots.get(id2);\n\n if (!snap1 || !snap2) {\n return undefined;\n }\n\n return diff(snap1.state, snap2.state);\n }\n\n /**\n * Export snapshots\n */\n export(): Snapshot[] {\n return this.getAll().map((snap) => ({\n id: snap.id,\n timestamp: snap.timestamp,\n stepIndex: snap.stepIndex,\n state: snap.state,\n size: snap.size,\n }));\n }\n\n /**\n * Import snapshots\n */\n import(snapshots: Snapshot[]): void {\n this.clear();\n\n for (const snapshot of snapshots) {\n const incremental: IncrementalSnapshot = {\n ...snapshot,\n isFull: true,\n };\n this.snapshots.set(snapshot.id, incremental);\n this.snapshotOrder.push(snapshot.id);\n }\n }\n\n /**\n * Enforce max snapshots limit\n */\n private enforceLimit(): void {\n while (this.snapshotOrder.length > this.options.maxSnapshots) {\n const oldestId = this.snapshotOrder.shift();\n if (oldestId) {\n this.snapshots.delete(oldestId);\n }\n }\n }\n}\n\n/**\n * Create a snapshot manager\n */\nexport function createSnapshotManager(\n options?: SnapshotOptions,\n): SnapshotManager {\n return new SnapshotManager(options);\n}\n","/**\n * Checkpoint\n *\n * Checkpoint management for recordings.\n */\n\nimport type { Checkpoint, AgentState } from '../types/index.js';\nimport { generateId, now, deepClone } from '../utils/helpers.js';\n\n/**\n * Checkpoint creation options\n */\nexport interface CheckpointCreateOptions {\n /** Recording ID */\n recordingId: string;\n /** Checkpoint name */\n name: string;\n /** Optional description */\n description?: string;\n /** Step index */\n stepIndex: number;\n /** Agent state at checkpoint */\n state: AgentState;\n /** Whether this was automatically created */\n automatic?: boolean;\n /** Tags for categorization */\n tags?: string[];\n}\n\n/**\n * Checkpoint filter options\n */\nexport interface CheckpointFilterOptions {\n /** Filter by name pattern */\n namePattern?: string | RegExp;\n /** Filter by step range */\n stepRange?: { min?: number; max?: number };\n /** Filter by time range */\n timeRange?: { after?: number; before?: number };\n /** Filter by automatic flag */\n automatic?: boolean;\n /** Filter by tags */\n tags?: string[];\n}\n\n/**\n * CheckpointManager\n *\n * Manages checkpoints for recordings.\n *\n * @example\n * ```typescript\n * const manager = new CheckpointManager();\n *\n * // Create a checkpoint\n * const cp = manager.create({\n * recordingId: 'rec_123',\n * name: 'Before API call',\n * stepIndex: 10,\n * state: currentState,\n * });\n *\n * // Get checkpoints\n * const checkpoints = manager.getAll();\n *\n * // Restore from checkpoint\n * const state = manager.getState(cp.id);\n * ```\n */\nexport class CheckpointManager {\n private checkpoints: Map<string, Checkpoint> = new Map();\n private checkpointOrder: string[] = [];\n\n /**\n * Create a checkpoint\n */\n create(options: CheckpointCreateOptions): Checkpoint {\n const checkpoint: Checkpoint = {\n id: generateId('cp'),\n recordingId: options.recordingId,\n name: options.name,\n description: options.description,\n stepIndex: options.stepIndex,\n timestamp: now(),\n state: deepClone(options.state),\n automatic: options.automatic ?? false,\n };\n\n this.checkpoints.set(checkpoint.id, checkpoint);\n this.checkpointOrder.push(checkpoint.id);\n\n return checkpoint;\n }\n\n /**\n * Get a checkpoint by ID\n */\n get(id: string): Checkpoint | undefined {\n return this.checkpoints.get(id);\n }\n\n /**\n * Get checkpoint by name\n */\n getByName(name: string): Checkpoint | undefined {\n for (const checkpoint of this.checkpoints.values()) {\n if (checkpoint.name === name) {\n return checkpoint;\n }\n }\n return undefined;\n }\n\n /**\n * Get all checkpoints\n */\n getAll(): Checkpoint[] {\n return this.checkpointOrder.map((id) => this.checkpoints.get(id)!);\n }\n\n /**\n * Get checkpoints matching filter\n */\n filter(options: CheckpointFilterOptions): Checkpoint[] {\n return this.getAll().filter((cp) => {\n // Name pattern filter\n if (options.namePattern) {\n if (typeof options.namePattern === 'string') {\n if (!cp.name.includes(options.namePattern)) {\n return false;\n }\n } else if (!options.namePattern.test(cp.name)) {\n return false;\n }\n }\n\n // Step range filter\n if (options.stepRange) {\n if (\n options.stepRange.min !== undefined &&\n cp.stepIndex < options.stepRange.min\n ) {\n return false;\n }\n if (\n options.stepRange.max !== undefined &&\n cp.stepIndex > options.stepRange.max\n ) {\n return false;\n }\n }\n\n // Time range filter\n if (options.timeRange) {\n if (\n options.timeRange.after !== undefined &&\n cp.timestamp < options.timeRange.after\n ) {\n return false;\n }\n if (\n options.timeRange.before !== undefined &&\n cp.timestamp > options.timeRange.before\n ) {\n return false;\n }\n }\n\n // Automatic filter\n if (\n options.automatic !== undefined &&\n cp.automatic !== options.automatic\n ) {\n return false;\n }\n\n return true;\n });\n }\n\n /**\n * Get checkpoint at or before a step\n */\n getAtStep(stepIndex: number): Checkpoint | undefined {\n let closestCheckpoint: Checkpoint | undefined;\n\n for (const id of this.checkpointOrder) {\n const checkpoint = this.checkpoints.get(id);\n if (checkpoint && checkpoint.stepIndex <= stepIndex) {\n closestCheckpoint = checkpoint;\n } else {\n break;\n }\n }\n\n return closestCheckpoint;\n }\n\n /**\n * Get checkpoint after a step\n */\n getAfterStep(stepIndex: number): Checkpoint | undefined {\n for (const id of this.checkpointOrder) {\n const checkpoint = this.checkpoints.get(id);\n if (checkpoint && checkpoint.stepIndex > stepIndex) {\n return checkpoint;\n }\n }\n return undefined;\n }\n\n /**\n * Get checkpoints in step range\n */\n getInRange(startStep: number, endStep: number): Checkpoint[] {\n return this.getAll().filter(\n (cp) => cp.stepIndex >= startStep && cp.stepIndex <= endStep,\n );\n }\n\n /**\n * Get state from checkpoint\n */\n getState(id: string): AgentState | undefined {\n const checkpoint = this.checkpoints.get(id);\n if (!checkpoint) {\n return undefined;\n }\n\n return deepClone(checkpoint.state);\n }\n\n /**\n * Update checkpoint\n */\n update(\n id: string,\n updates: Partial<Pick<Checkpoint, 'name' | 'description'>>,\n ): boolean {\n const checkpoint = this.checkpoints.get(id);\n if (!checkpoint) {\n return false;\n }\n\n if (updates.name !== undefined) {\n checkpoint.name = updates.name;\n }\n if (updates.description !== undefined) {\n checkpoint.description = updates.description;\n }\n\n return true;\n }\n\n /**\n * Delete a checkpoint\n */\n delete(id: string): boolean {\n const existed = this.checkpoints.delete(id);\n if (existed) {\n this.checkpointOrder = this.checkpointOrder.filter((i) => i !== id);\n }\n return existed;\n }\n\n /**\n * Clear all checkpoints\n */\n clear(): void {\n this.checkpoints.clear();\n this.checkpointOrder = [];\n }\n\n /**\n * Get checkpoint count\n */\n get count(): number {\n return this.checkpoints.size;\n }\n\n /**\n * Get the latest checkpoint\n */\n getLatest(): Checkpoint | undefined {\n if (this.checkpointOrder.length === 0) {\n return undefined;\n }\n\n const latestId = this.checkpointOrder[this.checkpointOrder.length - 1];\n return this.checkpoints.get(latestId);\n }\n\n /**\n * Get the first checkpoint\n */\n getFirst(): Checkpoint | undefined {\n if (this.checkpointOrder.length === 0) {\n return undefined;\n }\n\n const firstId = this.checkpointOrder[0];\n return this.checkpoints.get(firstId);\n }\n\n /**\n * Get manual checkpoints only\n */\n getManual(): Checkpoint[] {\n return this.filter({ automatic: false });\n }\n\n /**\n * Get automatic checkpoints only\n */\n getAutomatic(): Checkpoint[] {\n return this.filter({ automatic: true });\n }\n\n /**\n * Export checkpoints\n */\n export(): Checkpoint[] {\n return this.getAll().map((cp) => ({\n id: cp.id,\n recordingId: cp.recordingId,\n name: cp.name,\n description: cp.description,\n stepIndex: cp.stepIndex,\n timestamp: cp.timestamp,\n state: cp.state,\n automatic: cp.automatic,\n }));\n }\n\n /**\n * Import checkpoints\n */\n import(checkpoints: Checkpoint[]): void {\n this.clear();\n\n for (const checkpoint of checkpoints) {\n this.checkpoints.set(checkpoint.id, deepClone(checkpoint));\n this.checkpointOrder.push(checkpoint.id);\n }\n }\n}\n\n/**\n * Create a checkpoint manager\n */\nexport function createCheckpointManager(): CheckpointManager {\n return new CheckpointManager();\n}\n","/**\n * Timeline\n *\n * Timeline management for recordings.\n */\n\nimport type { TimelineEvent, TimelineEventType } from '../types/index.js';\nimport { generateId, now, formatDuration } from '../utils/helpers.js';\n\n/**\n * Timeline event creation options\n */\nexport interface TimelineEventOptions {\n /** Event ID (optional, will be generated) */\n id?: string;\n /** Event type */\n type: string;\n /** Timestamp (optional, defaults to now) */\n timestamp?: number;\n /** Step index */\n stepIndex: number;\n /** Event description */\n description: string;\n /** Duration in ms */\n durationMs?: number;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Timeline marker\n */\nexport interface TimelineMarker {\n /** Marker ID */\n id: string;\n /** Marker name */\n name: string;\n /** Timestamp */\n timestamp: number;\n /** Step index */\n stepIndex: number;\n /** Marker color */\n color?: string;\n /** Description */\n description?: string;\n}\n\n/**\n * Timeline segment\n */\nexport interface TimelineSegment {\n /** Segment ID */\n id: string;\n /** Start step */\n startStep: number;\n /** End step */\n endStep: number;\n /** Start timestamp */\n startTime: number;\n /** End timestamp */\n endTime: number;\n /** Segment name */\n name: string;\n /** Segment type */\n type: string;\n}\n\n/**\n * Timeline filter options\n */\nexport interface TimelineFilterOptions {\n /** Filter by event types */\n types?: string[];\n /** Filter by step range */\n stepRange?: { min?: number; max?: number };\n /** Filter by time range */\n timeRange?: { after?: number; before?: number };\n /** Search in description */\n search?: string;\n}\n\n/**\n * Timeline statistics\n */\nexport interface TimelineStats {\n /** Total events */\n totalEvents: number;\n /** Events by type */\n eventsByType: Record<string, number>;\n /** Total duration */\n totalDurationMs: number;\n /** Average event duration */\n avgEventDurationMs: number;\n /** First event timestamp */\n firstEventTime?: number;\n /** Last event timestamp */\n lastEventTime?: number;\n}\n\n/**\n * Timeline\n *\n * Manages timeline of events for recordings.\n *\n * @example\n * ```typescript\n * const timeline = new Timeline();\n *\n * // Add events\n * timeline.addEvent({\n * type: 'tool-call',\n * stepIndex: 5,\n * description: 'Called search tool',\n * durationMs: 150,\n * });\n *\n * // Add markers\n * timeline.addMarker({\n * name: 'Important decision',\n * stepIndex: 10,\n * });\n *\n * // Query timeline\n * const events = timeline.getEventsInRange(0, 20);\n * const stats = timeline.getStats();\n * ```\n */\nexport class Timeline {\n private events: Map<string, TimelineEvent> = new Map();\n private eventOrder: string[] = [];\n private markers: Map<string, TimelineMarker> = new Map();\n private segments: Map<string, TimelineSegment> = new Map();\n\n /**\n * Add an event to the timeline\n */\n addEvent(options: TimelineEventOptions): TimelineEvent {\n const event: TimelineEvent = {\n id: options.id ?? generateId('evt'),\n type: options.type as TimelineEventType,\n timestamp: options.timestamp ?? now(),\n stepIndex: options.stepIndex,\n summary: options.description ?? '',\n description: options.description,\n durationMs: options.durationMs,\n metadata: options.metadata,\n };\n\n this.events.set(event.id, event);\n this.eventOrder.push(event.id);\n\n return event;\n }\n\n /**\n * Get an event by ID\n */\n getEvent(id: string): TimelineEvent | undefined {\n return this.events.get(id);\n }\n\n /**\n * Get all events\n */\n getEvents(): TimelineEvent[] {\n return this.eventOrder.map((id) => this.events.get(id)!);\n }\n\n /**\n * Get events matching filter\n */\n filterEvents(options: TimelineFilterOptions): TimelineEvent[] {\n return this.getEvents().filter((event) => {\n // Type filter\n if (options.types && !options.types.includes(event.type)) {\n return false;\n }\n\n // Step range filter\n if (options.stepRange) {\n if (\n options.stepRange.min !== undefined &&\n event.stepIndex < options.stepRange.min\n ) {\n return false;\n }\n if (\n options.stepRange.max !== undefined &&\n event.stepIndex > options.stepRange.max\n ) {\n return false;\n }\n }\n\n // Time range filter\n if (options.timeRange) {\n if (\n options.timeRange.after !== undefined &&\n event.timestamp < options.timeRange.after\n ) {\n return false;\n }\n if (\n options.timeRange.before !== undefined &&\n event.timestamp > options.timeRange.before\n ) {\n return false;\n }\n }\n\n // Search filter\n if (options.search) {\n const searchLower = options.search.toLowerCase();\n const description = event.description ?? event.summary ?? '';\n if (!description.toLowerCase().includes(searchLower)) {\n return false;\n }\n }\n\n return true;\n });\n }\n\n /**\n * Get events in step range\n */\n getEventsInRange(startStep: number, endStep: number): TimelineEvent[] {\n return this.filterEvents({\n stepRange: { min: startStep, max: endStep },\n });\n }\n\n /**\n * Get events by type\n */\n getEventsByType(type: string): TimelineEvent[] {\n return this.filterEvents({ types: [type] });\n }\n\n /**\n * Get event at step\n */\n getEventAtStep(stepIndex: number): TimelineEvent | undefined {\n return this.getEvents().find((e) => e.stepIndex === stepIndex);\n }\n\n /**\n * Add a marker\n */\n addMarker(\n options: Omit<TimelineMarker, 'id' | 'timestamp'> & { timestamp?: number },\n ): TimelineMarker {\n const marker: TimelineMarker = {\n id: generateId('mark'),\n name: options.name,\n timestamp: options.timestamp ?? now(),\n stepIndex: options.stepIndex,\n color: options.color,\n description: options.description,\n };\n\n this.markers.set(marker.id, marker);\n return marker;\n }\n\n /**\n * Get all markers\n */\n getMarkers(): TimelineMarker[] {\n return Array.from(this.markers.values());\n }\n\n /**\n * Get marker at step\n */\n getMarkerAtStep(stepIndex: number): TimelineMarker | undefined {\n for (const marker of this.markers.values()) {\n if (marker.stepIndex === stepIndex) {\n return marker;\n }\n }\n return undefined;\n }\n\n /**\n * Remove a marker\n */\n removeMarker(id: string): boolean {\n return this.markers.delete(id);\n }\n\n /**\n * Add a segment\n */\n addSegment(options: Omit<TimelineSegment, 'id'>): TimelineSegment {\n const segment: TimelineSegment = {\n id: generateId('seg'),\n ...options,\n };\n\n this.segments.set(segment.id, segment);\n return segment;\n }\n\n /**\n * Get all segments\n */\n getSegments(): TimelineSegment[] {\n return Array.from(this.segments.values());\n }\n\n /**\n * Get segment containing step\n */\n getSegmentForStep(stepIndex: number): TimelineSegment | undefined {\n for (const segment of this.segments.values()) {\n if (stepIndex >= segment.startStep && stepIndex <= segment.endStep) {\n return segment;\n }\n }\n return undefined;\n }\n\n /**\n * Remove a segment\n */\n removeSegment(id: string): boolean {\n return this.segments.delete(id);\n }\n\n /**\n * Get timeline statistics\n */\n getStats(): TimelineStats {\n const events = this.getEvents();\n\n const eventsByType: Record<string, number> = {};\n let totalDuration = 0;\n\n for (const event of events) {\n eventsByType[event.type] = (eventsByType[event.type] ?? 0) + 1;\n if (event.durationMs) {\n totalDuration += event.durationMs;\n }\n }\n\n return {\n totalEvents: events.length,\n eventsByType,\n totalDurationMs: totalDuration,\n avgEventDurationMs: events.length > 0 ? totalDuration / events.length : 0,\n firstEventTime: events.length > 0 ? events[0].timestamp : undefined,\n lastEventTime:\n events.length > 0 ? events[events.length - 1].timestamp : undefined,\n };\n }\n\n /**\n * Get duration between two steps\n */\n getDurationBetween(startStep: number, endStep: number): number {\n const startEvent = this.getEventAtStep(startStep);\n const endEvent = this.getEventAtStep(endStep);\n\n if (!startEvent || !endEvent) {\n return 0;\n }\n\n return endEvent.timestamp - startEvent.timestamp;\n }\n\n /**\n * Format timeline as text\n */\n format(): string {\n const lines: string[] = [];\n const events = this.getEvents();\n\n for (const event of events) {\n const duration = event.durationMs\n ? ` (${formatDuration(event.durationMs)})`\n : '';\n lines.push(\n `[${event.stepIndex}] ${event.type}: ${event.description}${duration}`,\n );\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Clear the timeline\n */\n clear(): void {\n this.events.clear();\n this.eventOrder = [];\n this.markers.clear();\n this.segments.clear();\n }\n\n /**\n * Get event count\n */\n get count(): number {\n return this.events.size;\n }\n\n /**\n * Export timeline data\n */\n export(): {\n events: TimelineEvent[];\n markers: TimelineMarker[];\n segments: TimelineSegment[];\n } {\n return {\n events: this.getEvents(),\n markers: this.getMarkers(),\n segments: this.getSegments(),\n };\n }\n\n /**\n * Import timeline data\n */\n import(data: {\n events?: TimelineEvent[];\n markers?: TimelineMarker[];\n segments?: TimelineSegment[];\n }): void {\n this.clear();\n\n if (data.events) {\n for (const event of data.events) {\n this.events.set(event.id, event);\n this.eventOrder.push(event.id);\n }\n }\n\n if (data.markers) {\n for (const marker of data.markers) {\n this.markers.set(marker.id, marker);\n }\n }\n\n if (data.segments) {\n for (const segment of data.segments) {\n this.segments.set(segment.id, segment);\n }\n }\n }\n}\n\n/**\n * Create a timeline instance\n */\nexport function createTimeline(): Timeline {\n return new Timeline();\n}\n","/**\n * Recorder\n *\n * Records agent execution for playback and analysis.\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n Recording,\n RecordingMetadata,\n RecorderConfig,\n ExecutionStep,\n AgentState,\n TokenUsage,\n RecordingStorageAdapter,\n Checkpoint,\n Snapshot,\n} from '../types/index.js';\nimport { SnapshotManager } from './Snapshot.js';\nimport { CheckpointManager } from './Checkpoint.js';\nimport { Timeline } from './Timeline.js';\nimport { generateId, now, estimateSize, deepClone } from '../utils/helpers.js';\n\n/**\n * Recorder events\n */\nexport interface RecorderEvents {\n 'recording:started': (recordingId: string) => void;\n 'recording:stopped': (recording: Recording) => void;\n 'recording:paused': () => void;\n 'recording:resumed': () => void;\n 'step:recorded': (step: ExecutionStep) => void;\n 'snapshot:created': (snapshot: Snapshot) => void;\n 'checkpoint:created': (checkpoint: Checkpoint) => void;\n error: (error: Error) => void;\n}\n\n/**\n * Recording session state\n */\ntype RecordingState = 'idle' | 'recording' | 'paused' | 'stopped';\n\n/**\n * Default configuration\n */\nconst DEFAULT_CONFIG: Omit<Required<RecorderConfig>, 'storage'> & {\n storage?: RecordingStorageAdapter;\n} = {\n includePrompts: true,\n includeResponses: true,\n includeToolCalls: true,\n includeMemory: true,\n includeMetadata: true,\n compression: false,\n maxSizeBytes: 100 * 1024 * 1024, // 100MB\n autoSnapshot: false,\n snapshotInterval: 0,\n maxRecordings: 1000,\n retentionDays: 30,\n checkpointInterval: 0,\n includeEmbeddings: false,\n storage: undefined,\n};\n\n/**\n * Recorder\n *\n * Records agent execution sessions.\n *\n * @example\n * ```typescript\n * const recorder = new Recorder({\n * includePrompts: true,\n * includeResponses: true,\n * autoSnapshot: true,\n * snapshotInterval: 10,\n * });\n *\n * // Start recording\n * recorder.start('my-agent', initialState);\n *\n * // Record steps\n * recorder.recordStep(step, state);\n *\n * // Stop and get recording\n * const recording = recorder.stop();\n * ```\n */\nexport class Recorder extends EventEmitter<RecorderEvents> {\n private config: Omit<Required<RecorderConfig>, 'storage'> & {\n storage?: RecordingStorageAdapter;\n };\n private state: RecordingState = 'idle';\n private recordingId?: string;\n private agentId?: string;\n private agentName?: string;\n private steps: ExecutionStep[] = [];\n private startedAt = 0;\n private initialState?: AgentState;\n private currentState?: AgentState;\n private snapshots: SnapshotManager;\n private checkpoints: CheckpointManager;\n private timeline: Timeline;\n private storage?: RecordingStorageAdapter;\n private estimatedSize = 0;\n\n constructor(\n config?: Partial<RecorderConfig>,\n storage?: RecordingStorageAdapter,\n ) {\n super();\n\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n\n this.storage = storage;\n this.snapshots = new SnapshotManager();\n this.checkpoints = new CheckpointManager();\n this.timeline = new Timeline();\n }\n\n /**\n * Start recording\n */\n start(agentId: string, initialState: AgentState, agentName?: string): string {\n if (this.state !== 'idle') {\n throw new Error(`Cannot start recording in state: ${this.state}`);\n }\n\n this.recordingId = generateId('rec');\n this.agentId = agentId;\n this.agentName = agentName ?? initialState.agentName;\n this.initialState = deepClone(initialState);\n this.currentState = deepClone(initialState);\n this.steps = [];\n this.startedAt = now();\n this.estimatedSize = 0;\n this.state = 'recording';\n\n // Reset managers\n this.snapshots = new SnapshotManager();\n this.checkpoints = new CheckpointManager();\n this.timeline = new Timeline();\n\n // Create initial snapshot\n this.snapshots.create(initialState, 0);\n\n this.emit('recording:started', this.recordingId);\n\n return this.recordingId;\n }\n\n /**\n * Stop recording\n */\n stop(): Recording {\n if (this.state !== 'recording' && this.state !== 'paused') {\n throw new Error(`Cannot stop recording in state: ${this.state}`);\n }\n\n const recording = this.buildRecording();\n this.state = 'stopped';\n\n this.emit('recording:stopped', recording);\n\n return recording;\n }\n\n /**\n * Pause recording\n */\n pause(): void {\n if (this.state !== 'recording') {\n return;\n }\n\n this.state = 'paused';\n this.emit('recording:paused');\n }\n\n /**\n * Resume recording\n */\n resume(): void {\n if (this.state !== 'paused') {\n return;\n }\n\n this.state = 'recording';\n this.emit('recording:resumed');\n }\n\n /**\n * Record a step\n */\n recordStep(step: ExecutionStep, state: AgentState): boolean {\n if (this.state !== 'recording') {\n return false;\n }\n\n // Check size limit\n const stepSize = estimateSize(step);\n if (this.estimatedSize + stepSize > this.config.maxSizeBytes) {\n this.emit('error', new Error('Recording size limit exceeded'));\n return false;\n }\n\n // Apply filters\n const filteredStep = this.filterStep(step);\n if (!filteredStep) {\n return false;\n }\n\n this.steps.push(filteredStep);\n this.currentState = deepClone(state);\n this.estimatedSize += stepSize;\n\n // Add to timeline\n this.timeline.addEvent({\n id: generateId('evt'),\n type: filteredStep.type,\n timestamp: filteredStep.timestamp,\n stepIndex: filteredStep.index,\n description: this.getStepDescription(filteredStep),\n });\n\n // Auto-snapshot\n if (\n this.config.autoSnapshot &&\n this.config.snapshotInterval > 0 &&\n this.steps.length % this.config.snapshotInterval === 0\n ) {\n const snapshot = this.snapshots.create(state, filteredStep.index);\n this.emit('snapshot:created', snapshot);\n }\n\n this.emit('step:recorded', filteredStep);\n\n return true;\n }\n\n /**\n * Create a checkpoint\n */\n createCheckpoint(name: string, description?: string): Checkpoint | undefined {\n if (this.state !== 'recording' && this.state !== 'paused') {\n return undefined;\n }\n\n if (!this.recordingId || !this.currentState) {\n return undefined;\n }\n\n const stepIndex =\n this.steps.length > 0 ? this.steps[this.steps.length - 1].index : -1;\n\n const checkpoint = this.checkpoints.create({\n recordingId: this.recordingId,\n name,\n description,\n stepIndex,\n state: this.currentState,\n });\n\n // Also create a snapshot for the checkpoint\n this.snapshots.create(this.currentState, stepIndex);\n\n this.emit('checkpoint:created', checkpoint);\n\n return checkpoint;\n }\n\n /**\n * Get current recording state\n */\n getState(): RecordingState {\n return this.state;\n }\n\n /**\n * Get recording ID\n */\n getRecordingId(): string | undefined {\n return this.recordingId;\n }\n\n /**\n * Get steps count\n */\n getStepsCount(): number {\n return this.steps.length;\n }\n\n /**\n * Get estimated size\n */\n getEstimatedSize(): number {\n return this.estimatedSize;\n }\n\n /**\n * Get timeline\n */\n getTimeline(): Timeline {\n return this.timeline;\n }\n\n /**\n * Get snapshots\n */\n getSnapshots(): Snapshot[] {\n return this.snapshots.getAll();\n }\n\n /**\n * Get checkpoints\n */\n getCheckpoints(): Checkpoint[] {\n return this.checkpoints.getAll();\n }\n\n /**\n * Save recording to storage\n */\n async save(): Promise<void> {\n if (!this.storage) {\n throw new Error('No storage adapter configured');\n }\n\n const recording = this.buildRecording();\n await this.storage.save(recording);\n }\n\n /**\n * Filter step based on configuration\n */\n private filterStep(step: ExecutionStep): ExecutionStep | null {\n const filtered = { ...step };\n\n // Filter prompts\n if (!this.config.includePrompts && step.type === 'prompt') {\n return null;\n }\n\n // Filter responses\n if (!this.config.includeResponses && step.type === 'response') {\n return null;\n }\n\n // Filter tool calls\n if (\n !this.config.includeToolCalls &&\n (step.type === 'tool-call' || step.type === 'tool-result')\n ) {\n return null;\n }\n\n // Filter metadata\n if (!this.config.includeMetadata) {\n delete filtered.metadata;\n }\n\n return filtered;\n }\n\n /**\n * Get step description for timeline\n */\n private getStepDescription(step: ExecutionStep): string {\n switch (step.type) {\n case 'input':\n return 'User input received';\n case 'prompt':\n return 'Prompt sent to model';\n case 'response':\n return 'Response received from model';\n case 'tool-call':\n return `Tool called: ${step.toolCall?.name ?? 'unknown'}`;\n case 'tool-result':\n return `Tool result: ${step.toolCall?.success ? 'success' : 'failed'}`;\n case 'decision':\n return `Decision made: ${step.decision?.chosen.description ?? 'unknown'}`;\n case 'error':\n return `Error: ${step.error?.message ?? 'unknown'}`;\n default:\n return `Step: ${step.type}`;\n }\n }\n\n /**\n * Build the recording object\n */\n private buildRecording(): Recording {\n const endedAt = now();\n const toolCalls = this.steps\n .filter((s) => s.toolCall)\n .map((s) => s.toolCall!);\n\n const decisions = this.steps\n .filter((s) => s.decision)\n .map((s) => s.decision!);\n\n const tokenUsage = this.steps.reduce(\n (acc, step) => {\n if (step.tokenUsage) {\n acc.prompt += step.tokenUsage.prompt;\n acc.completion += step.tokenUsage.completion;\n acc.total += step.tokenUsage.total;\n }\n return acc;\n },\n { prompt: 0, completion: 0, total: 0 } as TokenUsage,\n );\n\n const hasErrors = this.steps.some((s) => s.error);\n\n return {\n id: this.recordingId!,\n agentId: this.agentId!,\n agentName: this.agentName ?? 'Unknown',\n status: hasErrors ? 'failed' : 'completed',\n startedAt: this.startedAt,\n endedAt,\n durationMs: endedAt - this.startedAt,\n steps: this.steps,\n toolCalls,\n decisions,\n checkpoints: this.checkpoints.getAll(),\n initialState: this.initialState!,\n finalState: this.currentState!,\n tokenUsage,\n version: '1.0.0',\n metadata: this.config.includeMetadata ? this.buildMetadata() : undefined,\n };\n }\n\n /**\n * Build recording metadata\n */\n private buildMetadata(): RecordingMetadata {\n return {\n totalSteps: this.steps.length,\n totalToolCalls: this.steps.filter((s) => s.type === 'tool-call').length,\n totalDecisions: this.steps.filter((s) => s.type === 'decision').length,\n hasErrors: this.steps.some((s) => s.error),\n compressionUsed: this.config.compression,\n recordingVersion: '1.0.0',\n tags: [],\n };\n }\n}\n\n/**\n * Create a recorder instance\n */\nexport function createRecorder(\n config?: Partial<RecorderConfig>,\n storage?: RecordingStorageAdapter,\n): Recorder {\n return new Recorder(config, storage);\n}\n"]}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
type DebugSessionState = 'idle' | 'running' | 'paused' | 'stopped' | 'completed' | 'error';
|
|
2
|
+
type BreakpointType = 'step' | 'tool-call' | 'tool-result' | 'decision' | 'error' | 'memory-change' | 'custom';
|
|
3
|
+
type StepType = 'input' | 'prompt' | 'response' | 'tool-call' | 'tool-result' | 'decision' | 'memory-read' | 'memory-write' | 'handoff' | 'delegation' | 'output' | 'error' | 'custom';
|
|
4
|
+
interface DebuggerConfig {
|
|
5
|
+
storagePath?: string;
|
|
6
|
+
recording?: RecordingConfig;
|
|
7
|
+
maxSteps?: number;
|
|
8
|
+
autoCheckpoint?: boolean;
|
|
9
|
+
checkpointInterval?: number;
|
|
10
|
+
profiling?: boolean;
|
|
11
|
+
}
|
|
12
|
+
interface RecordingConfig {
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
includePrompts?: boolean;
|
|
15
|
+
includeResponses?: boolean;
|
|
16
|
+
includeToolCalls?: boolean;
|
|
17
|
+
includeMemory?: boolean;
|
|
18
|
+
includeMetadata?: boolean;
|
|
19
|
+
compression?: boolean;
|
|
20
|
+
maxSizeBytes?: number;
|
|
21
|
+
}
|
|
22
|
+
interface Breakpoint {
|
|
23
|
+
id: string;
|
|
24
|
+
type: BreakpointType;
|
|
25
|
+
condition?: BreakpointCondition;
|
|
26
|
+
step?: number;
|
|
27
|
+
toolName?: string;
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
hitCount: number;
|
|
30
|
+
description?: string;
|
|
31
|
+
}
|
|
32
|
+
type BreakpointCondition = (context: BreakpointContext) => boolean;
|
|
33
|
+
interface BreakpointContext {
|
|
34
|
+
step: ExecutionStep;
|
|
35
|
+
stepIndex: number;
|
|
36
|
+
state: AgentState;
|
|
37
|
+
toolCall?: ToolCall;
|
|
38
|
+
decision?: Decision;
|
|
39
|
+
}
|
|
40
|
+
interface ExecutionStep {
|
|
41
|
+
id: string;
|
|
42
|
+
index: number;
|
|
43
|
+
type: StepType;
|
|
44
|
+
timestamp: number;
|
|
45
|
+
durationMs: number;
|
|
46
|
+
input?: unknown;
|
|
47
|
+
output?: unknown;
|
|
48
|
+
toolCall?: ToolCall;
|
|
49
|
+
decision?: Decision;
|
|
50
|
+
memory?: MemorySnapshot;
|
|
51
|
+
tokenUsage?: TokenUsage;
|
|
52
|
+
metadata?: Record<string, unknown>;
|
|
53
|
+
parentId?: string;
|
|
54
|
+
childIds?: string[];
|
|
55
|
+
error?: ErrorInfo;
|
|
56
|
+
}
|
|
57
|
+
interface ToolCall {
|
|
58
|
+
id: string;
|
|
59
|
+
name: string;
|
|
60
|
+
arguments: Record<string, unknown>;
|
|
61
|
+
result?: unknown;
|
|
62
|
+
startedAt?: number;
|
|
63
|
+
endedAt?: number;
|
|
64
|
+
durationMs?: number;
|
|
65
|
+
success?: boolean;
|
|
66
|
+
error?: string;
|
|
67
|
+
}
|
|
68
|
+
interface Decision {
|
|
69
|
+
id: string;
|
|
70
|
+
prompt: string;
|
|
71
|
+
options: DecisionOption[];
|
|
72
|
+
chosenIndex: number;
|
|
73
|
+
chosen: DecisionOption;
|
|
74
|
+
confidence: number;
|
|
75
|
+
reasoning?: string;
|
|
76
|
+
reason?: string;
|
|
77
|
+
timestamp: number;
|
|
78
|
+
}
|
|
79
|
+
interface DecisionOption {
|
|
80
|
+
id: string;
|
|
81
|
+
description: string;
|
|
82
|
+
score?: number;
|
|
83
|
+
predictedOutcome?: string;
|
|
84
|
+
}
|
|
85
|
+
interface AgentState {
|
|
86
|
+
agentId: string;
|
|
87
|
+
agentName: string;
|
|
88
|
+
model: string;
|
|
89
|
+
memory: MemorySnapshot;
|
|
90
|
+
context: Record<string, unknown>;
|
|
91
|
+
tools: string[];
|
|
92
|
+
messages: Message[];
|
|
93
|
+
metadata?: Record<string, unknown>;
|
|
94
|
+
}
|
|
95
|
+
interface MemorySnapshot {
|
|
96
|
+
working?: Record<string, unknown>;
|
|
97
|
+
shortTerm?: unknown[];
|
|
98
|
+
longTermSummary?: string;
|
|
99
|
+
size: number;
|
|
100
|
+
}
|
|
101
|
+
interface Message {
|
|
102
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
103
|
+
content: string;
|
|
104
|
+
toolCallId?: string;
|
|
105
|
+
toolCalls?: ToolCall[];
|
|
106
|
+
timestamp?: number;
|
|
107
|
+
}
|
|
108
|
+
interface TokenUsage {
|
|
109
|
+
prompt: number;
|
|
110
|
+
completion: number;
|
|
111
|
+
total: number;
|
|
112
|
+
cached?: number;
|
|
113
|
+
}
|
|
114
|
+
interface ErrorInfo {
|
|
115
|
+
name: string;
|
|
116
|
+
message: string;
|
|
117
|
+
stack?: string;
|
|
118
|
+
code?: string;
|
|
119
|
+
data?: unknown;
|
|
120
|
+
}
|
|
121
|
+
interface DebugSession {
|
|
122
|
+
id: string;
|
|
123
|
+
agentId: string;
|
|
124
|
+
state: DebugSessionState;
|
|
125
|
+
startedAt: number;
|
|
126
|
+
endedAt?: number;
|
|
127
|
+
currentStep: number;
|
|
128
|
+
totalSteps: number;
|
|
129
|
+
breakpoints: Breakpoint[];
|
|
130
|
+
checkpoints: string[];
|
|
131
|
+
recordingId?: string;
|
|
132
|
+
}
|
|
133
|
+
interface InspectorResult {
|
|
134
|
+
currentStep: ExecutionStep | null;
|
|
135
|
+
stepIndex: number;
|
|
136
|
+
totalSteps: number;
|
|
137
|
+
state: AgentState;
|
|
138
|
+
toolCalls: ToolCall[];
|
|
139
|
+
decisions: Decision[];
|
|
140
|
+
memory: MemorySnapshot;
|
|
141
|
+
variables: Record<string, unknown>;
|
|
142
|
+
callStack: string[];
|
|
143
|
+
}
|
|
144
|
+
type StepAction = 'continue' | 'step-over' | 'step-into' | 'step-out' | 'stop';
|
|
145
|
+
|
|
146
|
+
type RecordingStatus = 'recording' | 'completed' | 'failed' | 'aborted';
|
|
147
|
+
interface Recording {
|
|
148
|
+
id: string;
|
|
149
|
+
agentId: string;
|
|
150
|
+
agentName: string;
|
|
151
|
+
status: RecordingStatus;
|
|
152
|
+
startedAt: number;
|
|
153
|
+
endedAt?: number;
|
|
154
|
+
durationMs: number;
|
|
155
|
+
steps: ExecutionStep[];
|
|
156
|
+
toolCalls: ToolCall[];
|
|
157
|
+
decisions: Decision[];
|
|
158
|
+
checkpoints: Checkpoint[];
|
|
159
|
+
initialState: AgentState;
|
|
160
|
+
finalState?: AgentState;
|
|
161
|
+
tokenUsage: TokenUsage;
|
|
162
|
+
outcome?: RecordingOutcome;
|
|
163
|
+
error?: ErrorInfo;
|
|
164
|
+
metadata?: RecordingMetadata;
|
|
165
|
+
version: string;
|
|
166
|
+
}
|
|
167
|
+
interface RecordingOutcome {
|
|
168
|
+
success: boolean;
|
|
169
|
+
output?: unknown;
|
|
170
|
+
outputType?: string;
|
|
171
|
+
summary?: string;
|
|
172
|
+
}
|
|
173
|
+
interface RecordingMetadata {
|
|
174
|
+
model?: string;
|
|
175
|
+
provider?: string;
|
|
176
|
+
tags?: string[];
|
|
177
|
+
userId?: string;
|
|
178
|
+
sessionId?: string;
|
|
179
|
+
environment?: string;
|
|
180
|
+
totalSteps?: number;
|
|
181
|
+
totalToolCalls?: number;
|
|
182
|
+
totalDecisions?: number;
|
|
183
|
+
hasErrors?: boolean;
|
|
184
|
+
compressionUsed?: boolean;
|
|
185
|
+
recordingVersion?: string;
|
|
186
|
+
custom?: Record<string, unknown>;
|
|
187
|
+
}
|
|
188
|
+
interface Checkpoint {
|
|
189
|
+
id: string;
|
|
190
|
+
recordingId: string;
|
|
191
|
+
name: string;
|
|
192
|
+
description?: string;
|
|
193
|
+
stepIndex: number;
|
|
194
|
+
timestamp: number;
|
|
195
|
+
state: AgentState;
|
|
196
|
+
automatic: boolean;
|
|
197
|
+
tags?: string[];
|
|
198
|
+
}
|
|
199
|
+
interface Snapshot {
|
|
200
|
+
id: string;
|
|
201
|
+
recordingId?: string;
|
|
202
|
+
stepIndex: number;
|
|
203
|
+
timestamp: number;
|
|
204
|
+
state: AgentState;
|
|
205
|
+
size?: number;
|
|
206
|
+
sizeBytes?: number;
|
|
207
|
+
compressed?: boolean;
|
|
208
|
+
}
|
|
209
|
+
interface TimelineEvent {
|
|
210
|
+
id: string;
|
|
211
|
+
type: TimelineEventType;
|
|
212
|
+
timestamp: number;
|
|
213
|
+
durationMs?: number;
|
|
214
|
+
summary: string;
|
|
215
|
+
description?: string;
|
|
216
|
+
stepIndex: number;
|
|
217
|
+
details?: unknown;
|
|
218
|
+
parentId?: string;
|
|
219
|
+
metadata?: Record<string, unknown>;
|
|
220
|
+
}
|
|
221
|
+
type TimelineEventType = 'start' | 'end' | 'step' | 'input' | 'prompt' | 'response' | 'output' | 'tool-call' | 'tool-result' | 'decision' | 'memory-read' | 'memory-write' | 'checkpoint' | 'error' | 'handoff' | 'delegation' | 'custom';
|
|
222
|
+
interface RecorderConfig {
|
|
223
|
+
includePrompts?: boolean;
|
|
224
|
+
includeResponses?: boolean;
|
|
225
|
+
includeToolCalls?: boolean;
|
|
226
|
+
includeMemory?: boolean;
|
|
227
|
+
includeMetadata?: boolean;
|
|
228
|
+
compression?: boolean;
|
|
229
|
+
maxSizeBytes?: number;
|
|
230
|
+
autoSnapshot?: boolean;
|
|
231
|
+
snapshotInterval?: number;
|
|
232
|
+
maxRecordings?: number;
|
|
233
|
+
retentionDays?: number;
|
|
234
|
+
checkpointInterval?: number;
|
|
235
|
+
includeEmbeddings?: boolean;
|
|
236
|
+
storage?: RecordingStorageAdapter;
|
|
237
|
+
}
|
|
238
|
+
interface RecordingStorageAdapter {
|
|
239
|
+
save(recording: Recording): Promise<void>;
|
|
240
|
+
load(id: string): Promise<Recording | null | undefined>;
|
|
241
|
+
list(options?: RecordingListOptions): Promise<RecordingListResult | RecordingSummary[] | unknown[]>;
|
|
242
|
+
delete(id: string): Promise<boolean>;
|
|
243
|
+
exists?(id: string): Promise<boolean>;
|
|
244
|
+
getStats?(): StorageStats | Promise<StorageStats>;
|
|
245
|
+
}
|
|
246
|
+
interface RecordingListOptions {
|
|
247
|
+
agentId?: string;
|
|
248
|
+
status?: RecordingStatus;
|
|
249
|
+
startDate?: Date;
|
|
250
|
+
endDate?: Date;
|
|
251
|
+
tags?: string[];
|
|
252
|
+
sort?: 'newest' | 'oldest' | 'longest' | 'shortest';
|
|
253
|
+
limit?: number;
|
|
254
|
+
offset?: number;
|
|
255
|
+
}
|
|
256
|
+
interface RecordingListResult {
|
|
257
|
+
recordings: RecordingSummary[];
|
|
258
|
+
total: number;
|
|
259
|
+
hasMore: boolean;
|
|
260
|
+
}
|
|
261
|
+
interface RecordingSummary {
|
|
262
|
+
id: string;
|
|
263
|
+
agentId: string;
|
|
264
|
+
agentName: string;
|
|
265
|
+
status: RecordingStatus;
|
|
266
|
+
startedAt: number;
|
|
267
|
+
durationMs: number;
|
|
268
|
+
stepCount: number;
|
|
269
|
+
toolCallCount: number;
|
|
270
|
+
tokenUsage: TokenUsage;
|
|
271
|
+
success: boolean;
|
|
272
|
+
tags?: string[];
|
|
273
|
+
}
|
|
274
|
+
interface StorageStats {
|
|
275
|
+
totalRecordings: number;
|
|
276
|
+
totalSizeBytes: number;
|
|
277
|
+
oldestRecording?: Date;
|
|
278
|
+
newestRecording?: Date;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export type { AgentState as A, BreakpointType as B, Checkpoint as C, DebugSessionState as D, ExecutionStep as E, InspectorResult as I, MemorySnapshot as M, RecordingConfig as R, StepType as S, ToolCall as T, DebuggerConfig as a, Breakpoint as b, BreakpointCondition as c, BreakpointContext as d, Decision as e, DecisionOption as f, Message as g, TokenUsage as h, ErrorInfo as i, DebugSession as j, StepAction as k, RecordingStatus as l, Recording as m, RecordingOutcome as n, RecordingMetadata as o, Snapshot as p, TimelineEvent as q, TimelineEventType as r, RecorderConfig as s, RecordingStorageAdapter as t, RecordingListOptions as u, RecordingListResult as v, RecordingSummary as w, StorageStats as x };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export { R as ReplayEngine, a as ReplayEngineEvents, b as ReplayOptions, c as createReplayEngine } from '../ReplayEngine-Dyyqy5bw.js';
|
|
2
|
+
import { EventEmitter } from 'eventemitter3';
|
|
3
|
+
import { E as ExecutionStep, A as AgentState, C as Checkpoint, m as Recording } from '../recording.types-Ck7pbikw.js';
|
|
4
|
+
import { b as ReplaySession, c as ReplayConfig } from '../replay.types-C9hJizI-.js';
|
|
5
|
+
import { D as Difference } from '../diff-CLShBdWe.js';
|
|
6
|
+
|
|
7
|
+
interface ReplayControllerEvents {
|
|
8
|
+
'step:replayed': (step: ExecutionStep, state: AgentState) => void;
|
|
9
|
+
paused: (reason: string) => void;
|
|
10
|
+
resumed: () => void;
|
|
11
|
+
'checkpoint:reached': (checkpoint: Checkpoint) => void;
|
|
12
|
+
error: (error: Error) => void;
|
|
13
|
+
}
|
|
14
|
+
interface PlaybackState {
|
|
15
|
+
currentStep: number;
|
|
16
|
+
state: AgentState;
|
|
17
|
+
isPaused: boolean;
|
|
18
|
+
pauseReason?: string;
|
|
19
|
+
}
|
|
20
|
+
declare class ReplayController extends EventEmitter<ReplayControllerEvents> {
|
|
21
|
+
private recording;
|
|
22
|
+
private session;
|
|
23
|
+
private config;
|
|
24
|
+
private playbackState;
|
|
25
|
+
private stateHistory;
|
|
26
|
+
private checkpointMap;
|
|
27
|
+
constructor(recording: Recording, session: ReplaySession, config: Required<ReplayConfig>);
|
|
28
|
+
stepForward(): ExecutionStep | undefined;
|
|
29
|
+
stepBackward(): ExecutionStep | undefined;
|
|
30
|
+
jumpToStep(stepIndex: number): ExecutionStep | undefined;
|
|
31
|
+
jumpToCheckpoint(checkpointId: string): boolean;
|
|
32
|
+
getNextCheckpoint(): Checkpoint | undefined;
|
|
33
|
+
getPreviousCheckpoint(): Checkpoint | undefined;
|
|
34
|
+
pause(reason?: string): void;
|
|
35
|
+
resume(): void;
|
|
36
|
+
getCurrentStep(): ExecutionStep | undefined;
|
|
37
|
+
getCurrentState(): AgentState;
|
|
38
|
+
getPlaybackState(): PlaybackState;
|
|
39
|
+
isAtBeginning(): boolean;
|
|
40
|
+
isAtEnd(): boolean;
|
|
41
|
+
getProgress(): number;
|
|
42
|
+
private applyStep;
|
|
43
|
+
private rebuildStateAt;
|
|
44
|
+
private checkPauseConditions;
|
|
45
|
+
getCheckpoints(): Checkpoint[];
|
|
46
|
+
get stepsCount(): number;
|
|
47
|
+
}
|
|
48
|
+
declare function createReplayController(recording: Recording, session: ReplaySession, config: Required<ReplayConfig>): ReplayController;
|
|
49
|
+
|
|
50
|
+
interface RestoreOptions {
|
|
51
|
+
includeMemory?: boolean;
|
|
52
|
+
includeContext?: boolean;
|
|
53
|
+
includeMessages?: boolean;
|
|
54
|
+
includeTools?: boolean;
|
|
55
|
+
}
|
|
56
|
+
interface StateValidation {
|
|
57
|
+
valid: boolean;
|
|
58
|
+
errors: string[];
|
|
59
|
+
warnings: string[];
|
|
60
|
+
}
|
|
61
|
+
declare class StateRestorer {
|
|
62
|
+
private options;
|
|
63
|
+
private stateCache;
|
|
64
|
+
constructor(options?: RestoreOptions);
|
|
65
|
+
restore(recording: Recording, stepIndex: number): AgentState;
|
|
66
|
+
restoreFromCheckpoint(checkpoint: Checkpoint): AgentState;
|
|
67
|
+
applyStep(state: AgentState, step: ExecutionStep): AgentState;
|
|
68
|
+
private applyMemoryChange;
|
|
69
|
+
private findClosestCheckpoint;
|
|
70
|
+
applyPatch(state: AgentState, differences: Difference[]): AgentState;
|
|
71
|
+
validate(state: AgentState): StateValidation;
|
|
72
|
+
merge(base: AgentState, overlay: Partial<AgentState>): AgentState;
|
|
73
|
+
createMinimalState(agentId: string, agentName: string, model: string): AgentState;
|
|
74
|
+
clearCache(): void;
|
|
75
|
+
clearRecordingCache(recordingId: string): void;
|
|
76
|
+
getCacheSize(): number;
|
|
77
|
+
}
|
|
78
|
+
declare function createStateRestorer(options?: RestoreOptions): StateRestorer;
|
|
79
|
+
|
|
80
|
+
export { type PlaybackState, ReplayController, type ReplayControllerEvents, type RestoreOptions, StateRestorer, type StateValidation, createReplayController, createStateRestorer };
|