From c7bea57cd346dc388d6de122c4006a66ed9eb444 Mon Sep 17 00:00:00 2001 From: Echo Date: Tue, 10 Feb 2026 12:52:23 +0000 Subject: [PATCH] Update antfarm, ashboard, dashboard +3 more (+3 ~6) --- antfarm | 1 + dashboard/habits.json | 16 +++++- dashboard/index.html | 30 +++++++++- dashboard/status.json | 13 ++++- memory/2026-02-10.md | 21 +++++++ memory/kb/index.json | 64 +++++++++++++++------ memory/kb/tools/antfarm-workflow.md | 87 +++++++++++++++++++++++++++++ progress.txt | 41 +++++++++++++- tools/anaf-monitor/monitor_v2.py | 22 +++++++- 9 files changed, 265 insertions(+), 30 deletions(-) create mode 160000 antfarm create mode 100644 memory/2026-02-10.md create mode 100644 memory/kb/tools/antfarm-workflow.md diff --git a/antfarm b/antfarm new file mode 160000 index 0000000..2fff211 --- /dev/null +++ b/antfarm @@ -0,0 +1 @@ +Subproject commit 2fff2115022afc796908f1a63124987437520b69 diff --git a/dashboard/habits.json b/dashboard/habits.json index b1b63ca..0824107 100644 --- a/dashboard/habits.json +++ b/dashboard/habits.json @@ -1,4 +1,14 @@ { - "habits": [], - "lastUpdated": "2026-02-10T12:39:00Z" -} + "habits": [ + { + "id": "habit-test1", + "name": "Test Habit", + "frequency": "daily", + "createdAt": "2026-02-01T10:00:00Z", + "completions": [ + "2026-02-10" + ] + } + ], + "lastUpdated": "2026-02-10T10:00:00Z" +} \ No newline at end of file diff --git a/dashboard/index.html b/dashboard/index.html index e15431c..d2ab4ab 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -1600,10 +1600,34 @@ const msg = status.anaf.ok !== false ? 'Nicio modificare' : (status.anaf.message || 'Modificări!'); subtitle.textContent = `${msg} · ${lastCheck}`; - if (status.anaf.lastCheck) { - document.getElementById('anafLastCheck').textContent = - 'Ultima verificare: ' + status.anaf.lastCheck; + // Actualizează detaliile + const details = document.getElementById('anafDetails'); + let html = ''; + + // Adaugă detaliile modificărilor dacă există + if (status.anaf.changes && status.anaf.changes.length > 0) { + status.anaf.changes.forEach(change => { + const summaryText = change.summary && change.summary.length > 0 + ? ' - ' + change.summary.join(', ') + : ''; + html += ` +
+ + ${change.name}${summaryText} +
+ `; + }); + } else { + html = ` +
+ + Toate paginile sunt la zi +
+ `; } + + details.innerHTML = html; + lucide.createIcons(); } return status; diff --git a/dashboard/status.json b/dashboard/status.json index 69d43ce..8af62fa 100644 --- a/dashboard/status.json +++ b/dashboard/status.json @@ -13,7 +13,16 @@ "ok": false, "status": "MODIFICĂRI", "message": "1 modificări detectate", - "lastCheck": "09 Feb 2026, 14:00", - "changesCount": 1 + "lastCheck": "10 Feb 2026, 12:39", + "changesCount": 1, + "changes": [ + { + "name": "Declarația 100 - Obligații de plată la bugetul de stat", + "url": "https://static.anaf.ro/static/10/Anaf/Declaratii_R/100.html", + "summary": [ + "Soft A: 09.02.2026 → 10.02.2026" + ] + } + ] } } \ No newline at end of file diff --git a/memory/2026-02-10.md b/memory/2026-02-10.md new file mode 100644 index 0000000..2e78121 --- /dev/null +++ b/memory/2026-02-10.md @@ -0,0 +1,21 @@ +# 2026-02-10 + +## Dashboard ANAF - Detalii Modificări + +**Context:** Marius a cerut să vadă ce modificări detectează ANAF Monitor în dashboard, nu doar mesaj generic "Modificări detectate". + +**Implementare:** +1. **monitor_v2.py** - modificat `update_dashboard_status()` să salveze detalii în `status.json`: + - Nume pagină modificată + - URL către pagina ANAF + - Rezumat modificări (ex: "Soft A: 09.02.2026 → 10.02.2026") + +2. **dashboard/index.html** - modificat `loadAnafStatus()` să afișeze detaliile: + - Link-uri clickabile către paginile ANAF + - Lista modificărilor pentru fiecare pagină + - Expandabil în secțiunea ANAF Monitor + +**Modificare reală detectată astăzi:** +- D100 (Declarația 100) - Soft A: 09.02.2026 → 10.02.2026 + +**Status:** Implementat, netestat în browser. Așteaptă commit. diff --git a/memory/kb/index.json b/memory/kb/index.json index dcb91f8..a0437d2 100644 --- a/memory/kb/index.json +++ b/memory/kb/index.json @@ -1,5 +1,48 @@ { "notes": [ + { + "file": "notes-data/tools/antfarm-workflow.md", + "title": "Antfarm Workflow - Echo", + "date": "2026-02-10", + "tags": [], + "domains": [], + "types": [], + "category": "tools", + "project": null, + "subdir": null, + "video": "", + "tldr": "**Update:** După ce învăț fluxul mai bine" + }, + { + "file": "memory/provocare-azi.md", + "title": "Provocarea Zilei - 2026-02-08", + "date": "2026-02-10", + "tags": [], + "domains": [], + "types": [ + "memory" + ], + "category": "memory", + "project": null, + "subdir": null, + "video": "", + "tldr": "- Monica Ion - Legea Fractalilor (Cele 7 Legi Universale)" + }, + { + "file": "memory/2026-02-10.md", + "title": "2026-02-10", + "date": "2026-02-10", + "tags": [], + "domains": [], + "types": [ + "memory" + ], + "category": "memory", + "project": null, + "subdir": null, + "video": "", + "tldr": "**Status:** Aștept confirmare de la Marius să lansez `antfarm workflow run feature-dev`." + }, { "file": "notes-data/coaching/2026-02-09-seara.md", "title": "Gândul de Seară - Duminică, 9 Februarie 2026", @@ -813,21 +856,6 @@ "video": "https://moltbot.tailf7372d.ts.net/echo/files.html#memory/kb/articole/monica-ion/cele-7-legi-universale.md", "tldr": "Cele 7 Legi Universale sunt principii fundamentale care explică cum funcționează mintea, de ce trăim viața așa cum o trăim și cum putem genera transformare reală. Fiecare lege este susținută de istori..." }, - { - "file": "memory/provocare-azi.md", - "title": "Provocarea Zilei - 2026-02-08", - "date": "2026-02-08", - "tags": [], - "domains": [], - "types": [ - "memory" - ], - "category": "memory", - "project": null, - "subdir": null, - "video": "", - "tldr": "- Monica Ion - Legea Fractalilor (Cele 7 Legi Universale)" - }, { "file": "memory/jurnal-motivatie.md", "title": "Jurnal - Drumul spre regăsirea motivației", @@ -3346,7 +3374,7 @@ } ], "stats": { - "total": 194, + "total": 196, "by_domain": { "work": 59, "health": 34, @@ -3365,9 +3393,9 @@ "projects": 85, "reflectii": 3, "retete": 1, - "tools": 5, + "tools": 6, "youtube": 42, - "memory": 16 + "memory": 17 } }, "domains": [ diff --git a/memory/kb/tools/antfarm-workflow.md b/memory/kb/tools/antfarm-workflow.md new file mode 100644 index 0000000..90362c0 --- /dev/null +++ b/memory/kb/tools/antfarm-workflow.md @@ -0,0 +1,87 @@ +# Antfarm Workflow - Echo + +**Instalat:** github.com/snarktank/antfarm +**CLI:** `antfarm` (în PATH, global) +**Dashboard:** https://moltbot.tailf7372d.ts.net:3333 +**Docs:** ~/clawd/antfarm/README.md, ~/clawd/antfarm/docs/creating-workflows.md + +--- + +## Flux rapid (pentru Echo) + +### 1. Primesc request de la Marius +**EX:** "Vreau să construiesc un Habit tracker în dashboard" + +### 2. Lansez direct workflow-ul cu promptul lui Marius +```bash +cd ~/clawd +antfarm workflow run feature-dev "" +``` + +**NU:** +- ✗ Verific dacă e instalat (e instalat, permanent) +- ✗ Fac eu requirements/acceptance criteria (planner-ul face asta) +- ✗ Complicez task string-ul (simplitate = mai bine) + +**DA:** +- ✓ Trimit prompt-ul EXACT cum îl primesc de la Marius +- ✓ Planner-ul descompune în stories automat +- ✓ Developer-ul decide tehnologii/structură + +### 3. Monitorez progres +```bash +antfarm workflow status +antfarm workflow runs # listă toate +``` + +### 4. Raportez când e gata +Agenții lucrează autonom (polling 15 min). Raportez când: +- Stories finalizate +- Erori care necesită intervenție +- PR creat pentru review + +--- + +## Workflows disponibile + +| Workflow | Când să-l folosesc | +|----------|-------------------| +| `feature-dev` | Features noi, refactoring, îmbunătățiri | +| `bug-fix` | Bug-uri cu pași de reproducere | +| `security-audit` | Audit securitate codebase | + +--- + +## Comenzi utile + +```bash +# Status rapid +antfarm workflow status + +# Force trigger agent (skip 15min wait) +cron action=run jobId=antfarm/feature-dev/developer + +# Logs +antfarm logs 50 + +# Resume dacă failuit +antfarm workflow resume + +# Dashboard +antfarm dashboard status +``` + +--- + +## Reguli importante + +1. **Task string = prompt exact de la Marius** (nu complica) +2. **Planner face requirements** (nu tu) +3. **Agenții sunt autonomi** (polling 15 min, nu trebuie să-i controlezi) +4. **Monitor dashboard** (https://moltbot.tailf7372d.ts.net:3333) +5. **Raportează doar când e relevant** (finalizare, erori, PR) + +--- + +**Creat:** 2026-02-10 +**Update:** După ce învăț fluxul mai bine diff --git a/progress.txt b/progress.txt index a074f36..b47b238 100644 --- a/progress.txt +++ b/progress.txt @@ -452,9 +452,48 @@ CODEBASE PATTERNS UPDATE: - dashboard/test_habits_form_submit.py (created) - dashboard/habits.json (reset to empty for testing) +[✓] Story 12.0: Frontend - Habit card styling + Commit: c1d4ed1 + Date: 2026-02-10 + + Implementation: + - Enhanced habit card styling to match dashboard aesthetic + - Changed card border-radius from --radius-md to --radius-lg for smoother appearance + - Changed streak font-size from --text-lg to --text-xl for prominent display + - Added green background tint (rgba(34, 197, 94, 0.1)) for checked habit cards + - Added 'checked' CSS class to habit-card when checkedToday is true + - Implemented pulse animation on checkbox hover for unchecked habits + - Animation scales checkbox subtly (1.0 to 1.05) with 1.5s ease-in-out timing + - Styled frequency badge as dashboard tag with inline-block, bg-elevated, border, padding + - Updated JavaScript createHabitCard to add 'checked' class to card element + - Updated JavaScript checkHabit to add 'checked' class on successful check + - Updated error rollback to remove 'checked' class if check fails + - Added mobile responsiveness with @media (max-width: 768px) query + - Mobile styles: full width cards, reduced padding, smaller icons (36px, 28px) + - All CSS uses CSS variables for theming consistency + + Tests: + - Created dashboard/test_habits_card_styling.py with 10 comprehensive tests + - Tests for file existence + - Tests for card using --bg-surface with --border (acceptance criteria 1) + - Tests for --radius-lg border radius on cards (acceptance criteria 6) + - Tests for streak using --text-xl font size (acceptance criteria 2) + - Tests for checked habit green background tint (acceptance criteria 3) + - Tests for pulse animation on unchecked checkbox hover (acceptance criteria 4) + - Tests for frequency badge dashboard tag styling (acceptance criteria 5) + - Tests for mobile responsiveness with full width cards (acceptance criteria 7) + - Tests for checked class in createHabitCard function + - Summary test verifying all 7 acceptance criteria + - All 10 tests pass ✓ (acceptance criteria 8) + - All previous tests (schema, API, HTML, modal, display, check, form) still pass ✓ + + Files modified: + - dashboard/habits.html (updated CSS and JavaScript for styling enhancements) + - dashboard/test_habits_card_styling.py (created) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ NEXT STEPS: -- Continue with remaining 7 stories +- Continue with remaining 6 stories ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ diff --git a/tools/anaf-monitor/monitor_v2.py b/tools/anaf-monitor/monitor_v2.py index 8ee230e..4fae3fd 100644 --- a/tools/anaf-monitor/monitor_v2.py +++ b/tools/anaf-monitor/monitor_v2.py @@ -313,17 +313,33 @@ def check_page(page, saved_versions, saved_hashes): log(f"OK: {page_id}") return None -def update_dashboard_status(has_changes, changes_count): +def update_dashboard_status(has_changes, changes_count, changes_list=None): """Actualizează status.json pentru dashboard""" try: status = load_json(DASHBOARD_STATUS, {}) - status['anaf'] = { + anaf_status = { 'ok': not has_changes, 'status': 'MODIFICĂRI' if has_changes else 'OK', 'message': f'{changes_count} modificări detectate' if has_changes else 'Nicio modificare detectată', 'lastCheck': datetime.now().strftime('%d %b %Y, %H:%M'), 'changesCount': changes_count } + + # Adaugă detaliile modificărilor pentru dashboard + if has_changes and changes_list: + anaf_status['changes'] = [] + for change in changes_list: + change_detail = { + 'name': change.get('name', ''), + 'url': change.get('url', ''), + 'summary': [] + } + # Ia primele 3 modificări ca rezumat + if change.get('changes'): + change_detail['summary'] = change['changes'][:3] + anaf_status['changes'].append(change_detail) + + status['anaf'] = anaf_status save_json(DASHBOARD_STATUS, status) except Exception as e: log(f"ERROR updating dashboard status: {e}") @@ -345,7 +361,7 @@ def main(): save_json(HASHES_FILE, saved_hashes) # Update dashboard status - update_dashboard_status(len(all_changes) > 0, len(all_changes)) + update_dashboard_status(len(all_changes) > 0, len(all_changes), all_changes) log("=== Monitor complete ===")