MagicCode/packages/ext-claudecode/IMPLEMENTATION.md
2026-10-12 00:41:17 +02:00

252 lines
7.1 KiB
Markdown

# Implémentation du Lot 3
## Vue d'ensemble
Le lot 3 a été complètement implémenté avec trois outils avancés :
- **WebFetch** : récupération d'URLs HTTP/HTTPS
- **TodoWrite** : gestion simple des listes TODO
- **Task** : gestion hiérarchique des tâches avec priorités
## Fichiers créés
### Outils (`packages/ext-claudecode/src/tools/`)
1. **webfetch.ts** (4400 bytes)
- Récupère le contenu d'URLs
- Support GET/POST/PUT/DELETE/etc.
- En-têtes personnalisés
- Détection automatique du type de contenu (JSON, texte, binaire)
- Timeout configurable (30s par défaut)
- Limitation de la sortie (100 KB)
- Permission : "ask" (confirmation requise)
2. **todowrite.ts** (8477 bytes)
- Stockage JSON persistant
- Actions : add, list, done, undone, block, unblock, remove, update, export-markdown
- Statuts : todo, done, blocked
- Export en markdown
- Permission : "auto" (direct, sans confirmation)
3. **task.ts** (9830 bytes)
- Arborescence hiérarchique de tâches
- Statuts : todo, in-progress, done, blocked
- Priorités : low, normal, high, critical
- Assignations (utilisateurs)
- Actions : add, subtask, list, tree, status, assign, update, remove
- Calcul automatique du statut parent basé sur les enfants
- Permission : "auto"
### Tests (`packages/ext-claudecode/src/tools/lot3.test.ts`)
Tests complets pour les trois outils :
- **WebFetch** : 5 tests (GET simple, POST, erreurs URL, timeout)
- **TodoWrite** : 9 tests (CRUD complet, statuts, export markdown)
- **Task** : 9 tests (hiérarchies, assignations, arborescence)
- Total : 23 tests, tous passants
### Documentation
1. **LOT3.md** (5100 bytes)
- Documentation complète des trois outils
- Format JSON pour chaque action
- Exemples d'utilisation
- Affichage formaté avec symboles (✓, →, ⚠, ○)
2. **IMPLEMENTATION.md** (ce fichier)
- Résumé des changements
- Structure des données
- Différences entre les outils
## Fichiers modifiés
### `packages/ext-claudecode/src/tools/index.ts`
- Ajout des imports pour webfetch, todowrite, task
- Mise à jour du commentaire de status
- Exports dans claudeCodeTools
### `README.md`
- Nouvelle section "Extension ClaudeCode : outils (lot 1 + lot 3)"
- Listage des 9 outils disponibles
- Lien vers LOT3.md
- Mise à jour du "Reste à faire"
## Architecture et patterns
### Pattern de Tool (interface TypeScript)
```typescript
export interface Tool {
spec: {
name: string;
description: string;
inputSchema: { /* JSON Schema */ };
};
permission: "auto" | "ask";
describe?(input): string;
execute(input, ctx): Promise<string>;
}
```
### Utilisation de helpers
Les trois outils utilisent les helpers de `helpers.ts` :
- `str()` : extraction de paramètre string requis
- `optStr()` : paramètre string optionnel
- `optNum()` : paramètre number optionnel
- `optBool()` : paramètre boolean optionnel
- `resolvePath()` : résolution de chemin relatif/absolu
### Stockage persistent
- **TodoWrite** : JSON simple avec versioning et lastModified
- **Task** : JSON avec arborescence récursive (id unique par timestamp pour subtasks)
### Format d'affichage
Les trois outils retournent du texte formaté lisible :
```
✓ [1] Tâche complète
→ [2] Tâche en cours
⚠ [3] Tâche bloquée
○ [4] Tâche à faire
```
## Intégration avec MagicCode
### Mode ClaudeCode
Les trois outils sont automatiquement disponibles via l'outil `Tool` du LLM :
1. Le LLM voit la liste complète des 9 outils disponibles
2. Décision autonome d'utiliser WebFetch, TodoWrite ou Task
3. Confirmation requise pour WebFetch (permission "ask")
4. Pas de confirmation pour TodoWrite/Task (permission "auto")
### Flux d'utilisation
```
[Utilisateur] → Message
↓
[LLM] Décide d'utiliser WebFetch/TodoWrite/Task
↓
[UI] Demande confirmation (WebFetch uniquement)
↓
[Tool] Exécute l'action
↓
[LLM] Reçoit le résultat et continue
↓
[UI] Affiche la réponse finale
```
## Cas d'usage
### WebFetch
```
"Récupère les stars de ce repo"
→ LLM : WebFetch https://api.github.com/repos/...
→ Résultat : JSON avec les données
```
### TodoWrite
```
"Ajoute une tâche 'Implémenter lot 3' à .todos.json"
→ LLM : TodoWrite action=add title=... file=...
→ Résultat : "Tâche ajoutée [1]"
```
### Task
```
"Crée un projet avec 3 sous-tâches assignées à Alice"
→ LLM : Task action=add title=...
→ LLM : Task action=subtask parent=1 title=... assignee=alice
→ LLM : Task action=subtask parent=1 title=... assignee=alice
→ Résultat : Arborescence créée
```
## Différences entre TodoWrite et Task
| Aspect | TodoWrite | Task |
|--------|-----------|------|
| **Hiérarchie** | Aucune | Complète (parent/enfants) |
| **Priorités** | Aucune | 4 niveaux |
| **Assignations** | Aucune | Oui |
| **Statuts** | 3 (todo, done, blocked) | 4 (+ in-progress) |
| **Personne idéale** | Listes simples | Gestion de projets |
| **Complexité** | Basse | Moyenne |
## Tests et validation
```bash
# Exécuter les tests
pnpm test -- lot3
# Tests WebFetch
✓ devrait récupérer une URL valide (GET)
✓ devrait lever une erreur pour une URL invalide
✓ devrait lever une erreur pour une URL non accessible
✓ devrait supporter les requêtes POST
✓ should describe correctly
# Tests TodoWrite
✓ devrait ajouter une tâche
✓ devrait lister les tâches
✓ devrait marquer une tâche comme complète
✓ devrait bloquer une tâche
✓ devrait supprimer une tâche
✓ devrait exporter en markdown
✓ devrait mettre à jour une tâche
✓ should describe correctly
# Tests Task
✓ devrait créer une tâche
✓ devrait créer une sous-tâche
✓ devrait lister les tâches
✓ devrait afficher l'arborescence des tâches
✓ devrait mettre à jour le statut
✓ devrait assigner une tâche
✓ devrait supprimer une tâche
✓ should describe correctly
```
## Limitations actuelles
1. **WebFetch**
- Pas de support du streaming (pour gros fichiers)
- Pas de cache des réponses
- Pas de retry automatique
2. **TodoWrite**
- Pas de hiérarchie
- Pas de dépendances entre tâches
- Tags simples, sans recherche
3. **Task**
- Pas de détection de dépendances circulaires
- Pas de synchronisation avec services externes
## Reste à faire pour compléter lot 3+
- [ ] **WebFetch streaming** : support des gros fichiers
- [ ] **Task dépendances** : expliciter les relations
- [ ] **Hooks** : système de rappels (ex: on-status-change)
- [ ] **MCP** : Model Context Protocol integration
- [ ] **Sous-agents** : délégation de tâches
- [ ] **Synchronisation** : GitHub Issues, Jira, Trello
- [ ] **TodoWrite hiérarchie** : support parent/enfants
- [ ] **Cache** : persistance multi-sessions
## Performances
- **WebFetch** : timeout 30s, sortie max 100 KB
- **TodoWrite** : opérations O(n), pas de limitation
- **Task** : récursion jusqu'à profondeur ilimitée, O(n log n) pour tree
## Sécurité
- **WebFetch** : permission "ask" (confirmation avant chaque appel)
- **TodoWrite/Task** : permission "auto" (aucune confirmation)
- Chemins : résolus depuis cwd, ~ pour home
- Pas de risque d'injection (JSON Schema validation)