Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# Changelog

## v0.3.2

- Removed obsolete frontend-related artifacts from the backend repository
- Removed stale frontend references from docs and CI
- Clarified backend-only scope of the ATLAS repository
- Reorganized repository documentation layout
- Updated roadmap presentation and repository maintenance notes

## v0.3.1

- Stabilized Telegram integration startup behavior
- Added configuration validation for enabled Telegram mode
- Added safe handling for unsupported Telegram updates
- Added robust Telegram message sending behavior
- Added long response splitting for Telegram replies
- Expanded Telegram integration test coverage
- Improved Telegram setup and troubleshooting documentation
- Centralized static Telegram reply templates

## v0.3.0

- Added initial Telegram integration baseline
- Added Telegram webhook receiver foundation
- Added ATLAS command routing through the backend orchestrator
- Added static Telegram reply templates
- Updated README with Telegram bot workflow documentation

## v0.2.0

- Added Dockerfile for the Spring Boot application
Expand Down
249 changes: 72 additions & 177 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,236 +4,131 @@

<h1 align="center">ATLAS</h1>

**ATLAS** — персональная AI-система для управления режимом, спортом, восстановлением, привычками, питанием и прогрессом.
**ATLAS** — backend-first Telegram-система для режима, тренировок, восстановления, привычек, питания и прогресса.

Проект задуман как мультиагентный Telegram-бот: пользователь общается с одним ботом, а внутри системы запросы обрабатывает команда специализированных AI-агентов.
Проект задуман как мультиагентный Telegram-ассистент: пользователь общается с одним ботом, а backend маршрутизирует запросы к специализированным агентам ATLAS.

<h2 align="center">Идея</h2>
Фронтенд, лендинг и веб-кабинет не входят в основную дорожную карту этого репозитория и могут развиваться отдельно позже.

ATLAS помогает держать жизнь в ритме:
<h2 align="center">Core Scope</h2>

- планировать день и неделю;
- подбирать тренировки под состояние и цель;
- учитывать сон, усталость и восстановление;
- отслеживать привычки;
- помогать с питанием;
- собирать недельную аналитику;
- возвращать пользователя в режим после срывов или перегруза.
- Telegram-first backend-продукт
- Spring Boot приложение с хранением данных в PostgreSQL
- оркестрация агентов для повседневных сценариев пользователя
- безопасная обработка Telegram-команд
- будущая абстракция LLM-провайдера

Главный принцип проекта: **реалистичный план лучше идеального плана, который не будет выполнен**.
<h2 align="center">Agents</h2>

<h2 align="center">Агенты</h2>

В первой версии ATLAS включает 7 логических агентов:

| Агент | Зона ответственности |
| Агент | Ответственность |
|---|---|
| **ATLAS Core** | Главный координатор, маршрутизация запросов |
| **ATLAS Coach** | Спорт, тренировки, нагрузка |
| **ATLAS Planner** | Расписание дня и недели |
| **ATLAS Recovery** | Сон, усталость, восстановление |
| **ATLAS Habits** | Привычки, дисциплина, ритм |
| **ATLAS Fuel** | Питание под цель |
| **ATLAS Report** | Недельная аналитика и прогресс |
| ATLAS Core | оркестрация и маршрутизация |
| ATLAS Coach | спорт, тренировки, нагрузка |
| ATLAS Planner | планирование дня и недели |
| ATLAS Recovery | сон, усталость, восстановление |
| ATLAS Habits | привычки, дисциплина, ритм |
| ATLAS Fuel | поддержка питания |
| ATLAS Report | недельная аналитика и прогресс |

<h2 align="center">Основные команды</h2>
<h2 align="center">Commands</h2>

```text
/start — запуск и первичная настройка
/day — план на день
/week — план на неделю
/workout — тренировка на сегодня
/checkin — чек-ин состояния
/recovery — оценка восстановления
/habits — работа с привычками
/food — питание на день
/report — недельный отчёт
/emergency — минимальный план, если день развалился
/start
/day
/week
/workout
/checkin
/recovery
/habits
/food
/report
/emergency
```

<h2 align="center">Архитектура</h2>

Пользователь взаимодействует с одним Telegram-ботом.
Все агенты существуют внутри backend-приложения как отдельные сервисы или модули.

```mermaid
flowchart TD
U[Telegram User] --> T[Telegram Bot Adapter]
T --> O[ATLAS Core / Orchestrator]

O --> C[ATLAS Coach]
O --> P[ATLAS Planner]
O --> R[ATLAS Recovery]
O --> H[ATLAS Habits]
O --> F[ATLAS Fuel]
O --> REP[ATLAS Report]

O --> M[Memory Service]
M --> DB[(PostgreSQL)]

DB --> MIG[Flyway Migrations]
```

<h2 align="center">Стек</h2>

Базовый стек проекта:

- **Java 21**
- **Spring Boot**
- **Maven**
- **PostgreSQL**
- **Flyway**
- **JUnit 5**
- **Telegram Bot API**
- **LLM Provider Abstraction**

На старте проект не привязан к конкретному LLM-провайдеру.
Интеграция с AI должна быть реализована через интерфейс, чтобы в будущем можно было подключить OpenAI, Spring AI, LangChain4j или другой провайдер.

## Local Startup
<h2 align="center">Stack</h2>

ATLAS можно запустить двумя способами:
- Java 21
- Spring Boot
- Maven
- PostgreSQL
- Flyway
- JUnit 5
- Telegram Bot API

- native Maven run для разработки Java-приложения;
- Docker Compose run для локальной инфраструктуры с PostgreSQL.
<h2 align="center">Local Run</h2>

Native run требует доступный PostgreSQL и переменные окружения для datasource:
Запуск тестов:

```bash
mvn spring-boot:run
mvn test
```

Telegram-интеграция по умолчанию выключена через `ATLAS_TELEGRAM_ENABLED=false`, поэтому локальный инфраструктурный запуск не требует реального Telegram token.

## Docker

Requirements:

- Docker
- Docker Compose
- Java 21 и Maven для локальных тестов без контейнеров

Подготовить локальные переменные окружения:
Локальный запуск с выключенной Telegram-интеграцией:

```bash
cp .env.example .env
ATLAS_TELEGRAM_ENABLED=false mvn spring-boot:run
```

Запустить PostgreSQL и приложение:
Запуск через Docker Compose:

```bash
cp .env.example .env
docker compose up --build
```

Остановить сервисы:
Эндпоинт состояния:

```bash
docker compose down
```

Смотреть логи приложения:

```bash
docker compose logs -f atlas-app
```text
http://localhost:8080/actuator/health
```

Пересобрать приложение:
Эндпоинт Telegram webhook:

```bash
docker compose up --build atlas-app
```text
POST /telegram/webhook
```

Удалить контейнеры и локальный PostgreSQL volume:
<h2 align="center">Configuration</h2>

```bash
docker compose down -v
```
Telegram-интеграция по умолчанию выключена для локальной разработки.

Запустить тесты локально:
Переменные, необходимые для включённого Telegram-режима:

```bash
mvn test
ATLAS_TELEGRAM_ENABLED=true
ATLAS_TELEGRAM_BOT_TOKEN=<token>
ATLAS_TELEGRAM_BOT_USERNAME=<username>
```

Health endpoint доступен по адресу:
Не добавляй реальные секреты в репозиторий.

```text
http://localhost:8080/actuator/health
```

<h2 align="center">Статус проекта</h2>

Проект находится на ранней стадии разработки.
<h2 align="center">Roadmap</h2>

Текущий фокус версии `v0.2.0`:
Основная продуктовая дорожная карта:

```text
1. Локальная Docker-инфраструктура
2. Docker Compose для приложения и PostgreSQL
3. Environment-based configuration
4. Telegram integration toggle
5. Actuator health endpoint
6. README с Docker workflow
7. Базовый CI workflow
v0.3.0 — реальный Telegram-адаптер
v0.3.1 — стабилизация Telegram-интеграции
v0.4.0 — хранение данных пользователей, сообщений и чек-инов
v0.5.0 — онбординг и диалоговые сценарии
v0.6.0 — LLM-абстракция
v0.6.1 — первая интеграция реального LLM-провайдера
```

<h2 align="center">Принцип маршрутизации</h2>

ATLAS Core определяет тип запроса и выбирает нужных агентов.

Примеры:

| Команда | RequestType | Агент |
|---|---|---|
| `/start` | `START` | `ATLAS Core` |
| `/day` | `DAY_PLAN` | `ATLAS Planner` |
| `/week` | `WEEK_PLAN` | `ATLAS Planner` |
| `/workout` | `WORKOUT` | `ATLAS Coach` |
| `/checkin` | `CHECKIN` | `ATLAS Coach`, `ATLAS Recovery` |
| `/recovery` | `RECOVERY` | `ATLAS Recovery` |
| `/habits` | `HABITS` | `ATLAS Habits` |
| `/food` | `FOOD` | `ATLAS Fuel` |
| `/report` | `REPORT` | `ATLAS Report` |
| `/emergency` | `EMERGENCY` | `ATLAS Habits`, `ATLAS Recovery` |

Если запрос не подходит ни под одну команду, он обрабатывается как `GENERAL`.

<h2 align="center">Важное уточнение</h2>

ATLAS не является врачом, диетологом или медицинским специалистом.

Система не должна:

- ставить диагнозы;
- назначать лечение;
- рекомендовать тренироваться через боль;
- предлагать экстремальные диеты;
- поощрять опасное снижение веса;
- игнорировать травмы, боль, проблемы с дыханием, сердцем или давлением.

При серьёзных симптомах бот должен рекомендовать обратиться к врачу или профильному специалисту.

<h2 align="center">Roadmap</h2>
Служебные релизы:

```text
v0.1.0 — skeleton, agents, orchestrator, migrations, README
v0.2.0 — local Docker infrastructure, env config, healthcheck, CI
v0.3.0 — real Telegram bot adapter
v0.4.0 — persistence for messages, profiles, check-ins
v0.5.0 — LLM client abstraction + mock/provider implementation
v0.6.0 — real daily planning and workout flow
v0.3.2 — очистка backend-only репозитория и выравнивание документации
```

<h2 align="center">Цель</h2>
<h2 align="center">Safety</h2>

Сделать персональную AI-систему, которая помогает пользователю не просто получать советы, а каждый день принимать более реалистичные решения по режиму, спорту, восстановлению и дисциплине.
ATLAS не является врачом, диетологом или медицинским специалистом. Система не должна ставить диагнозы, назначать лечение, рекомендовать тренироваться через боль, продвигать экстремальные диеты или игнорировать серьёзные симптомы.

ATLAS должен быть не очередным чат-ботом, а спокойной системой координации:
<h2 align="center">Docs</h2>

```text
Меньше хаоса. Больше ритма.
```
- [Границы backend-части](docs/architecture/backend-scope.md)

<h2 align="center">License</h2>

License will be defined later.
Лицензия будет определена позже.
13 changes: 13 additions & 0 deletions docs/architecture/backend-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Backend Scope

ATLAS is currently a Telegram-first backend product.

The core repository roadmap focuses on:

- Telegram adapter and bot flow stabilization
- persistence for users, messages and check-ins
- onboarding and conversational flows
- backend orchestration for ATLAS agents
- LLM provider abstraction

Frontend surfaces are outside the current core roadmap. A marketing landing page or web dashboard may be built later as a separate product surface, but it should not drive the structure of this backend repository.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<groupId>com.example</groupId>
<artifactId>atlas</artifactId>
<version>0.2.0</version>
<version>0.3.2</version>
<name>ATLAS</name>
<description>Personal AI system for rhythm, training, recovery, habits, nutrition and progress.</description>

Expand Down
5 changes: 3 additions & 2 deletions src/main/java/com/example/atlas/agent/core/CoreAgent.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.example.atlas.agent.AgentContext;
import com.example.atlas.agent.AgentResult;
import com.example.atlas.orchestrator.RequestType;
import com.example.atlas.telegram.TelegramReplyTemplates;
import org.springframework.stereotype.Component;

@Component
Expand All @@ -22,8 +23,8 @@ public boolean supports(RequestType requestType) {
@Override
public AgentResult handle(AgentContext context) {
String content = switch (context.requestType()) {
case START -> "ATLAS на связи. Начнём спокойно: пришли /checkin, чтобы я понял состояние, или /day для плана на день.";
case GENERAL -> "Я могу помочь с режимом, тренировкой, восстановлением, привычками и питанием. Быстрый старт: /checkin или /day.";
case START -> TelegramReplyTemplates.startWelcome();
case GENERAL -> TelegramReplyTemplates.generalFallback();
default -> "Маршрут принят ATLAS Core.";
};

Expand Down
3 changes: 3 additions & 0 deletions src/main/java/com/example/atlas/config/AtlasProperties.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,8 @@ public record Telegram(
String botToken,
String botUsername
) {
public boolean hasBotToken() {
return botToken != null && !botToken.isBlank();
}
}
}
Loading
Loading