1import { assert, describe, it } from "@effect/vitest";
2import * as Tracer from "effect/Tracer";
3import * as Effect from "effect/Effect";
4
5import { materializeReplayTranscriptWorkspace } from "@t3tools/provider-testing/replayTranscript";
6import { CodexOrchestratorReplayHarness } from "../Adapters/CodexAdapterV2.testkit.ts";
7import {
8 findReplayFixture,
9 itRunsReplayFixtures,
10 runReplayFixture,
11} from "./ProviderReplayFixtures.ts";
12
13describe("Codex replay fixtures", () => {
14 itRunsReplayFixtures("codex", (input) =>
15 runReplayFixture({
16 ...input,
17 harness: CodexOrchestratorReplayHarness,
18 materializeWorkspace: (transcript, workspace) =>
19 Effect.succeed(materializeReplayTranscriptWorkspace(transcript, workspace)),
20 }),
21 );
22});
23
24it.effect(
25 "persists recorded Codex snapshots through provider transactions in the real run consumer",
26 () =>
27 Effect.gen(function* () {
28 const fixture = findReplayFixture("multi_turn")!;
29 const driver = fixture.providers.find((provider) => provider.driver === "codex")!;
30 const writes: number[] = [];
31 const tracer = Tracer.make({
32 span(options) {
33 const span = new Tracer.NativeSpan(options);
34 const end = span.end.bind(span);
35 span.end = (time, exit) => {
36 end(time, exit);
37 if (span.name === "orchestrationV2.EventSink.providerBatch") {
38 writes.push(Number(span.attributes.get("orchestration_v2.batch_writes")));
39 }
40 };
41 return span;
42 },
43 });
44 yield* runReplayFixture({
45 fixtureName: fixture.name,
46 buildInput: fixture.buildInput,
47 driver,
48 harness: CodexOrchestratorReplayHarness,
49 materializeWorkspace: (transcript, workspace) =>
50 Effect.succeed(materializeReplayTranscriptWorkspace(transcript, workspace)),
51 }).pipe(Effect.withTracer(tracer), Effect.withTracerEnabled(true));
52 assert.equal(
53 writes.reduce((total, count) => total + count, 0),
54 6,
55 );
56 assert.isTrue(writes.every((count) => count <= 3));
57 }),
58);