Files
Rune-Spec/tests/agent/tier2-scenario.ts

70 lines
1.9 KiB
TypeScript

import type { RuneConfig } from "../../src/types.ts";
import type { AgentRunner, AgentResult } from "./runner.ts";
import { CommandLevelRunner } from "./tier1-command.ts";
export type PlanOverride = (
projectDir: string,
changeName: string,
docName: string,
config: RuneConfig,
) => Promise<AgentResult>;
export type BuildOverride = (
projectDir: string,
changeName: string,
config: RuneConfig,
) => Promise<AgentResult>;
export type ArchiveOverride = (
projectDir: string,
changeName: string,
config: RuneConfig,
) => Promise<AgentResult>;
export interface ScenarioOverrides {
plan?: PlanOverride;
build?: BuildOverride;
archive?: ArchiveOverride;
}
export class ScenarioRunner implements AgentRunner {
readonly tier = 2;
private defaults: CommandLevelRunner;
private overrides: ScenarioOverrides;
constructor(defaults: CommandLevelRunner, overrides: ScenarioOverrides = {}) {
this.defaults = defaults;
this.overrides = overrides;
}
async runPlan(
projectDir: string,
changeName: string,
docName: string,
config: RuneConfig,
): Promise<AgentResult> {
if (this.overrides.plan) {
return this.overrides.plan(projectDir, changeName, docName, config);
}
return this.defaults.runPlan(projectDir, changeName, docName, config);
}
async runBuild(projectDir: string, changeName: string, config: RuneConfig): Promise<AgentResult> {
if (this.overrides.build) {
return this.overrides.build(projectDir, changeName, config);
}
return this.defaults.runBuild(projectDir, changeName, config);
}
async runArchive(
projectDir: string,
changeName: string,
config: RuneConfig,
): Promise<AgentResult> {
if (this.overrides.archive) {
return this.overrides.archive(projectDir, changeName, config);
}
return this.defaults.runArchive(projectDir, changeName, config);
}
}