Files
microdao-daarion/gateway-bot/app.py
Apple 90080c632a fix(fabric): use broadcast subject for NATS capabilities discovery
NATS wildcards (node.*.capabilities.get) only work for subscriptions,
not for publish. Switch to a dedicated broadcast subject
(fabric.capabilities.discover) that all NCS instances subscribe to,
enabling proper scatter-gather discovery across nodes.

Made-with: Cursor
2026-02-27 03:20:13 -08:00

89 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
FastAPI app instance for Gateway Bot
"""
import logging
import os
import sys
from pathlib import Path
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from http_api import router as gateway_router
from http_api_doc import router as doc_router
import gateway_boot
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s"
)
logger = logging.getLogger(__name__)
app = FastAPI(
title="Bot Gateway with DAARWIZZ",
version="1.0.0",
description="Gateway service for Telegram/Discord bots → DAGI Router"
)
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include gateway routes
app.include_router(gateway_router, prefix="", tags=["gateway"])
app.include_router(doc_router, prefix="", tags=["docs"])
@app.on_event("startup")
async def startup_stepan_check():
"""Check crews + agromatrix_tools availability. Do not crash gateway if missing."""
# Шляхи для inproc: gateway volume (основний) або repo root (dev)
gw_dir = str(Path(__file__).parent) # /app/gateway-bot
repo_root = os.getenv("AGX_REPO_ROOT", "/opt/microdao-daarion").strip()
candidate_paths = [
gw_dir, # /app/gateway-bot (crews/ тут)
str(Path(gw_dir) / "agromatrix-tools"), # /app/gateway-bot/agromatrix-tools
repo_root, # /opt/microdao-daarion
str(Path(repo_root) / "packages" / "agromatrix-tools"),
str(Path(repo_root) / "packages" / "agromatrix-tools" / "agromatrix_tools"),
]
for p in candidate_paths:
if p and p not in sys.path:
sys.path.insert(0, p)
try:
import crews.agromatrix_crew.run # noqa: F401
import agromatrix_tools # noqa: F401
gateway_boot.STEPAN_IMPORTS_OK = True
logger.info("Stepan inproc: crews + agromatrix_tools OK; STEPAN_IMPORTS_OK=True")
except Exception as e:
logger.error(
"Stepan disabled: crews or agromatrix_tools not available: %s. "
"Set AGX_REPO_ROOT, mount crews and packages/agromatrix-tools.",
e,
)
gateway_boot.STEPAN_IMPORTS_OK = False
@app.get("/")
async def root():
return {
"service": "bot-gateway",
"version": "1.0.0",
"agent": "DAARWIZZ",
"endpoints": [
"POST /telegram/webhook",
"POST /discord/webhook",
"POST /api/doc/parse",
"POST /api/doc/ingest",
"POST /api/doc/ask",
"GET /api/doc/context/{session_id}",
"GET /health"
]
}