v0.2.2 : suggestions d'installation selon l'OS (scoop/winget/apt/dnf/pacman/apk/brew) + README remanie
This commit is contained in:
@@ -1,72 +1,37 @@
|
||||
# agent-manager (am)
|
||||
# 🚀 agent-manager — vos agents IA, gérés comme des apps
|
||||
|
||||
Gestionnaire en ligne de commande, écrit en **Rust**, pour les **agents IA de
|
||||
coding installés localement** : lister, installer, démarrer, arrêter,
|
||||
redémarrer, mettre à jour et désinstaller — avec gestion automatique des
|
||||
dépendances (Node.js, Python, Go, Rust, Bun, etc.) et un catalogue YAML de
|
||||
~70 agents prêts à l'emploi.
|
||||
**am** liste, installe, démarre, met à jour et désinstalle vos agents IA de
|
||||
coding (Claude Code, Codex, Aider, jcode, Prime Agent… **72 agents connus**)
|
||||
en une ligne de commande — avec la gestion des dépendances (Node.js, Python,
|
||||
Go, Rust…) prise en charge pour vous.
|
||||
|
||||
> ✅ Rust · ✅ Windows, Linux, macOS · ✅ aucune dépendance runtime
|
||||
|
||||
---
|
||||
|
||||
## Sommaire
|
||||
## ✨ Pourquoi am ?
|
||||
|
||||
1. [Fonctionnalités](#fonctionnalités)
|
||||
2. [Installation](#installation)
|
||||
3. [Démarrage rapide](#démarrage-rapide)
|
||||
4. [Commandes](#commandes)
|
||||
5. [Options globales](#options-globales)
|
||||
6. [Fichier de configuration](#fichier-de-configuration)
|
||||
7. [Ajouter un agent](#ajouter-un-agent)
|
||||
8. [Alias, groupes et mode interactif](#alias-groupes-et-mode-interactif)
|
||||
9. [Gestion des processus](#gestion-des-processus)
|
||||
10. [Sécurité](#sécurité)
|
||||
11. [Tests](#tests)
|
||||
12. [Complétions shell](#complétions-shell)
|
||||
13. [Structure du projet](#structure-du-projet)
|
||||
14. [Limites et feuille de route](#limites-et-feuille-de-route)
|
||||
- 🗂️ **Catalogue de 72 agents prêts à l'emploi** — descriptions, méthodes
|
||||
d'installation, dépendances et commandes de démarrage déjà configurées.
|
||||
- 📦 **9 méthodes d'installation** — npm, pip, uv, cargo, go, bun, script
|
||||
d'installation, binaire (GitHub Releases/Gitea) et dépôt git — toujours
|
||||
dans un répertoire local, jamais dans le système.
|
||||
- 🧩 **Dépendances gérées pour vous** — avant d'installer un agent, am
|
||||
vérifie les outils requis et, s'il en manque, **détecte votre OS** et
|
||||
propose la commande exacte (scoop/winget, apt/dnf/pacman, brew) — il peut
|
||||
même l'exécuter à votre place.
|
||||
- 🚦 **Gestion des processus** — démarrage en avant-plan ou détaché
|
||||
(--background) avec PID enregistré et logs ; arrêt propre SIGTERM puis
|
||||
SIGKILL.
|
||||
- ⚡ **Rapide** — sondes de version en parallèle + cache : un am list
|
||||
à chaud prend ~25 ms.
|
||||
- 🧭 **Shell interactif** avec complétion **Tab** et historique.
|
||||
- 🔒 **Sûr** — mode --dry-run universel, checksums sha256, confirmations
|
||||
avant les scripts d'installation, journalisation horodatée.
|
||||
|
||||
---
|
||||
|
||||
## Fonctionnalités
|
||||
|
||||
- **Catalogue intégré** : ~70 agents connus (Claude Code, Codex, Gemini CLI,
|
||||
OpenCode, Aider, jcode, Prime Agent, l'écosystème OpenClaw, les SaaS, etc.),
|
||||
chacun avec sa méthode d'installation et ses dépendances.
|
||||
- **9 méthodes d'installation** :
|
||||
|
||||
| type | description |
|
||||
|------|-------------|
|
||||
| npm / bun | paquet global installé dans un préfixe local (jamais en -g système) |
|
||||
| pip / uv | virtualenv privé par agent, sans toucher au site-packages système |
|
||||
| cargo | cargo install --root <répertoire-local> |
|
||||
| go | go install avec GOBIN local |
|
||||
| curl | script d'installation téléchargé puis exécuté séparément (jamais de curl pipé vers sh) |
|
||||
| binary| binaire précompilé depuis GitHub Releases ou URL directe, checksum vérifié, extraction zip/tar.gz |
|
||||
| git | clone + build (make, cargo build --release, npm install…) puis copie du binaire ou shim |
|
||||
|
||||
- **Gestion des processus** : avant-plan (stdio hérités) ou arrière-plan
|
||||
(détaché, PID enregistré, sortie vers un log) ; arrêt propre SIGTERM puis
|
||||
SIGKILL après un délai configurable.
|
||||
- **Base d'état locale** (state.json) : nom, version, chemin, binaires, PID,
|
||||
dates — plus la **détection d'agents externes** via le PATH. Les sondes de
|
||||
version sont exécutées **en parallèle** (timeout 4 s) et **mises en cache**
|
||||
(index du PATH et versions) : un am list à chaud prend ~50 ms.
|
||||
- **Dépendances** : vérification avant installation (node >= 18, etc.) avec
|
||||
messages actionnables ; installation automatique possible quand une commande
|
||||
d'installation est connue.
|
||||
- **Sécurité** : mode --dry-run universel, confirmations (--yes pour les
|
||||
sauter), validation des URL (http/https/file), vérification sha256,
|
||||
journalisation horodatée de toutes les commandes exécutées.
|
||||
- **Confort développeur** : sortie JSON stable (--json), couleurs
|
||||
(--no-color), mode verbeux, complétions bash/zsh/fish/powershell/elvish,
|
||||
alias, groupes (am start group:dev), mode interactif, export/import,
|
||||
doctor et self-update.
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### En une ligne (recommandé)
|
||||
## ⚡ Installation — 30 secondes
|
||||
|
||||
**Windows** (PowerShell) :
|
||||
|
||||
@@ -76,358 +41,240 @@ dépendances (Node.js, Python, Go, Rust, Bun, etc.) et un catalogue YAML de
|
||||
|
||||
curl -fsSL https://git.dracodev.net/Projets/agent-manager/raw/branch/main/install.sh | sh
|
||||
|
||||
Le script télécharge le binaire précompilé de la **dernière release** du dépôt
|
||||
Gitea, l'installe dans un répertoire utilisateur et l'ajoute au PATH. Si aucun
|
||||
binaire ne correspond à votre plateforme, il compile automatiquement depuis
|
||||
les sources (cargo install --git). **Relancez la même commande pour mettre à
|
||||
jour.** Les scripts sont versionnés dans le dépôt (install.ps1, install.sh) —
|
||||
vous pouvez les lire avant de les exécuter.
|
||||
Le script télécharge le binaire précompilé de la dernière release
|
||||
(statique sous Linux : compatible toutes les distributions, Debian 12 et
|
||||
antérieures comprises) et l'ajoute à votre PATH. Sans binaire pour votre
|
||||
plateforme, il compile automatiquement depuis les sources.
|
||||
|
||||
### Depuis les sources
|
||||
|
||||
Prérequis : Rust 1.70+ (le programme lui-même n'a **aucune** dépendance
|
||||
runtime ; les outils comme node/python ne sont nécessaires que pour les agents
|
||||
qui les utilisent).
|
||||
|
||||
# 1. cloner et compiler (binaire dans target/release/am)
|
||||
git clone https://git.dracodev.net/Projets/agent-manager.git
|
||||
cd agent-manager
|
||||
cargo build --release
|
||||
|
||||
# 2. installer dans ~/.cargo/bin (sur le PATH)
|
||||
cargo install --path .
|
||||
|
||||
# 3. vérifier
|
||||
am --version
|
||||
am doctor
|
||||
|
||||
> Le binaire s'appelle **am** (agent-manager est le nom du paquet).
|
||||
|
||||
### Ajouter les binaires des agents au PATH
|
||||
|
||||
Les agents installés par am vivent dans
|
||||
~/.local/share/agent-manager/agents/bin (Linux),
|
||||
%LOCALAPPDATA%\agent-manager\agents\bin (Windows) ou
|
||||
~/Library/Application Support/agent-manager/agents/bin (macOS).
|
||||
Ajoutez ce répertoire au PATH pour pouvoir lancer les agents directement :
|
||||
|
||||
# Linux/macOS — dans ~/.bashrc ou ~/.zshrc
|
||||
export PATH="$HOME/.local/share/agent-manager/agents/bin:$PATH"
|
||||
|
||||
am doctor vous le rappelle si le répertoire n'est pas sur le PATH.
|
||||
> 🔄 **Mise à jour** : relancez simplement la même commande.
|
||||
|
||||
---
|
||||
|
||||
## Démarrage rapide
|
||||
## 🎬 Vos 3 premières commandes
|
||||
|
||||
am list # agents installés (gérés + externes)
|
||||
am list --all # tout le catalogue, avec l'état de chacun
|
||||
am search rust # recherche par mot-clé
|
||||
am info jcode # fiche détaillée
|
||||
am list # vos agents installés (et ceux détectés sur le PATH)
|
||||
|
||||
am install claude-code # npm + vérification de node >= 18
|
||||
am install aider --method pip # choisir la méthode 2 (pip) au lieu de uv
|
||||
am install smelt --dry-run # simuler sans rien changer
|
||||
NAME VERSION STATUS SOURCE PATH
|
||||
------------------------------------------------
|
||||
Claude Code 2.1.112 external external C:\\Users\\bruno\\.local\\bin\\claude.exe
|
||||
jcode 0.76.0 external external C:\\Users\\bruno\\AppData\\Local\\jcode\\bin\\jcode.exe
|
||||
|
||||
am start claude-code # avant-plan (Ctrl-C pour quitter)
|
||||
am start claude-code --background --env ANTHROPIC_MODEL=opus
|
||||
am status claude-code
|
||||
am stop claude-code # SIGTERM puis SIGKILL après 5 s
|
||||
am restart codex --background
|
||||
am update claude-code
|
||||
am uninstall smelt --purge
|
||||
am install jcode # installe un agent (dépendances vérifiées d'abord)
|
||||
|
||||
am run pi "explique ce fichier" # exécution directe, sans gestion de process
|
||||
am doctor --fix # vérifie l'environnement et répare
|
||||
installing jcode (type=binary repo=1jehuang/jcode)…
|
||||
installed jcode (v0.76.0) in ~/.local/share/agent-manager/agents/jcode
|
||||
|
||||
am start jcode # le lance en avant-plan (--background pour détacher)
|
||||
|
||||
---
|
||||
|
||||
## Commandes
|
||||
## 📚 Aide-mémoire des commandes
|
||||
|
||||
| Commande | Description |
|
||||
|----------|-------------|
|
||||
| am list [--all] [--category <cat>] | agents installés (défaut) ; --all pour tout le catalogue |
|
||||
| am start <agent> [--background] [--args ...] [--env K=V] [--notify] | démarre l'agent (avant-plan par défaut) |
|
||||
| am stop <agent> [--force] [--timeout <s>] | arrête un agent d'arrière-plan (PID enregistré) |
|
||||
| am restart <agent> [--background] [--force] | arrête puis redémarre |
|
||||
| am status [agent] | état d'un agent, ou de tous les agents installés |
|
||||
| am install <agent> [--method <n|type>] [--force] | installe l'agent et ses dépendances |
|
||||
| am uninstall <agent> [--purge] | désinstalle et nettoie (--purge : logs + entrée de config) |
|
||||
| am update <agent> [--all] | met à jour vers la dernière version connue |
|
||||
| am search <mot-clé> [--category <cat>] | recherche dans le catalogue |
|
||||
| am info <agent> | description, méthodes d'installation, commande, dépendances, site |
|
||||
| am config show / path / edit / validate / add <fichier> | gestion de la configuration |
|
||||
| am doctor [--fix] | outils présents, validité de la config, chemins, permissions |
|
||||
| am run <agent> [args...] | exécute la commande de l'agent directement |
|
||||
| am completion <shell> | script de complétion (bash, zsh, fish, powershell, elvish) |
|
||||
| am self-update [--check] | met à jour agent-manager depuis GitHub Releases |
|
||||
| am export / am import <fichier> | sauvegarde/restauration de la config + état |
|
||||
| am (sans arguments) | shell interactif |
|
||||
### 🔍 Découvrir
|
||||
|
||||
**Statuts affichés par list/status** : running (PID actif), installed (géré
|
||||
par am), external (trouvé sur le PATH, non géré), not-installed,
|
||||
not-installable (SaaS/desktop).
|
||||
| Commande | Rôle |
|
||||
|----------|------|
|
||||
| am list | agents installés (gérés + détectés sur le PATH) |
|
||||
| am list --all | tout le catalogue, avec l'état de chacun |
|
||||
| am search <mot-clé> | recherche par nom, description, catégorie, tag |
|
||||
| am info <agent> | fiche détaillée (installation, dépendances, site…) |
|
||||
| am status [agent] | état, version, PID, logs |
|
||||
|
||||
**Statuts** : 🟢 running · 🔵 installed (géré par am) · 🟡 external (trouvé
|
||||
sur le PATH) · ⚪ not-installed · 🔴 not-installable (SaaS/desktop)
|
||||
|
||||
### 📦 Installer et gérer
|
||||
|
||||
| Commande | Rôle |
|
||||
|----------|------|
|
||||
| am install <agent> | installe (dépendances vérifiées et proposées) |
|
||||
| am install <agent> --method pip | choisit une méthode d'installation |
|
||||
| am update <agent> | met à jour vers la dernière version connue |
|
||||
| am uninstall <agent> | désinstalle et nettoie (--purge : logs + config) |
|
||||
| am export / am import | sauvegarde et restaure config + état |
|
||||
|
||||
### 🚀 Exécuter
|
||||
|
||||
| Commande | Rôle |
|
||||
|----------|------|
|
||||
| am start <agent> | avant-plan (Ctrl-C pour quitter) |
|
||||
| am start <agent> --background --env KEY=VALEUR | détaché, PID et log gérés |
|
||||
| am stop <agent> | arrêt gracieux puis forcé (--force : immédiat) |
|
||||
| am restart <agent> | arrête puis redémarre |
|
||||
| am run <agent> [args…] | exécution directe, sans gestion de processus |
|
||||
|
||||
### 🧰 Système
|
||||
|
||||
| Commande | Rôle |
|
||||
|----------|------|
|
||||
| am doctor | vérifie outils, config, chemins — avec commandes d'installation |
|
||||
| am doctor --fix | répare ce qui peut l'être, propose d'installer les outils manquants |
|
||||
| am config show / edit / add | gère votre configuration |
|
||||
| am completion <shell> | script de complétion (bash, zsh, fish, powershell) |
|
||||
| am self-update | met à jour am lui-même (si configuré) |
|
||||
| am | shell interactif avec Tab et historique |
|
||||
|
||||
---
|
||||
|
||||
## Options globales
|
||||
## 🧩 Dépendances : am s'en occupe
|
||||
|
||||
Toutes les options globales fonctionnent avant **ou après** la sous-commande.
|
||||
Avant chaque installation, am vérifie les **prérequis** déclarés pour
|
||||
l'agent (ex. node >= 18 pour Claude Code). S'il manque un outil :
|
||||
|
||||
| Option | Description |
|
||||
|--------|-------------|
|
||||
| -c, --config <fichier> | fichier de configuration alternatif |
|
||||
| -v, --verbose | affiche chaque commande exécutée et les détails |
|
||||
| -q, --quiet | uniquement les erreurs |
|
||||
1. il **détecte votre système** — Windows (scoop puis winget), Linux
|
||||
(apt / dnf / pacman / apk selon la distribution), macOS (brew) ;
|
||||
2. il **propose la commande exacte** et peut l'exécuter à votre place
|
||||
(confirmation demandée, ou --yes) :
|
||||
|
||||
$ am install claude-code
|
||||
dependency 'node' is missing
|
||||
Run the detected installer for Windows? -> scoop install nodejs-lts [y/N]
|
||||
|
||||
Si vous refusez, l'installation s'arrête avec le mode d'emploi :
|
||||
|
||||
error: agent 'claude-code' has unmet dependencies:
|
||||
- node: not found on PATH (minimum: 18.0.0)
|
||||
on Windows: scoop install nodejs-lts | winget install OpenJS.NodeJS.LTS
|
||||
|
||||
am doctor affiche la même aide pour tous les outils de l'environnement.
|
||||
Les dépendances des paquets (les modules npm/pip de l'agent lui-même) sont,
|
||||
elles, installées automatiquement par npm/pip/cargo dans un **répertoire
|
||||
local isolé** (virtualenv privé, --prefix npm, GOBIN local…) — votre
|
||||
système n'est jamais touché.
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Options globales
|
||||
|
||||
Disponibles avant **ou après** la sous-commande.
|
||||
|
||||
| Option | Effet |
|
||||
|--------|-------|
|
||||
| -y, --yes | répond oui à toutes les confirmations |
|
||||
| --dry-run | simule l'action (aucune écriture, aucun téléchargement) |
|
||||
| --json | sortie JSON stable sur stdout (les messages vont sur stderr) |
|
||||
| --no-color | désactive les couleurs ANSI |
|
||||
| -h, --help / -V, --version | aide / version |
|
||||
| --dry-run | simule sans rien modifier (idéal pour essayer) |
|
||||
| --json | sortie JSON stable pour vos scripts |
|
||||
| -v, --verbose | affiche chaque commande exécutée |
|
||||
| -q, --quiet | uniquement les erreurs |
|
||||
| --no-color | désactive les couleurs |
|
||||
| -c, --config <fichier> | configuration alternative |
|
||||
|
||||
---
|
||||
|
||||
## Fichier de configuration
|
||||
## 👥 Groupes, alias et shell interactif
|
||||
|
||||
### Emplacements (par ordre de priorité)
|
||||
am start cc # alias (cc -> claude-code)
|
||||
am start group:dev # démarre tout un groupe en arrière-plan
|
||||
am stop group:dev
|
||||
|
||||
1. --config <fichier> (ou la variable d'environnement AGENT_MANAGER_CONFIG)
|
||||
am # shell interactif :
|
||||
am> inst<Tab> # complétion Tab : commandes, agents, groupes, options
|
||||
am> install jcode
|
||||
am> exit # historique persistant (flèches haut/bas)
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Personnalisation
|
||||
|
||||
### Fichiers de configuration (par priorité)
|
||||
|
||||
1. --config <fichier>
|
||||
2. ./agent-manager.yaml (répertoire courant)
|
||||
3. ~/.config/agent-manager/config.yaml
|
||||
(Windows : %APPDATA%\agent-manager\config.yaml)
|
||||
4. catalogue par défaut embarqué dans le binaire
|
||||
4. catalogue embarqué (72 agents)
|
||||
|
||||
Le fichier trouvé **surcharge/complète** le catalogue embarqué : un agent
|
||||
défini par l'utilisateur remplace celui du même nom ; les autres s'ajoutent.
|
||||
Vos définitions **complètent ou surchargent** le catalogue par nom.
|
||||
|
||||
### Schéma (extrait)
|
||||
|
||||
version: "1.0"
|
||||
|
||||
settings:
|
||||
install_dir: null # défaut: ~/.local/share/agent-manager/agents
|
||||
log_dir: null # défaut: ~/.local/state/agent-manager/logs
|
||||
default_shell: null # shell pour les scripts d'installation
|
||||
auto_install_deps: true # proposer d'installer les dépendances manquantes
|
||||
confirm_before_run: true # confirmer avant d'exécuter un script d'installation
|
||||
stop_timeout_secs: 5 # délai SIGTERM -> SIGKILL
|
||||
self_update_repo: null # "owner/repo" pour am self-update
|
||||
|
||||
aliases:
|
||||
cc: claude-code # am start cc == am start claude-code
|
||||
|
||||
groups:
|
||||
dev: [claude-code, aider, codex]
|
||||
|
||||
include: # modularité : autres fichiers (chemins relatifs)
|
||||
- agents-perso.yaml
|
||||
|
||||
agents:
|
||||
- name: claude-code
|
||||
display_name: "Claude Code"
|
||||
description: "..."
|
||||
category: coding-agent
|
||||
website: https://github.com/anthropics/claude-code
|
||||
install:
|
||||
type: npm
|
||||
package: "@anthropic-ai/claude-code"
|
||||
# args: ["--omit=optional"] # arguments supplémentaires
|
||||
# env: { FOO: bar } # environnement de l'installeur
|
||||
# methods: [...] # méthodes alternatives (--method)
|
||||
# post_install: ["claude setup"] # commandes après installation
|
||||
dependencies:
|
||||
- { name: node, min_version: "18.0.0", install_hint: "https://nodejs.org" }
|
||||
run: claude
|
||||
args: [] # arguments par défaut
|
||||
env: {} # variables d'environnement par défaut
|
||||
tags: [anthropic]
|
||||
installable: true # false = listé mais non installable (SaaS/desktop)
|
||||
note: null # explication affichée avec installable: false
|
||||
platforms: [] # linux | macos | windows (vide = tous)
|
||||
|
||||
Les chemins acceptent ~ et les variables d'environnement ($HOME, ${VAR}).
|
||||
La configuration est **validée au démarrage** avec des messages précis
|
||||
(agent 'x': 'run' is required when installable, champs inconnus rejetés,
|
||||
doublons détectés).
|
||||
|
||||
---
|
||||
|
||||
## Ajouter un agent
|
||||
|
||||
Créez ~/.config/agent-manager/config.yaml (am config edit) ou un fichier
|
||||
inclus (am config add mes-agents.yaml) puis :
|
||||
### Ajouter votre agent
|
||||
|
||||
# ~/.config/agent-manager/config.yaml (ou am config add mon-fichier.yaml)
|
||||
version: "1.0"
|
||||
agents:
|
||||
# paquet npm
|
||||
- name: mon-agent-npm
|
||||
- name: mon-agent
|
||||
display_name: "Mon Agent"
|
||||
install: { type: npm, package: mon-agent }
|
||||
dependencies:
|
||||
- { name: node, min_version: "18.0.0", install_hint: "https://nodejs.org" }
|
||||
run: mon-agent
|
||||
|
||||
# paquet pip (virtualenv privé)
|
||||
- name: mon-agent-python
|
||||
display_name: "Mon Agent Python"
|
||||
install: { type: pip, package: mon-agent-python }
|
||||
dependencies:
|
||||
- { name: python, min_version: "3.10.0", install_hint: "https://python.org" }
|
||||
run: mon-agent
|
||||
|
||||
# binaire GitHub Releases (asset choisi selon plateforme/arch)
|
||||
- name: mon-binaire
|
||||
display_name: "Mon Binaire"
|
||||
install:
|
||||
type: binary
|
||||
repo: owner/repo
|
||||
binary: mon-binaire # nom de l'exécutable attendu
|
||||
checksum: null # ou "sha256:..."
|
||||
run: mon-binaire
|
||||
|
||||
# binaire via URL directe
|
||||
- name: mon-binaire-2
|
||||
display_name: "Mon Binaire 2"
|
||||
install:
|
||||
type: binary
|
||||
url: "https://example.com/dl/mon-bin.tar.gz"
|
||||
run: mon-bin
|
||||
|
||||
# script d'installation (téléchargé PUIS exécuté, jamais curl|sh)
|
||||
- name: mon-script
|
||||
display_name: "Mon Script"
|
||||
install:
|
||||
type: curl
|
||||
script: "https://example.com/install.sh"
|
||||
run: mon-script
|
||||
platforms: [linux, macos]
|
||||
|
||||
# dépôt git + build
|
||||
- name: mon-git
|
||||
display_name: "Mon Git"
|
||||
install:
|
||||
type: git
|
||||
repo: "https://github.com/owner/repo"
|
||||
build: ["cargo", "build", "--release"] # ou "make build" (chaîne)
|
||||
binary_path: target/release/mon-git # copié dans le bin dir
|
||||
run: mon-git
|
||||
|
||||
# application desktop / SaaS : listée mais non installable
|
||||
- name: mon-saas
|
||||
display_name: "Mon SaaS"
|
||||
installable: false
|
||||
note: "SaaS — voir https://example.com"
|
||||
|
||||
Puis : am config validate, am install mon-agent-npm, etc.
|
||||
Autres méthodes : pip/uv (virtualenv privé), cargo, go, bun, binaire depuis
|
||||
Gitea/GitHub Releases (repo: owner/repo), URL directe, script d'installation
|
||||
(type: curl) et dépôt git avec build (build + binary_path). Les chemins
|
||||
acceptent ~ et les variables d'environnement ($HOME, ${VAR}) ; includes
|
||||
multi-fichiers pris en charge ; configuration validée au démarrage.
|
||||
|
||||
---
|
||||
|
||||
## Alias, groupes et mode interactif
|
||||
## 🔒 Sécurité
|
||||
|
||||
am start cc # alias -> claude-code
|
||||
am start group:dev # démarre tout le groupe "dev" en arrière-plan
|
||||
am stop group:dev # arrête tout le groupe
|
||||
am # shell interactif (rustyline) :
|
||||
# am> inst<Tab> # complétion Tab : commandes, agents, alias,
|
||||
# am> install jcode # group:xxx, options (--background, ...)
|
||||
# am> start jcode --background
|
||||
# am> exit
|
||||
|
||||
Le shell interactif offre la **complétion par Tab** (commandes, noms
|
||||
d'agents, alias, groupes, options) et un **historique persistant**
|
||||
(flèches haut/bas, fichier history.txt dans le répertoire d'état).
|
||||
- les scripts d'installation sont **téléchargés puis exécutés séparément** —
|
||||
jamais de curl pipé vers sh ; --verbose les affiche ;
|
||||
- **--dry-run** simule n'importe quelle action sans rien écrire ;
|
||||
- checksums **sha256** vérifiés quand ils sont fournis ;
|
||||
- URL limitées à https/http/file ; extraction d'archives protégée contre le
|
||||
path traversal ;
|
||||
- tout vit dans vos répertoires utilisateur ; rien n'est exécuté avec des
|
||||
privilèges élevés.
|
||||
|
||||
---
|
||||
|
||||
## Gestion des processus
|
||||
## 🖥️ Complétions shell
|
||||
|
||||
- **Avant-plan** (défaut) : la commande hérite de votre terminal ; am attend
|
||||
sa fin et propage son code de sortie. Ctrl-C interrompt l'agent.
|
||||
- **Arrière-plan** (--background) : processus détaché (nouveau groupe de
|
||||
processus), PID enregistré dans state.json, stdout/stderr redirigés vers
|
||||
~/.local/state/agent-manager/logs/<agent>.log. Si l'agent crashe au
|
||||
démarrage, am affiche la fin du log et échoue.
|
||||
- **Arrêt** : am stop <agent> envoie SIGTERM (Windows : taskkill), attend
|
||||
stop_timeout_secs, puis SIGKILL (taskkill /F /T). --force court-circuite
|
||||
la phase gracieuse. Les PID périmés sont nettoyés automatiquement.
|
||||
- Toutes les commandes exécutées sont journalisées avec horodatage dans
|
||||
<log_dir>/agent-manager.log (--verbose les affiche aussi).
|
||||
|
||||
---
|
||||
|
||||
## Sécurité
|
||||
|
||||
- Les scripts d'installation (curl) sont **téléchargés puis exécutés
|
||||
séparément** — jamais de curl pipé directement vers sh. --verbose affiche
|
||||
leur contenu, confirm_before_run demande confirmation.
|
||||
- --dry-run simule n'importe quelle action sans rien écrire.
|
||||
- URL limitées à https, http et file (tests locaux).
|
||||
- Checksums sha256 vérifiés quand ils sont fournis dans la config.
|
||||
- Rien n'est exécuté avec des privilèges élevés ; tout vit dans les
|
||||
répertoires utilisateur. Les archives sont extraites avec protection
|
||||
contre le path traversal (zip-slip).
|
||||
|
||||
---
|
||||
|
||||
## Tests
|
||||
|
||||
cargo test # tests unitaires + intégration (config, versions,
|
||||
# dry-run, processus, doctor, installateurs)
|
||||
cargo test -- --nocapture
|
||||
|
||||
Les tests d'installation utilisent des *mocks* et le mode dry-run : aucun
|
||||
réseau, aucune installation réelle. Les tests de processus spawnent
|
||||
sleep/ping et vérifient le cycle démarrage → détection → arrêt.
|
||||
|
||||
---
|
||||
|
||||
## Complétions shell
|
||||
|
||||
am completion bash > completions/am.bash # fournies dans completions/
|
||||
am completion bash > completions/am.bash
|
||||
am completion zsh > completions/_am
|
||||
am completion fish > completions/am.fish
|
||||
am completion powershell > completions/_am.ps1
|
||||
|
||||
# bash
|
||||
source completions/am.bash
|
||||
# zsh
|
||||
fpath+=(completions) && compinit
|
||||
# fish
|
||||
cp completions/am.fish ~/.config/fish/completions/am.fish
|
||||
---
|
||||
|
||||
## ❓ FAQ
|
||||
|
||||
**Où sont installés les agents ?**
|
||||
~/.local/share/agent-manager/agents (Linux), %LOCALAPPDATA%\\agent-manager\\agents
|
||||
(Windows) — l'état et les logs dans ~/.local/state/agent-manager (Linux) ou
|
||||
%LOCALAPPDATA%\\agent-manager (Windows).
|
||||
|
||||
**Comment mettre à jour am ?** Relancez l'installeur one-liner (ou
|
||||
am self-update si le dépôt de release est configuré).
|
||||
|
||||
**Comment désinstaller am ?** Supprimez le binaire et le répertoire
|
||||
d'état ; les agents installés restent utilisables en les supprimant avec
|
||||
am uninstall avant.
|
||||
|
||||
**Pourquoi le binaire Linux est statique ?** Pour fonctionner partout,
|
||||
Debian 12 (glibc 2.36) comprise, sans dépendance système.
|
||||
|
||||
**Un agent me demande une clé API.** am ne gère pas les secrets : il lance
|
||||
l'agent, qui fera sa propre configuration. Passez des variables avec
|
||||
--env KEY=VALEUR si besoin.
|
||||
|
||||
---
|
||||
|
||||
## Structure du projet
|
||||
## 🧑💻 Pour les développeurs
|
||||
|
||||
### Compiler et tester
|
||||
|
||||
git clone https://git.dracodev.net/Projets/agent-manager.git
|
||||
cd agent-manager
|
||||
cargo build --release # binaire dans target/release/am
|
||||
cargo test # 45+ tests (config, processus, dry-run, complétion…)
|
||||
|
||||
### Architecture
|
||||
|
||||
src/
|
||||
main.rs # point d'entrée (binaire am)
|
||||
lib.rs # crate bibliothèque (testable)
|
||||
cli.rs # définition clap des commandes
|
||||
app.rs # contexte applicatif (config, chemins, état, log)
|
||||
config.rs # schéma YAML, chargement, includes, fusion, validation
|
||||
catalog.rs # catalogue fusionné : lookup, alias, groupes, recherche
|
||||
state.rs # base locale JSON (installations, PID)
|
||||
runner.rs # exécution de commandes (réelle / mock / dry-run)
|
||||
process.rs # spawn détaché, détection, SIGTERM/SIGKILL, logs
|
||||
download.rs # téléchargement, checksums, releases GitHub, archives
|
||||
deps.rs # vérification des dépendances (node >= 18, ...)
|
||||
doctor.rs # diagnostic d'environnement + réparations
|
||||
output.rs # logger horodaté, tableaux, JSON, couleurs
|
||||
installers/ # npm, bun, pip, uv, cargo, go, curl, binary, git
|
||||
commands/ # une implémentation par commande
|
||||
repl.rs # mode interactif
|
||||
config.yaml # catalogue par défaut (~70 agents, embarqué)
|
||||
tests/ # tests d'intégration
|
||||
completions/ # scripts de complétion générés
|
||||
cli.rs # commandes clap
|
||||
config.rs # schéma YAML, includes, fusion, validation
|
||||
catalog.rs # catalogue : lookup, alias, groupes, recherche
|
||||
deps.rs # vérification des dépendances (min_version, OS)
|
||||
toolchain.rs # détection OS + commandes d'installation (scoop/apt/…)
|
||||
probe.rs # détection d'agents externes (parallèle + cache)
|
||||
installers/ # npm, pip, uv, cargo, go, bun, curl, binary, git
|
||||
process.rs # spawn détaché, signaux, logs
|
||||
state.rs # base locale JSON (installations, PID)
|
||||
runner.rs # exécution de commandes (réelle, mock, dry-run)
|
||||
|
||||
---
|
||||
### Publier une release
|
||||
|
||||
## Limites et feuille de route
|
||||
|
||||
- Les applications desktop (Warp, openyak, Kun, cc-haha) et les SaaS (Devin,
|
||||
Amp, Junie, Cortex, Tabnine, Mentat) sont **listés** avec
|
||||
installable: false et un lien — ils ne sont pas installables localement.
|
||||
- La mise à jour compare la version installée à la dernière connue (registry
|
||||
npm/PyPI/crates.io, tag GitHub) puis réinstalle.
|
||||
- Pistes futures : plugins d'installation dynamiques, notifications Windows
|
||||
natives, intégration tmux, tests d'intégration avec des registres simulés.
|
||||
Les binaires des releases sont construits en conteneur : Windows (MSVC)
|
||||
nativement, **Linux en statique musl** (jamais de binaire glibc récent —
|
||||
voir l'erreur GLIBC). La procédure complète est dans
|
||||
[RELEASING.md](RELEASING.md).
|
||||
|
||||
Reference in New Issue
Block a user