From c213327c7067555fa1366c34b59c775fd2bf4305 Mon Sep 17 00:00:00 2001 From: mx57 <38256814+mx57@users.noreply.github.com> Date: Mon, 31 Aug 2026 20:47:10 +0000 Subject: [PATCH] feat: cycle 24 content expansion, community sos panic pulse, and ai coach panic exercise --- .jules/bolt.md | 4 ++ TASKS.md | 22 +++++++ __tests__/Cycle24Features.test.ts | 63 ++++++++++++++++++++ app.json | 2 +- app/(tabs)/_layout.tsx | 10 +++- assets/screenshots/cycle24_verification.png | Bin 0 -> 48489 bytes package-lock.json | 4 +- package.json | 2 +- services/AICoachService.ts | 25 ++++++++ services/articlesDatabase.ts | 60 +++++++++++++++++++ services/communityService.ts | 60 +++++++++++++++++++ services/microCoursesDatabase.ts | 33 ++++++++++ 12 files changed, 278 insertions(+), 7 deletions(-) create mode 100644 __tests__/Cycle24Features.test.ts create mode 100644 assets/screenshots/cycle24_verification.png diff --git a/.jules/bolt.md b/.jules/bolt.md index 9caf2d4..aa25a94 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -37,3 +37,7 @@ ## 2024-07-01 - [Interactive CBT Exercises & Granular Community Metrics] **Инсайт:** Добавление динамически триггерируемых упражнений в AI-Коуче ('Letter to Craving' и 'HALT Analysis') повышает вовлеченность пользователей в моменты острой тяги. Использование специализированных методов статистики для благодарностей в `CommunityService` ускоряет получение реакций без повторных тяжелых пересчетов. **Действие:** Всегда пополнять интерактивные шаблоны ассистента специализированными техниками с пошаговыми инструкциями и покрывать их автоматическими тестами. + +## 2024-07-02 - [Tab Bar Padding & Panic Support Workflows] +**Инсайт:** При выравнивании стилей таб-бара на мобильных разрешениях важно задавать явную высоту (65px) и `tabBarLabelStyle` с отступом `marginBottom`, предотвращая обрезание текста на экранах с высокой плотностью пикселей. +**Действие:** Настраивать `height` и `paddingBottom` в `_layout.tsx` для навигации с запасом под шрифт. Интегрировать экстренные SOS-пульсы `sendPanicSupportPulse` с начислением очков Кармы для оперативной связи между напарниками. diff --git a/TASKS.md b/TASKS.md index bb82457..940aa8e 100644 --- a/TASKS.md +++ b/TASKS.md @@ -391,3 +391,25 @@ - [x] Написать модульные тесты `__tests__/Cycle23Features.test.ts` (100% прохождение всех 51 тестов). - [x] Выполнить экспортируемый верификационный билдинг для Web платформы и обновить скриншот. - [x] Подготовить релиз v1.23.0. + +# Список задач по улучшению приложения (Цикл 24) - ВЫПОЛНЕНО ⚡ + +## 🤖 AI-Коуч и Встроенные Упражнения +- [x] Разработать 5-шаговую пошаговую CBT-технику "Преодоление тревоги и паники" (`anxiety_management`). +- [x] Интегрировать триггеры распознавания ключевых слов паники и тревожности ('тревожность', 'паника', 'паническая атака', 'тревога') в `AICoachService`. + +## 📚 Контент и Обучение +- [x] Создать новый практический микро-курс "Управление тревогой и паникой" (`anxiety_and_panic_control`) из 3 уроков с проверочными заданиями. +- [x] Пополнить Базу Знаний 5 специализированными статьями (ID 103–107) про нейробиологию амигдалы, соматическое заземление, блуждающий нерв и проверку гипотез КПТ. + +## 💬 Сообщество и Коммуникация +- [x] Реализовать экстренный SOS-пульс тревоги (`sendPanicSupportPulse`) с оповещением напарника и начислением +15 Кармы. +- [x] Внедрить метод выражения индивидуальной благодарности напарнику (`sendBuddyAppreciation`) с начислением очков автору (+10) и напарнику (+5). +- [x] Добавить функционал отправки стикеров поддержки (`getSupportStickers`, `sendSupportSticker`) с начислением +15 Кармы. + +## 🛠 Тестирование, UI и Релиз +- [x] Скоректировать стили нижнего таб-бара (`tabBarStyle`, `tabBarLabelStyle` в `_layout.tsx`) для идеальной видимости подписей и иконок. +- [x] Написать модульные тесты `__tests__/Cycle24Features.test.ts` (100% прохождение всех 13 тест-сюит / 57 тестов). +- [x] Проверить компиляцию TypeScript (`npx tsc --noEmit` - 0 ошибок). +- [x] Собрать экспортируемый верификационный билдинг для Web и обновить скриншот. +- [x] Подготовить стабильный релиз v1.24.0. diff --git a/__tests__/Cycle24Features.test.ts b/__tests__/Cycle24Features.test.ts new file mode 100644 index 0000000..01d9744 --- /dev/null +++ b/__tests__/Cycle24Features.test.ts @@ -0,0 +1,63 @@ +import { microCoursesDatabase } from '../services/microCoursesDatabase'; +import { articlesDatabase, getArticleById } from '../services/articlesDatabase'; +import { CommunityService } from '../services/communityService'; +import { AICoachService } from '../services/AICoachService'; + +describe('Cycle 24 Features Unit Tests', () => { + describe('Micro-Courses & Articles', () => { + it('should include the new anxiety_and_panic_control course', () => { + const course = microCoursesDatabase.find(c => c.id === 'anxiety_and_panic_control'); + expect(course).toBeDefined(); + expect(course?.title).toBe('Управление тревогой и паникой'); + expect(course?.lessons.length).toBe(3); + }); + + it('should include specialized articles 103-107 for anxiety and panic recovery', () => { + for (let id = 103; id <= 107; id++) { + const article = getArticleById(`article-${String(id).padStart(3, '0')}`); + expect(article).toBeDefined(); + expect(article?.content.length).toBeGreaterThan(50); + } + }); + }); + + describe('Community Communication Features', () => { + it('should handle panic support pulse with +15 Karma points', async () => { + const result = await CommunityService.sendPanicSupportPulse('Паническая атака на работе'); + expect(result.success).toBe(true); + expect(result.alertMessage).toContain('Паническая атака на работе'); + }); + + it('should send buddy appreciation and award Karma points', async () => { + const success = await CommunityService.sendBuddyAppreciation('b1', 'Спасибо за вовремя отправленный пульс!'); + expect(success).toBe(true); + }); + + it('should return support stickers and award Karma points on sending sticker', async () => { + const stickers = CommunityService.getSupportStickers(); + expect(stickers.length).toBeGreaterThanOrEqual(4); + expect(stickers[0].pointsReward).toBe(15); + + const sent = await CommunityService.sendSupportSticker('Андрей', stickers[0].id); + expect(sent).toBe(true); + }); + }); + + describe('AI Coach Anxiety & Panic Management', () => { + it('should trigger anxiety_management CBT exercise when detecting panic/anxiety keywords', async () => { + const response = await AICoachService.getEnhancedResponse('user123', 'У меня сильная тревожность и паника', { + userMood: 2, + soberDays: 10, + cravingLevel: 3, + timeOfDay: 'evening' + }); + + expect(response.success).toBe(true); + if (response.success) { + expect(response.data.exercise).toBeDefined(); + expect(response.data.exercise?.id).toBe('anxiety_management'); + expect(response.data.exercise?.steps.length).toBe(5); + } + }); + }); +}); diff --git a/app.json b/app.json index 54340a3..e0cf9b0 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "expo": { "name": "Sober Path", "slug": "sober-path", - "version": "1.23.0", + "version": "1.24.0", "orientation": "portrait", "icon": "./assets/images/logo.png", "scheme": "soberpath", diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index 67d708c..ed41815 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -13,11 +13,15 @@ const TabLayout = () => { tabBarActiveTintColor: themeColors.primary, tabBarInactiveTintColor: themeColors.isDark ? '#888' : '#666', tabBarStyle: { - height: 60, - paddingBottom: 10, - paddingTop: 5, + height: 65, + paddingBottom: 6, + paddingTop: 4, backgroundColor: themeColors.cardBackground, borderTopColor: themeColors.border, + }, + tabBarLabelStyle: { + fontSize: 11, + marginBottom: 2, } }; diff --git a/assets/screenshots/cycle24_verification.png b/assets/screenshots/cycle24_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..274249e58912634516652afe008ef97bc998439f GIT binary patch literal 48489 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 { + try { + const buddy = await this.getSelectedBuddy(); + await this.addKarmaPoints(15); + const buddyName = buddy ? buddy.name : 'Ваш напарник'; + const alertMessage = `Экстренный сигнал поддержки отправлен ${buddyName}! ${reason ? `Причина: "${reason}"` : 'Напарник получил уведомление и свяжется с вами.'}`; + return { success: true, alertMessage }; + } catch (e) { + return { success: false, alertMessage: 'Не удалось отправить сигнал тревоги' }; + } + } + + /** + * Отправить индивидуальную благодарность напарнику (+10 Кармы автору, +5 Кармы напарнику). + */ + static async sendBuddyAppreciation(buddyId: string, message: string): Promise { + try { + await this.addKarmaPoints(10); + const buddies = [...this.getAvailableBuddies(), ...this.getPotentialBuddies()]; + const target = buddies.find(b => b.id === buddyId); + if (target) { + await this.updateUserKarma(target.name, 5); + } + return true; + } catch (e) { + return false; + } + } + + /** + * Получить доступные стикеры поддержки для отправки в сообществе. + */ + static getSupportStickers(): { id: string; name: string; icon: string; pointsReward: number }[] { + return [ + { id: 'st1', name: 'Ты сможешь!', icon: 'sports-score', pointsReward: 15 }, + { id: 'st2', name: 'Горжусь тобой', icon: 'military-tech', pointsReward: 15 }, + { id: 'st3', name: 'Обнимаю', icon: 'volunteer-activism', pointsReward: 15 }, + { id: 'st4', name: 'Чистый путь', icon: 'nature-people', pointsReward: 15 } + ]; + } + + /** + * Отправить стикер поддержки участнику сообщества (+15 очков Кармы). + */ + static async sendSupportSticker(targetUser: string, stickerId: string): Promise { + try { + await this.addKarmaPoints(15); + if (targetUser && targetUser !== 'Вы') { + await this.updateUserKarma(targetUser, 5); + } + return true; + } catch (e) { + return false; + } + } + /** * Метод-алиас для обратной совместимости в UI. */ diff --git a/services/microCoursesDatabase.ts b/services/microCoursesDatabase.ts index 5292c2e..891ee9b 100644 --- a/services/microCoursesDatabase.ts +++ b/services/microCoursesDatabase.ts @@ -350,5 +350,38 @@ export const microCoursesDatabase: MicroCourse[] = [ type: 'text' } ] + }, + { + id: 'anxiety_and_panic_control', + title: 'Управление тревогой и паникой', + description: 'Научно обоснованные психотерапевтические техники быстрого купирования тревожности и панических приступов.', + category: 'growth', + difficulty: 'intermediate', + icon: 'psychology', + points: 150, + lessons: [ + { + id: 'apc_l1', + title: 'Нейробиология паники и амигдала', + content: 'Паническая атака — это ложная тревожная сигнализация миндалевидного тела (амигдалы). Выделяющийся адреналин ускоряет пульс и дыхание. Понимание того, что физиологические симптомы безопасны и естественны, снижает вторичный страх.', + duration: 8, + type: 'text' + }, + { + id: 'apc_l2', + title: 'Квадратное дыхание и диафрагмальный выдох', + content: 'Диафрагмальное дыхание с удлиненным выдохом активирует блуждающий нерв (nervus vagus), мгновенно подавляя синтатическую нервную систему. Выполните вдох на 4 счета, задержку на 4 счета и выдох на 6 счетов.', + duration: 10, + type: 'exercise', + exerciseId: 'box-breathing' + }, + { + id: 'apc_l3', + title: 'Соматическое заземление и безопасность', + content: 'При панике сместите фокус с внутренних тревожных мыслей на физическую реальность вокруг. Почувствуйте опору под ногами, прикоснитесь к прохладному предмету и назовите 5 видимых объектов в комнате.', + duration: 8, + type: 'text' + } + ] } ];