diff --git a/doc/morda-v2.md b/doc/morda-v2.md new file mode 100644 index 0000000..40835fc --- /dev/null +++ b/doc/morda-v2.md @@ -0,0 +1,113 @@ +# Новая морда elmAI — v0.57.0+ + +> Проект из morda.txt, обсуждение 7 июня 2026 + +## Макет + +``` +┌─────────────────────────────────────┐ +│ 🔧 elmAI v0.57.0 │ +│ [📡●] [🔌●] [🚗●] [🧠●] │ иконки + светофоры (тап = перепроверка) +├─────────────────────────────────────┤ +│ [ ОШИБКИ / ДИАГНОСТИКА / СТАРТ / СТОП ] │ одна кнопка-трансформер +├─────────────────────────────────────┤ +│ │ +│ поле вывода │ ScrollView +│ │ +├─────────────────────────────────────┤ +│ [📋 История] │ кнопка +├─────────────────────────────────────┤ +│ [________________________] [➤] │ поле ввода 2 строки + кнопка +└─────────────────────────────────────┘ +``` + +## Светофоры + +| Иконка | Текст | Зелёный | Жёлтый | Красный | +|--------|-------|---------|--------|---------| +| 📡 | Сервер | ping < 3с | проверка... | нет связи | +| 🔌 | ELM | BT + ATI ok | подключение... | нет ELM | +| 🚗 | ЭБУ | 0100 ok | — | нет связи с ЭБУ | +| 🧠 | LLM | ping-llm ok | проверка... | нет доступа | + +- Жёлтый только во время проверки +- Тап по иконке → перепроверка конкретного компонента +- LLM проверяется только если Сервер зелёный + +### Таймауты +- ELM: 2 попытки connect по 4с = 8с макс → красный +- Сервер: HTTP GET /api/v1/ping, таймаут 3с → красный +- LLM: HTTP GET /api/v1/ping-llm, таймаут 5с → красный +- Перепроверка при тапе: сбрасывает на жёлтый, запускает проверку + +## Кнопка-трансформер + +Одна кнопка, меняет текст/цвет/действие: + +``` +[ОШИБКИ] ──→ сканирование DTC ──→ [ДИАГНОСТИКА] + ↓ + если сервер ✅ → обычный скрипт + LLM + если сервер ❌ → пояснение в выводе + ↓ + [СТАРТ] + ↓ + газ 3000 → сброс → [СТОП] + ↓ + данные в памяти → жми ➤ +``` + +## Поле ввода + кнопка ➤ + +- Всегда активно, 2 строки +- **Обычный режим**: ввёл текст → ➤ → отправка в чат с LLM +- **После СТОП**: ➤ отправляет накопленные данные теста на сервер + текст (если есть) +- После отправки → результат LLM в выводе + +## История + +- Кнопка, как сейчас +- Выбор записи → диагноз + 📤 Поделиться +- После Share — возврат в приложение (стандартное поведение Android) + +## Flow в деталях + +### 1. Запуск приложения +- Светофоры: ELM жёлтый, Сервер жёлтый, ЭБУ красный, LLM красный +- Проверка ELM (8с) → зелёный/красный +- Проверка Сервера (3с) → зелёный/красный +- Если Сервер зелёный → проверка LLM (5с) → зелёный/красный +- Если ELM зелёный → проверка ЭБУ (через 0100) + +### 2. Ошибки +- Тап ОШИБКИ → scanDtc() → результат в выводе +- Кнопка → ДИАГНОСТИКА + +### 3. Диагностика +- Если сервер зелёный → обычный скрипт L0/L1/L2 → LLM → вывод +- Если сервер красный → «Сервер недоступен. Сделайте тест на месте.» +- Кнопка → СТАРТ + +### 4. СТАРТ +- Подсказка в выводе: «Нажмите газ, 3000 об/мин 3-4с, сбросьте. Нажмите СТОП.» +- Запись 12 PID каждые 250мс +- Кнопка → СТОП + +### 5. СТОП +- Запись остановлена, данные в памяти +- Вывод: «Записано N отсчётов. Нажмите ➤ для отправки.» +- Если нужно — можно снова СТАРТ (новый тест) +- Кнопка → СТАРТ (снова) + +### 6. Отправка (➤) +- Если есть данные теста → POST /api/v1/session/upload с dynamic_samples +- Если есть текст → добавляется как car_info +- LLM-анализ → результат в выводе + +## Что удалить из текущего UI +- Кнопки Сервер, ELM, ЭБУ как отдельные кнопки → станут иконками +- dynamicButtons (На месте / В движении) → не нужны, всё через одну кнопку +- btnDynStart → не нужна +- CheckBox «Полная диагностика» → всегда полная +- tvDtcStatus → не нужен, всё в выводе +- tvPrompt → не нужен diff --git a/morda.md b/morda.md new file mode 100644 index 0000000..cf6da34 --- /dev/null +++ b/morda.md @@ -0,0 +1,125 @@ +# Морда elmAI v2 + +> Новая архитектура UI. Обсуждено 7 июня 2026. + +## Макет + +``` +┌──────────────────────────────────────────┐ +│ 🔧 elmAI v?.?.? │ +│ 📡 Сервер ● 🔌 ELM ● 🚗 ЭБУ ● 🧠 LLM ● │ иконки + светофоры +├──────────────────────────────────────────┤ +│ [ ОШИБКИ / ДИАГНОСТИКА / СТАРТ / СТОП ] │ одна кнопка +├──────────────────────────────────────────┤ +│ │ +│ поле вывода результатов │ +│ │ +├──────────────────────────────────────────┤ +│ [📋 История] │ +├──────────────────────────────────────────┤ +│ [____________________________] [➤] │ поле ввода + кнопка +└──────────────────────────────────────────┘ +``` + +## Иконки и светофоры + +Четыре иконки в строке под версией. Справа от каждой — цветной индикатор. + +| Иконка | Текст | 🟢 Зелёный | 🟡 Жёлтый | 🔴 Красный | +|--------|-------|-----------|----------|-----------| +| 📡 | Сервер | ping < 3с | проверка... | нет связи | +| 🔌 | ELM | BT + ATI ok | подключение... | нет ELM | +| 🚗 | ЭБУ | 0100 ответил | — | нет связи с ЭБУ | +| 🧠 | LLM | ping-llm ok | проверка... | нет доступа | + +- Жёлтый — только на время проверки +- LLM проверяется только если Сервер зелёный +- ЭБУ проверяется только если ELM зелёный +- **Тап по иконке** — перепроверка. Сбрасывает цвет на жёлтый, запускает проверку заново. + +### Таймауты + +- **ELM**: 2 попытки BT-подключения по ~4с = макс 8с → 🔴 +- **Сервер**: HTTP GET `/api/v1/ping`, таймаут 3с → 🔴 +- **LLM**: HTTP GET `/api/v1/ping-llm`, таймаут 5с → 🔴 (только если Сервер 🟢) +- При тапе на иконку проверка запускается немедленно, без задержек. + +### Стартовый сценарий + +1. Открыли приложение → все индикаторы 🟡 или 🔴 +2. ELM 🟡 — пробуем подключиться (8с макс) → 🟢 или 🔴 +3. Сервер 🟡 — ping (3с) → 🟢 или 🔴 +4. Если Сервер 🟢 → LLM 🟡 — ping-llm (5с) → 🟢 или 🔴 +5. Если ELM 🟢 → ЭБУ — пробуем `0100` → 🟢 или 🔴 + +После первого цикла индикаторы не обновляются автоматически — только по тапу. + +## Кнопка-трансформер + +Одна широкая кнопка. Меняет текст, цвет и действие в зависимости от этапа. + +``` +🔴 [⚠️ ОШИБКИ] — начальное состояние + ↓ тап + сканирование DTC (03 + 07) + ↓ +🔵 [🔍 ДИАГНОСТИКА] — ошибки считаны + ↓ тап + ЕСЛИ сервер 🟢 → запрос параметров ЭБУ → отправка на сервер → LLM-анализ → вывод + ЕСЛИ сервер 🔴 → пояснение в выводе: «Сервер недоступен. Сделайте тест.» + ↓ +🟢 [▶ СТАРТ] — готов к динамическому тесту + ↓ тап + подсказка в выводе: «Газ до 3000, 3-4с, сброс. → СТОП» + запись 12 PID каждые 250мс + ↓ +🔴 [⏹ СТОП] — запись идёт + ↓ тап + запись остановлена, данные в памяти + вывод: «Записано N отсчётов. ➤ для отправки.» + ↓ +🟢 [▶ СТАРТ] — можно повторить тест +``` + +- После СТОП можно снова нажать СТАРТ — новый тест, старые данные сохраняются. +- **Отправка данных** — не кнопкой, а через ➤ в поле ввода. + +## Поле вывода + +- ScrollView, моноширинный шрифт +- После done — кнопка «✕ Закрыть» (сворачивает вывод, возвращает все кнопки) +- После Share в истории — возврат в приложение (стандартное поведение Android) + +## Поле ввода + кнопка ➤ + +2 строки, всегда активно. Плейсхолдер: «Что беспокоит? Чем подробнее — тем лучше». + +Кнопка ➤ справа: +- **Обычный режим**: текст из поля → отправка на сервер (`/api/v1/chat`) → сервер спрашивает LLM → ответ в вывод +- **После СТОП**: накопленные данные теста → отправка на сервер (`/api/v1/session/upload`) + текст (если есть) → сервер анализирует через LLM → ответ в вывод +- Ответ → в поле вывода + +## История + +- Кнопка «📋 История» +- Список последних 20 сессий (дата, заголовок, статус загрузки) +- Выбор → диагноз во всплывающем окне +- Кнопка «📤 Поделиться» → системный Share Sheet (Telegram, WhatsApp, Gmail...) +- После Share — возврат в наше приложение + +## Что удаляется + +- Кнопки «📡 Сервер», «🔌 ELM», «🚗 ЭБУ» как отдельные — заменены на иконки со светофорами +- Кнопки «⏱ На месте», «🚗 В движении» — всё через одну кнопку-трансформер +- `tvDtcStatus` («Сначала считай ошибки») — не нужен +- `cbFullMode` (чекбокс полной диагностики) — всегда полная +- `tvPrompt` (оверлей) — не нужен +- `btnDynStart` — не нужен + +## Серверные изменения + +Ничего нового — всё уже есть: +- `/api/v1/ping` ✅ +- `/api/v1/ping-llm` ✅ +- `/api/v1/chat` ✅ +- `/api/v1/session/upload` с `dynamic_samples` ✅