Architecture

Structure interne du projet et organisation des fichiers.

Stack technique

maconfai est construit avec : • TypeScript — 98.8% du code source, modules ESM • Node.js 18+ — Runtime minimum requis • pnpm — Gestionnaire de paquets • Vitest — Framework de tests (73% de couverture) • oxlint — Linter • Prettier — Formateur de code • obuild — Outil de build

Structure du projet

Le projet suit une structure claire et modulaire :
maconfai/
├── src/
│   ├── cli.ts           # Point d'entrée CLI, parsing d'arguments
│   ├── install.ts       # Logique d'install/uninstall interactive
│   ├── installer.ts     # Copie, symlinks, opérations bas niveau
│   ├── skills.ts        # Découverte SKILL.md, mcp.json, hooks.json
│   ├── agents.ts        # Définition et détection des agents
│   ├── types.ts         # Types partagés (AgentType, Skill, etc.)
│   ├── git.ts           # Helpers Git (clone, fetch, token)
│   ├── source-parser.ts # Parse les sources (GitHub, local)
│   ├── lock.ts          # Gestion du lock file (ai-lock.json)
│   ├── check.ts         # Détection des mises à jour (tree hash)
│   ├── mcp.ts           # Install/uninstall serveurs MCP (configs dans mcps/)
│   └── hooks.ts         # Install/uninstall hooks
├── tests/               # Tests organisés par feature
├── bin/cli.mjs           # Exécutable CLI
├── build.config.mjs     # Config obuild
├── tsconfig.json
├── vitest.config.ts
└── package.json

Stockage des skills

L'architecture de stockage repose sur un répertoire canonique avec des symlinks : 1. Le répertoire .agents/skills/ contient les fichiers réels de chaque skill installée. 2. Chaque agent reçoit un symlink dans son répertoire skills/ pointant vers le fichier canonique. 3. Cela garantit qu'une seule copie existe et que tous les agents utilisent la même version.
projet/
├── .agents/
│   └── skills/
│       ├── skill-a/
│       │   └── SKILL.md        # ← fichier réel
│       └── skill-b/
│           └── SKILL.md        # ← fichier réel
├── .claude/skills/
│   ├── skill-a/ → ../../.agents/skills/skill-a/   # symlink
│   └── skill-b/ → ../../.agents/skills/skill-b/   # symlink
├── .cursor/skills/
│   ├── skill-a/ → ../../.agents/skills/skill-a/   # symlink
│   └── skill-b/ → ../../.agents/skills/skill-b/   # symlink
└── .codex/skills/
    └── skill-a/ → ../../.agents/skills/skill-a/    # symlink

Approche de tests

Les tests suivent des conventions strictes : • Un test focalisé par fichier (30-100 lignes) • Utilisation d'inline snapshots plutôt que d'assertions manuelles • La suite de tests reflète la structure des fonctionnalités • Chaque test reçoit un répertoire temporaire isolé • Le CLI est exécuté comme sous-processus pour les tests d'intégration

Build et distribution

Le projet est distribué via npm : • Taille du build : 91.4 kB (minifié + gzip) • Couverture de tests : 73% • CI : GitHub Actions (lint, tests, typecheck) • Publication : npm publish workflow avec trusted publishing • Format : ESM (ECMAScript Modules) • Point d'entrée : bin/cli.mjs • Licence : MIT