from sqlalchemy import select from sqlalchemy.orm import Session from app.db import AuditLogORM, SettingORM, ToolStateORM from app.llm.planner import build_prompt_context from app.memory.store import MemoryService from app.models import RuntimeSettings from app.telegram.auth import is_authorized class WiseClawOrchestrator: def __init__(self, session: Session) -> None: self.session = session self.memory = MemoryService(session) def get_runtime_settings(self) -> RuntimeSettings: settings = { item.key: item.value for item in self.session.scalars(select(SettingORM)) } tools = list(self.session.scalars(select(ToolStateORM).order_by(ToolStateORM.name.asc()))) return RuntimeSettings( terminal_mode=int(settings["terminal_mode"]), search_provider=settings["search_provider"], ollama_base_url=settings["ollama_base_url"], default_model=settings["default_model"], tools=[{"name": tool.name, "enabled": tool.enabled} for tool in tools], ) def handle_text_message(self, telegram_user_id: int, text: str) -> str: if not is_authorized(self.session, telegram_user_id): return "This Telegram user is not authorized for WiseClaw." self.memory.add_item(f"user:{telegram_user_id}:{text}") context = build_prompt_context( message=text, runtime=self.get_runtime_settings(), memory=self.memory.latest_items(limit=5), ) response = ( "WiseClaw scaffold received your message.\n\n" f"Prompt context prepared for model `{context['model']}` with " f"{len(context['memory'])} memory items." ) self.session.add(AuditLogORM(category="telegram", message=f"telegram:{telegram_user_id}:{text}")) self.session.commit() return response