Update antfarm, ashboard, dashboard +3 more (+3 ~6)

This commit is contained in:
Echo
2026-02-10 12:52:23 +00:00
parent c1d4ed1b03
commit c7bea57cd3
9 changed files with 265 additions and 30 deletions

1
antfarm Submodule

Submodule antfarm added at 2fff211502

View File

@@ -1,4 +1,14 @@
{ {
"habits": [], "habits": [
"lastUpdated": "2026-02-10T12:39:00Z" {
} "id": "habit-test1",
"name": "Test Habit",
"frequency": "daily",
"createdAt": "2026-02-01T10:00:00Z",
"completions": [
"2026-02-10"
]
}
],
"lastUpdated": "2026-02-10T10:00:00Z"
}

View File

@@ -1600,10 +1600,34 @@
const msg = status.anaf.ok !== false ? 'Nicio modificare' : (status.anaf.message || 'Modificări!'); const msg = status.anaf.ok !== false ? 'Nicio modificare' : (status.anaf.message || 'Modificări!');
subtitle.textContent = `${msg} · ${lastCheck}`; subtitle.textContent = `${msg} · ${lastCheck}`;
if (status.anaf.lastCheck) { // Actualizează detaliile
document.getElementById('anafLastCheck').textContent = const details = document.getElementById('anafDetails');
'Ultima verificare: ' + status.anaf.lastCheck; 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 += `
<div class="status-detail-item uncommitted">
<i data-lucide="alert-circle"></i>
<span><a href="${change.url}" target="_blank" style="color:var(--warning)">${change.name}</a>${summaryText}</span>
</div>
`;
});
} else {
html = `
<div class="status-detail-item">
<i data-lucide="check-circle"></i>
<span>Toate paginile sunt la zi</span>
</div>
`;
} }
details.innerHTML = html;
lucide.createIcons();
} }
return status; return status;

View File

@@ -13,7 +13,16 @@
"ok": false, "ok": false,
"status": "MODIFICĂRI", "status": "MODIFICĂRI",
"message": "1 modificări detectate", "message": "1 modificări detectate",
"lastCheck": "09 Feb 2026, 14:00", "lastCheck": "10 Feb 2026, 12:39",
"changesCount": 1 "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"
]
}
]
} }
} }

21
memory/2026-02-10.md Normal file
View File

@@ -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.

View File

@@ -1,5 +1,48 @@
{ {
"notes": [ "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", "file": "notes-data/coaching/2026-02-09-seara.md",
"title": "Gândul de Seară - Duminică, 9 Februarie 2026", "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", "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..." "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", "file": "memory/jurnal-motivatie.md",
"title": "Jurnal - Drumul spre regăsirea motivației", "title": "Jurnal - Drumul spre regăsirea motivației",
@@ -3346,7 +3374,7 @@
} }
], ],
"stats": { "stats": {
"total": 194, "total": 196,
"by_domain": { "by_domain": {
"work": 59, "work": 59,
"health": 34, "health": 34,
@@ -3365,9 +3393,9 @@
"projects": 85, "projects": 85,
"reflectii": 3, "reflectii": 3,
"retete": 1, "retete": 1,
"tools": 5, "tools": 6,
"youtube": 42, "youtube": 42,
"memory": 16 "memory": 17
} }
}, },
"domains": [ "domains": [

View File

@@ -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 "<prompt exact de la Marius>"
```
**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 <run-id sau substring>
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 <query>
# Force trigger agent (skip 15min wait)
cron action=run jobId=antfarm/feature-dev/developer
# Logs
antfarm logs 50
# Resume dacă failuit
antfarm workflow resume <run-id>
# 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

View File

@@ -452,9 +452,48 @@ CODEBASE PATTERNS UPDATE:
- dashboard/test_habits_form_submit.py (created) - dashboard/test_habits_form_submit.py (created)
- dashboard/habits.json (reset to empty for testing) - 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: NEXT STEPS:
- Continue with remaining 7 stories - Continue with remaining 6 stories
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

View File

@@ -313,17 +313,33 @@ def check_page(page, saved_versions, saved_hashes):
log(f"OK: {page_id}") log(f"OK: {page_id}")
return None 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""" """Actualizează status.json pentru dashboard"""
try: try:
status = load_json(DASHBOARD_STATUS, {}) status = load_json(DASHBOARD_STATUS, {})
status['anaf'] = { anaf_status = {
'ok': not has_changes, 'ok': not has_changes,
'status': 'MODIFICĂRI' if has_changes else 'OK', 'status': 'MODIFICĂRI' if has_changes else 'OK',
'message': f'{changes_count} modificări detectate' if has_changes else 'Nicio modificare detectată', 'message': f'{changes_count} modificări detectate' if has_changes else 'Nicio modificare detectată',
'lastCheck': datetime.now().strftime('%d %b %Y, %H:%M'), 'lastCheck': datetime.now().strftime('%d %b %Y, %H:%M'),
'changesCount': changes_count '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) save_json(DASHBOARD_STATUS, status)
except Exception as e: except Exception as e:
log(f"ERROR updating dashboard status: {e}") log(f"ERROR updating dashboard status: {e}")
@@ -345,7 +361,7 @@ def main():
save_json(HASHES_FILE, saved_hashes) save_json(HASHES_FILE, saved_hashes)
# Update dashboard status # 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 ===") log("=== Monitor complete ===")