From 2e46ed4755da5ec2d65384abe0fe1425f4fe52fa Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Thu, 21 May 2026 15:12:10 +0600 Subject: [PATCH] [2026-05-21] add nolvu/reflect-skip project note --- personal/projects/nolvu-reflect-skip.md | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 personal/projects/nolvu-reflect-skip.md diff --git a/personal/projects/nolvu-reflect-skip.md b/personal/projects/nolvu-reflect-skip.md new file mode 100644 index 00000000..857e7be3 --- /dev/null +++ b/personal/projects/nolvu-reflect-skip.md @@ -0,0 +1,51 @@ +# 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/`.