Gmail Phase E/F + HANDOFF global + cleanup cron/root
- Réécriture HANDOFF.md dashboard multi-domaines - Mise à jour MEMORY.md / TOOLS.md / AGENTS.md - Cleanup fichiers cron obsolètes + fichiers root - Gmail Phase E : audit, 18 filtres natifs, labels Promos/Dev-Tools/Social - Gmail Phase F : archive Philippot + Ulys terminée
This commit is contained in:
158
workspace/MEMORY.md
Normal file
158
workspace/MEMORY.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# Mémoire opérationnelle — MEMORY.md
|
||||
|
||||
> Connaissances persistantes pour l'agent. Lu à chaque création de session.
|
||||
|
||||
---
|
||||
|
||||
## Identité du système
|
||||
|
||||
**OpenClaw** : v2026.6.5 (mis à jour le 11/6/2026)
|
||||
**Hébergement** : Synology DS920+ ARCHIVE3 (RAM 20Gi, /volume1/docker/)
|
||||
**LLM backend** : `Qwen/Qwen3-VL-30B-A3B-Thinking-FP8` servi par vLLM sur DGX Spark, `--served-model-name=qwen3-vl`
|
||||
**Utilisateur principal** : Thierry Tallagrand (`+33607148216`)
|
||||
**Vision projet** : système d'orchestration personnelle (bourse via N8N, mail multi-comptes, photos→sheets, WhatsApp/GUI).
|
||||
|
||||
---
|
||||
|
||||
## Capacités opérationnelles
|
||||
|
||||
### Gmail (gog CLI v0.21.0) — ACTIF
|
||||
- ✅ **Envoyer mail** : `gog gmail send --to ... --subject "..." --body "..." --attach <fichier>`
|
||||
- ✅ **Lire/chercher** : `gog gmail search "..." -j --max N`
|
||||
- ✅ **Brouillons** : `gog gmail drafts create/list/send/delete`
|
||||
- ✅ **Trier** : `gog gmail trash/archive` (toujours `--dry-run` d'abord)
|
||||
- ✅ **Labels** : `gog gmail labels list`, `gog gmail messages modify --add-label/--remove-label`
|
||||
|
||||
### WhatsApp — ACTIF
|
||||
- ✅ Envoi messages texte vers l'utilisateur principal
|
||||
- ✅ Envoi images PNG/JPEG — SVG interdits
|
||||
- ✅ Commande `/new` pour nouvelle session DM
|
||||
|
||||
### Bourse — Workflow N8N (refonte 2026-06-24)
|
||||
- ✅ **Graphe** : webhook N8N `POST https://n8n.airtria.pro/webhook/bourse-graphe` (workflow `4bluZIeN3TnbzIrv`)
|
||||
- ✅ **Watchlist** : éditable dans `workspace/bourse-config.json`
|
||||
- ✅ **Prix texte rapide** : `curl -fs "https://query1.finance.yahoo.com/v8/finance/chart/SYMBOLE?interval=1d&range=1d" | jq '.chart.result[0].meta | {price: .regularMarketPrice, prev: .chartPreviousClose, currency}'`
|
||||
- ✅ **Cron** : `orange-cloture` (40 17 * * 1-5) via le workflow N8N
|
||||
- ⚠️ **OBSOLÈTES** (ne plus utiliser) : `orange-bourse.md`, `get_quote.py`, `generate_chart.py`, `clean_bourse_md.py` — archivés dans `workspace/_archive-bourse-20260624/`
|
||||
|
||||
### Filesystem & exec
|
||||
- ✅ Lecture/écriture dans `/home/node/.openclaw/workspace/`
|
||||
- ✅ Exec `python3`, `node`, `curl`, `jq`, `git`
|
||||
- ✅ Aucun `pip install` runtime
|
||||
|
||||
### Web
|
||||
- ✅ `web_fetch` (1500 chars max), `web_search` (10 résultats max)
|
||||
|
||||
---
|
||||
|
||||
## Hard constraint GLOBAL — Anti-amnésie
|
||||
|
||||
**L'agent NE DIT JAMAIS "je ne peux pas faire X" sans vérification.**
|
||||
|
||||
Procédure obligatoire avant tout refus :
|
||||
1. Chercher X dans `TOOLS.md` (sections 1-9)
|
||||
2. Si X est documenté → tenter la commande et rapporter le résultat
|
||||
3. Si erreur → rapporter l'erreur EXACTE, pas l'incapacité
|
||||
4. Si vraiment non documenté → demander précision à l'utilisateur
|
||||
|
||||
**Exemples de refus INTERDITS** :
|
||||
- "Je ne peux pas envoyer un mail" (faux : Gmail send actif)
|
||||
- "Je n'ai pas accès à Gmail" (faux : auth persistée)
|
||||
- "Je suis un assistant sans capacités" (faux : voir `TOOLS.md`)
|
||||
- "Gmail à venir" (faux : opérationnel depuis 9/6/2026)
|
||||
- "Je ne peux pas tracer un graphe boursier" (faux : webhook N8N actif depuis 24/6/2026)
|
||||
|
||||
---
|
||||
|
||||
## Bourse — Architecture N8N (source de vérité actuelle)
|
||||
|
||||
### Principe
|
||||
Agent = interlocuteur. N8N = exécutant. Aucune donnée n'est editée à la main.
|
||||
|
||||
### Source de vérité
|
||||
- Fichier : `workspace/bourse-config.json`
|
||||
- Tickers FR : suffixe `.PA` (ORA.PA, TTE.PA)
|
||||
- Tickers US : sans suffixe (NVDA, AAPL)
|
||||
- Aliases et options par défaut définis dans le JSON
|
||||
|
||||
### Crons actifs
|
||||
- `orange-cloture` (`40 17 * * 1-5` Europe/Paris) : appelle le webhook N8N et envoie le PNG sur WhatsApp.
|
||||
- Actuellement en timeout — voir `workspace/HANDOFF.md` TODOs.
|
||||
|
||||
### Crons bourse obsolètes (désactivés dans SQLite)
|
||||
- `orange-ouverture`
|
||||
- `orange-intraday`
|
||||
- `orange-chart-update`
|
||||
|
||||
### Format réponse standard
|
||||
- Cours simple : `ORA.PA : 17,86€ (+1,16%)`
|
||||
- Indisponible/marché fermé : dire "Aucune donnée", ne pas inventer
|
||||
- Graphe : 3 lignes max + PNG attaché
|
||||
|
||||
---
|
||||
|
||||
## Gmail — Suivi des phases
|
||||
|
||||
### Phase terminées
|
||||
- Re-auth OAuth + GOG_HOME persisté (2026-06-09)
|
||||
- Phase D : 12 401 mails trashés
|
||||
|
||||
### Phases terminées
|
||||
- Phase E : filtres natifs Gmail anti-spam (2026-06-25) — 18 filtres créés, ~889 messages archivés
|
||||
- Phase F : archive Philippot + Ulys (2026-06-25) — inbox vides, futurs messages filtrés
|
||||
|
||||
### Phases en attente
|
||||
- Phase G : longue traîne newsletters
|
||||
|
||||
### Cron actif
|
||||
- `daily-email-report` (`30 8 * * *` Europe/Paris) → résumé quotidien WhatsApp des dernières 24h
|
||||
|
||||
---
|
||||
|
||||
## TODO actuel
|
||||
|
||||
### Haute priorité
|
||||
- Stabiliser le cron `orange-cloture` (timeouts)
|
||||
- Régler le max tokens GUI à ~8192 (navigateur)
|
||||
|
||||
### Moyenne priorité
|
||||
- Tester "2 graphes séparés zoomés" (2× `beginAtZero:false`)
|
||||
- Surveiller l’efficacité des filtres Phase E (1–2 semaines)
|
||||
- Phase G Gmail : longue traîne newsletters
|
||||
|
||||
### Basse priorité
|
||||
- Aligner `agents/main/agent/models.json` avec `vllm/qwen3-vl`
|
||||
- Augmenter `OPENCLAW_CRON_JOB_TIMEOUT_MS` si le Thinking déborde
|
||||
|
||||
---
|
||||
|
||||
## Apprentissages structurants
|
||||
|
||||
### Sessions précédentes
|
||||
- **9/6/2026** : Re-auth OAuth Gmail + GOG_HOME persisté (test compose down/up validé)
|
||||
- **10/6/2026** : Fix cron orange-intraday (prompt "OK" → vrai cours), RAM upgrade 16GB
|
||||
- **10/6/2026** : Découverte SVG incompatible WhatsApp + bug tri chronologique
|
||||
- **23/6/2026** : Migration du cron email horaire (`hourly-email-check`) vers un rapport quotidien (`daily-email-report`) à 8h30 Europe/Paris. Source de vérité : `state/openclaw.sqlite` (pas les JSON obsolètes). Format : résumé court global + détail des messages importants.
|
||||
- **24-25/6/2026** : Refonte bourse via N8N — suppression des scripts Python, du fichier `orange-bourse.md` et des workflows cassés ; passage au modèle Thinking.
|
||||
- **25/6/2026** : Phase E Gmail (filtres natifs) + Phase F (archive Philippot/Ulys) terminées. Audit via SSH sur Synology + `gog` dans container `openclaw-gateway`.
|
||||
|
||||
### Patterns à respecter
|
||||
- Test après chaque modification (checklist comportementale)
|
||||
- Backup AVANT chaque mutation (`.bak-<TS>` avec timestamp)
|
||||
- 3 couches doivent rester alignées : Tools/Skills (`TOOLS.md`) + Knowledge (`MEMORY.md`) + Identity (`SOUL.md` / `IDENTITY.md`)
|
||||
- L'agent ne modifie jamais des fichiers directement quand un outil/service est la source de vérité (cas bourse : `bourse-config.json` OK, mais les prix viennent de Yahoo via N8N)
|
||||
|
||||
---
|
||||
|
||||
## Méta : où trouver quoi
|
||||
|
||||
| Sujet | Fichier de référence |
|
||||
|---|---|
|
||||
| Skills opérationnels (syntaxe gog, webhook, etc.) | `TOOLS.md` |
|
||||
| Comportement, hard constraints | `AGENTS.md` |
|
||||
| Identité, persona | `SOUL.md`, `IDENTITY.md` |
|
||||
| État global / transfert inter-sessions | `HANDOFF.md` |
|
||||
| Mode batch/cron silencieux | `HEARTBEAT.md` |
|
||||
| Règles métier Gmail | `gmail-rules.md` |
|
||||
| Données bourse (watchlist + options) | `bourse-config.json` |
|
||||
| Mémoire évolutive (ce fichier) | `MEMORY.md` |
|
||||
Reference in New Issue
Block a user