MagicCode/CHANGELOG_SHELL_COMMANDS.md
2026-10-12 00:41:17 +02:00

107 lines
3.6 KiB
Markdown

# Changelog - Commande Shell `!`
## Version actuelle
### Nouvelle fonctionnalité : Commande Shell `!`
**Date** : Décembre 2024
#### Description
Implémentation de la commande `!` permettant d'exécuter des commandes shell directement dans les prompts et les commandes markdown personnalisées.
#### Syntaxe
- **Commande simple** : `!commande` - exécute la commande et remplace par sa sortie
- **Commande avec arguments** : `!`commande avec args`` - utilise des backticks pour les espaces
#### Fonctionnalités
1. **Exécution inline dans les prompts**
- L'utilisateur peut taper : `Analyse le projet : !`git status``
- MagicCode exécute la commande et envoie le résultat au LLM
2. **Support dans les commandes markdown**
- Les fichiers `.claude/commands/**/*.md` peuvent contenir des commandes `!`
- Expansion automatique avec les arguments `$1`, `$2`, etc.
3. **Gestion intelligente**
- Exécution parallèle de multiples commandes pour performance
- Timeout de 30 secondes par commande
- Buffer de sortie limité à 10 MB
- Gestion des erreurs avec messages clairs
4. **Intégration avec les permissions**
- Respect des variables d'environnement de `.claude/settings.json`
- Exécution dans le dossier de travail configuré
#### Fichiers modifiés/créés
- ✨ **Nouveau** : `packages/ext-claudecode/src/shell-commands.ts` - Logique d'exécution
- ✨ **Nouveau** : `packages/ext-claudecode/src/shell-commands.test.ts` - Tests unitaires (11 tests)
- ✨ **Nouveau** : `packages/ext-claudecode/SHELL_COMMANDS.md` - Documentation détaillée
- ✨ **Nouveau** : `.claude/commands/sysinfo.md` - Exemple de commande
- 🔧 **Modifié** : `packages/cli/src/index.ts` - Intégration dans la boucle principale
- 🔧 **Modifié** : `packages/ext-claudecode/src/commands.ts` - Support asynchrone
- 🔧 **Modifié** : `packages/ext-claudecode/src/mode.ts` - Passage des options
- 🔧 **Modifié** : `packages/ext-claudecode/src/index.ts` - Export des fonctions
- 🔧 **Modifié** : `packages/core/src/types.ts` - SlashCommand async
- 🔧 **Modifié** : `README.md` - Documentation principale
#### Tests
- ✅ 11 tests unitaires pour `shell-commands`
- ✅ Tests d'intégration dans `lot2.test.ts` mis à jour
- ✅ Tous les tests passent (84/84)
- ✅ TypeCheck OK sur tous les packages
#### Exemple d'utilisation
**Dans un prompt direct** :
```
Utilisateur actuel : !whoami
Liste des fichiers : !`ls -la`
```
**Dans `.claude/commands/status.md`** :
```markdown
---
description: État du projet
---
## Git
!`git status --short`
## Derniers commits
!`git log --oneline -5`
```
Puis utiliser `/status` dans MagicCode.
#### Impact sur l'API
- ⚠️ **Breaking change mineur** : `SlashCommand.prompt()` retourne maintenant `string | Promise<string>`
- Rétrocompatible : les commandes synchrones fonctionnent toujours
- Les appels doivent maintenant être `await`és
#### Notes techniques
- Utilise `child_process.exec` pour l'exécution
- Regex de détection : `/!((?:`[^`]+`)|(?:[^\s]+))/g`
- Expansion de la fin vers le début pour éviter les décalages d'indices
- Protection TypeScript stricte avec vérifications nullables
#### Documentation
- Guide utilisateur complet dans `SHELL_COMMANDS.md`
- README mis à jour avec section dédiée
- Aide CLI mise à jour (`--help`)
- Commentaires de code détaillés
#### Prochaines étapes possibles
- [ ] Support des permissions plus fines pour les commandes `!`
- [ ] Sandbox optionnel avec restrictions
- [ ] Cache des résultats pour commandes identiques
- [ ] Support du streaming pour les commandes longues
- [ ] Interface de confirmation configurable