Update antfarm, ashboard, dashboard +3 more (+3 ~6)
This commit is contained in:
1
antfarm
Submodule
1
antfarm
Submodule
Submodule antfarm added at 2fff211502
@@ -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"
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
21
memory/2026-02-10.md
Normal 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.
|
||||||
@@ -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": [
|
||||||
|
|||||||
87
memory/kb/tools/antfarm-workflow.md
Normal file
87
memory/kb/tools/antfarm-workflow.md
Normal 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
|
||||||
41
progress.txt
41
progress.txt
@@ -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
|
||||||
|
|
||||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|||||||
@@ -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 ===")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user