Skip to content
Source
Sign inSign up

OpenCodeReplayFixtures.integration.test.ts

68 lines2.4 KB

1import { describe, it } from "@effect/vitest";
2import type { ProviderReplayEntry } from "@t3tools/contracts";
3import * as Effect from "effect/Effect";
4​
5import { OpenCodeOrchestratorReplayHarness } from "../Adapters/OpenCodeAdapterV2.testkit.ts";
6import {
7 OPENCODE2_HTTP_PROTOCOL,
8 OpenCode2OrchestratorReplayHarness,
9} from "../Adapters/OpenCode2AdapterV2.testkit.ts";
10import {
11 findReplayFixture,
12 itRunsReplayFixtures,
13 readReplayFixtureTranscript,
14 runReplayFixture,
15 type ReplayFixtureCase,
16} from "./ProviderReplayFixtures.ts";
17​
18// OpenCode fixtures are recorded against either the v1 or the v2 HTTP protocol.
19function runOpenCodeReplayFixture(input: ReplayFixtureCase) {
20 return readReplayFixtureTranscript(input.driver.transcriptFile).pipe(
21 Effect.flatMap((transcript) =>
22 transcript.protocol === OPENCODE2_HTTP_PROTOCOL
23 ? runReplayFixture({ ...input, harness: OpenCode2OrchestratorReplayHarness })
24 : runReplayFixture({ ...input, harness: OpenCodeOrchestratorReplayHarness }),
25 ),
26 );
28​
29describe("OpenCode replay fixtures", () => {
30 itRunsReplayFixtures("opencode", runOpenCodeReplayFixture);
31​
32 it.effect.each(
33 (
34 [
35 ["opencode2_subagent", "session.execution.started.2"],
36 ["opencode2_background", "session.execution.started.3"],
37 ] as const
38 ).flatMap(([fixtureName, label]) => {
39 const fixture = findReplayFixture(fixtureName);
40 const provider = fixture?.providers[0];
41 return fixture === undefined || provider === undefined
42 ? []
43 : [[fixtureName, label, fixture, provider] as const];
44 }),
45 )(
46 "runs %s when %s is an execution start this build cannot decode",
47 ([fixtureName, label, fixture, provider]) =>
48 runOpenCodeReplayFixture({
49 fixtureName,
50 buildInput: fixture.buildInput,
51 driver: provider,
52 transformTranscript: (transcript) => ({
53 ...transcript,
54 entries: transcript.entries.map((entry) =>
55 entry.type === "emit_inbound" && entry.label === label
56 ? undecodableEvent(entry)
57 : entry,
58 ),
59 }),
60 }),
61 );
62});
63​
64function undecodableEvent(entry: ProviderReplayEntry): ProviderReplayEntry {
65 if (entry.type !== "emit_inbound") return entry;
66 const frame = entry.frame as { readonly event: Record<string, unknown> };
67 return { ...entry, frame: { ...frame, event: { ...frame.event, durable: "not-an-envelope" } } };