70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import type { RuneConfig } from "../../src/types.ts";
|
|
import type { AgentRunner, AgentResult } from "./runner.ts";
|
|
import { CommandLevelRunner } from "./agent-mock.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);
|
|
}
|
|
}
|