import json from typing import Any from sqlalchemy.orm import Session from app.tools import documents, fitness, homelab, memory, pomodoro, projects, reminders, shopping from app.tools._dispatch import NOT_HANDLED, ToolContext _HANDLERS = ( pomodoro, projects, memory, documents, fitness, homelab, shopping, reminders, ) TOOL_DEFINITIONS: list[dict[str, Any]] = [] for _handler in _HANDLERS: TOOL_DEFINITIONS.extend(_handler.TOOL_DEFINITIONS) async def execute_tool( db: Session, name: str, arguments: dict[str, Any], *, session_id: int | None = None, user_id: int, ) -> str: ctx = ToolContext(db=db, user_id=user_id, session_id=session_id) try: for handler in _HANDLERS: result = await handler.execute(name, arguments, ctx) if result is not NOT_HANDLED: return json.dumps(result, ensure_ascii=False) return json.dumps({"error": f"Unknown tool: {name}"}, ensure_ascii=False) except ValueError as exc: return json.dumps({"error": str(exc)}, ensure_ascii=False) except Exception as exc: return json.dumps({"error": str(exc)}, ensure_ascii=False)