fix: handle mode as string due to use_enum_values=True

The BaseSchema has use_enum_values=True which makes Pydantic store
enum values as strings. Added _get_mode() helper to convert back to
PermissionMode enum before passing to agent methods.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-14 15:07:55 +01:00
co-authored by Claude Opus 4.5
parent 9be877e9a0
commit 2f11ad79cf
+17 -4
View File
@@ -23,6 +23,13 @@ from src.domains.agents.schemas import (
AgentListResponse,
PermissionMode,
)
def _get_mode(mode_value: str | PermissionMode) -> PermissionMode:
"""Convert mode string to enum (handles use_enum_values=True)."""
if isinstance(mode_value, PermissionMode):
return mode_value
return PermissionMode(mode_value)
from src.shared.logging import logged, get_logger
logger = get_logger(__name__)
@@ -56,18 +63,21 @@ async def run_agent(request: AgentRunRequest) -> AgentRunResponse:
detail=f"Unknown agent type: {request.agent_type}"
)
# Convert mode string to enum (use_enum_values=True in schema)
mode = _get_mode(request.mode)
try:
# Run the agent with mode
response = await agent.run(
request.prompt,
working_dir=request.working_dir,
mode=request.mode,
mode=mode,
)
return AgentRunResponse(
response=response,
agent_type=request.agent_type,
mode=request.mode,
mode=request.mode, # Keep original for response
success=True,
)
@@ -103,19 +113,22 @@ async def stream_agent(request: AgentRunRequest) -> StreamingResponse:
detail=f"Unknown agent type: {request.agent_type}"
)
# Convert mode string to enum (use_enum_values=True in schema)
mode = _get_mode(request.mode)
async def generate():
try:
async for chunk in agent.run_stream(
request.prompt,
working_dir=request.working_dir,
mode=request.mode,
mode=mode,
):
# SSE format: data: {json}\n\n
event = {"event": "chunk", "data": chunk}
yield f"data: {json.dumps(event)}\n\n"
# Signal completion
yield f"data: {json.dumps({'event': 'done', 'mode': request.mode.value})}\n\n"
yield f"data: {json.dumps({'event': 'done', 'mode': mode.value})}\n\n"
except Exception as e:
logger.exception(f"Stream error: {e}")