|
Download docs/development/tasks.md from HonzaH/pruvodce: direct link, hf CLI and curl.
- Browser
- Download file 19 kB
-
https://huggingface.co/spaces/HonzaH/pruvodce/resolve/main/docs/development/tasks.md
- Command line
-
hf download hf://spaces/HonzaH/pruvodce/docs/development/tasks.md
-
curl -L -o tasks.md https://huggingface.co/spaces/HonzaH/pruvodce/resolve/main/docs/development/tasks.md
19 kB
| # Copilot Tasks — Breakup Assistant (one-space) | |
| --- | |
| ## Recent updates (2025-10-27) | |
| - Added a subtle entrance animation for new chat messages (frontend). Messages now get a short pop-in animation via the `.chat-bubble.enter` CSS class. | |
| - Added a backend debug option: set `VERBOSE_STREAM=1` to print raw token events and assembled responses from `/api/chat/stream` for easier debugging of stray tokens. | |
| - Fixes (2025-10-28): | |
| - Fixed a runtime issue where the app could fail to fetch a dynamically created chunk for the no-contact helper ("Failed to fetch dynamically imported module: .../noContact-*.js"). The helper now uses a static import so it is bundled with the main chunk and avoids runtime chunk fetch failures in some hosts (HF Spaces, restricted CDNs). | |
| - Moved the no-contact toggle into the profile header and implemented an optimistic UI: starting no-contact shows days = 0 immediately. Day counting is canonicalized to a floor-based 24h rule: days = Math.max(0, Math.floor((now - startISO) / 86_400_000)). | |
| - Added Vitest edge/integration tests for no-contact day calculation and awarding the "1 den bez kontaktu" medal. Tests running in Node must mock the `idb-keyval`/storage helpers; consider adding a global Vitest setup file to centralize this mock. | |
| Update (2025-11-03): Activity logging & medal UI | |
| - The frontend now centralizes assistant+journal emission via `emitAssistantAndJournalWithOptions` and emits each logged event as its own assistant message. This enables messages to carry `meta` (e.g. `{ type: 'medal', medal: 'První krok' }`) which the chat renderer uses to apply special visuals (medal badge, `.chat-bubble.medal`) and to improve auditability. | |
| - No‑Contact UI: consolidated controls (2025-11-03) | |
| - Removed the small circular quick-actions under the No‑Contact ticker (Reset / small toggle / progress) to avoid duplicate controls. | |
| - Added a visible primary toggle button next to "Upravit začátek" and "Nastavit na teď" that uses `noContact.startISO` as the canonical state and toggles label between "Zahájení Bez Kontaktu" and "Ukončit Bez kontaktu". This makes the UI deterministic and easier to test. | |
| - Testing guidance: prefer assertions on message content and `meta` rather than fragile ordering. Add a small Vitest DOM test that renders a chat message with `meta.type === 'medal'` and asserts the medal badge and `.chat-bubble.medal` class are present. | |
| - Styles consolidation (2025-11-03): safely merged duplicate `.purple-ticker` and `.medal-icon` rules in `frontend/src/styles.css`, removed an extra duplicate `.medal-icon` block, and added a top-of-file maintainer note to prevent accidental future duplication. This reduces CSS conflicts and stabilizes the No‑Contact ticker and medal UI. | |
| ## Copilot Best Practices (Quick Reference) | |
| - Vždy dodržuj privacy-by-default, governance, auditovatelnost, audit metadata v obsahu | |
| - Modularizuj kód i obsah, validuj versioning, manifest, i18n, varianty, audit | |
| - PR workflow: popiš změny, odkaž na architekturu/task, přidej testy, validuj coverage | |
| - Onboarding: README, architektura, troubleshooting, governance, testy, validace obsahu | |
| - CI/CD: testy, lint, golden scénáře, adherence dashboard, validace integrity obsahu | |
| - Replay mód: trace_log + Plan JSON → reprodukce běhu bez LLM | |
| - Zásadní změny konzultuj v týmu, dokumentuj v architektuře, validuj audit metadata | |
| - Odkazy na instrukce: [.github/instructions/](.github/instructions/), [README.md](README.md), [ARCHITECTURE.md](docs/ARCHITECTURE.md) | |
| ## Tasky & akceptační kritéria | |
| **Status:** ✅ **KOMPLETNÍ IMPLEMENTACE + VYČIŠTĚNO + MODERNÍ GAMIFIKAČNÍ UI + ROZŠÍŘENÁ TEST INFRASTRUKTURA + PROFESIONÁLNÍ ONBOARDING + ATTACHMENT STYLES ASSESSMENT** - **reálný chat s LLM orchestrátorem**, 228 testů (lokálně zelené, včetně 43 nových testů pro prevenci regresí medal/profile/journal/chat funkcionality + 4 testy pro attachment funkcionalitu), fetch() komunikace pro HF Spaces kompatibilitu, **lokální persistentní stav (profil, chat, deník, no-contact, medaile, attachment výsledky) v IndexedDB**, **konzistentní logování bez duplicit** (activityLogger jednotnost), **medal systém synchronizace** (backend používá statistiky pro kontrolu medailí, frontend zobrazuje medaile z obou zdrojů), **vylepšená syntéza odpovědí s emotikony a markdown formátováním**, **opravený no-contact stav v profilu** (správné zobrazení po restartu aplikace), **vyčištěný kód bez duplicit a nepoužívaných souborů**, **progres medailí s moderním UI** (progress bary, ikony, animace), **vyřešená Vite varování** (čistý build bez optimalizačních poznámek), **opravené testy s relativními cestami** (všechny 228 testů prochází spolehlivě v batch i individual módu), **opravené duplicitní medaile v profilu** (sjednocená ID medailí mezi journal a medalProgress), **profesionální 3-krokový onboarding modal** (místo jednoduchého pole pro jméno), **načítání posledního aktivního tabu** z IndexedDB při spuštění aplikace, **kompletní reset aplikace** přes tlačítko "Zapomenout vše" (maže všechna data včetně onboarding stavů), **interaktivní attachment styles assessment** s personalizovanými healing plány. | |
| ### 1) Frontend (FE) ✅ | |
| - **Moderní UI Design:** Glassmorphism efekty, smooth animace, micro-interactions, mobile-first responsive | |
| - Tabs: Chat / Deník / Podpora / Profil s interaktivní navigací | |
| - **Fetch klient** (`lib/sse.ts`): simulace token streamování přes fetch() pro HF Spaces kompatibilitu | |
| - Backend returns structured `tokens` array (objects with {agent, token}) and frontend simulates streaming by splitting tokens into words for UX. This allows UI to attribute message fragments to specific agents. | |
| - Zustand store: chat, journal, medals, noContact, traits, medalState | |
| - Storage: cookies (pointer), IndexedDB (data, log, medals, volitelné šifrování) | |
| - No-contact helper: streak engine, reset, denní pochvala, milestone medaile | |
| - **Medals helper: katalog, pravidla, XP, progress bar - všechny medaile v jedné sekci s dokončenými označenými 🏆 ikonou a zeleným pozadím** | |
| - Šifrování: WebCrypto AES-GCM, PIN, auto-lock (volitelné) | |
| - **Onboarding systém:** Automatická detekce prvního spuštění na základě existence dat (profil nebo chat), žádný `onboarding_completed` flag | |
| - **Automatický reset:** `handleForget` funkce kompletně maže všechna data a reloadne aplikaci s cache-busting pro čistý start | |
| ### 2) Backend (BE) ✅ | |
| - **`/api/chat/stream`**: JSON response with structured `tokens` and `response` from reálným LLM orchestrátorem (Google Gemini + Hugging Face). Canonical orchestrator: `backend/mcp/orchestrator/sse_orchestrator.py`. | |
| - `/api/content/*`: read-only JSON (tipy, aktivity, meditace, versionované, manifest, i18n, varianty, audit metadata) | |
| - **Orchestrátor: mcp-agent s reálnými LLM** (9 agentů), multi-agentní řízení, gating toolů, policy engine | |
| - MemoryPatch: návrhy změn, eventy, audit | |
| ### 3) Agentní Architektura ✅ IMPLEMENTOVÁNO | |
| Aplikace používá **multi-agentní orchestrátor** s 9 specializovanými agenty řízenými hlavním **Drafter agentem**: | |
| #### **Hlavní Agent: Drafter (Syntetizátor)** | |
| - **Role:** Koncentruje odpovědi od všech ostatních agentů do jedné koherentní odpovědi | |
| - **Vidí:** Historii chatu, dokončené aktivity, no-contact stav, zápisy do deníku | |
| - **Výstup:** Jedna empatická, podpůrná odpověď kombinující insights všech agentů | |
| #### **Specializovaní Agenti (všichni funkční):** | |
| | Agent | Role | Nástroje | Status | | |
| |-------|------|----------|--------| | |
| | **Coach** | Empatická komunikace, emocionální podpora | `get_user_profile`, `get_medals`, `get_daily_plan`, `tts` | ✅ | | |
| | **Planner** | Plánování aktivit a denních rutin | `search_tips`, `log_activity`, `award_medal`, `journal_append` | ✅ | | |
| | **Guardian** | No-contact podpora a hranice | `get_no_contact_status`, `praise_no_contact_if_new_day`, `journal_append` | ✅ | | |
| | **Curator** | Správa deníku a reflexe | `journal_list`, `journal_append`, `journal_redact`, `journal_export` | ✅ | | |
| | **Evaluator** | Hodnocení pokroku a medaile | `evaluate_medals`, `recalc_streaks` | ✅ | | |
| | **Strategist** | Dlouhodobé strategické plánování | `strategy_plan` | ✅ | | |
| | **Sentinel** | Moderace vstupů a detekce krizí | `moderate_input`, `crisis_contacts` | ✅ | | |
| | **Analyzer** | Analýza emocí a vzorců | Žádné (analýza textu) | ✅ | | |
| | **Drafter** | Syntéza finální odpovědi | Žádné (syntéza) | ✅ | | |
| #### **Jak Funguje Orchestrace:** | |
| 1. **Frontend posílá user state:** Historie chatu, aktivity, no-contact, deník, medaile | |
| 2. **Orchestrátor vybírá agenty:** Podle obsahu zprávy (např. "plan" → planner, "sad" → analyzer) | |
| 3. **Agenti generují odpovědi:** Každý pomocí svého LLM providera (Google Gemini/Hugging Face) | |
| 4. **Drafter syntetizuje:** Kombinuje všechny odpovědi do jedné koherentní odpovědi | |
| 5. **Uživatel dostane:** Empatickou, personalizovanou odpověď s kontextem | |
| #### **Kontext Awareness:** | |
| - **Vidí dokončené aktivity:** "Vidím, že jsi dokončil 'Ranní dýchání' a 'Procházku'" | |
| - **Sleduje no-contact:** "Držíš to už 5 dní, jsi silný/á!" | |
| - **Znají journal entries:** Reference na předchozí zápisy | |
| - **Pamatuje chat historii:** Kontinuita konverzace | |
| ### 3) Governance & policy ✅ | |
| - `capabilities.json`: role → povolené tooly (gating) | |
| - `policy.yaml`: pořadí agentů, limity tool-calls/turn, timeouty, gates, replay | |
| - `mcp_agent.config.yaml`: MCP servery, aggregator | |
| ### 4) Testování ✅ | |
| - Kompletní test infrastruktura: 228 testů (100% úspěch, včetně 43 nových regresních testů + 4 testy pro attachment funkcionalitu) | |
| - Modularizovaná struktura: | |
| - **Python testy v `tests/` adresáři:** 186 testů pro backend funkcionality (pytest framework) | |
| - Unit testy: všech 9 agentů, orchestrátorů, content API, reducerů (129 původních testů) | |
| - Contract testy: Pydantic modely (MEDAL, MPKT, MemoryPatch, AnalysisSummary, StrategyPlan) | |
| - Golden scénáře: 12+ YAML sekvence pro chat eventy, CI pipeline validace | |
| - Replay mód: trace_log + Plan JSON → reprodukce běhu bez LLM pro debugging | |
| - Integrace: orchestrace agentů, governance, memory patch, chat stream | |
| - End-to-end: kompletní chat flow, crisis detection, privacy enforcement | |
| - **Regresní testy:** 43 specializovaných testů pro prevenci problémů s medal/profile/journal/chat funkcionalitou: | |
| - `test_activity_logger_consistency.py` (15 testů) - activity logger jednotnost, checkAndLogMedals integrace, no-contact lastPraiseISO nastavení, journal callback pattern | |
| - `test_medal_profile_integration.py` (15 testů) - zobrazení medailí z journal záznamů, frontend state consistency, prevence duplicit v daily praise | |
| - `test_local_statistics_calculation.py` (13 testů) - lokální výpočet statistik z IndexedDB, nezávislost na backendu, progress výpočty pro UI | |
| - **Frontend testy v `frontend/tests/` adresáři:** 42 testů pro React/TypeScript komponenty a stores (Vitest framework) | |
| - **Attachment testy:** 4 specializované testy pro attachment styles funkcionalitu: | |
| - `AttachmentView.test.tsx` - interaktivní test komponenta, progress tracking, výsledky | |
| - `attachment.test.ts` - Zustand store s persist middleware, výsledky assessment | |
| - `attachment.integration.test.ts` - end-to-end flow assessmentu | |
| - `attachment.store.test.ts` - state management a persistence | |
| - **Onboarding testy:** Unit testy pro onboarding logiku (`test_onboarding.py`) a frontend testy (`unit.test.ts`) | |
| ### 5) Best practices ✅ | |
| - **Moderní UI/UX:** glassmorphism efekty, smooth animace, micro-interactions, mobile-first design, **markdown formátování v chatu** | |
| - Privacy-by-default: žádná PII na serveru, šifrování lokálně, auditovatelnost | |
| - Multi-agentní řízení: striktní kontrakty, gating, replay, fail-safes | |
| - Reaktivní UI: batchování renderů, virtuální listy, debounce, stavové přechody | |
| - Onboarding: README, architektura, role, governance, testy, troubleshooting | |
| - CI/CD: testy, lint, golden scénáře, adherence dashboard | |
| ## Role & návaznost na architekturu | |
| - Coach: empatická formulace, finální hlas, chvála, CTA | |
| - Planner: výběr/rozvrh mikro-aktivit, logování, medaile | |
| - Guardian: No-contact engine, pochvala, reset, deník | |
| - Curator: sumarizace, snippets, journal management | |
| - Evaluator: Hodnocení medailí, streak recalculation | |
| - Strategist: Dlouhodobé strategické plánování | |
| - Sentinel: Moderace vstupů, detekce krizí, privacy enforcement | |
| - Drafter: Empatické text streaming pro různé kontexty | |
| - Analyzer: Pokročilé analýzy a insights | |
| ## Activity Logging | |
| - **ActivityLogger jednotnost:** Všechno logování dokončených akcí (tipy, aktivity, meditace, noContact, **medaile**) probíhá přes `activityLogger.ts` pro konzistentní záznamy v chatu a deníku bez duplicit. **Medaile se nyní logují okamžitě při dosažení v ProfileView.tsx, ne až po odpovědi backendu.** | |
| - **Aktualizace (2025-11-03):** Centralizovaný logging | |
| - Implementován nový helper `emitAssistantAndJournal(agent, message, journalText, meta?, medalCategories?)` v `frontend/src/lib/activityLogger.ts`. | |
| - Všechny veřejné logovací funkce byly refaktorizovány tak, aby volaly tento helper a čekaly na dokončení persistence/journal zápisu a případné kontroly medailí. | |
| - Přidán unit test `frontend/tests/loggers.activityCompletion.test.ts` a upraveny testy tak, aby v Node prostředí před importem store mockovaly `frontend/src/lib/storage.ts` (idb wrapper), čímž se předešlo chybě `indexedDB is not defined`. | |
| - Doporučení: při dalších změnách loggingu používat helper a přidat testy, které mockují storage před importem store modulů. | |
| - Cleanup (2025-11-03): | |
| - Removed temporary debug instrumentation (console logs) from `SelfReturnView.tsx` and diagnostic console output in `frontend/src/lib/activityLogger.ts` to reduce runtime noise. | |
| - `emitAssistantAndJournal` now appends to the last assistant bubble only when that bubble was created by the same agent (`last.agent === agent`) to avoid invisible merges that hid new assistant messages. | |
| - `checkAndLogMedals` was updated with a guard/coalescing mechanism to prevent concurrent runs and coalesce rapid repeated calls; high-value medal-earned logs remain. | |
| ### Types & object-style API | |
| - The activity logger exports typed helpers in `frontend/src/lib/activityLogger.ts`: | |
| - `JournalMeta` — generic metadata type for journal entries (`Record<string, unknown>`). | |
| - `EmitOptions` — object-style options for the helper: `{ agent: string; message: string; journalText: string; meta?: JournalMeta; medalCategories?: string[] }`. | |
| - Preferred usage: `emitAssistantAndJournalWithOptions(opts: EmitOptions)` — this object-style overload is clearer, easier to extend and safer in tests. The function-style variant remains for compatibility. | |
| Test guidance: prefer importing and using the object-style overload in new code and tests; when writing Node/Vitest tests mock `frontend/src/lib/storage.ts` (the `idb-keyval` wrapper) before importing any store modules so tests do not require browser `indexedDB`. | |
| - Dokončené aktivity → chat + journal | |
| - **Získané medaile → chat + journal** (automaticky při dosažení v profilu) | |
| - No-contact milníky → chat + journal | |
| - Přečtené tipy → chat + journal | |
| - Dokončené meditace → chat + journal | |
| **Prevence duplicit:** Všechno logování probíhá centralizovaně, žádné přímé volání z komponent. | |
| ## Attachment Styles Assessment ✅ IMPLEMENTOVÁNO | |
| - **Interaktivní test:** 4 styly připoutání (secure/anxious/avoidant/disorganized) s 12 otázkami | |
| - **Personalizované healing plány:** Strategist agent generuje specifické rady pro každý styl | |
| - **Content struktura:** `content/attachment_styles.json` s otázkami, bodováním, charakteristikami, healing plány | |
| - **Frontend komponenta:** `AttachmentView.tsx` s progress tracking, výsledky, vizuální prvky (ikony, barvy) | |
| - **State management:** Zustand store `attachment.ts` s persist middleware pro výsledky assessmentu | |
| - **Backend integrace:** Strategist agent s `attachment_healing_plan` metodou pro 4 styly podpory | |
| - **Activity logging:** Dokončený assessment → chat + journal přes activityLogger | |
| - **Test pokrytí:** 4 specializované testy pro komponentu, store, integraci a state management | |
| ## Akceptační kritéria ✅ | |
| - Každý task má jasné vstupy/výstupy, testy, audit, adherence k privacy a governance | |
| - Onboarding pro nové vývojáře: README, architektura, troubleshooting | |
| - Testy: kompletní infrastruktura s 185 testy (100% úspěch, včetně 43 regresních testů + 4 testy pro attachment funkcionalitu), coverage, privacy-by-default, audit metadata v obsahu | |
| - **Kontrola integrity kódu:** Žádné duplicitní bloky, proměnné, funkce nebo soubory; čistý kód bez stray importů/volání | |
| - **Všechny funkcionality implementovány:** Content API, všech 9 agentů, orchestrátory, kompletní test pokrytí | |
| ## Lekce z vývoje | |
| **📚 Kompletní dokumentace všech lekcí: [docs/lessons-learned.md](docs/lessons-learned.md)** | |
| **Pro rychlou referenci zde jsou nejkritičtější pravidla:** | |
| ### ✅ ActivityLogger Jednotnost | |
| - Všechno logování přes `activityLogger.ts` - zakázané přímé volání `pushChat`/`addJournal` | |
| - **Detail:** [ActivityLogger Best Practices](docs/lessons-learned.md#activitylogger-jednotnost) | |
| ### ✅ Testování Essentials | |
| - Mock `storage.ts` před importem store modulů (Node testy) | |
| - useLayoutEffect pro synchronní DOM updates | |
| - Správné dependency arrays v useCallback/useEffect | |
| - **Detail:** [Testing & Debugging](docs/lessons-learned.md#testování--debugging) | |
| ### ✅ Code Integrity Checklist | |
| - Žádné duplicitní bloky/proměnné/soubory | |
| - Jeden main entrypoint (`app.py`) | |
| - Validace před commitem: `python -c "import app"` + `pytest -q` | |
| - **Detail:** [Code Integrity](docs/lessons-learned.md#kontrola-integrity-kódu) | |
| --- | |
| **💡 Při řešení problému vždy nejdříve zkontroluj [docs/lessons-learned.md](docs/lessons-learned.md) - pravděpodobně už byl vyřešen!** | |
| ## Další dokumentace | |
| - [README.md](README.md) — architektura, onboarding, best practices | |
| - [ARCHITECTURE.md](docs/ARCHITECTURE.md) — detailní architektura, doménový model, agentní vrstva | |
| - [deployment/huggingface-spaces.md](../deployment/huggingface-spaces.md) — runbook pro nasazení na HF Spaces | |
| - [.github/copilot-instructions.md](.github/copilot-instructions.md) — workflow pro Copilot, best practices | |
| - [Instrukce](.github/instructions/) — governance, testy, infra, obsah | |