Files
clawd/TOOLS.md

380 lines
14 KiB
Markdown

# TOOLS.md - Echo (Unificat)
## Unelte comune
### Email (SMTP/IMAP)
- **Cont principal:** Gmail (mmarius28@gmail.com) - folosit pentru trimitere
- **Cont backup:** echo@romfast.ro (blocat MailChannels)
- **Credențiale:** în `.env` (GMAIL_USER, GMAIL_PASSWORD)
- **Trimitere:** `python3 tools/email_send.py "dest" "subiect" "corp"`
- **From:** Echo <mmarius28@gmail.com>
**Format email rapoarte:**
- Font: 16px text, 18px titluri
- Culori: albastru (#2563eb) pentru DONE, gri (#f3f4f6) pentru PROGRAMAT
- Puține emoji-uri, link-uri vizibile
- Titlu + acțiune combinate (ex: "A0 - Git commit si push")
- Subject confirmare: "Re: [subject original]"
- **Procesare inbox:**
```bash
python3 tools/email_process.py # listează necitite
python3 tools/email_process.py --all # listează toate
python3 tools/email_process.py --save # salvează ca note în memory/kb/emails/
```
**Flux email → note → insights:**
1. Marius face forward la `echo@romfast.ro`
2. La heartbeat sau manual: `python3 tools/email_process.py --save`
3. Emailul devine notă în `memory/kb/emails/YYYY-MM-DD_subiect.md`
4. Completez TL;DR și extrag insights în `memory/kb/insights/`
5. `python3 tools/update_notes_index.py` actualizează indexul
### 📧 Email Whitelist
**Răspuns automat permis doar pentru:**
- mmarius28@gmail.com (Marius - personal)
- marius.mutu@romfast.ro (Marius - work)
**Pentru orice altă adresă:** Citesc și raportez, aștept aprobare.
### Dashboard
- **URL:** https://moltbot.tailf7372d.ts.net/echo/
- **Task add:** `python3 dashboard/update_task.py add in-progress "titlu"`
- **Task done:** `python3 dashboard/update_task.py done <task-id>`
- **Notes:** https://moltbot.tailf7372d.ts.net/echo/notes.html
- **Files:** https://moltbot.tailf7372d.ts.net/echo/files.html
- **API:** `dashboard/api.py`
**Reguli dashboard:**
- Tab Activity afișează task-uri din tasks.json, sortate descrescător după timestamp
- Când creez/completez task-uri, să am timestamp complet (ISO format cu oră)
### KB (Knowledge Base)
- **Folder:** memory/kb/ (youtube/, coaching/, insights/, projects/)
- **Update index:** `python3 tools/update_notes_index.py`
- **Pagina web:** https://moltbot.tailf7372d.ts.net/echo/notes.html
- **Tags domeniu:** `@work`, `@health`, `@growth`, `@sprijin`, `@scout`
- **Tags tip:** `@project`, `@fisa`, `@exercitiu`, `@meditatie`, `@reflectie`
**IMPORTANT:** Când salvez orice notă (rețete, youtube, proiecte, etc.), trebuie să:
1. Salvez în subdirectorul potrivit din `memory/kb/`
2. Rulez `python3 tools/update_notes_index.py` pentru a actualiza indexul
3. Dau link-ul către pagina notes.html
### 🔍 Memory Search (Semantic Search)
**Ce e:** Căutare semantică în fișierele `.md` din `memory/`.
**Cum funcționează:**
- Clawdbot indexează automat fișierele (watcher + debounce 1.5s)
- Embeddings generate local cu Ollama (all-minilm, 384 dim)
- Index stocat în `~/.clawdbot/memory/echo.sqlite`
**Ce se indexează:**
- ✅ `memory/*.md` - note zilnice, approved-tasks, etc.
- ✅ `memory/kb/**/*.md` - toate notele din KB (youtube, coaching, insights, projects, etc.)
**Când folosesc memory_search:**
- Întrebări despre trecut: "ce am decis despre coaching"
- Context recent: "ce s-a întâmplat ieri"
**Comenzi:**
```
memory_search query="text" maxResults=5
memory_get path="memory/file.md" from=1 lines=50
```
**Indexare automată:** La fiecare modificare fișier în memory/, Clawdbot:
1. Detectează schimbarea (watcher)
2. Așteaptă 1.5s (debounce)
3. Re-indexează DOAR fișierul modificat (incremental)
4. Celelalte fișiere rămân neatinse
### Git
- **Repo:** ~/clawd → gitea.romfast.ro/romfast/clawd
- **Commit:** `python3 tools/git_commit.py --push`
### ANAF Monitor
- **Script:** `python3 tools/anaf-monitor/monitor_v2.py`
- **Monitorizează:** D100, D101, D200, D390, D406, situații financiare, E-Factura
### Google Calendar
- **Credentials:** `credentials/google-calendar.json` (OAuth client)
- **Token:** `credentials/google-calendar-token.json` (auto-refresh)
- **Acces:** Read + Write (`calendar.events`)
- **Venv:** `~/clawd/venv/` (activate cu `source venv/bin/activate`)
**Script:** `python3 tools/calendar_check.py [mode]`
- `today` - evenimente azi + mâine
- `week` - evenimente săptămâna curentă
- `travel` - reminder-uri pentru NLP/București (bilete + cazare)
- `busy` - verifică dacă e ocupat ACUM (pentru "nu deranja")
- `soon [ore]` - evenimente în următoarele N ore (default 2)
- `all` - toate cele de mai sus
**Travel detection:**
- Keywords: `nlp`, `bucuresti`, `bucurești`, `bucharest`
- 7-11 zile înainte → "Cumpără bilete + asigură cazare"
- 3-6 zile înainte → "⚠️ URGENT: Verifică dacă ai bilete!"
**Creare evenimente (Python):**
```python
from tools.calendar_check import create_event
create_event(
summary='Titlu',
start_datetime='2026-02-05T15:00:00',
duration_minutes=60,
description='Opțional',
reminders=[60, 15], # minute înainte (default: [30])
is_travel=False # True = reminders seara înainte + 2h
)
```
**Reminders automate:**
- Evenimente normale: 30 min înainte
- Evenimente travel (`is_travel=True`): seara înainte (18:00) + 2h înainte
- Custom: `reminders=[120, 30]` = 2h + 30min
**Integrat în:**
- `morning-report` - azi/mâine/peste 2 zile + travel reminders
- `evening-report` - mâine (reminder seară)
- `weekly-planning-sun` - săptămâna următoare + travel
- `respiratie-orar` - skip dacă busy în calendar
- `heartbeat` - alertă dacă eveniment în <2h
**Revocă accesul:** <https://myaccount.google.com/permissions>
### Pauze Respirație (Pattern Interrupt)
- **Bancă tehnici:** `memory/kb/tehnici-pauza.md`
- **Script:** `python3 tools/pauza_random.py` - alege random, afișează cu context
- **Job:** `respiratie-orar` (09:00-19:00 București, orar) → #echo-self
- **Format output:**
```
**Nume Tehnică**
Pași de urmat
📊 Rezultat (ce obții)
📚 Sursă (autor/studiu)
```
**Flux actualizare tehnici:**
1. **Sursă:** Insights din video-uri/articole procesate, tehnici din NLP/coaching
2. **Cine:** Echo AUTOMAT prin job `insights-extract` (08:00 și 19:00 București)
3. **Ce caută:** respirație, relaxare, mindfulness, pattern interrupt, mișcare scurtă (1-5 min)
4. **Cum:** Verifică dacă nu există deja → adaugă în secțiunea potrivită (BIROU 09-17 / ACASĂ 18+)
5. **Format:** Nume ### → bullet pași → `- **Rezultat:**` → `- **Sursă:** [autor](link)`
**Surse curente:** Tony Robbins, Wim Hof, Jon Kabat-Zinn (MBSR), Dr. Andrew Weil, Amy Cuddy, Cal Newport
**Link-uri sursă:**
- Notă din KB → `https://moltbot.tailf7372d.ts.net/echo/files.html#memory/kb/...`
- Resursă externă → link direct (TED, Healthline, etc.)
---
## Cron Jobs
| Oră (UTC) | Oră (București) | Job | Canal | Ce face |
|-----------|-----------------|-----|-------|---------|
| 00:00 | 02:00 | content-discovery | - | Caută video+articole pe teme recente → memory/kb/ |
| 01:00 | 03:00 | night-execute-late | #echo-work | Continuă execuția task-uri (run 2) |
| 03:00 | 05:00 | archive-tasks | #echo-work | Arhivează task-uri vechi |
| 06:00,17:00 | 08:00,19:00 | insights-extract | - | Extrage insights din memory/kb/ + actualizează tehnici-pauza.md |
| 06:30 | 08:30 | morning-report | 📧 EMAIL | Raport dimineață - vezi [FLUX-JOBURI.md](memory/kb/projects/FLUX-JOBURI.md) |
| 07:00 | 09:00 | morning-coaching | #echo-self + 📧 | Gând + provocare → memory/kb/coaching/ |
| 07-17 | 09-19 | respiratie-orar | #echo-self | Pauze orare (skip dacă busy în calendar) |
| 15:00 mar,joi | 17:00 | project-checkin | #echo-work | Check-in Vending Master |
| 18:00 | 20:00 | evening-report | 📧 EMAIL | Raport seară - vezi [FLUX-JOBURI.md](memory/kb/projects/FLUX-JOBURI.md) |
| 19:00 | 21:00 | evening-coaching | #echo-self + 📧 | Reflecție seară → memory/kb/coaching/ |
| 20:00 | 22:00 | seara-merit-reminder | #echo-self | Reminder lista "10 lucruri pentru care merit respect" |
| 19:00 dum | 21:00 | weekly-planning | #echo-work | Planning săptămânal |
| 21:00 | 23:00 | night-execute | #echo-work | Execută task-uri aprobate (run 1) |
**Marcaje insights:**
- `[ ]` = disponibil (rapoarte pot propune)
- `[x]` = executat/implementat
- `[—]` = skip/refuzat
**Răspuns la rapoarte email:**
Marius răspunde cu:
- `1 pentru X,Y` = execută ACUM propunerile X și Y
- `2 pentru X,Y` = pune în tasks pentru noaptea asta
- `3 pentru X,Y` = NU (skip, marchez [—])
- Text liber = procesez și răspund
La heartbeat verific inbox și procesez răspunsurile.
**Răspuns la rapoarte email:**
Marius răspunde cu:
- `1 pentru X,Y` = execută ACUM propunerile X și Y
- `2 pentru X,Y` = pune în tasks pentru noaptea asta
- `3 pentru X,Y` = NU (skip, marchez [—])
- Text liber = procesez și răspund
La heartbeat verific inbox și procesez răspunsurile.
**Comenzi:**
```bash
cron action=list # vezi toate joburile
cron action=run jobId=X # rulează manual
cron action=update jobId=X # modifică job
```
**Regulă:** Când modific joburi, actualizez și acest tabel!
---
## Infrastructură
### Servicii LLM/AI locale
| LXC | Serviciu | IP:Port | Utilizare |
|-----|----------|---------|-----------|
| flowise (104) | **Ollama** | 10.0.20.161:11434 | Embeddings (all-minilm), LLM local |
| flowise (104) | Flowise | 10.0.20.161:3000 | Flow builder |
| dokploy (103) | Dokploy | 10.0.20.? | Deployment platform |
**Modele Ollama disponibile:**
- `all-minilm` - embeddings rapid (45MB) ← **folosit pentru memory_search**
- `nomic-embed-text` - embeddings calitate (274MB)
- `llama3.2:3b-instruct-q8_0` - LLM conversație (3.4GB)
- `smollm:135m` - LLM mic rapid (91MB)
---
### Docker LXC (portainer)
- **Host:** 10.0.20.170 (LXC 100 pe pvemini)
- **User:** echo
- **SSH:** `ssh echo@10.0.20.170`
- **Portainer:** https://10.0.20.170:9443
- **Docker:** v28.3.3 + Compose v2.39.1
- **Resurse:** 1GB RAM, 20GB disk
- **Proiecte:** `/opt/docker/`
**Containere:**
| Container | Port | Status | Descriere |
|-----------|------|--------|-----------|
| portainer | 9443 | ✅ | Management Docker |
| nginx | 443, 8080 | ✅ | Reverse proxy |
| roa-efactura | 5003 | ⚠️ | E-Factura ANAF |
| pdf-qr-app | 5002 | ✅ | QR facturi |
| flask_app | 5001 | ✅ | ROA Flask |
| bt-web-automation | 5000, 8081 | ✅ | BT automation |
| pulse | 7655 | ✅ | Monitoring Proxmox |
| wol-manager | - | ✅ | Wake-on-LAN |
| rustdesk (hbbs+hbbr) | 21115-21119 | ✅ | Remote desktop server |
**Proiecte docker-compose:**
- `/opt/docker/docker-compose.yaml` - stack principal (nginx, flask, efactura, qr)
- `/opt/docker/wol/docker-compose.yml` - Wake-on-LAN
- `/opt/docker/qrinvoice/docker-compose.yml` - QR Invoice app
---
### Proxmox Cluster (3 noduri)
**User:** echo | **Acces:** doar din 10.0.20.173 (moltbot) | **Sudo:** qm, pct, pvesh
#### pveelite (10.0.20.202)
- **Resurse:** 16GB RAM, 557GB disk
- **SSH:** `ssh echo@10.0.20.202`
- **Scripturi:** `/opt/scripts/`
- `oracle-backup-monitor-proxmox.sh` - zilnic 21:00, verifică backup Oracle
- `weekly-dr-test-proxmox.sh` - sâmbătă 06:00, test restore Oracle DR (VM 109)
| VMID | Tip | Nume | Status |
|------|-----|------|--------|
| 109 | VM | oracle-dr-windows | stopped |
| 101 | LXC | minecraft | stopped |
| 110 | LXC | moltbot | running |
| 301 | LXC | docker-portainer-template | stopped |
#### pvemini (10.0.20.201)
- **Resurse:** 64GB RAM, 1.4TB disk
- **SSH:** `ssh echo@10.0.20.201`
- **Scripturi monitorizare:** `/opt/scripts/`
- `ha-monitor.sh` - status cluster HA
- `monitor-ssl-certificates.sh` - verifică SSL-uri zilnic
- `ups-shutdown-cluster.sh` - shutdown orchestrat la UPS critic
- `ups-monthly-test.sh` - test baterie UPS lunar (1 ale lunii)
- `ups-maintenance-shutdown.sh` - shutdown pentru mentenanță UPS
- `vm107-monitor.sh` - monitorizează VM 107
- **Emailuri automate:** backup, cluster status, UPS, restore Oracle (sâmbătă)
| Cron | Oră | Script/Job |
|------|-----|------------|
| Zilnic 00:00 | ha-monitor.sh | Status cluster HA |
| 1 ale lunii 00:00 | ups-monthly-test.sh | Test baterie UPS |
| Zilnic 02:00 | vzdump backup | VM 100,108,104,106,201,171 → storage "backup" |
| Zilnic 22:00 | vzdump backup | LXC 101,110 (moltbot) → backup-pvemini-nfs |
| VMID | Tip | Nume | Status |
|------|-----|------|--------|
| 201 | VM | roacentral | running |
| 300 | VM | Win11-Template | stopped |
| 302 | VM | oracle-test-302 | stopped |
| 100 | LXC | portainer | running |
| 103 | LXC | dokploy | running |
| 104 | LXC | flowise | running |
| 105 | LXC | test | stopped |
| 106 | LXC | gitea | running |
| 108 | LXC | central-oracle | running |
| 171 | LXC | claude-agent | running |
##### LXC 171 - claude-agent (Development Environment)
- **IP:** 10.0.20.171
- **Resurse:** 4 cores, 16GB RAM, 32GB disk
- **OS:** Ubuntu (unprivileged, nesting enabled)
- **Tailscale:** Da (acces remote)
**Servicii:**
- `code-server@claude` — VS Code în browser
- `ttyd` — Web Terminal
- `ssh` — acces direct
**Claude Code:**
- Instalat și configurat
- Git configurat pentru `gitea.romfast.ro`
- Mod interactiv: `claude` (în terminal)
- Mod programatic: `claude -p "task description"` — pentru sarcini automatizate
**Utilizare:**
```bash
# Acces SSH
ssh user@10.0.20.171
# Sau prin Proxmox
ssh echo@10.0.20.201 "sudo pct exec 171 -- bash"
# Claude Code - interactiv
claude
# Claude Code - task direct
claude -p "descrie sarcina aici"
```
#### pve1 (10.0.20.200)
- **Resurse:** 32GB RAM, 1.3TB disk
- **SSH:** `ssh echo@10.0.20.200`
- **Status:** Gol (fără VM/LXC)
---
## Unelte per domeniu
### Self (wellbeing, coaching)
- **Ritual zilnic:** 08:00 și 23:00 - citate cu format specific
- Tehnici CNV, NLP, Sleight of Mouth
- Tracking sănătate (de creat)
- Resurse NMG (de adăugat)
- Post negru tracker (de creat)
### Sprijin (grup joi)
- **Notes:** filtru `@sprijin` pe https://moltbot.tailf7372d.ts.net/echo/notes.html
- **Proiect:** `memory/kb/projects/grup-sprijin/`
- **Biblioteca activități:** `memory/kb/projects/grup-sprijin/biblioteca.json`
- **Fișe:** `memory/kb/projects/grup-sprijin/fise/`
- **Template:** `memory/kb/projects/grup-sprijin/template-fisa.md`
### Scout (cercetași)
- Template activități scout
- Locații Constanța (de completat)
- Contacte echipă (de completat)