npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@funeste38/rome

v1.5.4

Published

Tous les chemins mènent à Rome — CLI avancée pour monorepos avec gestion des processus détachés, auto-workspaces et compatibilité cross-platform.

Readme

@funeste38/rome

Tous les chemins mènent à Rome — CLI pour monorepos + utilitaires TypeScript

Un outil CLI moderne pour gérer les monorepos avec exécution parallèle, auto-détection des workspaces, et compatibilité cross-platform (Windows PowerShell inclus).

npm version License: MIT


🚀 Fonctionnalités

Gestion des processus : --detach, processes, logs séparés, redémarrage auto
Configuration avancée : rome.json avec section processes personnalisable
Cockpit intelligent : Lancement automatique selon configuration
Robustesse maximale : Processus isolés, gestion des signaux, monitoring continu


🔐 Gestion des environnements (optionnel)

Rome peut s'intégrer à envapt pour charger des profils d'environnement et utiliser @funeste38/envapt-nezlephant pour gérer des secrets encodés en images PNG. Cette intégration est optionnelle : Rome reste pleinement fonctionnel sans ces paquets.

Installation (optionnelle) :

npm i envapt @funeste38/envapt-nezlephant --save-dev

Usage (exemples) :

  • Vérifier un profil :
rome env check --profile dev
  • Générer un .env pour un target (web/server) :
rome env generate web --profile production --out apps/web/.env.production
  • Chiffrer/déchiffrer des secrets avec Nezlephant :
rome env encrypt apps/server/.env.production --out secrets/a11.png
rome env decrypt secrets/a11.png --out apps/server/.env.production

Notes :

  • Les dépendances envapt et @funeste38/envapt-nezlephant sont chargées dynamiquement par Rome ; les projets qui n'utilisent pas rome env ne sont pas impactés.
  • Documentez vos profils dans envapt.config.(ts|json) si vous souhaitez que rome env init génère une configuration par défaut.

📦 Installation

npm i @funeste38/rome@latest
# ou
pnpm add @funeste38/rome@latest
yarn add @funeste38/rome@latest

🖥️ CLI - Commandes principales

Rome fournit un CLI pour gérer vos workspaces en développement.

Exécution simple

# Auto-cd vers un workspace + exécuter une commande
rome run server -- npm run dev
rome run web -- npm run dev

# Lancement automatique selon le nombre de workspaces détectés
rome start    # 1 workspace → run, 2 → duo, 3 → trio

Exécution parallèle

# 2 services en parallèle avec logs préfixés
rome duo server "npm run dev" web "npm run dev"

# 3 services en parallèle
rome trio server "npm run dev" web "npm run dev" ai "npm run start"

Auto-détection des workspaces

Le CLI détecte automatiquement ces dossiers :

  • Racine : server, backend, api, web, front, client, app
  • Sous-dossiers : apps/, packages/, services/, src/
  • Récursif : recherche dans tous les sous-dossiers courants

Nettoyage des node_modules

# Nettoyer un workspace spécifique
rome clean front

# Nettoyer tous les workspaces
rome clean

Installation automatique des dépendances

Si npm run dev échoue, Rome tente automatiquement :

  1. ✅ Détection de l'échec
  2. 🔄 Installation des dépendances avec npm install
  3. 🔄 Redémarrage de la commande

FixPath - Auto-cd intelligent

# Se positionne automatiquement dans le workspace
rome fix server -- npm run dev
rome fix web -- npm run build

Gestion des workspaces

# Build tous les workspaces
rome build

# Build un workspace spécifique
rome build front

# Test tous les workspaces
rome test

# Lint tous les workspaces
rome lint

Gestion des tunnels

# Démarrer un tunnel ngrok
rome tunnel up 3000

# Arrêter le tunnel
rome tunnel down

# Vérifier le statut du tunnel
rome tunnel status

# Tester la connectivité du tunnel
rome tunnel test

# Lancer un terminal split pour monitoring
rome tunnel split

# Lanceur automatique (serveur + tunnel + monitoring)
rome tunnel auto

Déploiement Cloud

# Déploiement Netlify (avec build automatique)
rome deploy build

# Déploiement Netlify (build existant)
rome deploy

# Gestion des tunnels Cloudflare
rome cf up [port]        # Tunnel nommé (stable)
rome cf up --detach      # Tunnel nommé en arrière-plan
rome cf quick [port]     # Tunnel rapide (éphémère)
rome cf quick --detach   # Tunnel rapide en arrière-plan
rome cf down             # Arrêter tous les tunnels

Cockpit de développement

# Lancer tous les services en parallèle (multi-panels)
rome cockpit

# Lance automatiquement :
# - Serveur backend (apps/server)
# - Ollama (si disponible)
# - Tunnel Cloudflare
# - Frontend (apps/web)

Gestion des processus détachés

Rome supporte maintenant l'exécution de processus en arrière-plan pour éviter les interruptions.

Mode détaché

# Lancer des processus en arrière-plan
rome duo server "npm run dev" web "npm run dev" --detach
rome trio server "npm run dev" web "npm run dev" ai "npm run start" --detach
rome start --detach

# Les processus continuent même si le terminal est fermé
# Retour immédiat au prompt avec confirmation

Gestion des processus actifs

# Lister tous les processus Rome actifs
rome processes
rome processes list

# Arrêter tous les processus Rome
rome processes stop

Configuration personnalisée des processus

Le fichier rome.json supporte maintenant une section processes pour définir des services personnalisés :

{
  "processes": {
    "server": {
      "command": "npm run dev",
      "cwd": "apps/server",
      "detach": true,
      "restart": "always",
      "env": { "NODE_ENV": "development" }
    },
    "web": {
      "command": "npm run dev",
      "cwd": "apps/web",
      "detach": true,
      "restart": "on-failure"
    },
    "tunnel": {
      "command": "cloudflared tunnel --url http://127.0.0.1:3000",
      "detach": true,
      "restart": "on-failure"
    },
    "ollama": {
      "command": "ollama serve",
      "detach": true,
      "restart": "on-failure"
    }
  }
}

Propriétés des processus :

  • command : Commande à exécuter (obligatoire)
  • cwd : Répertoire de travail (optionnel)
  • detach : Mode détaché (optionnel, défaut: true)
  • restart : Politique de redémarrage (always/on-failure/désactivé)
  • env : Variables d'environnement (optionnel)

Logs séparés et monitoring

# Chaque processus écrit dans son propre fichier log
# Logs disponibles dans le dossier ./logs/
# - server.log
# - web.log
# - tunnel.log
# - ollama.log

# Redémarrage automatique selon la configuration
# Surveillance continue des processus

Configuration personnalisée

# Créer un fichier de configuration
rome init

# Le fichier rome.json permet de personnaliser :
# - Patterns de détection des workspaces
# - Gestionnaire de paquets (npm/yarn/pnpm/auto)
# - Scripts personnalisés

Sauvegarde et restauration

# Sauvegarder la configuration actuelle
rome backup

# Restaurer la dernière sauvegarde
rome restore

# Restaurer une sauvegarde spécifique
rome restore rome.json.backup.2025-11-07T20-52-33

Système de sauvegarde automatique :

  • rome init sauvegarde automatiquement avant de régénérer
  • rome restore sauvegarde la config actuelle avant de restaurer
  • Fichiers nommés avec timestamp pour traçabilité

🏛️ Système Militaire - Indexation Romaine

Rome transforme vos repositories en armée romaine avec une classification automatique des fichiers et dossiers.

Hiérarchie Militaire

Chaque élément de votre projet reçoit un rôle militaire :

  • 👨‍✈️ Capitaine = Dossier (workspace, src/, components/, etc.)
  • 🏹 Archer = Documentation (.md, .txt, README, etc.)
  • 🏗️ Catapulte = Scripts/Build (package.json, Dockerfile, scripts)
  • ⚔️ Infanterie = Code source (.ts, .js, .py, .java, etc.)
  • 🐎 Cavalerie = Tests (test/, spec/, *.test.js, etc.)
  • 👑 Centurion = Configuration (tsconfig.json, eslint.config.js, etc.)
  • 🦅 Aquila = Étendards (package.json principal, rome.json)
  • 🔫 Balliste = Assets/Données (.json, .yaml, .csv, images)

Formations Automatiques

Rome classe automatiquement vos repositories selon leur taille et complexité :

  • 🏰 Bataillon : Petit projet (< 10 unités, ≤ 2 catapultes, ≤ 5 infanterie)
  • ⚔️ Légion : Projet moyen (< 50 unités, ≤ 5 capitaines)
  • 🏛️ Armée : Grand projet (≥ 50 unités, nombreux capitaines)

Inspection des Troupes

# Voir l'armée complète avec toutes les formations
rome army

# Exemple de sortie :
🏛️  ARMÉE ROMAINE - Formations Détectées
═══════════════════════════════════════

⚔️ Légion "mon-projet" (Force: 45)
   📍 /path/to/mon-projet
   🦅 1 Aigles
   👑 3 Centurions
   🏗️ 5 Catapultes
   ⚔️ 25 Infanterie
   🐎 8 Cavalerie
   👨‍✈️ 3 Capitaines

🏗️ Setup Repository - Scripts PowerShell

Rome inclut des scripts PowerShell pour initialiser rapidement vos repositories.

Monorepo (recommandé)

# Depuis votre dossier projet
.\scripts\repo-reshape.ps1 -Mode mono

# Crée la structure :
# ├── apps/
# │   ├── web/     (Vite + React)
# │   └── server/  (Express)
# ├── package.json (workspaces)
# ├── tsconfig.base.json
# └── netlify.toml

Split repos (2 dépôts séparés)

.\scripts\repo-reshape.ps1 -Mode split

# Crée la structure :
# ├── repos/
# │   ├── web/     (Vite + React + netlify.toml)
# │   └── server/  (Express)

Configuration

# Paramètres optionnels
.\scripts\repo-reshape.ps1 -Mode mono -Root "C:\MonProjet"

🌐 Déploiement et Intégration Cloud

Rome supporte le déploiement moderne avec mock API et tunnels sécurisés.

🔌 API Mock + Fallback Upstream (Netlify Function)

Créez netlify/functions/a11-chat.js pour une API ChatGPT-compatible avec fallback :

// Netlify Function: mock + fallback upstream (Cloudflare tunnel / API publique)
const UPSTREAM = process.env.UPSTREAM_URL || ""; // ex: https://api.funesterie.pro
const DEFAULT_MODEL = process.env.DEFAULT_MODEL || "llama3.1:8b-instruct";

exports.handler = async (event) => {
  const headers = {
    "Access-Control-Allow-Origin": "*",
    "Content-Type": "application/json",
  };
  const body = event.body ? JSON.parse(event.body) : {};
  const model = body.model || DEFAULT_MODEL;

  // 1) Forward vers upstream si disponible
  if (UPSTREAM) {
    try {
      const r = await fetch(`${UPSTREAM}/v1/chat/completions`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ ...body, model }),
        signal: AbortSignal.timeout(8000),
      });
      const text = await r.text();
      return { statusCode: r.status, headers, body: text };
    } catch (_) {
      /* fallback mock */
    }
  }

  // 2) Mock (toujours dispo)
  const msg = body?.messages?.[0]?.content || "";
  return {
    statusCode: 200,
    headers,
    body: JSON.stringify({
      id: "chatcmpl-mock",
      object: "chat.completion",
      created: Math.floor(Date.now() / 1000),
      model,
      choices: [
        {
          index: 0,
          message: {
            role: "assistant",
            content: `(MODE DEV) Mock. Tu as dit: "${msg}"`,
          },
          finish_reason: "stop",
        },
      ],
    }),
  };
};

Configuration Netlify :

[build]
  command   = "npm --prefix apps/web run build"
  publish   = "apps/web/dist"
  functions = "netlify/functions"

[[redirects]]
  from   = "/api/*"
  to     = "/.netlify/functions/a11-chat/:splat"
  status = 200
  force  = true

Variables d'environnement Netlify :

DEFAULT_MODEL=llama3.1:8b-instruct
UPSTREAM_URL=https://api.funesterie.pro  # ou https://xxxxx.trycloudflare.com

🌩️ Cloudflare Tunnel — 2 modes

A) Tunnel nommé (URL stable, recommandé)

winget install Cloudflare.cloudflared
cloudflared tunnel login
cloudflared tunnel create a11-local

Config locale (~/.cloudflared/config.yml) :

tunnel: a11-local
credentials-file: ~/.cloudflared/a11-local.json
ingress:
  - hostname: api.funesterie.pro
    service: http://127.0.0.1:3000
  - service: http_status:404
# DNS (si zone chez Cloudflare)
cloudflared tunnel route dns a11-local api.funesterie.pro
# Run
cloudflared tunnel run a11-local

B) Quick tunnel (URL éphémère)

cloudflared tunnel --url http://127.0.0.1:3000
# Copiez l'URL générée pour UPSTREAM_URL

🧪 Profils d'environnement (front)

Développement (apps/web/.env.local) :

VITE_API_BASE=http://127.0.0.1:3000
VITE_MODEL=llama3.1:8b-instruct

Production (apps/web/.env.production) :

---

## 🛠️ Scripts NPM étendus

Ajoutez ces scripts dans votre `package.json` racine pour une expérience de développement complète :

```json
{
  "scripts": {
    "web:build": "npm --prefix apps/web run build",
    "web:dev": "npm --prefix apps/web run dev",
    "deploy": "npx netlify deploy --prod --dir=apps/web/dist --functions=netlify/functions",
    "deploy:build": "npm run web:build && npm run deploy",
    "start:a11": "node apps/server/server.cjs",
    "tunnel": "cloudflared tunnel --url http://127.0.0.1:3000",
    "rome:start": "rome start"
  }
}

⚡ "Cockpit Rome" (multi-panels)

Script PowerShell pour lancer tous les services en parallèle :

# scripts/rome-cockpit.ps1
Start-Process powershell -ArgumentList 'cd apps/server; npm run dev'
Start-Process powershell -ArgumentList 'ollama serve'
Start-Process powershell -ArgumentList 'cloudflared tunnel --url http://127.0.0.1:3000'
Start-Process powershell -ArgumentList 'npm --prefix apps/web run dev'

✅ Check-list "ça marche en prod"

# 1. Lier le site Netlify
npx netlify link --name votre-site

# 2. Build et déploiement
npm run web:build
npm run deploy

# 3. Tests
curl https://votre-site.netlify.app/.netlify/functions/a11-chat
# → JSON OK

# POST vers https://votre-site.netlify.app/api/v1/chat/completions
# → Tunnel UP: vraie réponse IA
# → Tunnel OFF: mock propre (pas d'erreur)

� API TypeScript

fixPath - Résolution de chemins ESM

import { fixPath } from "@funeste38/rome/fixPath";

// Auto-détection du workspace + commande optionnelle
await fixPath("server", "npm run dev");
await fixPath(); // auto-cd seulement

Commandes programmatiques

import { run, duo, trio } from "@funeste38/rome";

// Exécution simple
await run("server", ["npm", "run", "dev"]);

// Exécution parallèle
await duo("server", ["npm", "run", "dev"], "web", ["npm", "run", "dev"]);

await trio(
  "server",
  ["npm", "run", "dev"],
  "web",
  ["npm", "run", "dev"],
  "ai",
  ["npm", "run", "start"]
);

⚙️ Développement & Build

Build du package

npm run build  # TypeScript → dist/

Structure de build

dist/
├── index.js + .d.ts     # Exports principaux
├── cli.js + .d.ts       # Point d'entrée CLI
├── fixPath.js + .d.ts   # Utilitaire chemins
├── run.js + .d.ts       # Exécution simple
├── duo.js + .d.ts       # Exécution duo
├── trio.js + .d.ts      # Exécution trio
├── tunnel.js + .d.ts    # Gestion des tunnels
└── utils.js + .d.ts     # Utilitaires internes

Release & Publication

# Version automatique + publication
npm run release

# Ou manuellement :
npm version patch  # ou minor/major
npm publish --access public

🧾 Changelog

v1.5.3

  • Correction critique mode détaché : Suppression des await bloquants dans launchDetachedProcess
  • Détachement complet : Ajout de child.unref() pour détacher complètement du processus parent
  • Retour immédiat : Les commandes --detach reviennent maintenant instantanément au prompt
  • Processus vraiment indépendants : Les processus détachés survivent à la fermeture du terminal parent
  • Cross-platform robuste : Comportement identique sur Windows, Linux et macOS

v1.5.2

  • Correction mode détaché duo/trio : rome duo --detach et rome trio --detach lancent maintenant vraiment les processus en arrière-plan
  • Processus réellement détachés : Utilisation de detached: true et redirection des logs séparés
  • Logs individuels : Chaque processus détaché écrit dans ./logs/{workspace}-{label}.log
  • Terminal libéré : Plus besoin de Ctrl+C, retour immédiat au prompt
  • Cohérence cross-commandes : Même comportement détaché pour toutes les commandes multi-workspaces

v1.5.1

  • Cloudflare tunnels détachés : Support --detach pour rome cf up et rome cf quick
  • Correction parsing arguments : Utilisation de filteredArgs pour éviter les conflits avec --detach
  • Logs séparés pour tunnels : cloudflare-tunnel.log et cloudflare-quick.log
  • Amélioration documentation : README mis à jour avec les options --detach pour Cloudflare

v1.5.0

  • Gestion des processus détachés : Option --detach pour exécution en arrière-plan
  • Commande processes : rome processes list et rome processes stop
  • Configuration rome.json : Section processes pour définir des services personnalisés
  • Logs séparés : Chaque processus écrit dans ./logs/{nom}.log
  • Redémarrage automatique : Politiques always/on-failure configurables
  • Cockpit amélioré : Utilise la configuration rome.json pour les processus
  • Robustesse accrue : Gestion des signaux et isolation des processus
  • Cross-platform : Support Windows PowerShell et Unix pour la gestion des processus

v1.4.0

  • Version mineure : Nouvelles fonctionnalités de déploiement cloud
  • Commandes CLI cloud : rome deploy, rome cockpit, rome cf (Cloudflare)
  • Déploiement Netlify intégré : Build + déploiement en une commande
  • Cockpit multi-panels : Lancement automatique de tous les services de dev
  • Gestion Cloudflare : Tunnels nommés stables et tunnels rapides éphémères
  • Fichiers de déploiement : Netlify Functions, configs, environnements prêts

v1.3.9

  • Publication patch : Corrections de templates et scripts générés
  • Templates server.js : Utilisation propre de const PORT = process.env.PORT || 3000 pour éviter les duplications
  • Scripts générés : Tous les projets créés par repo-reshape.ps1 incluent maintenant test et lint scripts
  • Robustesse CLI : npx rome build/test/lint fonctionne sur tous les workspaces générés
  • Déploiement cloud : Intégration Netlify Functions + Cloudflare Tunnel
  • API Mock + Fallback : Function Netlify avec mock local et upstream forwarding
  • Scripts étendus : Commandes deploy, tunnel, cockpit ajoutées
  • Profils environnement : .env.local/.env.production pour le frontend
  • Cockpit multi-panels : Script PowerShell pour développement intégré
  • Commandes CLI cloud : rome deploy, rome cockpit, rome cf (Cloudflare)

v1.3.8

  • Publication stable : Version 1.3.8 avec toutes les corrections et améliorations
  • Workspaces complets : Tous les workspaces de test ont maintenant les scripts requis
  • Fonctionnalités tunnel : Système de tunnels ngrok entièrement opérationnel
  • Documentation à jour : README complet avec toutes les nouvelles fonctionnalités
  • Templates corrigés : Server.js templates utilisent maintenant const PORT = process.env.PORT || 3000 pour éviter les duplications
  • Scripts générés : Les projets générés par repo-reshape.ps1 incluent maintenant test et lint scripts dans tous les package.json

v1.3.7

  • 🌐 Système de tunnels intégré : Gestion complète des tunnels ngrok
  • Commandes tunnel : rome tunnel up/down/status/test/split/auto
  • Tests de connectivité : Vérification automatique des endpoints (/health, /status, /api/*)
  • Terminaux split : Monitoring multi-onglets avec PowerShell
  • Lanceur automatique : Démarrage serveur + tunnel + monitoring intégré
  • Timeout géré : AbortController pour les requêtes HTTP fiables
  • Corrections ESM : Imports ES6 complets, plus de require()
  • Fix workspaces : Scripts build/test/lint ajoutés aux workspaces de test

v1.3.5

  • Corrections ESM : Fix "require is not defined" dans cleanNodeModules
  • Déduplication renforcée : Élimination complète des doublons (backend vs apps/backend)
  • Pré-install séquentielle : Nouvelle fonction preInstallAllDeps() pour stabilité
  • Import spawnSync : Utilisation des imports ESM au lieu de require()

v1.3.4

  • Déduplication des workspaces : Utilisation de realpath pour éviter les doublons
  • Normalisation des chemins : Affichage relatif (.) au lieu des chemins absolus
  • Amélioration robustesse : Gestion des liens symboliques et chemins normalisés
  • Affichage optimisé : Chemins plus lisibles dans rome army

v1.3.3

  • 🏛️ Système Militaire : Indexation automatique avec métaphore romaine
  • Classification automatique : Capitaine/Archer/Catapulte/Infanterie/Cavalerie/Centurion/Aquila/Balliste
  • Formations intelligentes : Bataillon/Légion/Armée selon la taille du projet
  • Commande rome army : Inspection visuelle des troupes avec comptage des unités
  • Analyse récursive : Scan automatique de la structure des fichiers
  • Métaphore hyper-pratique : Navigation intuitive des repositories

v1.3.1

  • Système de sauvegarde : rome backup et rome restore
  • Sauvegarde automatique lors de rome init et rome restore
  • Gestion des versions de config avec timestamps
  • Sécurité renforcée pour les modifications de configuration

v1.3.0

  • Nouvelles commandes : rome build, rome test, rome lint pour tous les workspaces
  • Configuration personnalisable : rome init crée un fichier rome.json
  • Multi-gestionnaires : détection automatique npm/yarn/pnpm
  • Configuration avancée : patterns personnalisés, scripts custom, exclusions

v1.2.11

  • ✅ Amélioration détection workspaces (services/, src/, récursif)
  • ✅ Commande rome clean pour node_modules verrouillés
  • ✅ Installation automatique des dépendances en cas d'échec
  • ✅ Meilleur logging et feedback utilisateur
  • ✅ Compatibilité Windows améliorée

v1.2.9

  • ✅ Fix PowerShell syntax errors dans repo-reshape.ps1
  • ✅ Amélioration compatibilité Windows

v1.2.6 - v1.2.8

  • ✅ Ajout commandes run/start/trio pour gestion monorepos
  • ✅ Auto-détection workspaces depuis package.json
  • ✅ Compatibilité Windows PowerShell avec NODE_OPTIONS
  • ✅ CLI zero dépendances, pur Node.js

v1.2.4

  • ✅ Mode duo pour développement front/back parallèle
  • ✅ CLI cross-platform avec auto-cd et exécution commandes
  • ✅ Zero dépendances runtime

v1.1.0 - v1.2.3

  • ✅ Séparation builds client/server
  • ✅ Version client browser-safe
  • ✅ Helper url() pour génération routes
  • ✅ Typings TypeScript complets
  • ✅ Fallback "browser" field

🤝 Contribution

Issues et PRs bienvenues sur GitHub !

Développement local

git clone https://github.com/jEFFLEZ/rome.git
cd rome
npm install
npm run build
npm link  # pour tester localement

📄 License

MIT © 2025 — jEFFLEZ


Tous les chemins mènent à Rome — CLI moderne pour vos monorepos