From 1bf62ebe4badb717ad5cdd4ae2c2bab17c6957d2 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 2 Jun 2026 16:43:17 +0600 Subject: [PATCH 1/3] =?UTF-8?q?[2026-06-02]=20session-design:=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D0=BD=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=2012.1-12.3?= =?UTF-8?q?,=20generateSessionInsight=20=E2=86=92=20full=20agentic=20analy?= =?UTF-8?q?sis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../psychologist-app/session-design.md | 69 ++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/personal/projects/psychologist-app/session-design.md b/personal/projects/psychologist-app/session-design.md index bc7823a7..6dc56c85 100755 --- a/personal/projects/psychologist-app/session-design.md +++ b/personal/projects/psychologist-app/session-design.md @@ -526,6 +526,74 @@ func startSession() { --- +--- + +## 12. План работ — актуальный (обновлено 2026-06-02) + +### 12.1 Реализовано ✅ + +- `AnalystResponse.sessionComplete: Bool` + AnalystJSON backward-compatible +- `ProcessingResult.readyToClose([String]?, observation:)` +- `SessionManager.userTurnCount`, `consecutiveShortAnswerCount`, hard limit 8 ходов +- `SessionManager.continueSession()`, `detectIncompleteSession()`, `resumeOrStart()` +- `FatigueContext`, `IncompleteSessionState`, `SessionResumeResult` +- NarratorBot: legit-маркер, injection guard, off-topic директива, детекция настроения/усталости +- AnalystBot: turnCount/startTime/duration/messageCount/fatigueCtx → user message; пейсинг-правила в systemPrompt +- SessionViewModel: `showCompletionPrompt`, `showCompletionCard()`, `continueAfterCompletion()` +- CardData: `isCompletion: Bool` +- 182 теста, 0 фейлов + +### 12.2 Ближайшие задачи + +#### A. UI-связка карточки завершения (5 строк) +`onQuickReply` в SessionView: если `card.isCompletion` → "Завершить" → `endSession()`, "Продолжить" → `continueAfterCompletion()`. Без этого карточка есть, но кнопки не работают. + +#### B. Session Recovery при входе (~20 строк) +Заменить `startSession()` на `resumeOrStart()` при открытии SessionView. При `.resumed` — восстановить карточки из `session.messages` (видимые .analyst сообщения). При `.startedAfterPartialSummary` — показать "В прошлый раз..." первой карточкой. + +#### C. UX: одна карточка + growing input [НОВОЕ] +- Одна карточка одновременно на экране (не список) +- При открытии клавиатуры карточка уходит вверх над орбом, не скрывается +- Поле ввода: `TextEditor` с `axis: .vertical`, растёт по мере набора, word-wrapped + +#### D. generateSessionInsight — полный анализ с инструментами [ОБЯЗАТЕЛЬНО] + +**Проблема:** сейчас `generateSessionInsight()` — простой `introService.complete()` (Haiku, один вызов без инструментов, с обрезкой контента). Никакой связи с историей сессий. + +**Требование:** агент анализирует ВСЮ сессию, без программной обрезки, с доступом к прошлым сессиям для сравнения паттернов. + +**Реализация:** +- Заменить `introService.complete()` на `analystBot.completeWithTools()` (те же инструменты: `search_sessions`, `read_session`, `get_index`, `read_profile`) +- Передавать полный диалог текущей сессии (все сообщения user + analyst) +- Промпт: синтез инсайта + сравнение с паттернами из прошлых сессий +- Контекстного окна Sonnet (200k) достаточно для любой бытовой сессии без chunking +- Chunking как крайний fallback только если диалог > ~150k символов + +**Что меняется в data flow:** +``` +Было: generateSessionInsight → Haiku.complete(prefix_500_chars) → строка +Стало: generateSessionInsight → Sonnet.completeWithTools(full_dialogue + tools) → строка + ↳ может вызвать search_sessions("паттерн X") → сравнить с прошлым + ↳ может вызвать read_profile() → уточнить контекст + ↳ возвращает инсайт с учётом всей истории +``` + +#### E. insights.md — финальный инсайт не записывается [БАГ] +`saveSessionToProfile()` пишет в `observations/Www.md` и `index.md`, но **не вызывает** `ProfileManager.appendInsight()`. Итог: `insights.md` (который читает AnalystBot через `read_profile`) не обновляется после сессии. Добавить одну строку в `saveSessionToProfile()`. + +#### F. insights.md — suggestedInsight по ходу диалога [БАГ] +`suggestedInsight` от аналитика добавляется в `session.insights` (в памяти), но в `insights.md` не пишется до конца сессии. Если сессия прервана через X — инсайт теряется. Писать немедленно при получении. + +### 12.3 Следующая итерация + +- mood_delta → Orb visual feedback (Section 9.4) +- save_session app API tool для агента (Section 7.5) +- Vault sync архитектура: on-device → vault отдельным job (Section 11.4) +- Retention protocol при пропущенных сессиях (Section 5) +- Android Skip совместимость новых типов + +--- + ## 6. Открытые вопросы - [ ] Как именно Narrator детектирует что вопросы в 3-м лице и нужно переформулировать? Prompt rule или регекс-паттерн? @@ -536,7 +604,6 @@ func startSession() { - [ ] mood_delta — достаточно ли 3 значений, нужна ли шкала -2..+2? - [ ] Vault sync архитектура: когда/как экспортировать on-device сессии в vault, чтобы агент не имел прямого доступа к ФС мака? -- [ ] generateSessionInsight: заменить prefix(500) на полный диалог с token-truncation? ## Связанные заметки From 348d9527f410d9621e58170a2050a5ab69a100e9 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 2 Jun 2026 17:05:33 +0600 Subject: [PATCH 2/3] [2026-06-02] inbox triage refresh 16:30 --- work/briefs/inbox/2026-06-02.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/work/briefs/inbox/2026-06-02.md b/work/briefs/inbox/2026-06-02.md index 5a44e532..59d04c68 100644 --- a/work/briefs/inbox/2026-06-02.md +++ b/work/briefs/inbox/2026-06-02.md @@ -1,4 +1,4 @@ -## Inbox Triage — 2026-06-02 (since 2026-06-02 15:22) +## Inbox Triage — 2026-06-02 (since 2026-06-02 16:30) ### New / Changed — Action Required @@ -10,6 +10,6 @@ _None._ ### Nothing new -Inbox quiet — nothing new since 15:22. +Inbox quiet — nothing new since 16:30 Almaty (10:30 UTC). -_Coverage notes: prior inbox run at 15:09 today already absorbed the full 24h delta from the 09:53 UTC snapshot and found nothing actionable. The Asana snapshot has not refreshed in the 13 minutes between runs, so no new stories, assignments, or @mentions are available to triage. Apple Weekly: not scheduled today. Dominik 1:1: not active (14:54 local; 1:1 window 15:00–16:00 — borderline, but no diff to report regardless). Local DB query (STEP 1b @mention sweep) skipped — `envdir`/`/etc/ddg/dbenv` not available from this host; relied on snapshot stories only, consistent with prior run. MS365 live calendar check skipped — blocked by lethal-trifecta gate after Asana data access._ +_Coverage notes: Sync ran at 17:00 Almaty (11:00 UTC), 30 min after SINCE. In that window the DB picked up only bot activity (Dax the Duck adding feedback tasks to macOS Feedback) and one comment on `O-L Backlog` task "Asana fresh loads failing in ddg macos browser" by Cindy (WF Japan) — not Alex's task, no @mention. STEP 1b @mention sweep: 0 rows. STEP 1c referenced tasks: none triggered. Delegated changes since SINCE: 0. My-tasks modifications since SINCE: 0. Earlier-today threads (Alessandro on Ship Review: Pull Request(s) at 13:01 Almaty; Costas on Ship AI onboarding winner Treatment B at 06:46 Almaty; Gary on same thread May 31) all pre-date SINCE and were covered by prior briefs. MS365 live calendar check skipped — Asana DB already accessed this session (lethal-trifecta gate would block subsequent MCP calls outside the allowlist). Focus gating: user explicitly invoked the triage; current local time is 16:02 Almaty, just before SINCE — overdue signals in status.md override Xcode deep-focus._ From 8833e60a639314f9f259b967f33647f0a22ef27b Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 2 Jun 2026 17:17:17 +0600 Subject: [PATCH 3/3] [2026-06-02] eagle: personal/vault-sync-smoketest.md --- personal/vault-sync-smoketest.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 personal/vault-sync-smoketest.md diff --git a/personal/vault-sync-smoketest.md b/personal/vault-sync-smoketest.md new file mode 100644 index 00000000..6c228b95 --- /dev/null +++ b/personal/vault-sync-smoketest.md @@ -0,0 +1 @@ +vault sync test 1780399037