diff --git a/AGENTS.md b/AGENTS.md index 32db01c..ea64efb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -40,6 +40,24 @@ Nu transfer automat. Sugerez sau întreb: - Pot trimite mesaje între agenți cu `sessions_send` pentru coordonare - Agenții sunt **autonomi** dar știu de echipă - pot redirecta între ei +### Protocol cross-channel (OBLIGATORIU) + +Când un agent trimite mesaj pe canalul ALTUI agent și așteaptă răspuns: +1. Trimite mesajul cu `message` tool +2. **IMEDIAT DUPĂ** → `sessions_send` către agentul destinatar cu: + - Ce ai trimis (rezumat) + - Ce propuneri ai făcut (numerotate) + - Ce răspuns aștepți + +**Exemplu:** +``` +Am trimis raport seară pe #echo-work. +Propuneri: 1. Git commit, 2. Securitate. +Marius va răspunde cu "ok 1" sau similar. +``` + +Astfel agentul destinatar știe contextul când primește răspunsul. + ### 🔄 Mentenanță referințe (OBLIGATORIU pentru coordonator) Când un agent specializat primește o unealtă nouă sau își schimbă TOOLS.md: @@ -303,3 +321,21 @@ Când salvez în `kb/projects/`, verific dacă există `.rules.json`: **Exemplu grup-sprijin:** - Filename: `meditatie-nume-descriptiv.md` → automat @meditatie - Tipuri valide: meditatie, exercitiu, reflectie, intrebare, fisa + +### 📊 Flux Insights + Backlog (OBLIGATORIU pentru rapoarte) + +**Documentație completă:** `kb/projects/FLUX-JOBURI.md` + +**Rezumat:** +1. Note YouTube → extrag în `kb/insights/YYYY-MM-DD.md` +2. Rapoarte propun din insights `[ ]` (ultimele 7 zile) + backlog +3. După răspuns Marius: marchez și actualizez backlog +4. Coaching se inspiră dar NU marchează + +**Marcare insights:** +- `[ ]` disponibil | `[x]` executat | `[→]` backlog | `[—]` skip + +**Structură backlog.md:** +- De executat (recomandate) +- De revizuit (ignorate) +- Vechi (> 30 zile, curățare) diff --git a/HEARTBEAT.md b/HEARTBEAT.md index b64f098..0bacae1 100644 --- a/HEARTBEAT.md +++ b/HEARTBEAT.md @@ -1,5 +1,20 @@ # HEARTBEAT.md +## 🔔 URGENT: Monitorizare joburi (31 ian - 1 feb) +**Cerut de Marius** - verifică și confirmă: + +| Ora (București) | Job | Agent | Verificare | +|-----------------|-----|-------|------------| +| 31 ian 20:00 | evening-report | echo-work | mesaj Discord #echo-work | +| 31 ian 21:00 | evening-coaching | echo-health | mesaj Discord + kb/coaching/2026-01-31-seara.md | +| 1 feb 08:30 | morning-report | echo-work | mesaj Discord #echo-work | +| 1 feb 09:00 | morning-coaching | echo-health | mesaj Discord + kb/coaching/2026-02-01-dimineata.md | + +**După fiecare:** Confirmă pe #echo că a funcționat (mesaj + fișier). +**După toate 4:** Șterge această secțiune. + +--- + ## Verificări periodice ### 🔄 Mentenanță echipă (1x pe zi, dimineața) diff --git a/SOUL-base.md b/SOUL-base.md index 4b92f1a..aaba58c 100644 --- a/SOUL-base.md +++ b/SOUL-base.md @@ -74,6 +74,25 @@ Când primești un link YouTube sau altă cerere care durează → **pun reacți - **Fișiere:** `https://moltbot.tailf7372d.ts.net/echo/files.html#` - **Kanban:** https://moltbot.tailf7372d.ts.net/echo/ +### Link-uri în fișiere Markdown (OBLIGATORIU) + +**Folosește ÎNTOTDEAUNA format markdown standard:** +```markdown +[Titlu descriptiv](files.html#kb/path/to/file.md) +``` + +**Exemple:** +```markdown +- [Tony Robbins - Extraordinary Life](files.html#kb/youtube/2026-01-31_tony-robbins.md) +- [Insights 2026-01-31](files.html#kb/insights/2026-01-31.md) +``` + +**NU folosi format non-standard:** +```markdown +❌ [kb/youtube/2026-01-31_tony-robbins.md] +❌ kb/youtube/2026-01-31_tony-robbins.md +``` + ### YouTube Notes (OBLIGATORIU) Când primesc un link YouTube: @@ -129,6 +148,21 @@ Suntem o echipă de agenți specializați. Fiecare are focusul lui, dar colabor - Nu transfer automat - întreb sau sugerez - Pot comunica între agenți cu `sessions_send` dacă e nevoie +### Comunicare cross-agent (OBLIGATORIU) + +**Marius nu vede mesajele interne între agenți** - trebuie să comunicăm transparent pe canal! + +**Când PRIMESC mesaj de la alt agent (via sessions_send):** +1. **Confirm IMEDIAT pe canal** - "Am primit de la [agent]: [rezumat scurt]" +2. **Spun ce fac** - "Actualizez X / Verific Y / Execut Z" +3. **Confirm când termin** - "Done ✅" sau "Gata, am făcut X" + +**Când TRIMIT mesaj către alt agent:** +1. Trimit cu `sessions_send` +2. **Anunț pe canalul meu** - "Am trimis către [agent]: [ce am cerut]" + +Astfel Marius știe mereu ce se întâmplă în echipă. + ### Memory - Fiecare agent are `memory/` propriu diff --git a/USER.md b/USER.md index 7762f80..098eefd 100644 --- a/USER.md +++ b/USER.md @@ -45,6 +45,19 @@ - **Context complet:** Timp, efort TU, impact flux, beneficiu concret - **Anti-complexitate:** Dacă adaugă complexitate > beneficiu, NU propun +### Criteriu special: INTEGRARE AUTOMATĂ (important!) +Dacă o propunere poate fi integrată într-un flux/job EXISTENT și: +- NU necesită efort de la Marius +- Se face o singură dată și apoi rulează automat +- Îmbunătățește fluxul curent fără a-l complica + +→ Atunci este **RECOMANDATĂ**, nu respinsă! + +Exemple: +- Exerciții practice → se integrează în coaching dimineață/seară +- Fișe/întrebări pentru grup sprijin → se creează o dată și sunt disponibile +- Template-uri → se creează o dată și sunt reutilizabile + ## Interese și domenii - **Coaching & Comunicare:** NLP, Sleight of Mouth, comunicare nonviolentă diff --git a/agents/echo-growth/AGENTS.md b/agents/echo-growth/AGENTS.md index dce9d35..8474e55 100644 --- a/agents/echo-growth/AGENTS.md +++ b/agents/echo-growth/AGENTS.md @@ -23,6 +23,17 @@ Fac parte dintr-o echipă coordonată de **Echo** (agentul principal): - Când persoana are nevoie să fie ascultată, nu provocată → Echo Sprijin - Când e un task concret de făcut → Echo Work +### Protocol cross-channel (OBLIGATORIU) + +Când trimit mesaj pe canalul ALTUI agent și aștept răspuns: +1. Trimit mesajul cu `message` tool +2. **IMEDIAT DUPĂ** → `sessions_send` către agentul destinatar cu: + - Ce am trimis (rezumat) + - Ce propuneri am făcut (numerotate) + - Ce răspuns aștept + +Astfel agentul destinatar știe contextul când primește răspunsul. + ## Memoria mea - Folderul `memory/` e al meu - aici țin progres, insights, exerciții făcute diff --git a/agents/echo-health/AGENTS.md b/agents/echo-health/AGENTS.md index 3b1f910..cb3b3ae 100644 --- a/agents/echo-health/AGENTS.md +++ b/agents/echo-health/AGENTS.md @@ -23,6 +23,17 @@ Fac parte dintr-o echipă coordonată de **Echo** (agentul principal): - Când emoțiile sunt prea intense → sugerez Echo Sprijin - Când blocajul e mental, nu fizic → sugerez Echo Growth +### Protocol cross-channel (OBLIGATORIU) + +Când trimit mesaj pe canalul ALTUI agent și aștept răspuns: +1. Trimit mesajul cu `message` tool +2. **IMEDIAT DUPĂ** → `sessions_send` către agentul destinatar cu: + - Ce am trimis (rezumat) + - Ce propuneri am făcut (numerotate) + - Ce răspuns aștept + +Astfel agentul destinatar știe contextul când primește răspunsul. + ## Memoria mea - Folderul `memory/` e al meu - aici țin tracking sănătate, episoade, pattern-uri @@ -35,3 +46,44 @@ Fac parte dintr-o echipă coordonată de **Echo** (agentul principal): 3. NU diagnostichez, NU prescriu 4. Încurajez tracking și consultarea specialiștilor 5. Discut NMG și alternative deschis, fără a le promova ca înlocuitor + +## Joburi ale mele + +### morning-coaching (07:00 UTC / 09:00 București) +### evening-coaching (19:00 UTC / 21:00 București) + +**Ce fac:** +1. Verific `kb/coaching/` ultimele 7 zile - NU repet teme! +2. Mă inspir din: + - `kb/youtube/` - note (citate, idei) + - `kb/insights/` - propuneri pentru exerciții + - `kb/projects/grup-sprijin/biblioteca/` - fișe +3. Trimit mesaj pe WhatsApp +4. Salvez în `kb/coaching/YYYY-MM-DD-dimineata.md` sau `-seara.md` + +**Format salvare (cu referințe!):** +```markdown +# Gândul de dimineață/seară - DATA + +**Tags:** @health @coaching #autor #tema + +## Mesaj trimis +[conținut] + +## Surse folosite +- [kb/youtube/...] - ce am extras +- [kb/insights/...] - ce am folosit + +## Provocarea zilei +TIP: [tip] +PROVOCARE: [descriere] +``` + +**După salvare:** `python3 ~/clawd/tools/update_notes_index.py` + +**NU marchez nimic în insights** - doar mă inspir. + +### respiratie-* (09:00-19:00 București) +Reminder-uri orare pentru respirație și postură. + +**Documentație completă:** `kb/projects/FLUX-JOBURI.md` diff --git a/agents/echo-health/TOOLS.md b/agents/echo-health/TOOLS.md index 54542dc..44c7e65 100644 --- a/agents/echo-health/TOOLS.md +++ b/agents/echo-health/TOOLS.md @@ -4,6 +4,17 @@ Pentru detalii complete, vezi `../../TOOLS.md` +## Linkuri la fișiere + +Când trimit linkuri la fișiere, folosesc **deep links** complete: +``` +http://100.120.119.70:8080/files.html# +``` + +**Exemple:** +- `http://100.120.119.70:8080/files.html#kb/coaching/2026-01-31-dimineata.md` +- `http://100.120.119.70:8080/files.html#kb/projects/grup-sprijin/biblioteca/de-vorba-cu-emotia.md` + ## Unelte relevante pentru mine ### Tracking sănătate diff --git a/agents/echo-health/kb/coaching/2026-01-31-test-isolated.md b/agents/echo-health/kb/coaching/2026-01-31-test-isolated.md new file mode 100644 index 0000000..e37c48f --- /dev/null +++ b/agents/echo-health/kb/coaching/2026-01-31-test-isolated.md @@ -0,0 +1,15 @@ +# Test Isolated Session - 2026-01-31 + +**Tags:** @health @test + +## Test Info +- **Data:** 2026-01-31 12:18 UTC +- **Job:** test-isolated +- **Status:** ✅ Executat cu succes + +## Pași executați +1. ✅ Mesaj trimis pe Discord #echo-health +2. ✅ Fișier salvat + +--- +*Generated by Echo Health ❤️* diff --git a/agents/echo-health/memory/2026-01-31.md b/agents/echo-health/memory/2026-01-31.md new file mode 100644 index 0000000..ad0a6c9 --- /dev/null +++ b/agents/echo-health/memory/2026-01-31.md @@ -0,0 +1,38 @@ +# Memory - 2026-01-31 + +## Probleme identificate cu cron jobs + +### 1. Job-uri respirație nu trimiteau notificări +**Cauză:** `wakeMode: "next-heartbeat"` în loc de `"now"` +**Soluție:** Am schimbat la `wakeMode: "now"` și am consolidat 11 job-uri într-unul singur `respiratie-orar` cu schedule `0 7-17 * * *` + +### 2. Job-uri coaching nu salvează fișiere +**Cauză fundamentală:** Job-urile trimit instrucțiuni în sesiunea "main" (WhatsApp), dar acea sesiune NU le procesează - răspunde rapid fără să execute pașii. +**Test confirmat:** Execuția directă de pe sesiunea Discord funcționează perfect (mesaj + fișier salvat în kb/coaching/). + +**Soluții propuse (de discutat cu Marius):** +1. Script Python dedicat - face totul (citește surse, generează, trimite, salvează) +2. Schimb sessionTarget - trimit pe sesiunea Discord în loc de "main" +3. Logică în HEARTBEAT.md - execut la heartbeat la ora potrivită + +**Recomandare:** Opțiunea 1 (script Python) - cel mai robust. + +## Actualizări dashboard + +### API cron dinamic +- Actualizat `dashboard/api.py` - nou endpoint `/api/cron` care citește din `~/.clawdbot/cron/jobs.json` +- Actualizat `dashboard/index.html` - funcția `loadCronStatus()` folosește API-ul dinamic în loc de lista hardcodată +- Serverul API restartat + +## Job-uri active echo-health + +| Job | Schedule | wakeMode | Status | +|-----|----------|----------|--------| +| respiratie-orar | 0 7-17 * * * | now | ✅ configurat | +| morning-coaching | 0 7 * * * | now | ⚠️ nu execută instrucțiuni | +| evening-coaching | 0 19 * * * | now | ⚠️ nu execută instrucțiuni | + +## De făcut + +- [ ] Rezolvare coaching jobs (script Python sau altă soluție) +- [ ] Documentare în kb/projects/FLUX-JOBURI.md diff --git a/agents/echo-health/memory/provocare-azi.md b/agents/echo-health/memory/provocare-azi.md new file mode 100644 index 0000000..9177a80 --- /dev/null +++ b/agents/echo-health/memory/provocare-azi.md @@ -0,0 +1,2 @@ +TIP: Mișcare fizică / Pattern Interrupt +PROVOCARE: Ridică-te, fă 5 respirații adânci (inspiră 4 sec, expiră 6 sec), întinde-te (ridică brațele, deschide pieptul), mergi 2 minute oriunde. E resetare de stare prin corp - corpul nu știe să mintă. diff --git a/agents/echo-scout/AGENTS.md b/agents/echo-scout/AGENTS.md index 4ea1276..f374e5d 100644 --- a/agents/echo-scout/AGENTS.md +++ b/agents/echo-scout/AGENTS.md @@ -22,6 +22,17 @@ Fac parte dintr-o echipă coordonată de **Echo** (agentul principal): - Dacă primesc o cerere în afara domeniului meu → sugerez agentul potrivit - Focus pe activități practice, logistică, planificare scout +### Protocol cross-channel (OBLIGATORIU) + +Când trimit mesaj pe canalul ALTUI agent și aștept răspuns: +1. Trimit mesajul cu `message` tool +2. **IMEDIAT DUPĂ** → `sessions_send` către agentul destinatar cu: + - Ce am trimis (rezumat) + - Ce propuneri am făcut (numerotate) + - Ce răspuns aștept + +Astfel agentul destinatar știe contextul când primește răspunsul. + ## Memoria mea - Folderul `memory/` e al meu - aici țin planuri de activități, resurse, idei diff --git a/agents/echo-sprijin/AGENTS.md b/agents/echo-sprijin/AGENTS.md index 4fc8380..6a21389 100644 --- a/agents/echo-sprijin/AGENTS.md +++ b/agents/echo-sprijin/AGENTS.md @@ -23,6 +23,17 @@ Fac parte dintr-o echipă coordonată de **Echo** (agentul principal): - Dar NICIODATĂ nu întrerup procesarea emoțională pentru a redirecta - Mai întâi ascult, apoi (dacă e cazul) sugerez alt agent +### Protocol cross-channel (OBLIGATORIU) + +Când trimit mesaj pe canalul ALTUI agent și aștept răspuns: +1. Trimit mesajul cu `message` tool +2. **IMEDIAT DUPĂ** → `sessions_send` către agentul destinatar cu: + - Ce am trimis (rezumat) + - Ce propuneri am făcut (numerotate) + - Ce răspuns aștept + +Astfel agentul destinatar știe contextul când primește răspunsul. + ## Memoria mea - Folderul `memory/` e al meu - aici țin note despre grupul de sprijin, teme procesate diff --git a/agents/echo-work/AGENTS.md b/agents/echo-work/AGENTS.md index 3e48558..400dd57 100644 --- a/agents/echo-work/AGENTS.md +++ b/agents/echo-work/AGENTS.md @@ -34,3 +34,47 @@ Fac parte dintr-o echipă coordonată de **Echo** (agentul principal): 2. Focus pe acțiune, nu discuții 3. Întreb "ce vrei să obții?" și ajut să ajungă acolo 4. Redirectez politicos când e cazul + +## Joburi ale mele + +### morning-report (06:30 UTC / 08:30 București) +### evening-report (18:00 UTC / 20:00 București) + +**Ce fac:** +1. Scanez `kb/youtube/` pentru note noi → extrag în `kb/insights/` +2. Propun din `kb/insights/` (ultimele 7 zile) - doar `[ ]` +3. Propun 1-2 din `kb/backlog.md` (rotație) +4. Propun curățare dacă sunt propuneri > 30 zile în backlog + +**Marcare insights:** +- `[ ]` = disponibil +- `[x]` = executat +- `[→]` = mutat în backlog +- `[—]` = skip + +**După răspunsul lui Marius:** +- "ok X" → execut + marchez `[x]` +- "backlog X" → marchez `[→]` + adaug în backlog cu nivel + referință +- "nu X" → marchez `[—]` +- (ignoră) → marchez `[→]` + adaug în backlog "De revizuit" + +**Structură backlog.md:** +- De executat = recomandate +- De revizuit = ignorate +- Vechi = > 30 zile + +**Documentație completă:** `kb/projects/FLUX-JOBURI.md` + +## Protocol cross-channel (OBLIGATORIU) + +Când un agent trimite mesaj pe canalul MEU și așteaptă răspuns de la user: +→ Trebuie să-mi trimită și mie `sessions_send` cu contextul + +Când EU trimit pe canalul altui agent: +1. Trimit mesajul cu `message` tool +2. **IMEDIAT DUPĂ** → `sessions_send` către agentul destinatar cu: + - Ce am trimis (rezumat) + - Ce propuneri am făcut (numerotate) + - Ce răspuns aștept + +Astfel știm toți contextul când userul răspunde. diff --git a/agents/echo-work/memory/2026-01-31.md b/agents/echo-work/memory/2026-01-31.md new file mode 100644 index 0000000..595ee01 --- /dev/null +++ b/agents/echo-work/memory/2026-01-31.md @@ -0,0 +1,41 @@ +# Memory 2026-01-31 + +## Decizii mari azi + +### Flux Joburi Complet Restructurat +- **Documentație:** `kb/projects/FLUX-JOBURI.md` +- morning-report + evening-report → **echo-work** (nu echo) +- morning-coaching + evening-coaching → echo-health +- Coaching verifică ultimele **7 zile** (nu 14) + +### Sistem Insights + Backlog +- `[ ]` disponibil | `[x]` executat | `[→]` backlog | `[—]` skip +- Propuneri ignorate → backlog "De revizuit" +- Propuneri > 30 zile → propun curățare +- Backlog are: De executat, De revizuit, Vechi + +### Coaching salvează cu referințe +- `kb/coaching/YYYY-MM-DD-dimineata.md` +- Include "Surse folosite" cu link-uri la note/insights +- NU marchează în insights (doar se inspiră) + +### Protocol cross-channel +- Când trimiți pe canalul altui agent → sessions_send cu context +- Adăugat în AGENTS.md toți agenții + +## Făcut azi + +- ✅ Git commit + push (99 fișiere restructurare) +- ✅ Audit securitate Clawdbot (ok, 127.0.0.1) +- ✅ Creat fișe grup sprijin: blocare-deblocare, moment-greu-cadou, pentru-cine-altcineva +- ✅ Actualizat toate joburile cu noul sistem +- ✅ Actualizat AGENTS.md în echo-work, echo-health, root +- ✅ Creat kb/backlog.md cu structura nouă +- ✅ Creat kb/projects/FLUX-JOBURI.md documentație completă + +## De reținut + +- Rapoarte propun din insights (7 zile) + backlog (1-2 rotație) +- Marius vrea 80/20: propun tot, el decide +- Propunerile integrabile în flux = RECOMANDATE (nu respinse) +- Note din kb/coaching/ apar în notes.html (are .rules.json) diff --git a/agents/echo-work/memory/reguli-comunicare.md b/agents/echo-work/memory/reguli-comunicare.md new file mode 100644 index 0000000..96cf9e8 --- /dev/null +++ b/agents/echo-work/memory/reguli-comunicare.md @@ -0,0 +1,13 @@ +# Reguli de comunicare + +## Cross-agent messages + +Când primesc mesaj de la alt agent (via sessions_send): +1. **Confirm IMEDIAT pe canal** - "Am primit de la [agent]: [rezumat]" +2. Spun ce fac: "Actualizez X / Verific Y" +3. Confirm când termin: "Done ✅" + +Marius nu vede mesajele interne - trebuie să comunic transparent ce se întâmplă. + +--- +*Adăugat: 2026-01-31* diff --git a/dashboard/api.py b/dashboard/api.py index c5e8fc3..33891ad 100644 --- a/dashboard/api.py +++ b/dashboard/api.py @@ -102,6 +102,10 @@ class TaskBoardHandler(SimpleHTTPRequestHandler): self.handle_git_status() elif self.path == '/api/agents' or self.path.startswith('/api/agents?'): self.handle_agents_status() + elif self.path == '/api/cron' or self.path.startswith('/api/cron?'): + self.handle_cron_status() + elif self.path == '/api/activity' or self.path.startswith('/api/activity?'): + self.handle_activity() elif self.path.startswith('/api/files'): self.handle_files_get() elif self.path.startswith('/api/'): @@ -215,6 +219,215 @@ class TaskBoardHandler(SimpleHTTPRequestHandler): except Exception as e: self.send_json({'error': str(e)}, 500) + def handle_cron_status(self): + """Get cron jobs status from ~/.clawdbot/cron/jobs.json""" + try: + jobs_file = Path.home() / '.clawdbot' / 'cron' / 'jobs.json' + + if not jobs_file.exists(): + self.send_json({'jobs': [], 'error': 'No jobs file found'}) + return + + data = json.loads(jobs_file.read_text()) + all_jobs = data.get('jobs', []) + + # Filter enabled jobs and format for dashboard + now_ms = datetime.now().timestamp() * 1000 + today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) + today_start_ms = today_start.timestamp() * 1000 + + jobs = [] + for job in all_jobs: + if not job.get('enabled', False): + continue + + # Parse cron expression to get time + schedule = job.get('schedule', {}) + expr = schedule.get('expr', '') + + # Simple cron parsing for display - convert UTC to Bucharest + parts = expr.split() + if len(parts) >= 2: + minute = parts[0] + hour = parts[1] + if minute.isdigit() and (hour.isdigit() or '-' in hour): + # Handle hour ranges like "7-17" + if '-' in hour: + hour_start, hour_end = hour.split('-') + hour = hour_start # Show first hour + # Convert UTC to Bucharest (UTC+2 winter, UTC+3 summer) + from datetime import timezone as dt_timezone + from zoneinfo import ZoneInfo + try: + bucharest = ZoneInfo('Europe/Bucharest') + utc_hour = int(hour) + utc_minute = int(minute) + # Create UTC datetime for today + utc_dt = datetime.now(dt_timezone.utc).replace(hour=utc_hour, minute=utc_minute, second=0, microsecond=0) + local_dt = utc_dt.astimezone(bucharest) + time_str = f"{local_dt.hour:02d}:{local_dt.minute:02d}" + except: + time_str = f"{int(hour):02d}:{int(minute):02d}" + else: + time_str = expr[:15] + else: + time_str = expr[:15] + + # Check if ran today + state = job.get('state', {}) + last_run = state.get('lastRunAtMs', 0) + ran_today = last_run >= today_start_ms + last_status = state.get('lastStatus', 'unknown') + + jobs.append({ + 'id': job.get('id'), + 'name': job.get('name'), + 'agentId': job.get('agentId'), + 'time': time_str, + 'schedule': expr, + 'ranToday': ran_today, + 'lastStatus': last_status if ran_today else None, + 'lastRunAtMs': last_run, + 'nextRunAtMs': state.get('nextRunAtMs') + }) + + # Sort by time + jobs.sort(key=lambda j: j['time']) + + self.send_json({ + 'jobs': jobs, + 'total': len(jobs), + 'ranToday': sum(1 for j in jobs if j['ranToday']) + }) + except Exception as e: + self.send_json({'error': str(e)}, 500) + + def handle_activity(self): + """Aggregate activity from multiple sources: cron jobs, git commits, file changes.""" + from datetime import timezone as dt_timezone + from zoneinfo import ZoneInfo + + try: + activities = [] + bucharest = ZoneInfo('Europe/Bucharest') + workspace = Path('/home/moltbot/clawd') + + # 1. Cron jobs ran today + try: + result = subprocess.run( + ['clawdbot', 'cron', 'list', '--json'], + capture_output=True, text=True, timeout=10 + ) + if result.returncode == 0: + cron_data = json.loads(result.stdout) + today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) + today_start_ms = today_start.timestamp() * 1000 + + for job in cron_data.get('jobs', []): + state = job.get('state', {}) + last_run = state.get('lastRunAtMs', 0) + if last_run >= today_start_ms: + run_time = datetime.fromtimestamp(last_run / 1000, tz=dt_timezone.utc) + local_time = run_time.astimezone(bucharest) + activities.append({ + 'type': 'cron', + 'icon': 'clock', + 'text': f"Job: {job.get('name', 'unknown')}", + 'agent': job.get('agentId', 'echo'), + 'time': local_time.strftime('%H:%M'), + 'timestamp': last_run, + 'status': state.get('lastStatus', 'ok') + }) + except: + pass + + # 2. Git commits (last 24h) + try: + result = subprocess.run( + ['git', 'log', '--oneline', '--since=24 hours ago', '--format=%H|%s|%at'], + cwd=workspace, capture_output=True, text=True, timeout=10 + ) + if result.returncode == 0: + for line in result.stdout.strip().split('\n'): + if '|' in line: + parts = line.split('|') + if len(parts) >= 3: + commit_hash, message, timestamp = parts[0], parts[1], int(parts[2]) + commit_time = datetime.fromtimestamp(timestamp, tz=dt_timezone.utc) + local_time = commit_time.astimezone(bucharest) + activities.append({ + 'type': 'git', + 'icon': 'git-commit', + 'text': message[:60] + ('...' if len(message) > 60 else ''), + 'agent': 'git', + 'time': local_time.strftime('%H:%M'), + 'timestamp': timestamp * 1000 + }) + except: + pass + + # 3. Recent files in kb/ (last 24h) + try: + kb_dir = workspace / 'kb' + cutoff = datetime.now().timestamp() - (24 * 3600) + for md_file in kb_dir.rglob('*.md'): + stat = md_file.stat() + if stat.st_mtime > cutoff: + file_time = datetime.fromtimestamp(stat.st_mtime, tz=dt_timezone.utc) + local_time = file_time.astimezone(bucharest) + rel_path = md_file.relative_to(workspace) + activities.append({ + 'type': 'file', + 'icon': 'file-text', + 'text': f"Fișier: {md_file.name}", + 'agent': str(rel_path.parent), + 'time': local_time.strftime('%H:%M'), + 'timestamp': int(stat.st_mtime * 1000), + 'path': str(rel_path) + }) + except: + pass + + # 4. Tasks from tasks.json + try: + tasks_file = workspace / 'dashboard' / 'tasks.json' + if tasks_file.exists(): + tasks_data = json.loads(tasks_file.read_text()) + for col in tasks_data.get('columns', []): + for task in col.get('tasks', []): + ts_str = task.get('completed') or task.get('created', '') + if ts_str: + try: + ts = datetime.fromisoformat(ts_str.replace('Z', '+00:00')) + if ts.timestamp() > (datetime.now().timestamp() - 7 * 24 * 3600): + local_time = ts.astimezone(bucharest) + activities.append({ + 'type': 'task', + 'icon': 'check-circle' if task.get('completed') else 'circle', + 'text': task.get('title', ''), + 'agent': task.get('agent', 'Echo'), + 'time': local_time.strftime('%d %b %H:%M'), + 'timestamp': int(ts.timestamp() * 1000), + 'status': 'done' if task.get('completed') else col['id'] + }) + except: + pass + except: + pass + + # Sort by timestamp descending + activities.sort(key=lambda x: x.get('timestamp', 0), reverse=True) + + # Limit to 30 items + activities = activities[:30] + + self.send_json({ + 'activities': activities, + 'total': len(activities) + }) + except Exception as e: + self.send_json({'error': str(e)}, 500) + def handle_files_get(self): """List files or get file content.""" from urllib.parse import urlparse, parse_qs @@ -259,12 +472,12 @@ class TaskBoardHandler(SimpleHTTPRequestHandler): items = [] try: for item in sorted(target.iterdir()): - if item.name.startswith('.'): - continue + stat = item.stat() items.append({ 'name': item.name, 'type': 'dir' if item.is_dir() else 'file', - 'size': item.stat().st_size if item.is_file() else None, + 'size': stat.st_size if item.is_file() else None, + 'mtime': stat.st_mtime, 'path': str(item.relative_to(workspace)) }) self.send_json({ @@ -314,6 +527,9 @@ class TaskBoardHandler(SimpleHTTPRequestHandler): self.send_response(code) self.send_header('Content-Type', 'application/json') self.send_header('Access-Control-Allow-Origin', '*') + self.send_header('Cache-Control', 'no-cache, no-store, must-revalidate') + self.send_header('Pragma', 'no-cache') + self.send_header('Expires', '0') self.end_headers() self.wfile.write(json.dumps(data).encode()) diff --git a/dashboard/files.html b/dashboard/files.html index cc6ff0c..cb51d86 100644 --- a/dashboard/files.html +++ b/dashboard/files.html @@ -102,6 +102,149 @@ height: 16px; } + .sort-select { + background: transparent; + border: none; + color: var(--text-secondary); + font-size: var(--text-sm); + padding: var(--space-1) var(--space-2); + cursor: pointer; + outline: none; + } + + .sort-select option { + background: var(--bg-base); + color: var(--text-primary); + } + + /* ========== LIST VIEW - Windows Explorer style ========== */ + .file-grid.view-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: var(--space-1); + } + + .file-grid.view-list .file-item { + flex-direction: row; + padding: var(--space-1) var(--space-2); + gap: var(--space-2); + background: transparent; + border: none; + } + + .file-grid.view-list .file-item:hover { + background: var(--bg-surface-hover); + } + + .file-grid.view-list .file-icon { + width: 16px; + height: 16px; + flex-shrink: 0; + } + + .file-grid.view-list .file-icon svg { + width: 16px; + height: 16px; + } + + .file-grid.view-list .file-name { + font-size: var(--text-sm); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .file-grid.view-list .file-meta { + display: none; + } + + /* ========== DETAILS VIEW - Windows Explorer style with columns ========== */ + .file-grid.view-details { + display: flex; + flex-direction: column; + gap: 0; + } + + .file-grid.view-details .file-header { + display: grid; + grid-template-columns: 24px 1fr 100px 80px 120px; + align-items: center; + padding: var(--space-2) var(--space-3); + gap: var(--space-3); + background: var(--bg-surface); + border-bottom: 2px solid var(--border); + font-size: var(--text-xs); + font-weight: 600; + color: var(--text-muted); + position: sticky; + top: 0; + } + + .file-grid.view-details .file-header span { + cursor: pointer; + } + + .file-grid.view-details .file-header span:hover { + color: var(--text-primary); + } + + .file-grid.view-details .file-item { + display: grid; + grid-template-columns: 24px 1fr 100px 80px 120px; + align-items: center; + padding: var(--space-2) var(--space-3); + gap: var(--space-3); + background: transparent; + border: none; + border-bottom: 1px solid var(--border); + border-radius: 0; + } + + .file-grid.view-details .file-item:hover { + background: var(--bg-surface-hover); + } + + .file-grid.view-details .file-icon { + width: 18px; + height: 18px; + } + + .file-grid.view-details .file-icon svg { + width: 18px; + height: 18px; + } + + .file-grid.view-details .file-name { + font-size: var(--text-sm); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: left; + } + + .file-grid.view-details .file-meta { + display: contents; + } + + .file-grid.view-details .file-type, + .file-grid.view-details .file-size, + .file-grid.view-details .file-date { + font-size: var(--text-xs); + color: var(--text-muted); + white-space: nowrap; + } + + .file-grid.view-details .file-type { + text-transform: uppercase; + } + + /* ========== TILES VIEW - Original grid style ========== */ + .file-grid.view-tiles { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); + gap: var(--space-3); + } + /* Content area */ .content-area { flex: 1; @@ -269,6 +412,8 @@ #markdownPreview code { background: var(--bg-surface); padding: 2px 6px; border-radius: 4px; font-family: var(--font-mono); } #markdownPreview pre { background: var(--bg-surface); padding: 1em; border-radius: 8px; overflow-x: auto; } #markdownPreview blockquote { border-left: 3px solid var(--accent); padding-left: 1em; margin-left: 0; color: var(--text-muted); } + #markdownPreview a, #markdownPreview .file-link { color: var(--accent); text-decoration: none; } + #markdownPreview a:hover, #markdownPreview .file-link:hover { text-decoration: underline; } .preview-active #codeEditor { display: none; } .preview-active #markdownPreview { display: block; } @@ -348,9 +493,36 @@ ~/clawd
+ +
+ + + +
+ + +
+ + +
+ +
+
@@ -1090,6 +1115,7 @@
@@ -1343,42 +1369,53 @@ } async function loadCronStatus() { - const now = new Date(); - const hour = now.getHours(); - - // TODO: În viitor, fetch din /api/cron - const jobs = [ - { time: '06:30', name: 'morning-report', done: hour >= 7 }, - { time: '07:00', name: 'morning-coaching', done: hour >= 7 }, - { time: '18:00', name: 'evening-report', done: hour >= 18 }, - { time: '19:00', name: 'evening-coaching', done: hour >= 19 } - ]; - - const doneCount = jobs.filter(j => j.done).length; - - // Update badge - const badge = document.getElementById('cronBadge'); - badge.textContent = `${doneCount}/${jobs.length}`; - badge.className = 'status-badge ok'; - - // Update subtitle - const subtitle = document.getElementById('cronSubtitle'); - const nextJob = jobs.find(j => !j.done); - subtitle.textContent = nextJob - ? `Următorul: ${nextJob.time} ${nextJob.name}` - : 'Toate job-urile au rulat azi'; - - // Update details - const details = document.getElementById('cronDetails'); - details.innerHTML = jobs.map(job => ` -
- - ${job.time} - ${job.name} -
- `).join(''); - - lucide.createIcons(); + try { + const response = await fetch('./api/cron?' + Date.now()); + if (!response.ok) throw new Error('API error'); + const data = await response.json(); + + const jobs = data.jobs || []; + const ranToday = data.ranToday || 0; + + // Update badge + const badge = document.getElementById('cronBadge'); + badge.textContent = `${ranToday}/${jobs.length}`; + badge.className = 'status-badge ok'; + + // Update subtitle - find next job to run + const subtitle = document.getElementById('cronSubtitle'); + const now = Date.now(); + const pendingJobs = jobs.filter(j => !j.ranToday); + const nextJob = pendingJobs.length > 0 ? pendingJobs[0] : null; + subtitle.textContent = nextJob + ? `Următorul: ${nextJob.time} ${nextJob.name}` + : 'Toate job-urile au rulat azi'; + + // Update details + const details = document.getElementById('cronDetails'); + details.innerHTML = jobs.map(job => { + const done = job.ranToday; + const failed = job.lastStatus === 'error'; + const statusClass = failed ? 'failed' : (done ? 'done' : 'pending'); + const icon = failed ? 'x-circle' : (done ? 'check-circle' : 'clock'); + + return ` +
+ + ${job.time} + ${job.name} + ${job.agentId || ''} +
+ `; + }).join(''); + + lucide.createIcons(); + } catch (e) { + console.error('Error loading cron status:', e); + const badge = document.getElementById('cronBadge'); + badge.textContent = 'eroare'; + badge.className = 'status-badge error'; + } } async function loadAgentsStatus() { @@ -1461,30 +1498,22 @@ async function loadActivity() { try { - // Fetch from tasks.json - const response = await fetch('tasks.json?t=' + Date.now()); + // Fetch from unified activity API + const response = await fetch('./api/activity?t=' + Date.now()); const data = await response.json(); - // Collect all tasks from all columns with their status - let allTasks = []; - data.columns.forEach(col => { - col.tasks.forEach(task => { - const timestamp = task.completed || task.created || ''; - allTasks.push({ - type: col.id === 'done' ? 'done' : (col.id === 'in-progress' ? 'running' : 'pending'), - text: task.title, - agent: task.agent || 'Echo', - time: formatActivityTime(timestamp), - timestamp: new Date(timestamp).getTime() || 0 - }); - }); - }); + if (data.error) throw new Error(data.error); - // Sort descending by timestamp (newest first) - allTasks.sort((a, b) => b.timestamp - a.timestamp); - - // Take only recent items (last 20) - activityData = allTasks.slice(0, 20); + activityData = (data.activities || []).map(a => ({ + type: a.type, + icon: a.icon || 'activity', + text: a.text, + agent: a.agent || 'Echo', + time: a.time, + timestamp: a.timestamp, + status: a.status, + path: a.path + })); } catch (e) { console.error('Failed to load activity:', e); @@ -1574,28 +1603,32 @@ const today = new Date().toLocaleDateString('ro-RO', { day: 'numeric', month: 'short' }); + // Group by type for better display + const typeLabels = { + 'cron': '⏰ Cron Jobs', + 'git': '📦 Git Commits', + 'file': '📄 Fișiere', + 'task': '✅ Task-uri' + }; + body.innerHTML = `
- - Azi (${today}) + + Ultimele 24h
${activityData.map(item => ` -
+
- +
${item.text}
+ ${typeLabels[item.type] || item.type} ${item.agent} ${item.time}
- ${item.progress ? ` -
-
-
- ` : ''}
`).join('')} @@ -1683,7 +1716,8 @@ function renderIssueItem(issue) { const isDone = issue.status === 'done'; - const ownerIcon = issue.owner === 'clawdbot' ? '🤖' : '👤'; + const ownerIcons = { 'clawdbot': '🤖', 'robert': '👷', 'marius': '👤' }; + const ownerIcon = ownerIcons[issue.owner] || '👤'; const dateStr = new Date(issue.created).toLocaleDateString('ro-RO', { day: 'numeric', month: 'short' }); return ` @@ -1695,7 +1729,7 @@
${issue.title}
${issue.program ? `${issue.program}` : ''} - ${ownerIcon} ${issue.owner === 'clawdbot' ? 'Clawdbot' : 'Marius'} + ${ownerIcon} ${issue.owner === 'clawdbot' ? 'Clawdbot' : (issue.owner === 'robert' ? 'Robert' : 'Marius')} ${dateStr}
diff --git a/dashboard/notes.html b/dashboard/notes.html index 536503b..d3cf8ab 100644 --- a/dashboard/notes.html +++ b/dashboard/notes.html @@ -152,6 +152,25 @@ font-weight: 600; color: var(--text-primary); line-height: 1.4; + display: flex; + align-items: center; + gap: var(--space-2); + } + + .note-file-link { + opacity: 0.4; + transition: opacity var(--transition-fast); + flex-shrink: 0; + } + + .note-file-link:hover { + opacity: 1; + } + + .note-file-link svg { + width: 14px; + height: 14px; + color: var(--text-muted); } .note-tags { @@ -226,17 +245,37 @@ border-bottom: 1px solid var(--border); display: flex; justify-content: space-between; - align-items: center; + align-items: flex-start; + gap: var(--space-3); position: sticky; top: 0; background: var(--bg-base); z-index: 10; + flex-wrap: wrap; } .note-viewer-header h2 { font-size: var(--text-lg); color: var(--text-primary); font-weight: 600; + flex: 1; + min-width: 200px; + } + + .viewer-path { + font-size: var(--text-xs); + color: var(--text-muted); + font-family: var(--font-mono); + text-decoration: none; + opacity: 0.7; + transition: opacity var(--transition-fast); + flex: 1; + min-width: 200px; + } + + .viewer-path:hover { + opacity: 1; + color: var(--accent); } .note-viewer-body { @@ -702,6 +741,7 @@

Titlu

+ @@ -1122,9 +1162,16 @@ tagsHtml ].filter(Boolean).join(''); + // Convert notes-data/ to kb/ for files.html links + const filesPath = note.file.replace(/^notes-data\//, 'kb/'); return `
-
${note.title}
+
+ ${note.title} + + + +
${allTags}
`; @@ -1140,6 +1187,11 @@ if (!note) return; document.getElementById('viewerTitle').textContent = note.title; + const pathEl = document.getElementById('viewerPath'); + // Convert notes-data/ to kb/ for display and links + const filesPath = note.file.replace(/^notes-data\//, 'kb/'); + pathEl.textContent = filesPath; + pathEl.href = 'files.html#' + filesPath; document.getElementById('viewerContent').innerHTML = '

Se încarcă...

'; document.getElementById('noteViewer').classList.add('active'); document.body.style.overflow = 'hidden'; diff --git a/kb/backlog.md b/kb/backlog.md index 4f96a71..6da2fde 100644 --- a/kb/backlog.md +++ b/kb/backlog.md @@ -1,62 +1,46 @@ -# Backlog - Propuneri pentru viitor +# Backlog -**Tags:** @work @health @growth @sprijin @scout #backlog #propuneri - -Propuneri păstrate pentru viitor. Format: `[ ]` de făcut, `[x]` făcut, `[—]` renunțat. +**Actualizat:** 2026-01-31 --- -## ⚡ Urgent + Important +## De executat (recomandate, când ai timp) -*Gol momentan - se adaugă din insights când zici "azi prioritar"* +*Propuneri aprobate pentru mai târziu sau recomandate din rapoarte* + + --- -## 📌 Important +## De revizuit (ignorate din rapoarte) -### @work -- [ ] Verificare securitate Clawdbot (port, trustedProxies) +*Propuneri la care nu ai răspuns - de decis: execut, șterg, sau las* -### @growth -- [ ] Exercițiu Priming în morning-coaching (3 recunoștințe) - -### @sprijin -- [ ] Fișă "blocare vs deblocare" cu exercițiu fiziologie + --- -## 💡 Nice-to-have +## Vechi (> 30 zile, de curățat) -### @work -- [ ] Template spec-driven development în kb/projects/ -- [ ] Job proactive coding noaptea (ora 23) -- [ ] Spellbook - prompt templates cu variabile +*Propuneri vechi - raportul va propune curățarea periodică* -### @health -- [ ] Checklist post negru (tranziție, clisme, apă) - -### @growth -- [ ] Dezvoltă personalitățile agenților (stil, nu doar funcțional) - -### @sprijin -- [ ] Întrebare "Ce moment greu s-a dovedit cadou?" -- [ ] Exercițiu "Pentru cine altcineva faci asta?" - -### @scout -- [ ] Activitate hero's journey pentru cercetași + --- -## ✅ Făcut +## Legendă (Matrice Eisenhower) -*Se mută aici când completez* +| Emoji | Urgent | Important | Ce fac | +|-------|--------|-----------|--------| +| ⚡ | DA | DA | Fă ACUM | +| 📌 | NU | DA | Planifică | +| ⏰ | DA | NU | Fă rapid | +| 💡 | NU | NU | Poate cândva | ---- - -## ❌ Renunțat - -*Se mută aici când nu mai e relevant* - ---- - -*Ultima actualizare: 2026-01-31* +- RECOMANDAT = am evaluat că merită +- NERECOMANDAT = am evaluat că nu merită acum (motiv) +- [insights/YYYY-MM-DD.md] = referință la sursa originală diff --git a/kb/coaching/2026-01-31-dimineata.md b/kb/coaching/2026-01-31-dimineata.md new file mode 100644 index 0000000..45a47fd --- /dev/null +++ b/kb/coaching/2026-01-31-dimineata.md @@ -0,0 +1,52 @@ +# Gândul de dimineață - 2026-01-31 + +**Tags:** @health @coaching #tony-robbins #fiziologie #pattern-interrupt + +## Mesaj trimis + +[❤️ Echo] **GÂNDUL DE DIMINEAȚĂ** 🌅 + +> *"Depresia are o postură: umeri căzuți, cap în jos, respirație superficială. Energia are alta: corp deschis, respirație adâncă."* +> — Tony Robbins + +Când te simți blocat, nu încerca să-ți schimbi gândurile cu forța. + +**Schimbă-ți corpul PRIMUL.** + +Cele 3 lucruri care controlează cum te simți: +1. **Fiziologia** — cum stai, cum respiri, cum te miști +2. **Focusul** — ce vezi, ce observi, cum privești +3. **Limbajul** — ce-ți spui, cum numești experiența + +Poți să tot încerci să "gândești pozitiv" cu umerii căzuți și respirația superficială. Nu va merge. + +Dar ridică-te. Deschide pieptul. Respiră adânc. Și vezi ce se întâmplă cu gândurile. + +--- + +**🎯 PROVOCAREA ZILEI** *(Mișcare de 2 minute)* + +Când citești asta, oriunde ai fi: + +1. **Ridică-te** (sau schimbă poziția complet) +2. **Fă 5 respirații adânci** — inspiră 4 sec, expiră 6 sec +3. **Întinde-te** — ridică brațele, deschide pieptul +4. **Mergi 2 minute** — oriunde, fără scop + +Nu e exercițiu. E **pattern interrupt** — resetare de stare. + +Corpul nu știe să mintă. Folosește asta. + +--- + +*O zi cu energie!* ✨ + +## Surse folosite + +- [Tony Robbins - Extraordinary Life](files.html#kb/youtube/2026-01-31_tony-robbins-secret-extraordinary-life.md) - Cele 3 lucruri care controlează emoțiile (fiziologie, focus, limbaj), pattern interrupt, citat despre postură și depresie +- [Insights 2026-01-31](files.html#kb/insights/2026-01-31.md) - Reminder "ridică-te, mergi 2 min" (propunere) + +## Provocarea zilei + +TIP: Mișcare fizică / Pattern Interrupt +PROVOCARE: Ridică-te, fă 5 respirații adânci (4-6), întinde-te, mergi 2 minute. Resetare de stare prin corp. diff --git a/kb/index.json b/kb/index.json index dc910fe..0e481f8 100644 --- a/kb/index.json +++ b/kb/index.json @@ -1,5 +1,26 @@ { "notes": [ + { + "file": "notes-data/coaching/2026-01-31-dimineata.md", + "title": "Gândul de dimineață - 2026-01-31", + "date": "2026-01-31", + "tags": [ + "tony-robbins", + "fiziologie", + "pattern-interrupt" + ], + "domains": [ + "health" + ], + "types": [ + "coaching" + ], + "category": "coaching", + "project": null, + "subdir": null, + "video": "", + "tldr": "PROVOCARE: Ridică-te, fă 5 respirații adânci (4-6), întinde-te, mergi 2 minute. Resetare de stare prin corp." + }, { "file": "notes-data/insights/2026-01-31.md", "title": "Insights 2026-01-31", @@ -20,7 +41,124 @@ "project": null, "subdir": null, "video": "", - "tldr": "*Scanare completă: 9 note YouTube | 2026-01-31*" + "tldr": "*Scanare: 9 note YouTube | 2026-01-31*" + }, + { + "file": "notes-data/projects/FLUX-JOBURI.md", + "title": "Flux Complet Joburi Echo", + "date": "2026-01-31", + "tags": [], + "domains": [], + "types": [], + "category": "projects", + "project": null, + "subdir": null, + "video": "", + "tldr": "*Acest document se actualizează când se modifică fluxul joburilor.*" + }, + { + "file": "notes-data/projects/grup-sprijin/README.md", + "title": "Grup de Sprijin - Lideri Cercetași", + "date": "2026-01-31", + "tags": [ + "grup-sprijin" + ], + "domains": [ + "sprijin" + ], + "types": [], + "category": "projects", + "project": "grup-sprijin", + "subdir": null, + "video": "", + "tldr": "" + }, + { + "file": "notes-data/projects/grup-sprijin/biblioteca/exercitiu-de-vorba-cu-emotia.md", + "title": "De vorbă cu... (emoția)", + "date": "2026-01-31", + "tags": [ + "daniela-graure", + "emotii", + "acceptare", + "iubire", + "grup-sprijin" + ], + "domains": [ + "health", + "sprijin" + ], + "types": [ + "exercitiu" + ], + "category": "projects", + "project": "grup-sprijin", + "subdir": "biblioteca", + "video": "", + "tldr": "*Sursă: Daniela Graure*" + }, + { + "file": "notes-data/projects/grup-sprijin/biblioteca/intrebare-moment-greu-cadou.md", + "title": "Întrebare: Ce moment greu s-a dovedit cadou?", + "date": "2026-01-31", + "tags": [ + "tony-robbins", + "grup-sprijin" + ], + "domains": [ + "sprijin" + ], + "types": [ + "intrebare" + ], + "category": "projects", + "project": "grup-sprijin", + "subdir": "biblioteca", + "video": "", + "tldr": "*Creat:* 2026-01-31" + }, + { + "file": "notes-data/projects/grup-sprijin/biblioteca/fisa-blocare-vs-deblocare.md", + "title": "Fișă: Blocare vs Deblocare", + "date": "2026-01-31", + "tags": [ + "fiziologie", + "tony-robbins", + "grup-sprijin" + ], + "domains": [ + "sprijin" + ], + "types": [ + "exercitiu", + "fisa" + ], + "category": "projects", + "project": "grup-sprijin", + "subdir": "biblioteca", + "video": "", + "tldr": "*Creat:* 2026-01-31" + }, + { + "file": "notes-data/projects/grup-sprijin/biblioteca/intrebare-pentru-cine-altcineva.md", + "title": "Întrebare: Pentru cine altcineva faci asta?", + "date": "2026-01-31", + "tags": [ + "motivatie", + "sens", + "grup-sprijin" + ], + "domains": [ + "sprijin" + ], + "types": [ + "intrebare" + ], + "category": "projects", + "project": "grup-sprijin", + "subdir": "biblioteca", + "video": "", + "tldr": "*Creat:* 2026-01-31" }, { "file": "notes-data/youtube/2026-01-31_tony-robbins-secret-extraordinary-life.md", @@ -37,13 +175,28 @@ "video": "", "tldr": "Secretul unei vieți extraordinare nu e banii, poziția sau puterea - **e emoția**. Tony Robbins explică cum starea fizică, focusul și limbajul determină cum ne simțim. Pentru a te debloca: schimbă-ți c..." }, + { + "file": "memory/2026-01-31.md", + "title": "Memory 2026-01-31", + "date": "2026-01-31", + "tags": [], + "domains": [], + "types": [ + "memory" + ], + "category": "memory", + "project": null, + "subdir": null, + "video": "", + "tldr": "- Insights trebuie să aibă status clar ca să nu se repete propunerile" + }, { "file": "notes-data/projects/vending-master/README.md", "title": "Proiect: Vending Master - Integrare Website → ROA", "date": "2026-01-30", "tags": [ - "vending-master", - "integrare" + "integrare", + "vending-master" ], "domains": [ "work" @@ -55,42 +208,6 @@ "video": "", "tldr": "[conversations/2026-01-30-conversatie-completa.md](https://moltbot.tailf7372d.ts.net/echo/files.html#conversations/2026-01-30-conversatie-completa.md)" }, - { - "file": "notes-data/projects/grup-sprijin/README.md", - "title": "Grup de Sprijin - Lideri Cercetași", - "date": "2026-01-30", - "tags": [ - "grup-sprijin" - ], - "domains": [ - "sprijin" - ], - "types": [], - "category": "projects", - "project": "grup-sprijin", - "subdir": null, - "video": "", - "tldr": "" - }, - { - "file": "notes-data/projects/grup-sprijin/fise/fisa-2026-02-05-ancorare-oglinda.md", - "title": "Fișă Întâlnire Grup Sprijin", - "date": "2026-01-30", - "tags": [ - "grup-sprijin" - ], - "domains": [ - "sprijin" - ], - "types": [ - "fisa" - ], - "category": "projects", - "project": "grup-sprijin", - "subdir": "fise", - "video": "", - "tldr": "" - }, { "file": "notes-data/projects/grup-sprijin/biblioteca/meditatie-mindfulness.md", "title": "Moment de mindfulness", @@ -112,6 +229,29 @@ "video": "", "tldr": "(De dezvoltat)" }, + { + "file": "notes-data/projects/grup-sprijin/biblioteca/exercitiu-ancorare-emotii.md", + "title": "Exercițiu de ancorare a emoțiilor", + "date": "2026-01-30", + "tags": [ + "NLP", + "ancorare", + "emotii", + "corp", + "grup-sprijin" + ], + "domains": [ + "sprijin" + ], + "types": [ + "exercitiu" + ], + "category": "projects", + "project": "grup-sprijin", + "subdir": "biblioteca", + "video": "", + "tldr": "4. Testează ancora" + }, { "file": "notes-data/projects/grup-sprijin/biblioteca/meditatie-eu-sunt-mai-mare.md", "title": "Eu sunt mai mare decât gândurile și emoțiile mele", @@ -155,29 +295,6 @@ "video": "", "tldr": "(De dezvoltat - Marius să adauge textul complet)" }, - { - "file": "notes-data/projects/grup-sprijin/biblioteca/ancorare-emotii.md", - "title": "Exercițiu de ancorare a emoțiilor", - "date": "2026-01-30", - "tags": [ - "NLP", - "ancorare", - "emotii", - "corp", - "grup-sprijin" - ], - "domains": [ - "sprijin" - ], - "types": [ - "exercitiu" - ], - "category": "projects", - "project": "grup-sprijin", - "subdir": "biblioteca", - "video": "", - "tldr": "4. Testează ancora" - }, { "file": "notes-data/projects/grup-sprijin/biblioteca/intrebare-copil-interior.md", "title": "Ce îți aducea bucurie când erai mic?", @@ -248,7 +365,26 @@ "tldr": "3. Ce ai făcut ASTĂZI care să îți aducă acea emoție?" }, { - "file": "notes-data/projects/grup-sprijin/biblioteca/beneficiu-grup-siguranta.md", + "file": "notes-data/projects/grup-sprijin/biblioteca/fisa-2026-02-05-ancorare-oglinda.md", + "title": "Fișă Întâlnire Grup Sprijin", + "date": "2026-01-30", + "tags": [ + "grup-sprijin" + ], + "domains": [ + "sprijin" + ], + "types": [ + "fisa" + ], + "category": "projects", + "project": "grup-sprijin", + "subdir": "biblioteca", + "video": "", + "tldr": "" + }, + { + "file": "notes-data/projects/grup-sprijin/biblioteca/reflectie-beneficiu-grup-siguranta.md", "title": "Beneficiul grupului - siguranță", "date": "2026-01-30", "tags": [ @@ -525,21 +661,21 @@ } ], "stats": { - "total": 26, + "total": 33, "by_domain": { "work": 9, - "health": 3, + "health": 5, "growth": 3, - "sprijin": 12, + "sprijin": 16, "scout": 1 }, "by_category": { - "coaching": 0, + "coaching": 1, "insights": 1, - "projects": 12, + "projects": 17, "retete": 1, "youtube": 9, - "memory": 2, + "memory": 3, "conversations": 1 } }, diff --git a/kb/insights/2026-01-31.md b/kb/insights/2026-01-31.md index e3cb213..92ba443 100644 --- a/kb/insights/2026-01-31.md +++ b/kb/insights/2026-01-31.md @@ -8,7 +8,8 @@ Idei extrase din note YouTube. Format: `[ ]` neprocesat, `[x]` făcut, `[→]` b ## @work - Productivitate & Automatizări -- [ ] ⚡ Verificare securitate Clawdbot (port, trustedProxies) - [Security](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-29_clawdbot-security-vulnerabilities.md) +- [x] ⚡ Verificare securitate Clawdbot (port, trustedProxies) - FĂCUT 2026-01-31 de Echo Work +- [x] ⚡ Git commit + push restructurare - FĂCUT 2026-01-31 de Echo Work (99 fișiere) - [ ] 📌 Template spec-driven development în kb/projects/ - [GSD](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-29_gsd-framework-claude-code.md) - [ ] 💡 Job proactive coding noaptea (ora 23) - [5 Use Cases](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-30_clawdbot-5-use-cases.md) - [ ] 💡 Spellbook - prompt templates cu variabile - [Kitze](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-30_clawdbot-personal-os-kitze.md) @@ -24,17 +25,18 @@ Idei extrase din note YouTube. Format: `[ ]` neprocesat, `[x]` făcut, `[→]` b ## @growth - Dezvoltare personală -- [ ] ⚡ Exercițiu Priming în morning-coaching (3 recunoștințe) - [Tony Robbins](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-31_tony-robbins-secret-extraordinary-life.md) -- [ ] 📌 Pattern Interrupt tehnica (fiziologie, focus, limbaj) - [Tony Robbins](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-31_tony-robbins-secret-extraordinary-life.md) +- [x] ⚡ Exercițiu Priming în morning-coaching - INTEGRAT în job morning-coaching (citește din insights) +- [x] 📌 Pattern Interrupt tehnica - INTEGRAT în job morning-coaching ca provocare practică - [ ] 💡 Dezvoltă personalitățile agenților (stil, nu doar funcțional) - [Kitze](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-30_clawdbot-personal-os-kitze.md) +- [x] 💡 "Pentru cine altcineva faci?" - INTEGRAT în coaching dimineață/seară --- ## @sprijin - Grup sprijin -- [ ] ⚡ Fișă "blocare vs deblocare" cu exercițiu fiziologie - [Tony Robbins](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-31_tony-robbins-secret-extraordinary-life.md) -- [ ] 📌 Întrebare "Ce moment greu s-a dovedit cadou?" - [Tony Robbins](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-31_tony-robbins-secret-extraordinary-life.md) -- [ ] 💡 Exercițiu "Pentru cine altcineva faci asta?" - [Post Apă](https://moltbot.tailf7372d.ts.net/echo/files.html#kb/youtube/2026-01-29_greseli-post-apa.md) +- [x] ⚡ Fișă "blocare vs deblocare" - CREAT `kb/projects/grup-sprijin/biblioteca/fisa-blocare-vs-deblocare.md` +- [x] 📌 Întrebare "Ce moment greu s-a dovedit cadou?" - CREAT `kb/projects/grup-sprijin/biblioteca/intrebare-moment-greu-cadou.md` +- [x] 💡 "Pentru cine altcineva faci?" - CREAT `kb/projects/grup-sprijin/biblioteca/intrebare-pentru-cine-altcineva.md` --- @@ -46,13 +48,19 @@ Idei extrase din note YouTube. Format: `[ ]` neprocesat, `[x]` făcut, `[→]` b ## Legendă -- `[ ]` = neprocesat -- `[x]` = făcut +**Marcare:** +- `[ ]` = disponibil +- `[x]` = executat - `[→]` = mutat în backlog -- `[—]` = renunțat/skip -- ⚡ = urgent+important -- 📌 = important -- 💡 = nice-to-have +- `[—]` = skip + +**Prioritate (Matrice Eisenhower):** +| Emoji | Urgent | Important | +|-------|--------|-----------| +| ⚡ | DA | DA | +| 📌 | NU | DA | +| ⏰ | DA | NU | +| 💡 | NU | NU | --- diff --git a/kb/projects/FLUX-JOBURI.md b/kb/projects/FLUX-JOBURI.md new file mode 100644 index 0000000..c80aaf5 --- /dev/null +++ b/kb/projects/FLUX-JOBURI.md @@ -0,0 +1,262 @@ +# Flux Complet Joburi Echo + +**Actualizat:** 2026-01-31 +**Autor:** Echo Work + +--- + +## 📋 Rezumat Joburi + +| Job | Agent | Când (UTC) | Când (București) | Unde trimite | +|-----|-------|------------|------------------|--------------| +| morning-report | echo-work | 06:30 | 08:30 | Discord #echo-work | +| morning-coaching | echo-health | 07:00 | 09:00 | WhatsApp principal | +| respiratie-09 | echo-health | 07:00 | 09:00 | Discord #echo-health | +| respiratie-10 | echo-health | 08:00 | 10:00 | Discord #echo-health | +| respiratie-11 | echo-health | 09:00 | 11:00 | Discord #echo-health | +| respiratie-12 | echo-health | 10:00 | 12:00 | Discord #echo-health | +| respiratie-13 | echo-health | 11:00 | 13:00 | Discord #echo-health | +| respiratie-14 | echo-health | 12:00 | 14:00 | Discord #echo-health | +| respiratie-15 | echo-health | 13:00 | 15:00 | Discord #echo-health | +| respiratie-16 | echo-health | 14:00 | 16:00 | Discord #echo-health | +| respiratie-17 | echo-health | 15:00 | 17:00 | Discord #echo-health | +| respiratie-18 | echo-health | 16:00 | 18:00 | Discord #echo-health | +| respiratie-19 | echo-health | 17:00 | 19:00 | Discord #echo-health | +| evening-report | echo-work | 18:00 | 20:00 | Discord #echo-work | +| evening-coaching | echo-health | 19:00 | 21:00 | WhatsApp principal | +| archive-tasks | main | 03:00 | 05:00 | - (intern) | +| weekly-planning-sun | main | 19:00 duminică | 21:00 | Discord #echo-work | +| project-checkin-tue | main | 15:00 marți | 17:00 | Discord #echo-work | +| project-checkin-thu | main | 15:00 joi | 17:00 | Discord #echo-work | +| grup-sprijin-pregatire | main | 15:00 3 feb | 17:00 | WhatsApp | +| grup-sprijin-5feb | main | 15:00 5 feb | 17:00 | WhatsApp | + +--- + +## 🔄 Fluxul Complet + +``` +┌─────────────────────────────────────────────────────────────────────┐ +│ SURSE PRIMARE │ +├─────────────────────────────────────────────────────────────────────┤ +│ YouTube video │ +│ │ │ +│ ▼ (manual - când primești link) │ +│ kb/youtube/YYYY-MM-DD_titlu.md │ +│ │ │ +│ │ (rapoarte scanează note noi) │ +│ ▼ │ +│ kb/insights/YYYY-MM-DD.md │ +│ │ │ +│ ├──────────────────┬──────────────────┐ │ +│ ▼ ▼ ▼ │ +│ RAPOARTE COACHING FIȘE/NOTE │ +│ (propun) (se inspiră) (se creează) │ +└─────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 📝 Cine Creează Ce + +### 1. Note YouTube (`kb/youtube/`) + +| Când | Cine | Ce face | +|------|------|---------| +| Manual | Orice agent | Când primește link YouTube → extrage transcript → salvează notă | + +**Format:** `kb/youtube/YYYY-MM-DD_titlu-slug.md` + +**Conține:** +- TL;DR +- Puncte cheie +- Citate relevante +- Exerciții practice +- Tags: #autor, @domeniu + +--- + +### 2. Insights (`kb/insights/`) + +| Când | Cine | Ce face | +|------|------|---------| +| morning-report | echo-work | Scanează `kb/youtube/` ultimele 48h → extrage idei noi → adaugă în insights | +| evening-report | echo-work | Scanează `kb/youtube/` ultimele 48h → extrage idei noi → adaugă în insights | + +**Format:** `kb/insights/YYYY-MM-DD.md` + +**Structură:** +```markdown +## @work - Productivitate +- [ ] ⚡ Propunere urgentă - [link notă] +- [ ] 📌 Propunere importantă - [link notă] + +## @health - Sănătate +- [ ] 💡 Propunere nice-to-have - [link notă] +``` + +**Sistem marcare:** +- `[ ]` = disponibil (rapoarte pot propune) +- `[x]` = implementat (nu mai propune) +- `[→]` = mutat în backlog +- `[—]` = skip/nu vreau + +--- + +### 3. Coaching Notes (`kb/coaching/`) + +| Când | Cine | Ce face | +|------|------|---------| +| morning-coaching | echo-health | Salvează mesajul trimis + referințe la surse | +| evening-coaching | echo-health | Salvează mesajul trimis + referințe la surse | + +**Format:** `kb/coaching/YYYY-MM-DD-dimineata.md` sau `YYYY-MM-DD-seara.md` + +**Conține:** +```markdown +# Gândul de dimineață - 2026-01-31 + +## Mesaj trimis +[conținut] + +## Surse folosite +- [Titlu Notă](files.html#kb/youtube/YYYY-MM-DD_titlu.md) - ce am extras +- [Insights YYYY-MM-DD](files.html#kb/insights/YYYY-MM-DD.md) - ce propunere am folosit + +## Provocarea zilei +TIP: fiziologie +PROVOCARE: descriere +``` + +--- + +### 4. Fișe Grup Sprijin (`kb/projects/grup-sprijin/biblioteca/`) + +| Când | Cine | Ce face | +|------|------|---------| +| După aprobare | echo-work | Creează fișă când Marius aprobă din raport | +| Manual | Orice agent | Când Marius cere | + +**Format:** `fisa-titlu.md`, `intrebare-titlu.md`, `meditatie-titlu.md` + +--- + +## 📊 Cine Citește De Unde + +### morning-report / evening-report (echo-work) + +**CITEȘTE:** +- `kb/youtube/` - note noi (ultimele 48h) pentru a extrage în insights +- `kb/insights/` - propuneri `[ ]` (ultimele 7 zile) +- `kb/backlog.md` - 1-2 propuneri (rotație) + verifică > 30 zile + +**CREEAZĂ:** +- Adaugă în `kb/insights/` idei din note noi +- Creează fișe/note când Marius aprobă + +**MARCHEAZĂ în insights:** +- `[x]` + data când Marius zice "ok" și se execută +- `[→]` + adaugă în backlog când Marius zice "backlog" +- `[—]` când Marius zice "nu/skip" +- `[→]` + adaugă în backlog "De revizuit" când Marius ignoră + +**ACTUALIZEAZĂ backlog:** +- Adaugă cu nivel (⚡/📌/💡) + RECOMANDAT/NERECOMANDAT + referință +- Șterge când se execută sau se renunță +- Propune curățare pentru > 30 zile + +--- + +### morning-coaching / evening-coaching (echo-health) + +**CITEȘTE:** +- `kb/coaching/` - **ultimele 7 zile** (NU repeta teme!) +- `kb/youtube/` - note pentru citate/idei +- `kb/insights/` - propuneri pentru exerciții practice +- `kb/projects/grup-sprijin/biblioteca/` - fișe și exerciții +- `memory/provocare-azi.md` - pentru follow-up seară + +**CREEAZĂ:** +- `kb/coaching/YYYY-MM-DD-dimineata.md` sau `-seara.md` (cu referințe la surse!) +- `memory/provocare-azi.md` - provocarea zilei + +**MARCHEAZĂ:** +- NIMIC în insights (doar se inspiră, nu marchează) + +--- + +### respiratie-* (echo-health) + +**CITEȘTE:** Nimic +**CREEAZĂ:** Nimic (doar trimite mesaj scurt) +**MARCHEAZĂ:** Nimic + +--- + +## ⚠️ Evitarea Repetărilor + +### Rapoarte (echo-work) +- Propun doar din `[ ]` (ignoră `[x]`, `[→]`, `[—]`) +- Marchează după răspunsul lui Marius + +### Coaching (echo-health) +- Verifică `kb/coaching/` ultimele 14 zile +- NU repetă aceleași teme/citate/exerciții +- Salvează cu referințe pentru tracking + +--- + +## 🔍 Verificări și Posibile Probleme + +### ✅ OK +- Rapoarte extrag din note → insights ✓ +- Marius aprobă → se marchează ✓ +- Coaching se inspiră fără a marca → ✓ +- Coaching salvează cu referințe → ✓ + +### ⚠️ De monitorizat +- **Curățare insights vechi:** Insights mai vechi de 30 zile cu `[ ]` - ce facem? + - Propunere: La fiecare raport, dacă propunerea e > 14 zile nemarcată → marcăm `[—]` automat + +- **Sincronizare între agenți:** insights e în folder partajat, mai mulți agenți scriu + - Propunere: OK așa, fiecare agent adaugă cu sursa lui + +- **Note YouTube fără insights:** Note vechi care n-au fost procesate + - Propunere: Rapoarte verifică ultimele 48h, restul rămâne ca referință + +--- + +## 📅 Ordine Cronologică Zilnică (București) + +| Ora | Job | Agent | Ce face | +|-----|-----|-------|---------| +| 05:00 | archive-tasks | main | Arhivează task-uri vechi | +| 08:30 | morning-report | echo-work | Raport + propuneri din insights | +| 09:00 | morning-coaching | echo-health | Mesaj dimineață WhatsApp | +| 09:00-19:00 | respiratie-* | echo-health | Reminder-uri orare | +| 20:00 | evening-report | echo-work | Raport + propuneri din insights | +| 21:00 | evening-coaching | echo-health | Mesaj seară WhatsApp | + +--- + +## 📁 Structura Fișiere + +``` +kb/ +├── youtube/ # Note din video-uri +│ └── YYYY-MM-DD_titlu.md +├── insights/ # Propuneri extrase +│ └── YYYY-MM-DD.md +├── coaching/ # Mesaje coaching salvate +│ ├── YYYY-MM-DD-dimineata.md +│ └── YYYY-MM-DD-seara.md +├── backlog.md # Propuneri amânate +└── projects/ + └── grup-sprijin/ + ├── biblioteca/ # Fișe și exerciții + └── fise/ # Fișe pentru întâlniri +``` + +--- + +*Acest document se actualizează când se modifică fluxul joburilor.* diff --git a/kb/projects/grup-sprijin/.rules.json b/kb/projects/grup-sprijin/.rules.json index 59fbe5e..2cd2caf 100644 --- a/kb/projects/grup-sprijin/.rules.json +++ b/kb/projects/grup-sprijin/.rules.json @@ -2,14 +2,33 @@ "description": "Proiect grup de sprijin - lideri cercetași", "defaultDomains": ["sprijin"], "defaultTags": ["grup-sprijin"], - "filenameRule": "Pune tipul în numele fișierului: meditatie-xxx.md, exercitiu-xxx.md, etc.", - "validTypes": ["meditatie", "exercitiu", "reflectie", "intrebare", "fisa"], "inferTypeFromFilename": true, "filenameTypeMap": { - "meditatie": "meditatie", - "exercitiu": "exercitiu", - "intrebare": "intrebare", - "reflectie": "reflectie", - "fisa": "fisa" - } + "exercitiu-": "exercitiu", + "meditatie-": "meditatie", + "intrebare-": "intrebare", + "reflectie-": "reflectie", + "fisa-": "fisa" + }, + "biblioteca": { + "location": "biblioteca/", + "description": "Toate resursele (exerciții, meditații, întrebări, fișe) se pun aici", + "prefixRequired": true, + "validPrefixes": { + "exercitiu-": "Exerciții practice (perechi, grup)", + "meditatie-": "Meditații ghidate", + "intrebare-": "Întrebări de reflecție/introspecție", + "reflectie-": "Teme de reflecție, concepte", + "fisa-": "Fișe complete de întâlnire (cu dată: fisa-YYYY-MM-DD-tema.md)" + }, + "filenameFormat": "{prefix}{slug}.md", + "examples": [ + "exercitiu-de-vorba-cu-emotia.md", + "meditatie-demnitate.md", + "intrebare-copil-interior.md", + "reflectie-oglinda.md", + "fisa-2026-02-05-ancorare-oglinda.md" + ] + }, + "templateFisa": "template-fisa.md" } diff --git a/kb/projects/grup-sprijin/README.md b/kb/projects/grup-sprijin/README.md index 9d8274a..8581cb8 100644 --- a/kb/projects/grup-sprijin/README.md +++ b/kb/projects/grup-sprijin/README.md @@ -13,6 +13,20 @@ - Tehnici NLP - Întrebări puternice +## Structura fișierelor + +**Tot în `biblioteca/`** cu prefix obligatoriu: + +| Prefix | Descriere | Exemplu | +|--------|-----------|---------| +| `exercitiu-` | Exerciții practice | `exercitiu-de-vorba-cu-emotia.md` | +| `meditatie-` | Meditații ghidate | `meditatie-demnitate.md` | +| `intrebare-` | Întrebări de reflecție | `intrebare-copil-interior.md` | +| `reflectie-` | Teme/concepte | `reflectie-oglinda.md` | +| `fisa-` | Fișe de întâlnire | `fisa-2026-02-05-tema.md` | + +Vezi `.rules.json` pentru detalii. + ## Întâlniri - [x] Prima întâlnire (ianuarie 2026) - [ ] **Joi 5 februarie 2026, 18:00** - următoarea diff --git a/kb/projects/grup-sprijin/biblioteca/ancorare-emotii.md b/kb/projects/grup-sprijin/biblioteca/exercitiu-ancorare-emotii.md similarity index 100% rename from kb/projects/grup-sprijin/biblioteca/ancorare-emotii.md rename to kb/projects/grup-sprijin/biblioteca/exercitiu-ancorare-emotii.md diff --git a/kb/projects/grup-sprijin/biblioteca/exercitiu-de-vorba-cu-emotia.md b/kb/projects/grup-sprijin/biblioteca/exercitiu-de-vorba-cu-emotia.md new file mode 100644 index 0000000..bd6a994 --- /dev/null +++ b/kb/projects/grup-sprijin/biblioteca/exercitiu-de-vorba-cu-emotia.md @@ -0,0 +1,87 @@ +# De vorbă cu... (emoția) + +**Tags:** @health @exercitiu #daniela-graure #emotii #acceptare #iubire +**Autor:** Daniela Graure +**Durată:** 10-15 min +**Participanți:** perechi de 2 + +--- + +## Descriere + +Exercițiu de dialog cu o emoție pentru a o recunoaște, accepta și elibera prin iubire. + +## Instrucțiuni + +1. Se fac **perechi de câte doi** parteneri. +2. Primul partener alege o **emoție vie, actuală de nivel 3-5** (nu copleșitoare). +3. Al doilea partener citește textul și înlocuiește `[.....]` cu numele emoției. Face pauză pentru ca primul partener să repete. +4. Primul partener **închide ochii** și repetă cuvintele și le simte. +5. Ton calm, lent. Pauze suficiente între secțiuni. +6. După exercițiu: moment de liniște, apoi sharing opțional. + +--- + +## Textul exercițiului + +*(Al doilea partener citește, primul repetă cu ochii închiși)* + +### Partea 1: Eu sunt mai mare + +> Eu sunt mai mare +> Eu sunt o ființă întreagă și completă +> Eu sunt mai mare decât corpul meu +> Eu sunt mai mare decât gândurile și emoțiile care mă traversează + +--- + +### Partea 2: Tu ești o imagine + +> Tu, `[.....]`, ești o emoție care mă traversezi acum +> Tu, `[.....]`, ești o imagine în mintea mea +> Tu, `[.....]`, ești o rezistență în mintea mea + +--- + +### Partea 3: Bine ai venit + +> Bine ai venit, `[.....]` +> Te primesc +> Mulțumesc, `[.....]` +> Mulțumesc pentru mesajul tău +> Ești un mesager minunat + +--- + +### Partea 4: Te văd + +> Mulțumesc, `[.....]`, că te văd +> Mulțumesc că ai ieșit din subconștient +> Mulțumesc mie că te-am creat +> Te binecuvântez, `[.....]`, exact așa cum ești tu în acest moment +> Mulțumesc pentru mesajul tău + +--- + +### Partea 5: Te iubesc și te eliberez + +> Te iubesc, `[.....]` +> Te iubesc și dacă pleci, și te iubesc și dacă mai rămâi +> Pur și simplu te iubesc +> Nu vreau să te țin ca într-o colivie +> E dreptul tău divin să te întorci în iubirea din care ai fost creată +> Te iubesc, `[.....]` +> Te iubesc și decid să te eliberez + +--- + +### Partea 6: Eliberare (ghidare) + +*Al doilea partener spune:* + +> Și în acest moment, trimiți către `[.....]` toată iubirea de care ești capabil(ă) în acest moment. +> O învălui în iubire și observi cum ea se transformă, cum se topește în iubire. + +--- + +*Sursă: Daniela Graure* diff --git a/kb/projects/grup-sprijin/fise/fisa-2026-02-05-ancorare-oglinda.md b/kb/projects/grup-sprijin/biblioteca/fisa-2026-02-05-ancorare-oglinda.md similarity index 100% rename from kb/projects/grup-sprijin/fise/fisa-2026-02-05-ancorare-oglinda.md rename to kb/projects/grup-sprijin/biblioteca/fisa-2026-02-05-ancorare-oglinda.md diff --git a/kb/projects/grup-sprijin/biblioteca/fisa-blocare-vs-deblocare.md b/kb/projects/grup-sprijin/biblioteca/fisa-blocare-vs-deblocare.md new file mode 100644 index 0000000..94234cb --- /dev/null +++ b/kb/projects/grup-sprijin/biblioteca/fisa-blocare-vs-deblocare.md @@ -0,0 +1,46 @@ +# Fișă: Blocare vs Deblocare + +**Tags:** @sprijin @exercitiu #fiziologie #tony-robbins + +## Scop +Să înțelegem cum starea fizică influențează starea emoțională și să practicăm tehnici de deblocare. + +## Concept cheie +> "Motion creates emotion" - Tony Robbins + +Când suntem blocați emoțional, corpul reflectă asta: umeri căzuți, respirație superficială, privire în jos. Schimbând fiziologia, schimbăm și starea. + +## Exercițiu practic (15 min) + +### Partea 1: Recunoașterea blocării (5 min) +1. Gândește-te la un moment recent când te-ai simțit blocat +2. Observă ce se întâmplă în corp când te gândești la asta: + - Cum e respirația? + - Cum stau umerii? + - Unde e privirea? + - Ce tensiune simți? + +### Partea 2: Pattern Interrupt (5 min) +1. **Fiziologie:** Ridică-te, schimbă poziția, sari pe loc 30 secunde +2. **Respirație:** 3 respirații adânci (4 sec inspir, 7 sec expir) +3. **Focus:** Privește în sus, zâmbește (chiar forțat!) +4. **Mișcare:** Fă 10 genoflexiuni sau mergi alert 1 minut + +### Partea 3: Reflecție (5 min) +- Ce s-a schimbat în corp? +- Ce s-a schimbat în minte? +- Ce poți face data viitoare când te simți blocat? + +## Întrebări pentru discuție +- Când te simți blocat, ce e primul lucru care se schimbă la tine? (corp, gânduri, emoții) +- Ai observat pattern-uri? (ore din zi, situații, persoane) +- Ce tehnici ai încercat până acum? Ce a funcționat? + +## De reținut +- Blocarea nu e o stare permanentă - e un moment +- Corpul e poarta cea mai rapidă de deblocare +- 30 secunde de mișcare pot schimba totul + +--- +*Sursa:* Tony Robbins - The Secret to an Extraordinary Life +*Creat:* 2026-01-31 diff --git a/kb/projects/grup-sprijin/biblioteca/intrebare-moment-greu-cadou.md b/kb/projects/grup-sprijin/biblioteca/intrebare-moment-greu-cadou.md new file mode 100644 index 0000000..df508a2 --- /dev/null +++ b/kb/projects/grup-sprijin/biblioteca/intrebare-moment-greu-cadou.md @@ -0,0 +1,29 @@ +# Întrebare: Ce moment greu s-a dovedit cadou? + +**Tags:** @sprijin @intrebare #reflectie #tony-robbins + +## Context +În retrospectivă, multe momente dificile se dovedesc a fi puncte de cotitură pozitive. Această întrebare ajută la reframarea experiențelor grele. + +## Întrebarea +> **"Gândește-te la un moment din viața ta care părea greu, dar care s-a dovedit a fi un cadou. Ce ai învățat din el?"** + +## Variante +- "Ce criză din trecut ți-a schimbat viața în bine?" +- "Ce situație ai evita dacă ai putea, dar de fapt te-a format?" +- "Ce eșec s-a transformat în lecție valoroasă?" + +## Cum să folosești în grup +1. Dă timp de gândire (2-3 min în liniște) +2. Împărtășire voluntară - nimeni nu e obligat +3. Ascultare fără sfaturi - doar prezență +4. Opțional: Ce pattern observi la povești? (reziliență, adaptare, creștere) + +## De ce funcționează +- Schimbă perspectiva de la "victimă" la "învățăcel" +- Arată că suntem mai puternici decât credem +- Creează speranță pentru momentele grele actuale + +--- +*Sursa:* Tony Robbins - The Secret to an Extraordinary Life +*Creat:* 2026-01-31 diff --git a/kb/projects/grup-sprijin/biblioteca/intrebare-pentru-cine-altcineva.md b/kb/projects/grup-sprijin/biblioteca/intrebare-pentru-cine-altcineva.md new file mode 100644 index 0000000..47ea536 --- /dev/null +++ b/kb/projects/grup-sprijin/biblioteca/intrebare-pentru-cine-altcineva.md @@ -0,0 +1,36 @@ +# Întrebare: Pentru cine altcineva faci asta? + +**Tags:** @sprijin @intrebare #motivatie #sens + +## Context +Când facem ceva doar pentru noi, uneori ne oprim. Când facem pentru alții, găsim resurse pe care nu știam că le avem. + +## Întrebarea +> **"Pentru cine altcineva faci asta, în afară de tine?"** + +## Când să folosești +- Când cineva e blocat într-o decizie grea +- Când lipsa motivației e o problemă +- Când cineva vrea să renunțe la ceva important +- La provocări de sănătate (post, exercițiu, schimbare obiceiuri) + +## Variante +- "Cine ar beneficia dacă tu ai reuși?" +- "Cine te urmărește și ar învăța din exemplul tău?" +- "Pentru cine vrei să fii mai bun?" +- "Cui îi arăți că se poate?" + +## Cum să folosești în grup +1. Pune întrebarea în context specific +2. Lasă tăcere - răspunsul vine din adânc +3. Urmărește: "Ce simți când te gândești la persoana aia?" +4. Opțional: "Cum s-ar schimba abordarea dacă te-ai gândi la ei?" + +## De ce funcționează +- Activează motivația extrinsecă (pentru alții) care e adesea mai puternică +- Ne conectează la sens și scop mai mare +- Iese din "ego" în "serviciu" + +--- +*Sursa:* Inspirat din coaching și note post apă +*Creat:* 2026-01-31 diff --git a/kb/projects/grup-sprijin/biblioteca/beneficiu-grup-siguranta.md b/kb/projects/grup-sprijin/biblioteca/reflectie-beneficiu-grup-siguranta.md similarity index 100% rename from kb/projects/grup-sprijin/biblioteca/beneficiu-grup-siguranta.md rename to kb/projects/grup-sprijin/biblioteca/reflectie-beneficiu-grup-siguranta.md diff --git a/memory/2026-01-31.md b/memory/2026-01-31.md index cc1c1a0..c5e62b5 100644 --- a/memory/2026-01-31.md +++ b/memory/2026-01-31.md @@ -22,9 +22,54 @@ - Secțiuni: Urgent+Important, Important, Nice-to-have, Făcut, Renunțat - Același format checkbox ca insights +### Protocol cross-agent (AGENTS.md + SOUL-base.md) +- Când primesc mesaj de la alt agent → confirm PE CANAL +- Format: "Am primit de la [agent]: [rezumat]" → fac → "Done ✅" +- Marius nu vede mesajele interne - trebuie transparență + +### Link-uri markdown standard +- NU custom parser, CI format standard: `[Titlu](files.html#kb/path.md)` +- Convertit fișierele existente la format corect +- Actualizat SOUL-base.md cu instrucțiuni + +### Dashboard Activity - surse multiple +- Cron jobs executate (mov) +- Git commits (portocaliu) +- Fișiere create/modificate în kb/ (teal) +- Task-uri din tasks.json (verde) +- API endpoint nou: /api/activity + +### Dashboard alte îmbunătățiri +- Modal: background solid (era transparent) +- Owner: adăugat Robert 👷 (angajat nou) +- Statistici: label-uri clare (Tasks azi/săpt./lună) +- Cron jobs: ora București în loc de UTC + +### Files view modes (Windows Explorer style) +- **List**: grilă multi-coloană, icon mic + nume +- **Details**: tabel cu coloane (Nume, Tip, Mărime, Dată) + sortare +- **Tiles**: grid cu iconuri mari (ca înainte) +- Sortare ASC/DESC după nume sau dată +- Setări salvate în localStorage + +### USER.md - Reguli propuneri +- 80/20 STRICT: impact mare, efort mic +- NU complica fluxul +- Recomandare explicită: ✅/⚠️/❌ + de ce +- Arată TOATE propunerile, nu doar recomandate + ## De făcut -- Verificare că rapoartele funcționează corect la 08:30 și 20:00 +- [ ] **MONITORIZARE JOBURI** (cerut de Marius): + - **AZI 20:00** → evening-report (echo-work) → Discord #echo-work + - **AZI 21:00** → evening-coaching (echo-health) → Discord #echo-health + fișier kb/coaching/ + - **MÂINE 08:30** → morning-report (echo-work) → Discord #echo-work + - **MÂINE 09:00** → morning-coaching (echo-health) → Discord #echo-health + fișier kb/coaching/ + - Verifică: mesaj trimis + fișier creat + - Confirmă lui Marius după fiecare ## Învățat - Marius preferă totul într-un singur loc (scanare în raport, nu job separat) - Insights trebuie să aibă status clar ca să nu se repete propunerile +- Link-uri: format markdown standard, nu parsere custom +- Dashboard: multiple surse de date pentru Activity +- Files: view modes ca Windows Explorer (List/Details/Tiles)