{
  "cli": {
    "name": "Ruch CLI",
    "description": "Outil révolutionnaire pour créer des applications React TypeScript avec une architecture hexagonale",
    "version": "1.0.0"
  },
  "apercu": {
    "titre": "Ruch CLI - Outil de développement React révolutionnaire",
    "description": "Outil en ligne de commande pour créer des applications React TypeScript avec architecture hexagonale",
    "fonctionnalites": [
      "🏗️ Architecture propre",
      "🤖 Développement assisté par IA",
      "🧪 Tests complets",
      "📦 Design orienté domaine"
    ],
    "principes": [
      "Isolation de la logique métier - TOUTE la logique métier DOIT être dans les domaines",
      "Pas d'import direct de services - Toujours utiliser les hooks de domaine",
      "Communication inter-domaines - Uniquement via ports/adapters",
      "Tests co-localisés - Tests à côté de l'implémentation"
    ],
    "demarrage": {
      "commandes": [
        "npx ruch create user",
        "npx ruch context generate",
        "npx ruch guide-ai"
      ],
      "benefices": [
        "Structure de domaine complète avec entités, ports, services",
        "Hooks React Query pour la récupération de données",
        "Handlers MSW pour les tests",
        "Documentation prête pour l'IA",
        "Contexte de service avec injection de dépendance"
      ]
    }
  },
  "installation": {
    "demarrage": "npx ruch create user",
    "installationGlobale": [
      {
        "nom": "Avec Bun (Recommandé)",
        "commande": "bun install -g ruch"
      },
      {
        "nom": "Avec npm",
        "commande": "npm install -g ruch"
      },
      {
        "nom": "Avec yarn",
        "commande": "yarn global add ruch"
      },
      {
        "nom": "Avec pnpm",
        "commande": "pnpm install -g ruch"
      }
    ],
    "prerequis": [
      "Node.js: 18.0 ou plus",
      "Gestionnaire de paquets: Bun (recommandé), npm, yarn, ou pnpm",
      "Système d'exploitation: Windows, macOS, ou Linux"
    ]
  },
  "commandes": {
    "domaine": {
      "create": {
        "syntaxe": "npx ruch create <nom-domaine>",
        "description": "Créer un nouveau domaine avec structure hexagonale",
        "genere": [
          "src/domains/{domaine}/entities/",
          "src/domains/{domaine}/ports/",
          "src/domains/{domaine}/services/",
          "src/domains/{domaine}/adapters/",
          "src/domains/{domaine}/hooks/",
          "src/domains/{domaine}/ui/"
        ],
        "exemple": "npx ruch create user"
      },
      "list": {
        "syntaxe": "npx ruch list",
        "description": "Lister tous les domaines existants",
        "alias": "npx ruch ls"
      },
      "delete": {
        "syntaxe": "npx ruch delete <nom-domaine>",
        "description": "Supprimer un domaine existant",
        "options": ["--force"],
        "exemple": "npx ruch delete user --force"
      }
    },
    "contexte": {
      "init": {
        "syntaxe": "npx ruch context init",
        "description": "Initialiser un contexte de service vide"
      },
      "generate": {
        "syntaxe": "npx ruch context generate",
        "description": "Générer le contexte de service complet avec tous les domaines",
        "cree": "src/context/ServiceContext.tsx"
      },
      "update": {
        "syntaxe": "npx ruch context update",
        "description": "Mettre à jour le contexte avec les domaines manquants"
      }
    },
    "msw": {
      "init": {
        "syntaxe": "npx ruch msw init",
        "description": "Initialiser la configuration MSW",
        "cree": [
          "src/mocks/browser.ts",
          "src/mocks/server.ts",
          "src/setupTests.ts",
          "public/mockServiceWorker.js"
        ]
      },
      "handlers": {
        "syntaxe": "npx ruch msw handlers",
        "description": "Générer les handlers MSW pour tous les domaines",
        "cree": "src/mocks/handlers/"
      },
      "mocks": {
        "syntaxe": "npx ruch msw mocks",
        "description": "Générer les templates de données factices",
        "cree": ["src/mocks/data/", "src/mocks/factories/"]
      },
      "update": {
        "syntaxe": "npx ruch msw update",
        "description": "Mettre à jour la configuration MSW pour les nouveaux domaines"
      }
    },
    "ia": {
      "guide-ai": {
        "syntaxe": "npx ruch guide-ai [--tools outil1,outil2]",
        "description": "Générer la documentation IA (FONCTIONNALITÉ PHARE)",
        "phare": true,
        "outils": ["cursor", "copilot", "windsurf", "juni"],
        "cree": [
          "ruch-guide.json",
          "GUIDE.md",
          ".cursorrules",
          ".windsurfrules",
          ".juni/config.json"
        ],
        "exemples": [
          "npx ruch guide-ai",
          "npx ruch guide-ai --tools cursor",
          "npx ruch guide-ai --tools cursor,copilot,windsurf,juni"
        ]
      }
    },
    "utils": {
      "visualize": {
        "syntaxe": "npx ruch visualize [--format format]",
        "description": "Visualisation interactive des dépendances",
        "formats": ["interactive", "console", "json"]
      },
      "http-client": {
        "syntaxe": "npx ruch http-client",
        "description": "Générer la configuration du client HTTP"
      }
    }
  },
  "couchesArchitecture": {
    "entites": {
      "emoji": "🏛️",
      "titre": "Entités (Cœur)",
      "description": "Modèles métier et structures de données",
      "emplacement": "src/domains/{domaine}/entities/",
      "responsabilites": [
        "Définir les structures de données métier",
        "Contenir les types spécifiques au domaine",
        "Inclure les règles de validation de base",
        "Aucune dépendance vers d'autres couches"
      ]
    },
    "services": {
      "emoji": "⚙️",
      "titre": "Services (Cœur)",
      "description": "Logique métier pure",
      "emplacement": "src/domains/{domaine}/services/",
      "responsabilites": [
        "Implémenter la logique métier",
        "Orchestrer les opérations du domaine",
        "Contenir la validation et les règles métier",
        "Dépendre uniquement des entités et ports"
      ]
    },
    "ports": {
      "emoji": "🔌",
      "titre": "Ports (Abstraction)",
      "description": "Interfaces d'abstraction",
      "emplacement": "src/domains/{domaine}/ports/",
      "responsabilites": [
        "Définir les contrats pour les dépendances externes",
        "Permettre l'inversion de dépendance",
        "Autoriser les tests faciles avec des mocks",
        "Aucun détail d'implémentation"
      ]
    },
    "adapters": {
      "emoji": "🔧",
      "titre": "Adapters (Implémentation)",
      "description": "Implémentations concrètes",
      "emplacement": "src/domains/{domaine}/adapters/",
      "responsabilites": [
        "Implémenter les interfaces des ports",
        "Gérer les appels API externes",
        "Transformer les données externes en modèles de domaine",
        "Dépendre des ports et entités"
      ]
    },
    "hooks": {
      "emoji": "⚛️",
      "titre": "Hooks (Intégration React)",
      "description": "Intégration React Query",
      "emplacement": "src/domains/{domaine}/hooks/",
      "responsabilites": [
        "Faire le pont entre React et les services de domaine",
        "Intégrer avec React Query pour la mise en cache",
        "Gérer les états de chargement/erreur",
        "Dépendre des services et adapters"
      ]
    },
    "ui": {
      "emoji": "🎨",
      "titre": "UI (Composants React)",
      "description": "Couche de présentation",
      "emplacement": "src/domains/{domaine}/ui/",
      "responsabilites": [
        "Présenter les données aux utilisateurs",
        "Gérer les interactions utilisateur",
        "Utiliser uniquement les hooks de domaine, jamais les services directement",
        "Se concentrer purement sur la logique de présentation"
      ]
    }
  },
  "workflowsTypes": {
    "nouveauProjet": {
      "titre": "🚀 Configuration complète de projet",
      "etapes": [
        {
          "etape": 1,
          "commande": "npx ruch create user",
          "description": "Créer le domaine utilisateur"
        },
        {
          "etape": 2,
          "commande": "npx ruch create product",
          "description": "Créer le domaine produit"
        },
        {
          "etape": 3,
          "commande": "npx ruch context generate",
          "description": "Générer le contexte de service"
        },
        {
          "etape": 4,
          "commande": "npx ruch msw init",
          "description": "Initialiser MSW"
        },
        {
          "etape": 5,
          "commande": "npx ruch msw handlers",
          "description": "Générer les handlers"
        },
        {
          "etape": 6,
          "commande": "npx ruch guide-ai",
          "description": "Activer le développement IA (PHARE)"
        }
      ]
    },
    "ajouterDomaine": {
      "titre": "🔄 Développement incrémental",
      "etapes": [
        {
          "etape": 1,
          "commande": "npx ruch create payment",
          "description": "Ajouter un nouveau domaine"
        },
        {
          "etape": 2,
          "commande": "npx ruch context update",
          "description": "Mettre à jour les configurations"
        },
        {
          "etape": 3,
          "commande": "npx ruch msw update",
          "description": "Mettre à jour MSW"
        },
        {
          "etape": 4,
          "commande": "npx ruch guide-ai",
          "description": "Actualiser la doc IA"
        }
      ]
    }
  },
  "strategieTest": {
    "couches": [
      {
        "nom": "Tests d'entités",
        "description": "Tester les entités en isolation",
        "outils": ["Jest", "TypeScript"]
      },
      {
        "nom": "Tests de services",
        "description": "Tester la logique métier avec des dépendances mockées",
        "outils": ["Jest", "Repositories mock"]
      },
      {
        "nom": "Tests d'adapters",
        "description": "Tester les adapters API avec MSW",
        "outils": ["MSW", "Jest"]
      },
      {
        "nom": "Tests de hooks",
        "description": "Tester les hooks React Query",
        "outils": ["React Testing Library", "MSW"]
      },
      {
        "nom": "Tests de composants",
        "description": "Tester les flux utilisateur complets",
        "outils": ["React Testing Library", "MSW", "Jest"]
      }
    ]
  },
  "integrationIA": {
    "titre": "Développement assisté par IA (FONCTIONNALITÉ PHARE)",
    "description": "Fonctionnalité révolutionnaire qui enseigne votre architecture hexagonale aux assistants IA",
    "outils": [
      {
        "nom": "Cursor",
        "fichier": ".cursorrules",
        "fonctionnalites": [
          "Contexte architectural complet",
          "Exemples de domaine",
          "Patterns de code"
        ]
      },
      {
        "nom": "GitHub Copilot",
        "fichier": "Documentation",
        "fonctionnalites": [
          "Meilleures suggestions",
          "Documentation des patterns"
        ]
      },
      {
        "nom": "Windsurf",
        "fichier": ".windsurfrules",
        "fonctionnalites": [
          "Configuration projet",
          "Compréhension architecture"
        ]
      },
      {
        "nom": "Juni",
        "fichier": ".juni/config.json",
        "fonctionnalites": ["Collaboration équipe", "Génération cohérente"]
      }
    ]
  },
  "exemples": {
    "ecommerce": {
      "titre": "Application E-Commerce",
      "domaines": [
        "user",
        "product",
        "cart",
        "order",
        "payment",
        "notification"
      ],
      "configuration": [
        "npx ruch create user",
        "npx ruch create product",
        "npx ruch create cart",
        "npx ruch create order",
        "npx ruch create payment",
        "npx ruch create notification",
        "npx ruch context generate",
        "npx ruch msw init",
        "npx ruch msw handlers",
        "npx ruch msw mocks",
        "npx ruch guide-ai"
      ]
    }
  },
  "meta": {
    "version": "1.0.0",
    "derniereMAJ": "2024-12-16",
    "totalCommandes": 12,
    "totalCouches": 6,
    "fonctionnaliteCle": "Commande guide-ai pour le développement assisté par IA",
    "architecture": "Architecture hexagonale simplifiée pour React"
  }
}
