# nolvu / reflect-skip — проект ## Статус - Активная кодовая база: `~/Developer/reflect-skip/` - Android: публикуется на `https://reflect.qentra.top` (F-Droid) - iOS: собирается через `Project.xcworkspace` → `Darwin/ReflectApp.xcodeproj` - Текущая версия: v0.0.25 ## Структура проекта ### Два источника Swift-кода в reflect-skip - `Sources/ReflectApp/` — **актуальный** Skip-источник. Компилируется Darwin-проектом. Используется для iOS и Android. - `ReflectApp/` — **legacy** iOS-only код, существовавший до перехода на Skip. Компилируется `ReflectApp.xcodeproj` в корне. Не используется в продакшне. ### Как открывать iOS-проект Всегда через `Project.xcworkspace`, не через `ReflectApp.xcodeproj` напрямую. ### Как собирается Android `build-and-publish.sh` → Skip компилирует `Sources/ReflectApp/` → APK → F-Droid repo. ## Прокси - LaunchAgent: `ai.reflect-proxy` → `localhost:8765` - Cloudflare tunnel: `ai.qentra.top` → `localhost:8765` - Бэкенд: `claude-proxy` на `localhost:3456` - Лог сессий: `~/Developer/reflect-skip/sessions.log` ## Агенты - **NarratorBot** — нейтрализует ввод пользователя (убирает эмоциональную окраску, 3-е лицо) - **AnalystBot** — задаёт 2-3 глубоких вопроса по профилю + контексту сессии - **SessionManager** — управляет историей сессий ## Исправления (v0.0.25, май 2026) ### Fix 1 — дублирование нарратора `buildSessionContext()` вызывался после `addMessage()` → нарратор видел своё же сообщение в контексте. Исправлено: поменяли порядок в `Sources/SessionManager.swift`. ### Fix 2 — AnalystBot не видел текущий диалог `ProfileManager.loadRecentSessions(count: 3)` загружал прошлые ФАЙЛЫ, не текущую сессию. Исправлено: добавили `buildCurrentSessionDialogue()` (последние 8 пар user/analyst), передаём в `analyze()`. ### Fix 3 — нарратору уходили вопросы аналитика `sendBatchSummary()` отправлял весь диалог включая вопросы аналитика. Исправлено: фильтруем только user answers. ## Pitfalls - Если на iOS-симуляторе не появляется `DevSetupView` (ввод токена) — значит `dev_setup_done = true` в UserDefaults. Удалить приложение с симулятора и запустить заново. - `ReflectApp/` в корне — legacy, не трогать. Реальные правки только в `Sources/ReflectApp/`.