# 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` - 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