Imports:
  - Usages:
      - tool
      - resource
    From: sententia/endpoints
  - Usages:
      - ask_resource
      - files_resource
      - search_resource
    From: sententia/api
  - Types:
      - SententiaApp
    Usages:
      - running
      - configuration
    From: sententia/app
  - Usages:
      - indexing
    From: sententia/index
  - Usages:
      - openai_provider
      - anthropic_provider
    From: sententia/llm
  - Usages:
      - search_tool
      - ask_tool
      - files_tool
    From: sententia/mcp
  - Usages:
      - reading
    From: sententia/storage

Usages:
  conventions: .goga/usages/conventions.md

Annotations: |
  Использовать `conventions` для правил написания кода и тестов.

  Корневая клетка сервиса Sententia.
  Содержит точку входа приложения — main routine.
  Точка сборки: создание всех компонентов и запуск приложения.
  Использовать практику `running` для понимания запуска приложения.
  Использовать практику `configuration` для понимания параметров конфигурации.

---

"main() -> void:None":
  location: __main__.py
  annotations: |
    Точка входа и сборки приложения.
    Парсит аргументы CLI, создаёт все компоненты, регистрирует маршруты и запускает сервер.

    Аргументы CLI:
      data_dir      позиционный аргумент — путь к директории с Markdown-файлами
      --index-path  путь к файлу индекса
      --llm-protocol  тип LLM провайдера
      --llm-url     URL API endpoint
      --llm-model   идентификатор модели
      --llm-token   API-ключ (опционально)
      --mcp         флаг режима MCP Server (по умолчанию False)
      --host        адрес привязки (по умолчанию 0.0.0.0)
      --port        порт сервера (по умолчанию 8000)

    Переменные окружения:
    - SENTENTIA_LLM_TOKEN - задает токен для доступа к llm

    Матчинг протокола к провайдеру:
    - openai  → OpenaiProvider (использовать `openai_provider`)
    - ollama  → OpenaiProvider (использовать `openai_provider`)
    - anthropic → AnthropicProvider (использовать `anthropic_provider`)

    Общий этап сборки (для обоих режимов):
    1. Создать хранилище файлов с `reading` практикой
    2. Создать индекс с `indexing` практикой
    3. Создать LLM-провайдер по --llm-protocol (см. матчинг выше)

    Режим --mcp=True:
    4. Создать MCP tools с `search_tool`, `ask_tool`, `files_tool` практиками
    5. Создать `SententiaApp` с `running` практикой
    6. Зарегистрировать tools с использованием практики `tool` и запустить MCP Server

    Режим --mcp=False (по умолчанию):
    4. Создать REST ресурсы с `search_resource`, `ask_resource`, `files_resource` практиками
    5. Создать `SententiaApp` с `running` практикой
    6. Зарегистрировать ресурсы с использованием практики `resource` и запустить FastAPI

    Использовать практику `running` для создания, регистрации и запуска приложения.
    Использовать практику `configuration` для списка параметров и значений по умолчанию.

---

Author: Goga
CreatedAt: 16/05/26
Description: |
  Точка входа сервиса Sententia. Сборка и запуск всех компонентов.
