01629780f4
Code du systeme de memoire multi-LLM sur Trilium : - trilium_api.py : wrapper trilium-py (notes, labels, relations) - mcp_server.py : serveur MCP Starlette (19 tools, OAuth + Bearer) - api_context.py : API REST FastAPI - trilium_context.py : workflow CLI - watchdog.sh, start_*.sh : supervision et demarrage - skills, docs et ontologie associes Secrets (.env, oauth_state.json) exclus via .gitignore.
239 lines
6.1 KiB
Markdown
239 lines
6.1 KiB
Markdown
# Skill — Modification de code sur GrosseBertha (Synology DS218)
|
|
|
|
## Contexte
|
|
|
|
GrosseBertha est un Synology DS218 (ARM64, DSM 7.3.2).
|
|
L'utilisateur est connecté en SSH avec l'utilisateur `Master`.
|
|
Le shell est `/bin/sh` (pas bash).
|
|
|
|
---
|
|
|
|
## Règles de procédure — OBLIGATOIRES
|
|
|
|
Ces règles s'appliquent à toutes les sessions de travail sur le pipeline Sliding.
|
|
Elles existent pour limiter la consommation de tokens et les itérations inutiles.
|
|
|
|
### 1. Demander accord avant tout code lourd
|
|
Ne jamais générer un script de patch, une fonction ou un fichier sans avoir
|
|
demandé et obtenu l'accord explicite de l'utilisateur.
|
|
"Je génère ?" → attendre "oui" avant de coder.
|
|
|
|
### 2. Lire les lignes exactes avant de patcher
|
|
Avant tout patch sur render_engine.py, demander le `sed` sur les lignes concernées :
|
|
```bash
|
|
sed -n 'X,Yp' ~/App/Sliding/python-pptx/render_engine.py
|
|
```
|
|
Ne jamais supposer que le fichier sur GrosseBertha correspond au fichier projet.
|
|
Le fichier sur GrosseBertha diverge souvent des fichiers de référence.
|
|
|
|
### 3. Feedback visuel — PNG uniquement
|
|
Demander un PNG de la slide concernée uniquement, pas le PDF complet.
|
|
Depuis PowerPoint : clic droit sur la slide → Enregistrer en image.
|
|
Évite la rasterisation de PDF multi-pages inutile.
|
|
|
|
### 4. Résultat terminal minimal
|
|
L'utilisateur ne colle que le résultat essentiel :
|
|
- Si OK : juste "OK" ou les lignes de confirmation
|
|
- Si erreur : uniquement le traceback (pas tout le terminal)
|
|
|
|
### 5. Nettoyage unicode avant patch
|
|
Le fichier render_engine.py contient des tirets unicode `─` dans les commentaires.
|
|
Toujours nettoyer en début de script de patch :
|
|
```python
|
|
import re
|
|
c = re.sub(r'[─]+', '-', c)
|
|
```
|
|
Sans ce nettoyage, les patterns de remplacement échouent.
|
|
|
|
### 6. Valider le fichier final, pas la variable intermédiaire
|
|
```python
|
|
# CORRECT
|
|
with open(SRC) as f:
|
|
final = f.read()
|
|
ast.parse(final)
|
|
|
|
# INCORRECT
|
|
ast.parse(content) # content peut etre une variable intermediaire corrompue
|
|
```
|
|
|
|
---
|
|
|
|
## Contrainte absolue — 1 seule ligne terminal
|
|
|
|
**Toutes les commandes terminal doivent être sur UNE SEULE LIGNE.**
|
|
|
|
```bash
|
|
# CORRECT
|
|
python3 -c "import os; print(os.getcwd())"
|
|
|
|
# INCORRECT
|
|
python3 -c "
|
|
import os
|
|
print(os.getcwd())
|
|
"
|
|
```
|
|
|
|
---
|
|
|
|
## Stratégie de modification de fichiers Python
|
|
|
|
### Méthode recommandée — Script Python de patch
|
|
|
|
Créer un script `.py` dédié téléchargé via l'app mobile Claude.ai.
|
|
|
|
```python
|
|
import ast, shutil, re
|
|
|
|
SRC = "render_engine.py"
|
|
BAK = SRC + ".bak"
|
|
shutil.copy2(SRC, BAK)
|
|
|
|
with open(SRC) as f:
|
|
c = f.read()
|
|
|
|
# Nettoyage tirets unicode (obligatoire)
|
|
c = re.sub(r'[─]+', '-', c)
|
|
|
|
OLD = """...texte exact apres nettoyage..."""
|
|
NEW = """...nouveau texte..."""
|
|
|
|
if OLD in c:
|
|
c = c.replace(OLD, NEW)
|
|
print("OK")
|
|
else:
|
|
print("ECHEC -- pattern non trouve")
|
|
|
|
with open(SRC, "w") as f:
|
|
f.write(c)
|
|
|
|
# Valider le fichier final (pas la variable)
|
|
with open(SRC) as f:
|
|
final = f.read()
|
|
try:
|
|
ast.parse(final)
|
|
print(f"SYNTAXE OK -- {len(final.splitlines())} lignes")
|
|
except SyntaxError as e:
|
|
print(f"SYNTAXE ERREUR : {e}")
|
|
shutil.copy2(BAK, SRC)
|
|
print("Backup restaure.")
|
|
```
|
|
|
|
### Méthode par numéros de ligne (si pattern texte fragile)
|
|
|
|
```python
|
|
import re
|
|
|
|
with open("render_engine.py") as f:
|
|
lines = f.readlines()
|
|
|
|
# Trouver par marqueur fiable
|
|
start = next(i for i, l in enumerate(lines) if "def ma_fonction(" in l)
|
|
end = next(i for i in range(start+1, len(lines)) if re.match(r'^ def ', lines[i]))
|
|
|
|
new_func = """ def ma_fonction(...):\n ...\n\n"""
|
|
lines = lines[:start] + [new_func] + lines[end:]
|
|
```
|
|
|
|
---
|
|
|
|
## Vérifications utiles
|
|
|
|
```bash
|
|
# Verifier qu'un patch est applique
|
|
grep -n "mot_cle_unique" render_engine.py
|
|
|
|
# Lire les lignes exactes avant de patcher
|
|
sed -n '360,380p' render_engine.py
|
|
|
|
# Compter les lignes
|
|
wc -l render_engine.py
|
|
|
|
# Lancer un rendu de test
|
|
source venv/bin/activate && python3 render_engine.py output/sliding_20260518_220833_input.yaml output/test.pptx
|
|
```
|
|
|
|
---
|
|
|
|
## Règles de sécurité — fichiers YAML
|
|
|
|
**Ne jamais écraser** `theme.yaml`, `layouts.yaml`, `components.yaml`.
|
|
Ces fichiers font 15 Ko, 45 Ko et plusieurs Ko.
|
|
Un LLM qui génère une version minimaliste casse tout le pipeline.
|
|
|
|
Si modification nécessaire :
|
|
1. `cp theme.yaml theme.yaml.bak`
|
|
2. Script Python ciblé sur la clé concernée uniquement
|
|
3. `ls -lh *.yaml` pour vérifier la taille après
|
|
|
|
En cas d'écrasement : originaux disponibles dans les outputs Claude.ai du projet.
|
|
|
|
---
|
|
|
|
## Téléchargement depuis Claude.ai
|
|
|
|
La webapp desktop échoue sur les fichiers > quelques Ko.
|
|
**Toujours utiliser l'app mobile Claude.ai** pour télécharger les scripts générés.
|
|
|
|
---
|
|
|
|
## Structure des dossiers
|
|
|
|
```
|
|
~/App/Sliding/python-pptx/
|
|
render_engine.py <- moteur rendu PPTX (2300+ lignes, diverge du fichier projet)
|
|
facilitator.py
|
|
prompt_injection.py
|
|
theme.yaml <- NE PAS ECRASER (15 Ko)
|
|
components.yaml <- NE PAS ECRASER
|
|
layouts.yaml <- NE PAS ECRASER (45 Ko)
|
|
assets/fonts/ <- Inter + Cormorant Garamond TTF
|
|
venv/
|
|
output/
|
|
|
|
~/App/Context_continuity/
|
|
trilium_context.py
|
|
|
|
/volume1/docker/trilium/ <- donnees Trilium (chown 1000:1000)
|
|
/volume1/web/sliding/ <- galerie layouts HTML
|
|
/volume1/scripts/ <- scripts utilitaires
|
|
```
|
|
|
|
## Activation du venv
|
|
|
|
```bash
|
|
source ~/App/Sliding/python-pptx/venv/bin/activate
|
|
```
|
|
|
|
---
|
|
|
|
## Outils disponibles sur GrosseBertha
|
|
|
|
| Outil | Dispo | Note |
|
|
|---|---|---|
|
|
| python3 | oui | v3.9 |
|
|
| pip | oui | avec --break-system-packages |
|
|
| docker | oui | Container Manager 24.0.2 |
|
|
| wget | oui | avertissement HSTS ignorable |
|
|
| unzip | non | utiliser python3 zipfile |
|
|
| fc-list | non | detecter polices via assets/fonts/ |
|
|
| setfacl | non | pas disponible |
|
|
| fc-cache | non | pas disponible |
|
|
| pdftoppm | oui | poppler-utils installe |
|
|
| pdftotext | oui | poppler-utils installe |
|
|
|
|
---
|
|
|
|
## Gestion Container Manager
|
|
|
|
```bash
|
|
# Si Docker en erreur apres update DSM
|
|
sudo synosetkeyvalue /etc/synoinfo.conf unique synology_rtd1296_ds220j
|
|
sudo synosetkeyvalue /etc.defaults/synoinfo.conf unique synology_rtd1296_ds220j
|
|
sudo synopkg start ContainerManager
|
|
|
|
# Trilium
|
|
sudo docker ps
|
|
sudo docker logs trilium
|
|
sudo docker restart trilium
|
|
```
|