{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../../src/harness/runtime/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEnH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACpD,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE,SAAS,CAAC,EAAE,GACjB,KAAK,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAMxC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAS/F;AAED,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,SAAI,GACjB,YAAY,EAAE,CAQhB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EAAE,MAAM,SAAS,cAAc,EACpG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,CAa3C;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,EAAE,MAAM,SAAS,cAAc,EAC1G,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EACpB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,uBAAuB,CAAC,YAAY,EAAE,CAAC,CAAC,CAWlD;AAED,wBAAgB,cAAc,CAC7B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,cAAc,EAAE,CAAC,CAsB3B;AAED,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACd,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC,CAU5D","sourcesContent":["import type { AgentMessage } from \"../../types.ts\";\nimport type { HarnessEvent, LaneQueuedItem } from \"../agent-harness.ts\";\nimport type { Context } from \"../context.ts\";\nimport { materializeCommittedEntry } from \"../session/commit.ts\";\nimport { buildSessionContext } from \"../session/context.ts\";\nimport { SessionInvariantError } from \"../session/session.ts\";\nimport type { CommitResult, Entry, InboxItem, NewEntry, OperationState, SessionReader } from \"../session/types.ts\";\nimport { pendingEntry } from \"../session/values.ts\";\nimport type { Lane } from \"./lane.ts\";\nimport type { ContinueOperationResult, Drive } from \"./types.ts\";\n\nexport function chainEntries<T extends { id: string }>(\n\tparentId: string | null,\n\titems: readonly T[],\n): Array<T & { parentId: string | null }> {\n\treturn items.map((item) => {\n\t\tconst entry = { ...item, parentId };\n\t\tparentId = item.id;\n\t\treturn entry;\n\t});\n}\n\nexport function entryLifecycleEvents(entry: Entry, lane: string, runId?: string): HarnessEvent[] {\n\tconst operation = runId === undefined ? {} : { runId };\n\treturn entry.type === \"message\"\n\t\t? [\n\t\t\t\t{ type: \"message_start\", lane, ...operation, message: entry.message },\n\t\t\t\t{ type: \"message_end\", lane, ...operation, message: entry.message, entryId: entry.id },\n\t\t\t\t{ type: \"entry_added\", lane, entry },\n\t\t\t]\n\t\t: [{ type: \"entry_added\", lane, entry }];\n}\n\nexport function committedEntryEvents(\n\tentries: readonly NewEntry[],\n\tcommit: CommitResult,\n\tlane: string,\n\trunId?: string,\n\tfirstWriteIndex = 0,\n): HarnessEvent[] {\n\treturn entries.flatMap((entry, index) =>\n\t\tentryLifecycleEvents(\n\t\t\tmaterializeCommittedEntry(entry, commit.seqs[firstWriteIndex + index]!, commit.timestamp),\n\t\t\tlane,\n\t\t\trunId,\n\t\t),\n\t);\n}\n\nexport function readBoundedEntries<TContext extends object | undefined, TState extends OperationState>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tcapability: TState,\n): Promise<ContinueOperationResult<Entry[]>> {\n\treturn lane.continueOperation(\n\t\tcapability,\n\t\tasync (state, _current, _meta, reader) => {\n\t\t\tif (state.tipId === null) throw new SessionInvariantError(\"Run operation has no Branch tip\");\n\t\t\tconst entries = await reader.scanBranch(\n\t\t\t\t{ start: state.tipId, stopAtType: \"compaction\", order: \"newestFirst\" },\n\t\t\t\tdrive.context,\n\t\t\t);\n\t\t\treturn { kind: \"return\", result: entries.reverse() };\n\t\t},\n\t\tdrive.context,\n\t);\n}\n\nexport async function readBoundedContext<TContext extends object | undefined, TState extends OperationState>(\n\tlane: Lane<TContext>,\n\tdrive: Drive,\n\tcapability: TState,\n): Promise<ContinueOperationResult<AgentMessage[]>> {\n\tconst entries = await readBoundedEntries(lane, drive, capability);\n\tif (entries.kind === \"cancel_requested\") return entries;\n\treturn {\n\t\tkind: \"result\",\n\t\tvalue: await buildSessionContext(\n\t\t\tentries.value,\n\t\t\t{ entryProjectors: lane.readConfig().entryProjectors },\n\t\t\tdrive.context,\n\t\t),\n\t};\n}\n\nexport function readLaneQueues(\n\treader: SessionReader,\n\tinbox: readonly InboxItem[],\n\tcontext: Context,\n): Promise<LaneQueuedItem[]> {\n\treturn Promise.all(\n\t\tinbox.map(async (item): Promise<LaneQueuedItem> => {\n\t\t\tconst stored = await reader.getValue(pendingEntry(item.entryId), context);\n\t\t\tif (stored === undefined) {\n\t\t\t\tthrow new SessionInvariantError(`Pending ${item.kind} entry ${item.entryId} is missing its payload`);\n\t\t\t}\n\t\t\tif (stored.value.type === \"message\") {\n\t\t\t\treturn { entryId: item.entryId, kind: item.kind, type: \"message\", message: stored.value.payload };\n\t\t\t}\n\t\t\tif (item.kind !== \"write\") {\n\t\t\t\tthrow new SessionInvariantError(`Pending ${item.kind} entry ${item.entryId} is not a message`);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tentryId: item.entryId,\n\t\t\t\tkind: \"write\",\n\t\t\t\ttype: \"custom\",\n\t\t\t\tcustomType: stored.value.customType,\n\t\t\t\t...(stored.value.payload === undefined ? {} : { data: stored.value.payload }),\n\t\t\t};\n\t\t}),\n\t);\n}\n\nexport function readPendingMessages(\n\treader: SessionReader,\n\tids: readonly string[],\n\tdescription: string,\n\tcontext: Context,\n): Promise<Array<{ entryId: string; message: AgentMessage }>> {\n\treturn Promise.all(\n\t\tids.map(async (entryId) => {\n\t\t\tconst value = await reader.getValue(pendingEntry(entryId), context);\n\t\t\tif (value?.value.type !== \"message\") {\n\t\t\t\tthrow new SessionInvariantError(`${description} ${entryId} is missing its message payload`);\n\t\t\t}\n\t\t\treturn { entryId, message: value.value.payload };\n\t\t}),\n\t);\n}\n"]}