# AUTO-GENERATED by adk-fluent generator — do not edit manually
# Generated from google-adk 1.25.0
# Timestamp: 2026-02-17T13:14:37.902375+00:00

from typing import Any, AsyncGenerator, Callable, Self

from adk_fluent._base import BuilderBase

from google.adk.agents.loop_agent import LoopAgent
from google.adk.agents.parallel_agent import ParallelAgent
from google.adk.agents.sequential_agent import SequentialAgent

class Loop(BuilderBase):
    """A shell agent that run its sub-agents in a loop."""
    def __init__(self, name: str) -> None: ...
    def describe(self, value: str) -> Self: ...
    def after_agent(self, fn: Callable) -> Self: ...
    def before_agent(self, fn: Callable) -> Self: ...
    def after_agent_if(self, condition: bool, fn: Callable) -> Self: ...
    def before_agent_if(self, condition: bool, fn: Callable) -> Self: ...
    def sub_agents(self, value: list[BaseAgent]) -> Self: ...
    def max_iterations(self, value: Union[int, NoneType]) -> Self: ...
    def step(self, agent: BaseAgent | AgentBuilder) -> Self: ...
    def build(self) -> LoopAgent: ...

class FanOut(BuilderBase):
    """A shell agent that runs its sub-agents in parallel in an isolated manner."""
    def __init__(self, name: str) -> None: ...
    def describe(self, value: str) -> Self: ...
    def after_agent(self, fn: Callable) -> Self: ...
    def before_agent(self, fn: Callable) -> Self: ...
    def after_agent_if(self, condition: bool, fn: Callable) -> Self: ...
    def before_agent_if(self, condition: bool, fn: Callable) -> Self: ...
    def sub_agents(self, value: list[BaseAgent]) -> Self: ...
    def branch(self, agent: BaseAgent | AgentBuilder) -> Self: ...
    def build(self) -> ParallelAgent: ...

class Pipeline(BuilderBase):
    """A shell agent that runs its sub-agents in sequence."""
    def __init__(self, name: str) -> None: ...
    def describe(self, value: str) -> Self: ...
    def after_agent(self, fn: Callable) -> Self: ...
    def before_agent(self, fn: Callable) -> Self: ...
    def after_agent_if(self, condition: bool, fn: Callable) -> Self: ...
    def before_agent_if(self, condition: bool, fn: Callable) -> Self: ...
    def sub_agents(self, value: list[BaseAgent]) -> Self: ...
    def step(self, agent: BaseAgent | AgentBuilder) -> Self: ...
    def build(self) -> SequentialAgent: ...
