run method

  1. @override
Stream<RunnerEvent> run(
  1. AgentRunRequest request
)
override

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',
  );
}