run method
Runs one attempt and returns a stream of events.
Implementation
@override
Stream<RunnerEvent> run(AgentRunRequest request) async* {
final sessionId = sessionIdFactory();
final aggregate = _UsageAccumulator();
yield SessionStarted(
sessionId: sessionId,
message: 'LLM session started for ${request.issue.identifier}',
);
// The LLM runner currently performs a single turn per attempt. The
// scheduler decides whether to schedule a continuation retry based on
// tracker state. `request.maxTurns` is forwarded into the runner state so
// future implementations can loop without changing the public contract.
const turn = 1;
const turnsRun = turn;
yield TurnStarted(turnNumber: turn, message: 'Turn $turn');
final outcome = await _runTurn(
request: request,
turn: turn,
aggregate: aggregate,
);
for (final event in outcome.events) {
yield event;
}
yield RunFinished(
succeeded: outcome.succeeded,
turns: turnsRun,
totalUsage: aggregate.snapshot(),
message: outcome.succeeded ? 'Run completed' : 'Run failed',
);
}