Source code for ralph.config.agent_config

"""Agent configuration model definitions."""

from __future__ import annotations

from pydantic import ConfigDict

from ralph.config.enums import AgentTransport, JsonParserType
from ralph.pydantic_compat import RalphBaseModel


[docs] class AgentConfig(RalphBaseModel): """Configuration for a single AI agent. Attributes: cmd: Base command to run the agent. output_flag: Optional output format flag for streaming JSON. yolo_flag: Optional autonomous/non-interactive flag string. verbose_flag: Flag for verbose output. can_commit: Whether the agent can run git commit. json_parser: Which JSON parser to use for agent output. model_flag: Optional model/provider flag. print_flag: Optional print flag for non-interactive output mode. streaming_flag: Optional streaming flag for partial JSON messages. session_flag: Optional session continuation flag template. display_name: Human-readable display name for UI/UX. transport: Invocation/MCP transport type for the agent runtime. """ model_config = ConfigDict(frozen=True) cmd: str output_flag: str | None = None yolo_flag: str | None = None verbose_flag: str | None = None can_commit: bool = False json_parser: JsonParserType = JsonParserType.GENERIC model_flag: str | None = None print_flag: str | None = None streaming_flag: str | None = None session_flag: str | None = None display_name: str | None = None transport: AgentTransport | None = None
[docs] def model_post_init(self, _context: object) -> None: if self.transport is not None: return parser_to_transport = { JsonParserType.CLAUDE: AgentTransport.CLAUDE, JsonParserType.CODEX: AgentTransport.CODEX, JsonParserType.OPENCODE: AgentTransport.OPENCODE, } command_to_transport = { "claude": AgentTransport.CLAUDE_INTERACTIVE, "codex": AgentTransport.CODEX, "opencode": AgentTransport.OPENCODE, "agy": AgentTransport.AGY, } command_name = self.cmd.split()[0] if self.cmd else "" inferred_transport = parser_to_transport.get( self.json_parser, command_to_transport.get(command_name, AgentTransport.GENERIC), ) object.__setattr__(self, "transport", inferred_transport)
__all__ = ["AgentConfig"]