fix: browser wrapper permanent pour SingletonLock après redémarrage

- chrome-wrapper.sh : nettoie les lock files avant de lancer Chrome
- openclaw.json : executablePath pointe vers le wrapper
- start-chrome-cdp.sh : script de secours manuel
- oc-up.sh : mis à jour (plus de démarrage manuel Chrome nécessaire)
- MEMORY.md : documentation du fix
This commit is contained in:
Nox
2026-02-27 10:42:54 +00:00
parent 29c59b6bf1
commit e4128f9788
39 changed files with 2668 additions and 1 deletions
+124
View File
@@ -0,0 +1,124 @@
# Session: 2026-02-23 11:31:59 UTC
- **Session Key**: agent:main:main
- **Session ID**: 3293c6a0-d3c3-486e-b0a8-ec8d3e57f2b9
- **Source**: telegram
## Conversation Summary
user: System: [2026-02-23 11:19:59 UTC] Exec completed (swift-sh, code 0) :: État: running | Up 25 seconds (health: starting) Image: vaultwarden/server:latest Image construite le: 2026-02-10 Version: sh: 1: strings: not found
System: [2026-02-23 11:20:15 UTC] Exec completed (calm-rid, code 0) :: NFO] Using saved config from `data/config.json` for configuration. [NOTICE] You are using a plain text `ADMIN_TOKEN` which is insecure. Please generate a secure Argon2 PHC string …
Conversation info (untrusted metadata):
```json
{
"message_id": "769",
"sender_id": "2037871620",
"sender": "2037871620"
}
```
oui, tu peux automatiser ! comment tu vas t-y prendre ?
assistant: Bonne question — voilà ma réflexion :
**Contrainte principale** : je ne peux pas faire `cp` directement sur le NAS (pas de SSH), mais je peux exécuter des commandes *dans* les conteneurs via l'API Portainer.
**Mon plan** :
1. Un script Node.js `docker-backup.js` dans le workspace
2. Il connecte Portainer, liste les conteneurs à sauvegarder, exécute un `cp` dans chaque conteneur
3. Il fait aussi du ménage (garde les N derniers backups)
4. Un cron OpenClaw l'exécute chaque semaine (ou avant update)
Je l'écris maintenant :
assistant: Script écrit. Je le teste d'abord sur Vaultwarden :
assistant: Parfait. Maintenant je configure le cron OpenClaw. Laisse-moi vérifier la syntaxe :
assistant: Job créé ! Je fais un test run immédiat pour valider le comportement en context isolé :
assistant: Test réussi — 4 services sauvegardés ! Je règle le petit bug de nettoyage pour Vikunja (le conteneur n'a pas `sh`, il faut utiliser `ash`) :
assistant: Bon. Maintenant je commit le script dans le workspace et je vérifie le cron :
assistant: [[reply_to_current]] Tout est en place. Voici comment ça marche :
---
**🔧 Le script `docker-backup.js`**
Il se connecte à Portainer, entre dans chaque conteneur et fait un `cp` des données critiques vers un sous-dossier `backups/YYYY-MM-DD_HH-mm-ss/`. Il garde les N derniers backups et supprime les anciens automatiquement.
Services couverts pour l'instant :
| Conteneur | Ce qui est sauvegardé | Garde |
|-----------|----------------------|-------|
| vaultwarden | db.sqlite3 + config.json + clés RSA | 4 semaines |
| vikunja | dossier files | 3 semaines |
| nocodb | dossier data | 3 semaines |
| freshrss | dossier data | 3 semaines |
---
**⏰ Cron configuré**
- Chaque **dimanche à 3h00** (Europe/Paris)
- Session isolée → résultat envoyé directement sur **Telegram**
- Prochain run : **dimanche 1er mars à 3h00**
---
**▶️ Usage manuel**
```bash
node docker-backup.js # tout sauvegarder
node docker-backup.js vaultwarden # un seul service
node docker-backup.js --list # voir les services
```
Tu peux ajouter d'autres conteneurs en éditant le tableau `SERVICES` en haut du fichier. Pour chaque service il faut juste : le nom du conteneur, le chemin des données, et combien de backups garder.
user: System: [2026-02-23 11:24:42 UTC] Exec completed (neat-nex, code 0) :: { "ok": true, "ran": true }
System: [2026-02-23 11:25:17 UTC] Exec completed (ember-la, code 0) :: "nextRunAtMs": 1772330400000, "model": "claude-sonnet-4-6", "provider": "anthropic", "usage": { "input_tokens": 18, "output_tokens": 350, "total_tokens": 11491 }, "sessionId": "29…
Conversation info (untrusted metadata):
```json
{
"message_id": "777",
"sender_id": "2037871620",
"sender": "2037871620"
}
```
je ne souhaite pas activer le cron pour le moment ! par contre, garde en mémoire que si je te demande de faire une mise à jour d'un conteneur docker, d'uiliser ton script avant
assistant: Cron supprimé. Je note la règle dans ma mémoire :
assistant: [[reply_to_current]] Cron supprimé, mémorisé 🌑
La règle est gravée : **avant toute mise à jour d'un conteneur Docker, je lance `docker-backup.js` en premier** — que tu me le demandes explicitement ou non. Tu n'as pas à y penser.
user: Conversation info (untrusted metadata):
```json
{
"message_id": "780",
"sender_id": "2037871620",
"sender": "2037871620"
}
```
est-ce que la liste de tous les services docker/lxc/vms dans ta mémoire ? sur qdrant ? tu penses à l'utiliser ou c'est overkill ?
assistant: Bonne question. Je vérifie ce qui est dans Qdrant et je te donne mon avis honnête.
assistant: [[reply_to_current]] Réponse honnête : **overkill pour l'inventaire complet, mais il manque quelques facts clés.**
**Ce qui est déjà dans Qdrant :**
- Les accès Proxmox/Portainer (URL, tokens)
- Les VMs clés (HA=138, OpenClaw=145, Frigate=139, PBS=109)
- L'archi Portainer générale
**Ce qui n'y est pas :** le catalogue complet des 50+ VMs/LXC et 30+ Docker.
---
**Pourquoi je ne l'y mettrais pas :**
1. **L'inventaire est dynamique** — tu démarres/arrêtes des services, en ajoutes. Qdrant se retrouverait vite périmé et je n'aurais aucun moyen de le détecter
2. **Je peux le régénérer en 10 secondes** — Proxmox API + Portainer API, c'est plus fiable qu'un cache vieux de 3 jours
3. **Qdrant brille pour autre chose** — du contenu qu'on ne peut pas recalculer : tes préférences, des leçons apprises, des procédures documentées, des conversations importantes
**Ce que je vais plutôt faire** — mettre à jour Qdrant avec 2-3 facts utiles issus d'aujourd'hui :
assistant: Voilà la philosophie que j'applique :
- **MEMORY.md** → ce que je dois savoir au démarrage (accès, règles critiques)
- **Qdrant** → facts importants + leçons apprises + références (comme l'ID Anytype ci-dessus)
- **Anytype** → le contenu riche et lisible (l'inventaire complet)
- **API live** → la vérité du moment (état réel des services)
Chaque outil à sa place.