| 15 | import { ModelV2 } from "@opencode-ai/core/model" |
| 16 | |
| 17 | export function runScenario(options: Options) { |
| 18 | return (scenario: Scenario) => { |
| 19 | if (scenario.kind === "todo") return Effect.succeed({ status: "skip", scenario } as Result) |
| 20 | return runActive(options, scenario).pipe( |
| 21 | Effect.timeoutOrElse({ |
| 22 | duration: options.scenarioTimeout, |
| 23 | orElse: () => Effect.die(new Error(`scenario timed out after ${Duration.format(options.scenarioTimeout)}`)), |
| 24 | }), |
| 25 | Effect.as({ status: "pass", scenario } as Result), |
| 26 | Effect.catchCause((cause) => Effect.succeed({ status: "fail" as const, scenario, message: Cause.pretty(cause) })), |
| 27 | Effect.scoped, |
| 28 | ) |
| 29 | } |
| 30 | } |
| 31 | |
| 32 | function runActive(options: Options, scenario: ActiveScenario) { |
| 33 | if (options.mode === "auth") return runAuth(scenario) |