### **Техническое Задание на доработку AI-агента для генерации отчётов в формате Markdown (.md)**

**Проект:** Модификация существующего бэкенда для генерации отчётов.

#### **1. Общее описание**

Целью данной доработки является замена модуля генерации PDF-файлов на более простой и быстрый модуль, который будет формировать и отдавать пользователю итоговый отчёт в текстовом формате **Markdown (`.md`)**.

Бэкенд по-прежнему будет выполнять многоступенчатый процесс исследования (вызов `deep-research` API, затем синтез отчёта через `Ollama`), но финальным результатом будет текстовый `.md` файл, а не PDF.

#### **2. Требования к реализации**

**2.1. Модификация эндпоинта `/api/parser/report`**

- **Метод:** `POST`

- **Тело запроса (`Request Body`):** Остаётся без изменений (принимает `query`, `lang`, `depth` и т.д.).

- **Успешный ответ (`Success Response`):** **(Ключевое изменение)**

  - **Код:** `200 OK`
  - **Заголовки:**
    - `Content-Type: text/markdown; charset=UTF-8` (Важно для корректного отображения кириллицы).
    - `Content-Disposition: attachment; filename="research_report.md"` (Этот заголовок заставит браузер скачать файл, а не просто показать его).
  - **Тело ответа:** Готовый текст отчёта в формате Markdown.

- **Ответы с ошибками (`Error Responses`):** Остаются без изменений (`400`, `500` и т.д.).

**2.2. Изменение логики работы агента**

Процесс будет выглядеть так:

1.  **Приём и валидация запроса:** Логика остаётся без изменений.
2.  **Вызов `deep-research` API:** Логика остаётся без изменений. Бэкенд получает "сырые" `learnings` и `visitedUrls`.
3.  **Вызов Ollama для синтеза:** Логика остаётся без изменений. Бэкенд получает от Ollama финальный, красиво структурированный отчёт в виде строки Markdown.
4.  **ОТМЕНА:** Шаг генерации PDF полностью удаляется. Сервис `ResearchPdfService` и зависимость от библиотеки iText больше не нужны.
5.  **НОВЫЙ ШАГ: Формирование итогового `.md` файла:**
    - Бэкенд берёт строку Markdown, полученную от Ollama.
    - К этой строке в конец добавляется раздел "Источники". Бэкенд должен программно сгенерировать этот раздел, добавив заголовок `## Источники` и пронумерованный список URL-адресов из `visitedUrls`.
6.  **Отправка `.md` файла клиенту:** Бэкенд отправляет итоговую строку (отчёт + источники) как тело HTTP-ответа с заголовками, указанными в п. 2.1.

**2.3. Формат итогового Markdown-файла**

Итоговая строка, которая будет отправлена клиенту, должна иметь следующую структуру:

```markdown
# {Заголовок, сгенерированный Ollama, или просто ваш query}

## Введение

... текст от Ollama ...

## Основная часть

... текст от Ollama ...

### Подраздел

... текст от Ollama ...

## Заключение

... текст от Ollama ...

---

## Источники

1. https://...
2. https://...
3. ...
```

#### **3. Технологический стек**

- **Бэкенд:** Java/Spring Boot (без изменений).
- **HTTP-клиент:** `WebClient` (без изменений)

#### **4. Нефункциональные требования**

- **Асинхронность:** Рекомендация по асинхронной обработке запроса (через `jobId` и отдельный эндпоинт для статуса) остаётся актуальной, так как сам процесс исследования по-прежнему занимает много времени.

#### **5. Ожидаемый результат**

При отправке `POST` запроса на эндпоинт `/api/parser/report` браузер пользователя должен инициировать скачивание файла `research_report.md`. Этот файл должен корректно открываться в любом текстовом редакторе, поддерживающем Markdown, и содержать полный, структурированный отчёт на русском языке вместе со списком источников.
