Parent
Часть Phase 4 декомпозиции orchestrator.py: #494
Sub-issues
Цель
Финальная сборка: заменить монолитный startup/shutdown модульной инициализацией. orchestrator.py ≤ 200 строк.
Что сделать
Модульный startup
Заменить 394-строчный startup_event() на модульную инициализацию:
- Каждый модуль реализует
async def init(container) или create_service()
- Orchestrator вызывает init() по графу зависимостей:
- core (DB, auth, config, roles, workspace)
- knowledge, llm, speech (фундаментальные сервисы)
- chat (зависит от knowledge + llm)
- channels, kanban, claude_code (зависят от chat)
- crm, ecommerce, sales (зависят от knowledge + chat)
- monitoring, admin
Graceful shutdown
Заменить однострочный shutdown_database():
async def shutdown():
await task_registry.cancel_all(timeout=10)
await channels.stop_all_bots()
await bridge.stop()
await db.close()
Deployment modes
Заменить 9 scattered if-statements на загрузку модулей по mode:
MODULES = {
"full": [core, knowledge, llm, speech, chat, channels, ...],
"cloud": [core, knowledge, llm, chat, channels, ...], # без speech, telephony
"local": [core, knowledge, llm, speech, chat, channels, ...],
}
Целевой orchestrator.py (~100-200 строк):
- FastAPI app creation
- Middleware (CORS, rate limiter, security headers)
- Module loading по deployment mode
- Startup/shutdown lifecycle
- Vue admin mount + main
Нюансы
- ServiceContainer timing — роутеры получают сервисы через
Depends(get_container). Container должен быть полностью заполнен до первого запроса. FastAPI lifespan гарантирует это
- Helper-функции (
_seed_system_roles, _seed_default_workspace, _auto_start_telegram_bots, etc.) — должны быть перенесены в домены к этому моменту
- Условная регистрация роутеров — часть роутеров (speech, gsm, finetune) не нужны в cloud mode
DEV_MODE Vite proxy — оставить в orchestrator.py
- Обратная совместимость —
orchestrator:app используется в uvicorn.run() и Docker CMD
Зависимости
Критерии готовности
Parent
Часть Phase 4 декомпозиции orchestrator.py: #494
Sub-issues
Цель
Финальная сборка: заменить монолитный startup/shutdown модульной инициализацией. orchestrator.py ≤ 200 строк.
Что сделать
Модульный startup
Заменить 394-строчный
startup_event()на модульную инициализацию:async def init(container)илиcreate_service()Graceful shutdown
Заменить однострочный
shutdown_database():Deployment modes
Заменить 9 scattered if-statements на загрузку модулей по mode:
Целевой orchestrator.py (~100-200 строк):
Нюансы
Depends(get_container). Container должен быть полностью заполнен до первого запроса. FastAPI lifespan гарантирует это_seed_system_roles,_seed_default_workspace,_auto_start_telegram_bots, etc.) — должны быть перенесены в домены к этому моментуDEV_MODEVite proxy — оставить в orchestrator.pyorchestrator:appиспользуется вuvicorn.run()и Docker CMDЗависимости
Критерии готовности
orchestrator.py≤ 200 строкinit()