before gemiin
This commit is contained in:
68
skills/jardin-api-backend/SKILL.md
Normal file
68
skills/jardin-api-backend/SKILL.md
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
name: jardin-api-backend
|
||||
description: Ajouter ou mettre à jour des données dans le backend Jardin depuis OpenClaw/VM du réseau local via API HTTP (jardins, plantes, plantations, tâches, outils, astuces, médias, pièces jointes URL). Utiliser ce skill quand il faut produire des requêtes API prêtes à exécuter, définir l'ordre des appels avec dépendances d'ID, gérer l'upload de fichiers, et vérifier les endpoints de test backend.
|
||||
---
|
||||
|
||||
# Jardin API Backend
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
Utiliser ce skill pour construire des appels API backend fiables et directement exploitables dans OpenClaw.
|
||||
Lire `references/backend-api-recipes.md` pour les endpoints, payloads et séquences d'injection.
|
||||
|
||||
## Procédure standard
|
||||
|
||||
1. Identifier la base API cible (`http://<IP_HOTE>:8060` en LAN).
|
||||
2. Tester la connectivité (`GET /api/health`) avant toute écriture.
|
||||
3. Déterminer l'ordre des créations selon les dépendances d'ID:
|
||||
- jardin -> plante -> plantation -> tâche
|
||||
4. Générer les requêtes OpenClaw avec:
|
||||
- méthode
|
||||
- URL complète
|
||||
- headers
|
||||
- body JSON ou multipart
|
||||
- code HTTP attendu
|
||||
5. Stocker les IDs retournés et les réinjecter dans les appels suivants.
|
||||
6. Vérifier la lecture (`GET`) après création/mise à jour.
|
||||
|
||||
## Format de sortie attendu
|
||||
|
||||
Quand un utilisateur demande "comment injecter X", produire:
|
||||
|
||||
1. Une séquence d'appels ordonnée numériquement.
|
||||
2. Pour chaque appel:
|
||||
- `method`
|
||||
- `url`
|
||||
- `headers`
|
||||
- `json` ou `form-data`
|
||||
- `expected_status`
|
||||
- `output_mapping` (IDs/URLs à réutiliser)
|
||||
3. Un équivalent `curl` minimal.
|
||||
|
||||
## Contraintes et garde-fous
|
||||
|
||||
Respecter ces règles:
|
||||
|
||||
- Ne pas inventer d'authentification: l'API actuelle est sans token.
|
||||
- Utiliser `Content-Type: application/json` pour les endpoints JSON.
|
||||
- Utiliser `multipart/form-data` uniquement pour `POST /api/upload`.
|
||||
- Utiliser les dates au format `YYYY-MM-DD`.
|
||||
- Pour les mises à jour, envoyer un objet complet cohérent avec le modèle cible.
|
||||
- Pour les tâches, recommander `planting_id` même si techniquement optionnel.
|
||||
|
||||
## Points OpenClaw à rappeler
|
||||
|
||||
- Base API OpenClaw: `http://<IP_HOTE>:8060`
|
||||
- Test rapide: `/api/health`
|
||||
- Docs API: `/docs` et `/redoc`
|
||||
- Timeout recommandé: `15-30s`
|
||||
- Retry recommandé: `2-3` tentatives sur erreurs réseau
|
||||
|
||||
## Ressource à charger
|
||||
|
||||
Lire `references/backend-api-recipes.md` pour:
|
||||
- templates de payload
|
||||
- endpoints CRUD principaux
|
||||
- upload + association média
|
||||
- ajout de lien URL via `attachments`
|
||||
- séquences de création complètes
|
||||
4
skills/jardin-api-backend/agents/openai.yaml
Normal file
4
skills/jardin-api-backend/agents/openai.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Jardin API Backend"
|
||||
short_description: "Injecter des données Jardin via API backend"
|
||||
default_prompt: "Construis des appels API backend prêts pour OpenClaw (URL LAN, ordre des créations, payloads JSON/multipart, mapping des IDs, vérifications health/docs)."
|
||||
84
skills/jardin-api-backend/consigne.md
Normal file
84
skills/jardin-api-backend/consigne.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# Consigne d'installation du skill OpenClaw
|
||||
|
||||
Ce guide installe le skill `jardin-api-backend` pour l'utiliser dans OpenClaw.
|
||||
|
||||
## 1) Pré-requis
|
||||
|
||||
- Le backend Jardin est accessible en LAN, par exemple: `http://192.168.1.50:8060`
|
||||
- Le dossier du skill existe localement:
|
||||
- `skills/jardin-api-backend/`
|
||||
- Le skill contient:
|
||||
- `SKILL.md`
|
||||
- `agents/openai.yaml`
|
||||
- `references/backend-api-recipes.md`
|
||||
|
||||
## 2) Installation (machine locale)
|
||||
|
||||
Si OpenClaw lit les skills depuis un dossier local, copier le skill dans ce dossier.
|
||||
|
||||
Exemple (adapter le chemin cible):
|
||||
|
||||
```bash
|
||||
mkdir -p <OPENCLAW_SKILLS_DIR>
|
||||
cp -R skills/jardin-api-backend <OPENCLAW_SKILLS_DIR>/
|
||||
```
|
||||
|
||||
Exemple fréquent:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.codex/skills
|
||||
cp -R skills/jardin-api-backend ~/.codex/skills/
|
||||
```
|
||||
|
||||
## 3) Installation (OpenClaw en conteneur Docker)
|
||||
|
||||
Copier le dossier dans le conteneur OpenClaw (adapter nom conteneur et chemin):
|
||||
|
||||
```bash
|
||||
docker cp skills/jardin-api-backend <OPENCLAW_CONTAINER>:/app/skills/jardin-api-backend
|
||||
```
|
||||
|
||||
Puis redémarrer le service OpenClaw:
|
||||
|
||||
```bash
|
||||
docker restart <OPENCLAW_CONTAINER>
|
||||
```
|
||||
|
||||
## 4) Vérification
|
||||
|
||||
1. Ouvrir OpenClaw.
|
||||
2. Vérifier que le skill **Jardin API Backend** apparaît dans la liste des skills.
|
||||
3. Lancer un test avec une requête simple:
|
||||
- "Teste l'API backend et donne-moi les appels pour créer un jardin puis une plante."
|
||||
|
||||
Le skill doit proposer des appels API structurés avec:
|
||||
- URL complète (`http://<IP_HOTE>:8060/...`)
|
||||
- méthode HTTP
|
||||
- headers
|
||||
- payload JSON/multipart
|
||||
- mapping des IDs à réutiliser
|
||||
|
||||
## 5) Test API rapide recommandé
|
||||
|
||||
Depuis la VM/OpenClaw, valider d'abord la connectivité:
|
||||
|
||||
```bash
|
||||
curl http://<IP_HOTE>:8060/api/health
|
||||
```
|
||||
|
||||
Réponse attendue:
|
||||
|
||||
```json
|
||||
{"status":"ok"}
|
||||
```
|
||||
|
||||
## 6) Dépannage rapide
|
||||
|
||||
- Skill non visible:
|
||||
- vérifier la présence de `SKILL.md` et `agents/openai.yaml`
|
||||
- vérifier le chemin de scan des skills OpenClaw
|
||||
- redémarrer OpenClaw
|
||||
- Erreur API:
|
||||
- vérifier IP/port backend (`8060`)
|
||||
- vérifier le pare-feu LAN
|
||||
- vérifier CORS seulement si appel depuis navigateur (pas nécessaire en serveur-à-serveur)
|
||||
225
skills/jardin-api-backend/references/backend-api-recipes.md
Normal file
225
skills/jardin-api-backend/references/backend-api-recipes.md
Normal file
@@ -0,0 +1,225 @@
|
||||
# Backend API Recipes (OpenClaw)
|
||||
|
||||
## 1) Base URL et tests
|
||||
|
||||
- Base LAN backend: `http://<IP_HOTE>:8060`
|
||||
- Santé: `GET /api/health`
|
||||
- Swagger: `GET /docs`
|
||||
- ReDoc: `GET /redoc`
|
||||
|
||||
Exemple:
|
||||
|
||||
```bash
|
||||
curl http://192.168.1.50:8060/api/health
|
||||
```
|
||||
|
||||
Réponse attendue:
|
||||
|
||||
```json
|
||||
{"status":"ok"}
|
||||
```
|
||||
|
||||
## 2) Règles HTTP à appliquer dans OpenClaw
|
||||
|
||||
- JSON: header `Content-Type: application/json`
|
||||
- Upload fichier: `multipart/form-data` sur `POST /api/upload`
|
||||
- Timeout conseillé: `15-30s`
|
||||
- Retry réseau conseillé: `2-3`
|
||||
- API sans authentification actuellement (LAN uniquement)
|
||||
|
||||
## 3) Séquence d'ajout recommandée (dépendances)
|
||||
|
||||
1. Créer jardin (`/api/gardens`) -> récupérer `garden_id`
|
||||
2. Créer plante (`/api/plants`) -> récupérer `plant_id`
|
||||
3. Créer plantation (`/api/plantings`) avec `garden_id` + `variety_id=plant_id` -> récupérer `planting_id`
|
||||
4. Créer tâche (`/api/tasks`) avec `planting_id`
|
||||
|
||||
## 4) Endpoints création (payload minimal)
|
||||
|
||||
### 4.1 Jardin
|
||||
|
||||
`POST /api/gardens`
|
||||
|
||||
```json
|
||||
{
|
||||
"nom": "serre",
|
||||
"type": "serre"
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 Plante
|
||||
|
||||
`POST /api/plants`
|
||||
|
||||
```json
|
||||
{
|
||||
"nom_commun": "Tomate",
|
||||
"variete": "Andine Cornue",
|
||||
"categorie": "potager"
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 Plantation
|
||||
|
||||
`POST /api/plantings`
|
||||
|
||||
```json
|
||||
{
|
||||
"garden_id": 1,
|
||||
"variety_id": 12,
|
||||
"quantite": 6,
|
||||
"date_plantation": "2026-05-01",
|
||||
"statut": "en_cours"
|
||||
}
|
||||
```
|
||||
|
||||
### 4.4 Tâche
|
||||
|
||||
`POST /api/tasks`
|
||||
|
||||
```json
|
||||
{
|
||||
"titre": "Arroser tomates serre",
|
||||
"description": "Arrosage du matin",
|
||||
"planting_id": 8,
|
||||
"priorite": "normale",
|
||||
"echeance": "2026-05-02",
|
||||
"statut": "a_faire"
|
||||
}
|
||||
```
|
||||
|
||||
### 4.5 Outil
|
||||
|
||||
`POST /api/tools`
|
||||
|
||||
```json
|
||||
{
|
||||
"nom": "Bêche",
|
||||
"categorie": "beche",
|
||||
"notice_texte": "Nettoyer la lame après usage."
|
||||
}
|
||||
```
|
||||
|
||||
### 4.6 Astuce
|
||||
|
||||
`POST /api/astuces`
|
||||
|
||||
```json
|
||||
{
|
||||
"titre": "Paillage tomate",
|
||||
"contenu": "Appliquer 5 cm de paillage après arrosage.",
|
||||
"categorie": "plante",
|
||||
"tags": "[\"tomate\",\"paillage\"]",
|
||||
"mois": "[4,5,6]"
|
||||
}
|
||||
```
|
||||
|
||||
## 5) Mise à jour (PUT/PATCH)
|
||||
|
||||
### 5.1 Mise à jour standard (PUT)
|
||||
|
||||
Endpoints:
|
||||
- `PUT /api/gardens/{id}`
|
||||
- `PUT /api/plants/{id}`
|
||||
- `PUT /api/plantings/{id}`
|
||||
- `PUT /api/tasks/{id}`
|
||||
- `PUT /api/tools/{id}`
|
||||
- `PUT /api/astuces/{id}`
|
||||
|
||||
Envoyer un objet complet cohérent (champs requis inclus).
|
||||
|
||||
### 5.2 Statut tâche rapide
|
||||
|
||||
`PUT /api/tasks/{id}/statut?statut=en_cours`
|
||||
|
||||
## 6) Upload image/vidéo + association
|
||||
|
||||
### 6.1 Upload binaire
|
||||
|
||||
`POST /api/upload` (multipart `file`)
|
||||
|
||||
Réponse type:
|
||||
|
||||
```json
|
||||
{
|
||||
"url": "/uploads/abc.webp",
|
||||
"thumbnail_url": "/uploads/def.webp"
|
||||
}
|
||||
```
|
||||
|
||||
### 6.2 Attacher à une entité (bibliothèque média)
|
||||
|
||||
`POST /api/media`
|
||||
|
||||
```json
|
||||
{
|
||||
"entity_type": "plante",
|
||||
"entity_id": 12,
|
||||
"url": "/uploads/abc.webp",
|
||||
"thumbnail_url": "/uploads/def.webp",
|
||||
"titre": "Tomate serre mai 2026"
|
||||
}
|
||||
```
|
||||
|
||||
`entity_type` autorisés:
|
||||
- `jardin`
|
||||
- `plante`
|
||||
- `adventice`
|
||||
- `outil`
|
||||
- `plantation`
|
||||
- `bibliotheque`
|
||||
|
||||
## 7) Ajouter des liens URL (utile pour notices/sources)
|
||||
|
||||
Utiliser la table `attachments` via API.
|
||||
|
||||
### 7.1 Créer une pièce jointe URL
|
||||
|
||||
`POST /api/attachments`
|
||||
|
||||
```json
|
||||
{
|
||||
"entity_type": "plante",
|
||||
"entity_id": 12,
|
||||
"type": "url",
|
||||
"titre": "Fiche technique tomate",
|
||||
"contenu": "https://example.org/fiche-tomate"
|
||||
}
|
||||
```
|
||||
|
||||
### 7.2 Lire les liens d'une entité
|
||||
|
||||
`GET /api/attachments?entity_type=plante&entity_id=12`
|
||||
|
||||
## 8) Gabarit OpenClaw (HTTP action)
|
||||
|
||||
Utiliser ce format logique dans les étapes OpenClaw:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "create_plant",
|
||||
"method": "POST",
|
||||
"url": "http://192.168.1.50:8060/api/plants",
|
||||
"headers": {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
"json": {
|
||||
"nom_commun": "Tomate",
|
||||
"categorie": "potager"
|
||||
},
|
||||
"expected_status": 201,
|
||||
"map_output": {
|
||||
"plant_id": "$.id"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 9) Erreurs fréquentes
|
||||
|
||||
- `422 Unprocessable Entity`: payload incomplet ou type invalide.
|
||||
- `404`: ID référencé introuvable.
|
||||
- `400` sur upload: mauvais `content-type`.
|
||||
- Réseau/CORS:
|
||||
- serveur-à-serveur OpenClaw -> CORS non nécessaire
|
||||
- navigateur -> configurer `CORS_ORIGINS` côté backend
|
||||
|
||||
Reference in New Issue
Block a user