@startuml opendevin !pragma useIntermediatePackages false class opendevin.action.agent.AgentEchoAction { content: str runnable: bool action: str } class opendevin.action.agent.AgentFinishAction { runnable: bool action: str } class opendevin.observation.AgentMessageObservation { role: str observation: str } class opendevin.action.agent.AgentSummarizeAction { summary: str action: str } class opendevin.action.agent.AgentThinkAction { thought: str runnable: bool action: str } class opendevin.action.base.ExecutableAction { } class opendevin.action.base.NotExecutableAction { } class opendevin.observation.Observation { content: str } class opendevin.action.base.Action { } class opendevin.action.base.NullAction { action: str } class opendevin.action.bash.CmdRunAction { command: str action: str } class opendevin.action.browse.BrowseURLAction { url: str action: str } class opendevin.observation.BrowserOutputObservation { url: str status_code: int error: bool observation: str } class opendevin.action.fileop.FileReadAction { path: str action: str } class opendevin.observation.FileReadObservation { path: str observation: str } class opendevin.action.fileop.FileWriteAction { path: str contents: str action: str } class opendevin.observation.FileWriteObservation { path: str observation: str } class opendevin.action.tasks.AddTaskAction { parent: str goal: str subtasks: list action: str } class opendevin.action.tasks.ModifyTaskAction { id: str state: str action: str } abstract class opendevin.agent.Agent { _registry: Dict[str, Type[Agent]] {static} llm: LLM _complete: None } class opendevin.llm.llm.LLM { model: None api_key: None base_url: None _debug_dir: None _debug_idx: None _debug_id: None _completion: None } class opendevin.controller.agent_controller.AgentController { agent: Agent max_iterations: int workdir: str command_manager: CommandManager state: State plan: Plan callbacks: List[Callable] } class opendevin.observation.AgentErrorObservation { observation: str } class opendevin.controller.command_manager.CommandManager { directory: None shell: None } class opendevin.observation.NullObservation { observation: str } class opendevin.plan.Plan { main_goal: str {static} task: Task {static} main_goal: str task: None } class opendevin.state.State { plan: Plan iteration: int history: List[Tuple[Action, Observation]] updated_info: List[Tuple[Action, Observation]] } class opendevin.observation.CmdOutputObservation { command_id: int command: str exit_code: int observation: str } class opendevin.sandbox.sandbox.DockerInteractive { instance_id: None instance_id: None workspace_dir: None workspace_dir: None workspace_dir: None timeout: int container_image: None container_name: None } class opendevin.observation.UserMessageObservation { role: str observation: str } class opendevin.plan.Task { id: str {static} goal: str {static} parent: Task | None {static} subtasks: List[Task] {static} id: None id: None parent: None goal: str subtasks: None } class opendevin.server.session.Session { websocket: None controller: Optional[AgentController] agent: Optional[Agent] agent_task: None } opendevin.action.base.ExecutableAction <|-- opendevin.action.agent.AgentEchoAction opendevin.action.base.NotExecutableAction <|-- opendevin.action.agent.AgentFinishAction opendevin.observation.Observation <|-- opendevin.observation.AgentMessageObservation opendevin.action.base.NotExecutableAction <|-- opendevin.action.agent.AgentSummarizeAction opendevin.action.base.NotExecutableAction <|-- opendevin.action.agent.AgentThinkAction opendevin.action.base.Action <|-- opendevin.action.base.ExecutableAction opendevin.action.base.Action <|-- opendevin.action.base.NotExecutableAction opendevin.action.base.NotExecutableAction <|-- opendevin.action.base.NullAction opendevin.action.base.ExecutableAction <|-- opendevin.action.bash.CmdRunAction opendevin.action.base.ExecutableAction <|-- opendevin.action.browse.BrowseURLAction opendevin.observation.Observation <|-- opendevin.observation.BrowserOutputObservation opendevin.action.base.ExecutableAction <|-- opendevin.action.fileop.FileReadAction opendevin.observation.Observation <|-- opendevin.observation.FileReadObservation opendevin.action.base.ExecutableAction <|-- opendevin.action.fileop.FileWriteAction opendevin.observation.Observation <|-- opendevin.observation.FileWriteObservation opendevin.action.base.NotExecutableAction <|-- opendevin.action.tasks.AddTaskAction opendevin.action.base.NotExecutableAction <|-- opendevin.action.tasks.ModifyTaskAction opendevin.agent.Agent *-- opendevin.agent.Agent opendevin.agent.Agent *-- opendevin.llm.llm.LLM opendevin.controller.agent_controller.AgentController *-- opendevin.agent.Agent opendevin.observation.Observation <|-- opendevin.observation.AgentErrorObservation opendevin.observation.Observation <|-- opendevin.observation.NullObservation opendevin.plan.Plan *-- opendevin.plan.Task opendevin.state.State *-- opendevin.plan.Plan opendevin.state.State *-- opendevin.observation.CmdOutputObservation opendevin.state.State *-- opendevin.action.base.Action opendevin.state.State *-- opendevin.observation.Observation opendevin.observation.Observation <|-- opendevin.observation.CmdOutputObservation opendevin.observation.Observation <|-- opendevin.observation.UserMessageObservation opendevin.plan.Task *-- opendevin.plan.Task opendevin.server.session.Session *-- opendevin.controller.agent_controller.AgentController opendevin.server.session.Session *-- opendevin.agent.Agent opendevin.controller.agent_controller.AgentController -> opendevin.state.State opendevin.controller.agent_controller.AgentController -> opendevin.plan.Plan opendevin.controller.agent_controller.AgentController -> opendevin.controller.command_manager.CommandManager opendevin.controller.command_manager.CommandManager -> opendevin.sandbox.sandbox.DockerInteractive footer Based on f3fda42; Generated by //py2puml// @enduml