replan method
Re-plans dag because of reason.
Preserves succeeded tasks and only re-generates pending/failed ones.
Implementation
Future<ExecutionDAG> replan(
ExecutionDAG dag,
AgentContext context, {
required String reason,
}) async {
_logger.info('Re-planning: "$reason"');
final goal = context.goal;
final newDag = ExecutionDAG(goal.id);
// Keep succeeded tasks
for (final t in dag.succeeded) {
newDag.add(t);
}
// Re-generate the rest
final newTasks = _llm != null
? await _planWithLLM(goal, context, previousResults: dag.succeeded)
: _planRuleBased(goal);
// Avoid re-adding already-succeeded tasks (same description)
final doneDescs =
dag.succeeded.map((t) => t.description.toLowerCase()).toSet();
for (final t in newTasks) {
if (!doneDescs.contains(t.description.toLowerCase())) {
newDag.add(t);
}
}
_logger.info(
'Re-plan complete: ${newDag.size} task(s) '
'(${newDag.succeeded.length} carried over)');
return newDag;
}