{
  "version": 3,
  "sources": ["../../src/app/ai/agents/evals/export/loadEvalExportDocument.ts"],
  "sourcesContent": ["import type { Asset, AssetWithOwnerTypes } from \"@framerjs/assets\"\nimport { Store } from \"@framerjs/crdtree2\"\nimport { assert } from \"@framerjs/shared\"\nimport type { Agent } from \"app/ai/agents/Agent.ts\"\nimport { cloneContextRuntimeState, type ContextRuntimeState } from \"app/ai/agents/context/AgentContext.ts\"\nimport { experiments } from \"app/experiments.ts\"\nimport { EngineChange } from \"document/EngineChanges.ts\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport { loadSnapshot, type LatestAgentStorageSnapshot } from \"document/agentSnapshotMigration/index.ts\"\nimport type { LatestAgentSchemas } from \"document/agentSnapshotMigration/schemas.ts\"\nimport { CrdtDocumentLoader } from \"document/crdt/sync/CrdtDocumentLoader.ts\"\nimport { mergeAndGetPatches } from \"document/crdt/sync/crdtTreeUpdater.ts\"\nimport { CanvasTreeVersion } from \"document/models/CanvasTree/CanvasTreeVersion.ts\"\nimport type { ExternalModuleEvaluationMode } from \"document/stores/LoadedExternalModulesStore.ts\"\nimport { fontStore } from \"library/render/fonts/fontStore.ts\"\nimport { isUndefined } from \"utils/typeChecks.ts\"\nimport type { EvalExportArchiveSnapshot } from \"./AgentStoreEvalExport.ts\"\nimport type { EvalExportV1 } from \"./evalExportTypes.ts\"\n\nexport interface LoadEvalExportOptions {\n\treplayTarget?: {\n\t\trequestId?: string\n\t\tincludedStepCount?: number\n\t}\n\texternalModuleEvaluationMode?: ExternalModuleEvaluationMode\n}\n\ntype PersistedAgentHydrationRequest = LatestAgentSchemas.PersistedAgentSnapshot[\"history\"][number]\ntype PersistedAgentHydrationStep = PersistedAgentHydrationRequest[\"steps\"][number]\n\ninterface ResolvedEvalExportReplayTarget {\n\trequestId: string\n\trequestIndex: number\n\trequest: PersistedAgentHydrationRequest\n\tincludedStepCount?: number\n\tscopeId: LatestAgentSchemas.PersistedAgentSnapshot[\"scopeId\"]\n\tagentSnapshot: LatestAgentSchemas.PersistedAgentSnapshot\n}\n\nfunction getEvalExportCrdtBaseCapture(archiveSnapshot: EvalExportArchiveSnapshot): {\n\tbase: Uint8Array\n\tbaseRowIndex: number\n} {\n\tconst base = archiveSnapshot.files.find(file => file.path === archiveSnapshot.manifest.crdt.baseBinaryPath)?.data\n\tassert(base, \"Eval export archive is missing the CRDT base binary.\")\n\treturn {\n\t\tbase,\n\t\tbaseRowIndex: archiveSnapshot.manifest.crdt.baseRowIndex,\n\t}\n}\n\nfunction loadEvalExportAgentStorageSnapshot(manifest: EvalExportV1): LatestAgentStorageSnapshot {\n\tconst loadedSnapshot = loadSnapshot(manifest.agent.storageSnapshot)\n\tassert(loadedSnapshot, \"Eval export agent snapshot failed to parse or migrate.\")\n\tassert(loadedSnapshot.snapshot.agents.length === 1, \"Eval export must contain exactly one agent snapshot.\")\n\treturn loadedSnapshot.snapshot\n}\n\nfunction getEvalExportAgentSnapshot(manifest: EvalExportV1): LatestAgentSchemas.PersistedAgentSnapshot {\n\tconst storageSnapshot = loadEvalExportAgentStorageSnapshot(manifest)\n\tconst snapshot =\n\t\tstorageSnapshot.agents.find(candidate => candidate.id === storageSnapshot.activeChatAgentId) ??\n\t\tstorageSnapshot.agents[0]\n\tassert(snapshot, \"Eval export is missing its agent snapshot.\")\n\treturn snapshot\n}\n\nfunction assertContextRuntimeStateForStepReplayTarget(replayTarget: ResolvedEvalExportReplayTarget): void {\n\tconst runtimeState = getReplayTargetRuntimeState(replayTarget)\n\tassert(\n\t\truntimeState,\n\t\t`Eval export is missing runtime snapshot for request '${replayTarget.requestId}' with ${replayTarget.includedStepCount} included steps. Re-export with step runtime snapshots or replay the request boundary.`,\n\t)\n}\n\nexport function resolveEvalExportReplayTarget(\n\tmanifest: EvalExportV1,\n\toptions: LoadEvalExportOptions = {},\n): ResolvedEvalExportReplayTarget {\n\tconst agentSnapshot = getEvalExportAgentSnapshot(manifest)\n\n\tconst requestId =\n\t\toptions.replayTarget?.requestId ?? getLatestCompleteRequestBoundaryRequest(manifest, agentSnapshot).id\n\tconst requestIndex = agentSnapshot.history.findIndex(candidate => candidate.id === requestId)\n\tassert(requestIndex >= 0, \"Requested replay request was not found in the eval export history.\", requestId)\n\tconst request = agentSnapshot.history[requestIndex]\n\tassert(request, \"Requested replay request was not found in the eval export history.\", requestId)\n\tconst scopeId = request.scopeId ?? agentSnapshot.scopeId\n\n\tconst includedStepCount = options.replayTarget?.includedStepCount\n\tif (includedStepCount !== undefined) {\n\t\tassert(\n\t\t\tNumber.isInteger(includedStepCount) && includedStepCount >= 0,\n\t\t\t\"Included step count must be a non-negative integer.\",\n\t\t\trequestId,\n\t\t\tincludedStepCount,\n\t\t)\n\t\tassert(\n\t\t\tincludedStepCount <= request.steps.length,\n\t\t\t\"Included step count exceeds persisted request steps.\",\n\t\t\trequestId,\n\t\t\tincludedStepCount,\n\t\t)\n\t\tconst replayTarget = {\n\t\t\trequestId: request.id,\n\t\t\trequestIndex,\n\t\t\trequest,\n\t\t\tincludedStepCount,\n\t\t\tscopeId,\n\t\t\tagentSnapshot,\n\t\t}\n\t\tif (doesReplayTargetTruncateRequest(replayTarget)) {\n\t\t\tgetReplayTargetStepBoundaryRowIndex(replayTarget)\n\t\t\tassertContextRuntimeStateForStepReplayTarget(replayTarget)\n\t\t}\n\n\t\treturn replayTarget\n\t}\n\n\treturn {\n\t\trequestId: request.id,\n\t\trequestIndex,\n\t\trequest,\n\t\tscopeId,\n\t\tagentSnapshot,\n\t}\n}\n\nfunction getLatestCompleteRequestBoundaryRequest(\n\tmanifest: EvalExportV1,\n\tagentSnapshot: LatestAgentSchemas.PersistedAgentSnapshot,\n): PersistedAgentHydrationRequest {\n\tfor (const request of agentSnapshot.history.toReversed()) {\n\t\tconst endRowIndex = request.crdtSnapshot?.turnEndRowIndex\n\t\tif (isUndefined(endRowIndex)) continue\n\t\tif (endRowIndex < manifest.crdt.baseRowIndex) continue\n\t\tif (endRowIndex > manifest.crdt.baseRowIndex + manifest.crdt.rows.length) continue\n\t\treturn request\n\t}\n\n\tthrow new Error(\"Eval export has no complete request boundary to replay.\")\n}\n\nexport function createPersistedAgentSnapshotFromEvalExport(\n\treplayTarget: ResolvedEvalExportReplayTarget,\n): LatestAgentSchemas.PersistedAgentSnapshot {\n\tconst snapshot = replayTarget.agentSnapshot\n\tconst truncatedHistory = getEvalExportHydrationRequests(replayTarget)\n\tconst isLatestRequest = replayTarget.requestIndex === snapshot.history.length - 1\n\tconst shouldPreserveLatestSnapshotState = isLatestRequest && !doesReplayTargetTruncateRequest(replayTarget)\n\n\treturn {\n\t\t...snapshot,\n\t\tscopeId: replayTarget.scopeId,\n\t\tstate: truncatedHistory.length > 0 ? \"follow-up\" : \"idle\",\n\t\thistory: truncatedHistory,\n\t\tusage: getEvalExportUsageForHydrationRequests(truncatedHistory),\n\t\tpromptQueue: shouldPreserveLatestSnapshotState ? snapshot.promptQueue : undefined,\n\t}\n}\n\nfunction getEvalExportUsageForHydrationRequests(\n\trequests: readonly PersistedAgentHydrationRequest[],\n): LatestAgentSchemas.PersistedAgentSnapshot[\"usage\"] {\n\treturn requests.flatMap(request => (isUndefined(request.usage) ? [] : [request.usage]))\n}\n\nfunction getEvalExportHydrationRequests(\n\treplayTarget: ResolvedEvalExportReplayTarget,\n): readonly PersistedAgentHydrationRequest[] {\n\tconst requests = replayTarget.agentSnapshot.history.slice(0, replayTarget.requestIndex + 1)\n\tconst includedStepCount = replayTarget.includedStepCount\n\tif (includedStepCount === undefined) return requests\n\n\tconst targetRequest = requests[requests.length - 1]\n\tassert(targetRequest, \"Replay target request must exist.\")\n\tassert(\n\t\tincludedStepCount <= targetRequest.steps.length,\n\t\t\"Replay target step exceeds persisted request steps.\",\n\t\treplayTarget.requestId,\n\t\tincludedStepCount,\n\t)\n\tif (includedStepCount === targetRequest.steps.length && includedStepCount > 0) return requests\n\tconst steps =\n\t\tincludedStepCount === 0\n\t\t\t? createInitialRequestReplaySteps(replayTarget)\n\t\t\t: targetRequest.steps.slice(0, includedStepCount)\n\n\treturn [...requests.slice(0, -1), createStepTruncatedHydrationRequest(replayTarget, steps)]\n}\n\nfunction createInitialRequestReplaySteps(\n\treplayTarget: ResolvedEvalExportReplayTarget,\n): readonly PersistedAgentHydrationStep[] {\n\treturn replayTarget.request.steps.length === 0 ? [] : [createInitialRequestRuntimeCheckpointStep(replayTarget)]\n}\n\nfunction createStepTruncatedHydrationRequest(\n\treplayTarget: ResolvedEvalExportReplayTarget,\n\tsteps: readonly PersistedAgentHydrationStep[],\n): PersistedAgentHydrationRequest {\n\tconst request = replayTarget.request\n\tconst truncatedRequest: PersistedAgentHydrationRequest = {\n\t\tid: request.id,\n\t\tparts: request.parts,\n\t\timages: request.images,\n\t\tfiles: request.files,\n\t\tcontextMessages: request.contextMessages,\n\t\tsteps,\n\t\tdone: true,\n\t\tstate: {\n\t\t\tmessages: getEvalExportHydrationMessages(replayTarget),\n\t\t},\n\t\tcrdtSnapshot: {\n\t\t\tturnEndRowIndex: getReplayTargetStepBoundaryRowIndex(replayTarget),\n\t\t},\n\t\tselection: request.selection,\n\t\tscopeId: request.scopeId,\n\t\tmodel: request.model,\n\t\treasoningEffort: request.reasoningEffort,\n\t}\n\n\treturn truncatedRequest\n}\n\nfunction getEvalExportHydrationMessages(\n\treplayTarget: ResolvedEvalExportReplayTarget,\n): PersistedAgentHydrationRequest[\"state\"][\"messages\"] {\n\tconst beforeMessageCount = getReplayTargetBeforeMessageCount(replayTarget)\n\tif (isUndefined(beforeMessageCount)) return []\n\n\tassert(\n\t\tbeforeMessageCount <= replayTarget.request.state.messages.length,\n\t\t\"Requested replay step has a beforeMessageCount beyond the persisted turn messages.\",\n\t\treplayTarget.requestId,\n\t\treplayTarget.includedStepCount,\n\t\tbeforeMessageCount,\n\t)\n\treturn replayTarget.request.state.messages.slice(0, beforeMessageCount)\n}\n\nfunction getReplayTargetBeforeMessageCount(replayTarget: ResolvedEvalExportReplayTarget): number | undefined {\n\tconst includedStepCount = getReplayTargetIncludedStepCount(replayTarget)\n\treturn replayTarget.request.steps[includedStepCount]?.metadata.beforeMessageCount\n}\n\nfunction createInitialRequestRuntimeCheckpointStep(\n\treplayTarget: ResolvedEvalExportReplayTarget,\n): PersistedAgentHydrationStep {\n\tconst request = replayTarget.request\n\tconst firstStepCrdtSnapshot = request.steps[0]?.metadata.crdtSnapshot\n\tassert(firstStepCrdtSnapshot, \"Initial request replay requires first step CRDT metadata.\", request.id)\n\tconst rowIndex = firstStepCrdtSnapshot.beforeRowIndex\n\tconst runtimeState = getContextRuntimeStateBeforeRequest(replayTarget)\n\tassert(rowIndex !== undefined, \"Initial request replay requires first step CRDT row marker.\", request.id)\n\n\tconst step: PersistedAgentHydrationStep = {\n\t\tcontent: [],\n\t\ttoolResults: [],\n\t\tmetadata: {\n\t\t\tcrdtSnapshot: {\n\t\t\t\tbeforeRowIndex: rowIndex,\n\t\t\t\tafterRowIndex: rowIndex,\n\t\t\t\tafterRuntimeState: createPersistedContextRuntimeState(runtimeState),\n\t\t\t},\n\t\t\tbeforeMessageCount: getReplayTargetBeforeMessageCount(replayTarget),\n\t\t},\n\t}\n\treturn step\n}\n\nfunction getContextRuntimeStateBeforeRequest(replayTarget: ResolvedEvalExportReplayTarget): ContextRuntimeState {\n\tfor (let requestIndex = replayTarget.requestIndex - 1; requestIndex >= 0; requestIndex--) {\n\t\tconst request = replayTarget.agentSnapshot.history[requestIndex]\n\t\tif (!request) continue\n\n\t\tfor (let stepIndex = request.steps.length - 1; stepIndex >= 0; stepIndex--) {\n\t\t\tconst runtimeState = request.steps[stepIndex]?.metadata.crdtSnapshot?.afterRuntimeState\n\t\t\tif (runtimeState) return cloneContextRuntimeState(runtimeState)\n\t\t}\n\t}\n\n\treturn createEmptyContextRuntimeState()\n}\n\nfunction createEmptyContextRuntimeState(): ContextRuntimeState {\n\treturn { scriptDataByKey: [] }\n}\n\nfunction createPersistedContextRuntimeState(\n\tstate: ContextRuntimeState,\n): NonNullable<NonNullable<PersistedAgentHydrationStep[\"metadata\"][\"crdtSnapshot\"]>[\"afterRuntimeState\"]> {\n\tconst runtimeState = cloneContextRuntimeState(state)\n\tconst scriptDataByKey: [string, string][] = []\n\tfor (const [key, value] of runtimeState.scriptDataByKey) {\n\t\tscriptDataByKey.push([key, value])\n\t}\n\treturn {\n\t\tscriptDataByKey,\n\t\t...(runtimeState.checklist ? { checklist: runtimeState.checklist } : {}),\n\t}\n}\n\nfunction doesReplayTargetTruncateRequest(replayTarget: ResolvedEvalExportReplayTarget): boolean {\n\tconst includedStepCount = replayTarget.includedStepCount\n\tif (includedStepCount === undefined) return false\n\n\tconst targetRequest = replayTarget.agentSnapshot.history[replayTarget.requestIndex]\n\tassert(targetRequest, \"Replay target request must exist.\")\n\treturn includedStepCount < targetRequest.steps.length || includedStepCount === 0\n}\n\nexport async function loadEvalExportDocumentIntoEngine({\n\tengine,\n\tarchiveSnapshot,\n\treplayTarget,\n\texternalModuleEvaluationMode = \"sandbox\",\n}: {\n\tengine: VekterEngine\n\tarchiveSnapshot: EvalExportArchiveSnapshot\n\treplayTarget: ResolvedEvalExportReplayTarget\n\texternalModuleEvaluationMode?: ExternalModuleEvaluationMode\n}): Promise<void> {\n\tengine.stores.treeStore.mode = \"crdt\"\n\tconst committer = engine.stores.treeStore.crdtTimeline\n\tengine.stores.modulesStore.resetModuleStateAndPermissions(\"readwrite-detached\")\n\tengine.stores.loadedExternalModulesStore.setExternalModuleEvaluationMode(externalModuleEvaluationMode)\n\tloadEvalExportAssetsIntoEngine(engine, archiveSnapshot)\n\n\tconst { base } = getEvalExportCrdtBaseCapture(archiveSnapshot)\n\n\tconst loader = new CrdtDocumentLoader(\n\t\tcommitter.store,\n\t\tundefined,\n\t\tengine.componentLoader,\n\t\tCanvasTreeVersion,\n\t\t\"eval-export://document\",\n\t\t{\n\t\t\tpartialParsing: false,\n\t\t\tloadedData: base,\n\t\t\tactiveNodeId: replayTarget.scopeId,\n\t\t},\n\t)\n\n\t// `loader.start()` awaits `loadAllScopesAsync` which parses every non-active scope from the\n\t// CRDT store and emits \"loadedScope\". The committer is normally driven by RemoteDocument /\n\t// RemoteProject in the live editor; in the eval harness there is no remote, so we wire the\n\t// committer up directly. Without this, every page besides the active one stays shallow on\n\t// `engine.tree`, which breaks anything that walks across pages (cross-page link resolution,\n\t// scroll-target lookups, `engine.tree.get(<node-on-other-page>)`, etc.).\n\tlet didLoadFirstData = false\n\tlet didLoadAllData = false\n\tloader.on(\"loadedFirstData\", tree => {\n\t\tengine.load(tree)\n\t\tcommitter.isPartialLoading = true\n\t\tdidLoadFirstData = true\n\t})\n\tloader.on(\"loadedScope\", scope => {\n\t\tcommitter.loadOneScope(scope, false)\n\t\tengine.newTreeAfterRemoteUpdate(committer.tree)\n\t})\n\tloader.on(\"loadedAllData\", () => {\n\t\tcommitter.loadedAllScopes({ containsLocalEdits: false, hasHierarchyChanges: false })\n\t\tdidLoadAllData = true\n\t})\n\t// `engine.load()` uses the document active node to choose the initial active scope.\n\t// Eval export replays are detached from URL/view-state loading, so seed it from the replay target.\n\tengine.stores.documentSettingsStore.activeNode = { id: replayTarget.scopeId }\n\tawait loader.start()\n\tassert(didLoadFirstData, \"Eval export loader did not emit initial document data.\")\n\tassert(didLoadAllData, \"Eval export loader did not finish loading the document.\")\n\n\tconst rows = [...getRowsForReplayTarget(archiveSnapshot.manifest, replayTarget)]\n\tif (rows.length > 0) {\n\t\tStore.verifyBatches(rows)\n\t\tconst tempStore = new Store({ client: 0, user: \"eval-export\" })\n\t\ttempStore.addSerializableRows(rows)\n\t\tconst patches = mergeAndGetPatches(committer.store, tempStore)\n\t\tif (patches.size > 0) {\n\t\t\tcommitter.handleRemotePatches(patches, 1, {\n\t\t\t\tcontainsLocalEdits: false,\n\t\t\t\thasHierarchyChanges: rows.some(row => row.key === \"parentid\"),\n\t\t\t})\n\t\t\tengine.newTreeAfterRemoteUpdate(committer.tree)\n\t\t}\n\t}\n\n\tselectEvalExportReplayTargetScope(engine, replayTarget)\n}\n\nfunction loadEvalExportAssetsIntoEngine(engine: VekterEngine, archiveSnapshot: EvalExportArchiveSnapshot): void {\n\tconst assets = archiveSnapshot.manifest.assets ?? []\n\tengine.stores.assetStore.assetMap.set(createAssetMapEntries(assets))\n\tfontStore.importCustomFonts(assets, experiments.isOn(\"customFontGrouping\"))\n\tengine.scheduler.changes.addChanges(EngineChange.AssetMap, EngineChange.CustomFontStore)\n}\n\nfunction createAssetMapEntries(assets: readonly AssetWithOwnerTypes[]): Asset[] {\n\tconst entries: Asset[] = []\n\tfor (const asset of assets) {\n\t\tconst { ownerTypes, ...assetWithoutOwnerTypes } = asset\n\t\tfor (const ownerType of ownerTypes) {\n\t\t\tentries.push({ ...assetWithoutOwnerTypes, ownerType })\n\t\t}\n\t}\n\treturn entries\n}\n\nfunction selectEvalExportReplayTargetScope(engine: VekterEngine, replayTarget: ResolvedEvalExportReplayTarget): void {\n\tassert(\n\t\tengine.tree.get(replayTarget.scopeId),\n\t\t\"Eval export replay target scope is missing from the loaded document.\",\n\t\treplayTarget.scopeId,\n\t)\n\tengine.stores.scopeStore.selectScopeByAgent(replayTarget.scopeId)\n}\n\nexport function hydrateEvalExportAgent({\n\tarchiveSnapshot,\n\tagent,\n\treplayTarget,\n}: {\n\tarchiveSnapshot: EvalExportArchiveSnapshot\n\tagent: Agent\n\treplayTarget: ResolvedEvalExportReplayTarget\n}): Agent {\n\tconst manifest = archiveSnapshot.manifest\n\tconst historyEntries = getEvalExportHydrationRequests(replayTarget).entries()\n\tfor (const [index, exportedRequest] of historyEntries) {\n\t\tconst hydratedRequest = agent.chatMessages[index]\n\t\tif (!hydratedRequest) continue\n\t\tconst turnEndRowIndex =\n\t\t\texportedRequest.id === replayTarget.requestId\n\t\t\t\t? getReplayTargetRowIndex(manifest, replayTarget)\n\t\t\t\t: exportedRequest.crdtSnapshot?.turnEndRowIndex\n\t\tif (turnEndRowIndex !== undefined) {\n\t\t\thydratedRequest.crdtSnapshot = {\n\t\t\t\tturnEndRowIndex,\n\t\t\t}\n\t\t}\n\t\tconst isTruncatedReplayTarget =\n\t\t\texportedRequest.id === replayTarget.requestId && doesReplayTargetTruncateRequest(replayTarget)\n\t\tif (isTruncatedReplayTarget) hydratedRequest.summary = undefined\n\t}\n\tagent.hydrateEvalCrdtBaseCapture(getEvalExportCrdtBaseCapture(archiveSnapshot))\n\treturn agent\n}\n\nfunction getRowsForReplayTarget(\n\tmanifest: EvalExportV1,\n\treplayTarget: ResolvedEvalExportReplayTarget,\n): EvalExportV1[\"crdt\"][\"rows\"] {\n\tconst endRowIndex = getReplayTargetRowIndex(manifest, replayTarget)\n\tassert(\n\t\tendRowIndex >= manifest.crdt.baseRowIndex,\n\t\t\"Requested replay turn predates the exported CRDT base snapshot.\",\n\t\treplayTarget.requestId,\n\t)\n\tassert(\n\t\tendRowIndex <= manifest.crdt.baseRowIndex + manifest.crdt.rows.length,\n\t\t\"Requested replay turn is beyond the exported CRDT rows.\",\n\t\treplayTarget.requestId,\n\t)\n\treturn manifest.crdt.rows.slice(0, endRowIndex - manifest.crdt.baseRowIndex)\n}\n\nfunction getReplayTargetRowIndex(manifest: EvalExportV1, replayTarget: ResolvedEvalExportReplayTarget): number {\n\tif (isUndefined(replayTarget.includedStepCount) || !doesReplayTargetTruncateRequest(replayTarget)) {\n\t\tconst endRowIndex = replayTarget.request.crdtSnapshot?.turnEndRowIndex\n\t\tassert(endRowIndex !== undefined, \"Requested replay turn is missing an endRowIndex.\", replayTarget.requestId)\n\t\treturn endRowIndex\n\t}\n\n\tconst rowIndex = getReplayTargetStepBoundaryRowIndex(replayTarget)\n\tassert(\n\t\trowIndex >= manifest.crdt.baseRowIndex,\n\t\t\"Requested replay step predates the exported CRDT base snapshot.\",\n\t\treplayTarget.requestId,\n\t\treplayTarget.includedStepCount,\n\t)\n\treturn rowIndex\n}\n\nfunction getReplayTargetStepBoundaryRowIndex(replayTarget: ResolvedEvalExportReplayTarget): number {\n\tconst includedStepCount = getReplayTargetIncludedStepCount(replayTarget)\n\tif (includedStepCount === 0 && replayTarget.request.steps.length === 0) {\n\t\tconst rowIndex = replayTarget.request.crdtSnapshot?.turnEndRowIndex\n\t\tassert(\n\t\t\trowIndex !== undefined,\n\t\t\t\"Initial replay for a zero-step request requires a request CRDT row marker.\",\n\t\t\treplayTarget.requestId,\n\t\t)\n\t\treturn rowIndex\n\t}\n\n\tconst step = getReplayTargetBoundaryStep(replayTarget)\n\tconst crdtSnapshot = step.metadata.crdtSnapshot\n\tconst rowIndex = includedStepCount === 0 ? crdtSnapshot?.beforeRowIndex : crdtSnapshot?.afterRowIndex\n\tassert(\n\t\trowIndex !== undefined,\n\t\t`Requested step-boundary replay is missing its CRDT row marker for ${includedStepCount} included steps.`,\n\t\treplayTarget.requestId,\n\t\tincludedStepCount,\n\t)\n\treturn rowIndex\n}\n\nfunction getReplayTargetRuntimeState(replayTarget: ResolvedEvalExportReplayTarget) {\n\tconst includedStepCount = getReplayTargetIncludedStepCount(replayTarget)\n\tif (includedStepCount === 0) return getContextRuntimeStateBeforeRequest(replayTarget)\n\n\tconst step = getReplayTargetBoundaryStep(replayTarget)\n\treturn step.metadata.crdtSnapshot?.afterRuntimeState\n}\n\nfunction getReplayTargetBoundaryStep(replayTarget: ResolvedEvalExportReplayTarget): PersistedAgentHydrationStep {\n\tconst includedStepCount = getReplayTargetIncludedStepCount(replayTarget)\n\tconst stepIndex = includedStepCount === 0 ? 0 : includedStepCount - 1\n\tconst step = replayTarget.request.steps[stepIndex]\n\tassert(step, \"Requested replay step was not found in the eval export.\", replayTarget.requestId, stepIndex)\n\treturn step\n}\n\nfunction getReplayTargetIncludedStepCount(replayTarget: ResolvedEvalExportReplayTarget): number {\n\tconst includedStepCount = replayTarget.includedStepCount\n\tassert(!isUndefined(includedStepCount), \"Step replay target must include an included step count.\")\n\treturn includedStepCount\n}\n"],
  "mappings": "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",
  "names": ["rowIndex"]
}
