289 lines
6 KiB
Markdown
289 lines
6 KiB
Markdown
|
|
# Lot 3 : WebFetch, TodoWrite et Task
|
||
|
|
|
||
|
|
Implémentation complète du lot 3 avec trois outils : gestion des requêtes HTTP, gestion simple des listes TODO, et gestion hiérarchique des tâches avec priorités et assignations.
|
||
|
|
|
||
|
|
## WebFetch
|
||
|
|
|
||
|
|
Récupère le contenu d'une URL via HTTP/HTTPS. Retourne le statut, les en-têtes et le corps de la réponse.
|
||
|
|
|
||
|
|
### Utilisation
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
{
|
||
|
|
"url": "https://api.example.com/data",
|
||
|
|
"method": "GET", // optionnel : GET, POST, PUT, DELETE, etc.
|
||
|
|
"headers": {...}, // optionnel : en-têtes personnalisés
|
||
|
|
"body": "...", // optionnel : corps pour POST/PUT
|
||
|
|
"timeout": 30000 // optionnel : timeout en ms (30s par défaut)
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Exemples
|
||
|
|
|
||
|
|
#### GET simple
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"url": "https://github.com"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### POST JSON
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"url": "https://api.example.com/submit",
|
||
|
|
"method": "POST",
|
||
|
|
"headers": {
|
||
|
|
"Authorization": "Bearer token123"
|
||
|
|
},
|
||
|
|
"body": "{\"name\": \"Alice\", \"age\": 30}"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Comportement
|
||
|
|
|
||
|
|
- **Réponse JSON** : formatée avec indentation
|
||
|
|
- **Réponse texte/XML** : retournée directe
|
||
|
|
- **Contenu binaire** : résumé avec taille
|
||
|
|
- **Timeout** : par défaut 30 secondes
|
||
|
|
- **Troncature** : sortie limitée à 100 KB
|
||
|
|
|
||
|
|
### Permissions
|
||
|
|
|
||
|
|
- **"ask"** : confirmation requise avant chaque appel (sécurité)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## TodoWrite
|
||
|
|
|
||
|
|
Gère une liste TODO persistante au format JSON avec exportation markdown.
|
||
|
|
|
||
|
|
### Actions
|
||
|
|
|
||
|
|
| Action | Description |
|
||
|
|
|--------|-------------|
|
||
|
|
| `add` | Ajoute une nouvelle tâche |
|
||
|
|
| `list` | Affiche toutes les tâches groupées par statut |
|
||
|
|
| `done` | Marque une tâche comme complète |
|
||
|
|
| `undone` | Remet une tâche à "À faire" |
|
||
|
|
| `block` | Marque une tâche comme bloquée |
|
||
|
|
| `unblock` | Débloque une tâche |
|
||
|
|
| `remove` | Supprime une tâche |
|
||
|
|
| `update` | Modifie une tâche existante |
|
||
|
|
| `export-markdown` | Exporte en fichier markdown |
|
||
|
|
|
||
|
|
### Structure
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"version": 1,
|
||
|
|
"items": [
|
||
|
|
{
|
||
|
|
"id": "1",
|
||
|
|
"status": "todo", // "todo" | "done" | "blocked"
|
||
|
|
"title": "Ma tâche",
|
||
|
|
"description": "...", // optionnel
|
||
|
|
"tags": ["urgent"], // optionnel
|
||
|
|
"createdAt": "2024-...",
|
||
|
|
"dueAt": "2024-..." // optionnel
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"lastModified": "2024-..."
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Exemples
|
||
|
|
|
||
|
|
#### Ajouter une tâche simple
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"file": ".todos.json",
|
||
|
|
"action": "add",
|
||
|
|
"title": "Implement WebFetch",
|
||
|
|
"tags": ["feature", "http"]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Lister les tâches
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"file": ".todos.json",
|
||
|
|
"action": "list"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Task
|
||
|
|
|
||
|
|
Gère une arborescence hiérarchique de tâches avec priorités, assignations et statuts avancés.
|
||
|
|
|
||
|
|
### Actions
|
||
|
|
|
||
|
|
| Action | Description |
|
||
|
|
|--------|-------------|
|
||
|
|
| `add` | Crée une tâche principale |
|
||
|
|
| `subtask` | Crée une sous-tâche (requiert parent) |
|
||
|
|
| `list` | Affiche les tâches principales |
|
||
|
|
| `tree` | Affiche l'arborescence complète |
|
||
|
|
| `status` | Change le statut (todo, in-progress, done, blocked) |
|
||
|
|
| `assign` | Assigne une tâche à une personne |
|
||
|
|
| `update` | Modifie les détails d'une tâche |
|
||
|
|
| `remove` | Supprime une tâche |
|
||
|
|
|
||
|
|
### Statuts
|
||
|
|
|
||
|
|
- **todo** : À faire
|
||
|
|
- **in-progress** : En cours
|
||
|
|
- **done** : Complétée
|
||
|
|
- **blocked** : Bloquée
|
||
|
|
|
||
|
|
### Priorités
|
||
|
|
|
||
|
|
- **low** : Basse
|
||
|
|
- **normal** : Normal
|
||
|
|
- **high** : Haute
|
||
|
|
- **critical** : Critique
|
||
|
|
|
||
|
|
### Structure
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"version": 1,
|
||
|
|
"tasks": [
|
||
|
|
{
|
||
|
|
"id": "1",
|
||
|
|
"title": "Projet principal",
|
||
|
|
"status": "todo",
|
||
|
|
"priority": "high",
|
||
|
|
"description": "Description optionnelle",
|
||
|
|
"assignee": "alice",
|
||
|
|
"dueAt": "2024-12-31T23:59:59Z",
|
||
|
|
"tags": ["backend", "urgent"],
|
||
|
|
"createdAt": "2024-...",
|
||
|
|
"updatedAt": "2024-...",
|
||
|
|
"subtasks": [
|
||
|
|
{
|
||
|
|
"id": "1-1",
|
||
|
|
"title": "Étape 1",
|
||
|
|
"status": "in-progress",
|
||
|
|
"priority": "high",
|
||
|
|
"parent": "1"
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"lastModified": "2024-..."
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Exemples
|
||
|
|
|
||
|
|
#### Créer une tâche avec priorité
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"file": "tasks.json",
|
||
|
|
"action": "add",
|
||
|
|
"title": "Implémenter WebFetch",
|
||
|
|
"priority": "high",
|
||
|
|
"assignee": "alice",
|
||
|
|
"dueAt": "2024-12-15T17:00:00Z"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Créer une sous-tâche
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"file": "tasks.json",
|
||
|
|
"action": "subtask",
|
||
|
|
"parent": "1",
|
||
|
|
"title": "Configurer authentification",
|
||
|
|
"priority": "high"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Voir l'arborescence
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"file": "tasks.json",
|
||
|
|
"action": "tree"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
Résultat :
|
||
|
|
```
|
||
|
|
○ [1] Implémenter WebFetch [HIGH] (@alice)
|
||
|
|
├─ → [1-1] Configurer authentification [HIGH]
|
||
|
|
├─ ○ [1-2] Tester API externe [NORMAL]
|
||
|
|
└─ ✓ [1-3] Documentation [LOW]
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Changer le statut
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"file": "tasks.json",
|
||
|
|
"action": "status",
|
||
|
|
"id": "1",
|
||
|
|
"status": "in-progress"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Assigner à quelqu'un
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"file": "tasks.json",
|
||
|
|
"action": "assign",
|
||
|
|
"id": "1",
|
||
|
|
"assignee": "bob"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Intégration avec le LLM
|
||
|
|
|
||
|
|
Les trois outils sont automatiquement disponibles dans le mode ClaudeCode et peuvent être utilisés par le LLM pour :
|
||
|
|
|
||
|
|
### WebFetch
|
||
|
|
- Récupérer des API externes
|
||
|
|
- Valider des URLs
|
||
|
|
- Tester des endpoints API
|
||
|
|
- Scraper des données publiques
|
||
|
|
|
||
|
|
### TodoWrite
|
||
|
|
- Créer des listes TODO simples
|
||
|
|
- Tracker des tâches de projet
|
||
|
|
- Exporter le backlog en markdown
|
||
|
|
|
||
|
|
### Task
|
||
|
|
- Gérer des projets complexes avec hiérarchies
|
||
|
|
- Assigner du travail à des équipes
|
||
|
|
- Tracker les dépendances par la structure arborescente
|
||
|
|
- Gérer les priorités et blocages
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Tests
|
||
|
|
|
||
|
|
Exécutez les tests avec :
|
||
|
|
```bash
|
||
|
|
pnpm test -- lot3
|
||
|
|
```
|
||
|
|
|
||
|
|
Les tests couvrent :
|
||
|
|
- ✅ WebFetch : GET/POST, gestion d'erreurs, types de contenu
|
||
|
|
- ✅ TodoWrite : CRUD complet, statuts, export markdown
|
||
|
|
- ✅ Task : hiérarchies, assignations, arborescence
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Reste à faire
|
||
|
|
|
||
|
|
- [ ] **WebFetch streaming** : support des gros fichiers
|
||
|
|
- [ ] **Task dépendances** : relations parent-enfant avancées
|
||
|
|
- [ ] **Task dépendances circulaires** : détection et avertissements
|
||
|
|
- [ ] **Hooks** : système de rappels sur les transitions de tâches
|
||
|
|
- [ ] **MCP** : intégration du Model Context Protocol
|
||
|
|
- [ ] **Sous-agents** : délégation de tâches à des sous-agents
|
||
|
|
- [ ] **Synchronisation externe** : GitHub Issues, Jira, Trello
|
||
|
|
|