- config.py: pydantic-settings with all env vars, privacy mode, per-agent overrides - app_state.py: global singletons (pool, master agent, registry, llm_router, sweep) - main.py: FastAPI lifespan startup — DB pool, LLM router, Odoo client, agents, master - routers/dispatch.py: POST /dispatch with rate limiting and webhook secret auth - routers/approval.py: GET /approval/pending, POST /approval/respond - routers/registry.py: GET/POST /registry/agents, POST /registry/backend overrides - routers/sweep.py: POST /sweep trigger, GET /sweep/status - routers/health.py: GET /health, GET /health/detailed (DB/Odoo/Ollama checks) - requirements.txt: pinned deps (fastapi, uvicorn, asyncpg, anthropic, alembic) - Dockerfile: python:3.11-slim, single uvicorn worker - docker-compose.yml: agent-service + postgres:15, bound to 192.168.2.47:8001 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
58 lines
1.0 KiB
Python
58 lines
1.0 KiB
Python
"""Global application state — singletons accessed by routers."""
|
|
from __future__ import annotations
|
|
from typing import Optional, TYPE_CHECKING
|
|
|
|
if TYPE_CHECKING:
|
|
import asyncpg
|
|
|
|
_db_pool: Optional['asyncpg.Pool'] = None
|
|
_master_agent = None
|
|
_agent_registry = None
|
|
_llm_router = None
|
|
_sweep_coordinator = None
|
|
|
|
|
|
def set_db_pool(pool) -> None:
|
|
global _db_pool
|
|
_db_pool = pool
|
|
|
|
|
|
def get_db_pool():
|
|
return _db_pool
|
|
|
|
|
|
def set_master_agent(agent) -> None:
|
|
global _master_agent
|
|
_master_agent = agent
|
|
|
|
|
|
def get_master_agent():
|
|
return _master_agent
|
|
|
|
|
|
def set_agent_registry(registry) -> None:
|
|
global _agent_registry
|
|
_agent_registry = registry
|
|
|
|
|
|
def get_agent_registry():
|
|
return _agent_registry
|
|
|
|
|
|
def set_llm_router(router) -> None:
|
|
global _llm_router
|
|
_llm_router = router
|
|
|
|
|
|
def get_llm_router():
|
|
return _llm_router
|
|
|
|
|
|
def set_sweep_coordinator(coordinator) -> None:
|
|
global _sweep_coordinator
|
|
_sweep_coordinator = coordinator
|
|
|
|
|
|
def get_sweep_coordinator():
|
|
return _sweep_coordinator
|