Files
obsidian-vault/personal/projects/nolvu-reflect-skip.md
T

91 lines
4.6 KiB
Markdown

---
title: "naisei / reflect-skip — проект"
aliases:
- "naisei"
- "nolvu"
- "reflect-skip"
- "Naisei проект"
- "Reflect Skip"
tags:
- personal
- project
- app
- psychology
- skip-tools
created: '2026-05-17'
updated: '2026-05-25'
related:
- "[[personal/projects/psychologist-app/overview]]"
- "[[personal/projects/psychologist-app/dev-setup]]"
---
# naisei / reflect-skip — проект
## Статус
- Имя продукта: **naisei**
- Активная кодовая база: `~/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.
## Obsidian-совместимость
Приложение читает сессии из папки `observations/` (формат vault), а не `sessions/`.
- **Папка сессий:** `observations/` в корне импортируемой директории
- **Именование файлов:** ISO week — `2026-W20.md`, `2026-W21.md`
- **Запись сессий:** аппендит `## Сессия DD.MM.YYYY HH:mm` в текущий недельный файл
- **Счётчик сессий:** считается напрямую как количество `.md` файлов в `observations/` (не хранится в profile.md)
- **Профиль:** `profile.md` — строка `**Имя:** Алексей` нужна для `parseName()`
- **Инсайты:** `insights.md` — произвольный формат, передаётся напрямую в Claude
Vault путь для импорта: `personal/psychology/` (на Taiga).
## Pitfalls
- Если на iOS-симуляторе не появляется `DevSetupView` (ввод токена) — значит `dev_setup_done = true` в UserDefaults. Удалить приложение с симулятора и запустить заново.
- `ReflectApp/` в корне — legacy, не трогать. Реальные правки только в `Sources/ReflectApp/`.
## Связанные заметки
- [[personal/projects/psychologist-app/overview]]
- [[personal/projects/psychologist-app/dev-setup]]