From 24d401943b6fcc5d859b415b1d1ae562fe819159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=91=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=B5=D0=B2?= Date: Sat, 13 Jun 2026 17:25:56 +0800 Subject: [PATCH] Remove AGENTS.md from repo (local only) --- AGENTS.md | 279 ------------------------------------------------------ 1 file changed, 279 deletions(-) delete mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 175e05c..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,279 +0,0 @@ -# Mistral Chat App - Development Context - -## Project Overview - -Android-приложение для чата с Mistral AI. Перспективный проект с развитием в сторону AI-агента с памятью, tools и автономной работой. - -**Основные технологии:** -- Kotlin + Android (minSdk 26, targetSdk 34) -- Room + SQLCipher (encrypted database) -- OkHttp для API -- Material Design 3 -- Russian language UI - -**Расположение проекта:** -``` -/Users/alexabudaev/Documents/Zed/mistral-chat-app/ -``` - -**⚠️ ВАЖНО: Принципы разработки** -- Приложение должно работать БЕЗ платных подписок и инвестиций -- Всегда использовать собственные разработки или бесплатные решения -- Не рассчитывать на имеющиеся платные API при планировании функций -- Сначала находим бесплатное решение, потом реализуем -- **Если что-то невозможно сделать без платных API или ты не можешь понять задачу - говори честно!** -- При планировании любого следующего этапа следует тщательно анализировать возможность реализовать ту или иную функцию не только исходя из программной совместимости, но и с учётом наличия бесплатных версий необходимых сервисов, API и других продуктов (или возможности написать собственное решение) - ---- - -## Completed Work - -### ✅ Core Features -- Чат с Mistral API (Chat Completion) -- Управление профилями (до 10 профилей) -- Управление сессиями (множественные чаты) -- **Генерация названия сессии** - после 2-го сообщения AI генерирует краткое название (3-5 слов) -- Шифрованное хранилище (SQLCipher + EncryptedSharedPreferences) -- Валидация API ключа (32+ символов, A-Z, a-z, 0-9) -- Левое drawer-меню с диалогами -- Тёмная/светлая тема - -### ✅ UI/UX -- Material Design 3 -- Русский язык интерфейса -- Отступы в поле ввода (12dp) -- Прокрутка к новым сообщениям -- **Долгий тап на сообщение** - меню Копировать/Редактировать/Удалить -- **Скролл в поле system prompt** - multiline text field scrollable -- **Адаптивные цвета AlertDialog** - Material Design 3 colors - -### ✅ Bug Fixes -- Исправлена ошибка "ответ в Toast вместо чата" - теперь только явные ошибки показываются через Toast -- Сортировка drawer меню - профили, настройки, остальное -- **WakeLock** - приложение остаётся активным при выключенном экране (ожидание ответа API) -- **Timeout 120 сек** - увеличен с 60 до 120 секунд для больших ответов -- **Foreground Service** - приложение продолжает работу в фоне при выключенном экране (ожидание ответа API) -- **Уведомление о ответе ИИ** - при получении ответа в фоне показывается системное уведомление с текстом ответа и звуком/вибрацией, нажатие открывает сессию с ответом - -### ✅ Security -- API ключ: EncryptedSharedPreferences (AES-256-GCM) -- Ключ БД: EncryptedSharedPreferences (AES-256-SIV + AES-256-GCM) -- Профили, сессии, сообщения: SQLCipher -- CalDAV данные: зашифрованы (url, username, password) - -**⚠️ ВАЖНО: Все чувствительные данные должны храниться в EncryptedSharedPreferences:** -- API ключи, пароли (CalDAV, email), ключи БД, токены - ---- - -## Tools - -### 🌐 Web Search -- ✅ Russian Wikipedia API (бесплатно, без API ключа) -- ✅ English Wikipedia API -- Ограничение: 4000 символов на ответ - -### 🌤️ Weather -- ✅ Open-Meteo API (полностью бесплатно) -- Geocoding API + Weather API -- Текущая погода + прогноз на 7 дней - -### 🔗 OpenUrlTool -- ✅ HTTP GET к любому URL -- ✅ RSS/Atom парсинг (lenta.ru, kommersant.ru) -- Ограничение: 4000 символов, таймаут 10 сек - -### ⏰ Time Tools -- ✅ get_local_time - возвращает timestamp в миллисекундах -- ✅ get_date - текущая дата - -### 📅 CalDAV Calendar -- ✅ calendar_add_event - создание событий с VALARM (уведомления) -- ✅ calendar_get_events - получение списка событий -- ✅ calendar_delete_event - удаление событий -- Баikal сервер интеграция - -### 💾 Memory Tools -- ✅ memory_store, memory_learn, memory_forget -- ✅ memory_reinforce, memory_preference - ---- - -## Tool Execution Parameters - -| Параметр | Значение | -|----------|----------| -| Max iterations | 15 | -| Timeout на итерацию | 120 сек | -| Retry при CANCEL | до 2 раз | -| Result truncation | 2000 символов | -| WakeLock | ✅ для длительных запросов | - ---- - -## Active Plan - -### Phase 3: CalDAV Calendar + Local Reminders (✅ В основном готово) - -**Два режима:** -1. **CalDAV** — синхронизация с Baikal сервером -2. **Local** — автономная напоминалка в памяти AI - -**CalDAV Status:** -| Задача | Статус | -|--------|--------| -| Подключение к Baikal | ✅ | -| calendar_add_event | ✅ Работает (с VALARM) | -| calendar_get_events | ✅ Работает (лимит 100 событий) | -| calendar_delete_event | ✅ Работает (только свои события) | -| VALARM (уведомления) | ✅ Добавляются к событиям | -| UID consistency | ✅ Исправлено | -| Timestamp (time_string) | ✅ AI передаёт строку, сервер парсит | - -**Нерешённые проблемы:** -- При переустановке app старые события становятся "чужими" (новый UUID) - -**Как помочь AI правильно работать с календарём:** -1. Обязательно вызвать get_local_time для получения текущего UTC timestamp -2. Использовать формулу: new_timestamp = current_timestamp + (часы * 3600000) + (минуты * 60000) -3. НЕ добавлять случайные минуты! - -### Phase 4: Heartbeat (⏳ В очереди) -- WorkManager задача (каждые 30 минут) -- Active hours (8:00-22:00) - -### Phase 5: Email (⏳ В очереди) -- IMAP/SMTP клиент (без OAuth) - -### Phase 6: API Key Rotation (📋 Запланировано) - -**Проблема:** -- При достижении лимита токенов или блокировке ключа приложение перестаёт работать -- Нужна система ротации для отказоустойчивости - -**Механизм:** - -1. **Хранение нескольких ключей:** - - До 5 API ключей в EncryptedSharedPreferences - - Каждый ключ имеет статус: active, disabled, blocked - - Приоритет использования (порядок) - -2. **Автоматическая ротация:** - - При ошибке 429 (rate limit) → переключить на следующий ключ - - При ошибке 401/403 (blocked) → пометить ключ как blocked - - При успешном ответе → ключ working - -3. **Логика переключения:** - ``` - При ошибке: - - 429 (Too Many Requests) → nextKey() - - 401/403 (Unauthorized) → markKeyBlocked(), nextKey() - - 500+ → markKeyDisabled(), nextKey() - - При успехе: - - workingCount++ (счётчик успешных использований) - ``` - -4. **Ручное управление:** - - UI для добавления/удаления ключей - - Просмотр статуса каждого ключа - - Ручное переключение - -**UI реализация:** -- Настройки профиля → "API ключи" → список ключей -- Статус: ✅ рабочий, ⚠️ лимит, ❌ заблокирован -- Возможность добавить/удалить/переключить - -**Files to modify:** -- `EncryptedPrefs.kt` - хранение нескольких ключей -- `MistralClient.kt` - логика ротации -- UI: dialog_settings.xml или новое диалоговое окно - ---- - -## Key Files -- `app/src/main/java/com/mistral/chat/ui/MainActivity.kt` — главная активность -- `app/src/main/java/com/mistral/chat/api/MistralClient.kt` — API клиент -- `app/src/main/java/com/mistral/chat/api/ToolExecutor.kt` — менеджер tools -- `app/src/main/java/com/mistral/chat/api/CalDavClient.kt` — CalDAV клиент -- `app/src/main/java/com/mistral/chat/data/ChatDatabase.kt` — база данных - -### Model Selection -- **Default:** mistral-medium-latest -- **OkHttp timeouts:** connect 60s, read 120s, write 60s - ---- - -## ⚠️ ВАЖНЫЕ ПРАВИЛА РАЗРАБОТКИ - -### Запрет на удаление реализованных функций -**НИКОГДА не удаляй уже реализованные функции!** - -### Запрет на хардкодинг -**НИКОГДА не хардкодь значения, которые должны быть динамическими!** - -### Сборка APK -```bash -JAVA_HOME=/opt/homebrew/opt/openjdk@17 ./gradlew assembleDebug -# Путь: app/build/outputs/apk/debug/app-debug.apk -``` - ---- - -## 📋 Контекст сессии и оптимизация (📋 Запланировано) - -### Текущая реализация -При каждом запросе отправляется полный контекст. При росте сессии возможны 503 ошибки. - -### План реализации (Kai 9000 style) - -**Источник:** https://kai9000.com/docs/features/tools/ - -**Часть 1: Trimming (меж-итеративный)** -- Обрезать историю ПОСЛЕ КАЖДОГО tool вызова -- После каждого tool execution - проверить размер контекста -- Если > MAX_CONTEXT - удалить старые сообщения (кроме system prompt) -- MAX_CONTEXT = ~16000 токенов (50% от лимита mistral-medium) - -**Часть 2: Compaction (AI summary)** -- При 70% лимита (~22000 токенов) - запустить AI summary -- Последние 4 user обмена - оставить verbatim -- Остальное - одно summary message -- Сохранить summary в БД для персистентности - -### Реализация -ToolExecutor.kt → модифицировать loop: -```kotlin -while (toolCalls.isNotEmpty()) { - result = executeTool() - messages.add(result) - - // Trimming после каждого tool - if (getTokenCount(messages) > MAX_CONTEXT) { - trimOldMessages() - } -} -``` - -### Files to modify -- ToolExecutor.kt - добавить trimming в loop -- MistralClient.kt - добавить getTokenCount, trimOldMessages - ---- - -## Conversation Context (for AI Agent) - -**При начале новой сессии:** -Прочитай файл AGENTS.md для понимания текущего контекста. - -**При запросе "продолжаем":** -Мы работаем над Phase 3 - CalDAV календарь. Тестируем: создание событий, получение списка, исправление timezone. - -**Важно:** -- Пушить в GitHub только после подтверждения пользователя -- Не делать push автоматически - ---- - -*Last updated: 2026-04-12* -*Version: 1.11* \ No newline at end of file