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

158 lines
3.4 KiB
Markdown

# Commande Shell `!` dans MagicCode
## Vue d'ensemble
MagicCode permet d'exécuter des commandes shell directement dans vos prompts ou commandes personnalisées en utilisant la syntaxe `!`.
## Syntaxe
### Commande simple
```
!commande
```
Exécute `commande` et remplace `!commande` par sa sortie.
**Exemple :**
```
Voici mon utilisateur : !whoami
```
Devient (après expansion) :
```
Voici mon utilisateur : arnaud
```
### Commande avec espaces (backticks)
```
!`commande avec arguments`
```
Pour les commandes contenant des espaces ou des arguments, utilisez des backticks.
**Exemple :**
```
Liste des fichiers TypeScript : !`ls -la *.ts`
```
## Utilisation
### 1. Dans les prompts directs
Tapez directement dans l'interface MagicCode :
```
Analyse le contenu du dossier actuel : !`ls -la`
```
MagicCode exécute la commande, affiche le résultat, puis envoie le prompt expansé au LLM.
### 2. Dans les commandes personnalisées (`.claude/commands/`)
Créez un fichier `.claude/commands/status.md` :
```markdown
---
description: Affiche le statut du projet
---
État actuel du dépôt Git :
!`git status --short`
Derniers commits :
!`git log --oneline -5`
```
Puis utilisez `/status` dans MagicCode. Les commandes shell seront exécutées et leurs résultats inclus dans le prompt envoyé au LLM.
### 3. Combinaison avec des arguments
Dans `.claude/commands/branch-info.md` :
```markdown
---
description: Info sur une branche Git
argument-hint: <nom-branche>
---
Informations sur la branche $1 :
!`git log $1 --oneline -10`
```
Utilisez `/branch-info main` pour obtenir les informations sur la branche `main`.
## Gestion des erreurs
Si une commande échoue, elle est remplacée par `[ERREUR: message d'erreur]` dans le prompt, et MagicCode affiche un avertissement.
**Exemple :**
```
!`commande_inexistante`
```
Devient :
```
[ERREUR: Échec de la commande shell: ...]
```
## Permissions et sécurité
- Les commandes shell respectent les permissions définies dans `.claude/settings.json`
- Les variables d'environnement de `settings.json` sont transmises
- Le dossier de travail est celui du lancement de MagicCode
- Timeout de 30 secondes par commande
- Buffer de sortie limité à 10 MB
## Variables d'environnement
Les commandes shell ont accès aux variables définies dans `.claude/settings.json` :
```json
{
"env": {
"PROJECT_NAME": "mon-projet",
"API_KEY": "..."
}
}
```
Puis utilisez :
```
!`echo "Projet: $PROJECT_NAME"`
```
## Exemples pratiques
### Analyse de performance
```
Analyse les fichiers les plus volumineux :
!`du -sh * | sort -hr | head -10`
```
### État des dépendances
```
Vérifie les dépendances obsolètes :
!`npm outdated`
```
### Tests
```
Lance les tests et analyse les résultats :
!`npm test 2>&1`
```
### Information système
```
CPU et mémoire :
!`top -bn1 | grep "Cpu(s)" | head -1`
```
## Limitations
- Les commandes sont exécutées dans un shell système, pas dans un environnement isolé
- Pas de support pour les commandes interactives
- Les redirections (`>`, `>>`) et substitutions (`` `...` ``, `$(...)`) sont autorisées mais à vos risques
- Les commandes composées (`&&`, `;`, `|`) sont supportées
## Notes techniques
- Implémentation : `packages/ext-claudecode/src/shell-commands.ts`
- Regex de détection : `/!((?:`[^`]+`)|(?:[^\s]+))/g`
- Exécution via `child_process.exec`
- Les commandes multiples sont exécutées en parallèle pour plus de performance