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

3.6 KiB

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 :

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