diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 91e8200..9695767 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -15,6 +15,7 @@ - 🚀 Les dĂ©marrer, arrĂȘter, redĂ©marrer en avant-plan ou en arriĂšre-plan - 🔍 Observer leur Ă©tat, leurs logs, leurs statistiques d'utilisation - đŸ› ïž GĂ©rer dĂ©pendances, alias, groupes, profils, secrets, favoris et annotations +- ⚡ ExĂ©cuter des actions shell via langage naturel avec un agent lĂ©ger (`am ai`) Le tout sans toucher au systĂšme : chaque agent est installĂ© dans un rĂ©pertoire utilisateur isolĂ©. @@ -35,6 +36,7 @@ flowchart TB APP["App
contexte partagé"] CLI_DEF["cli.rs
définition des commandes"] CMD["commands/
dispatch"] + SHELL_AI["shell_ai.rs
agent shell lĂ©ger"] end subgraph DATA["đŸ’Ÿ DonnĂ©es persistantes"] @@ -62,7 +64,9 @@ flowchart TB CLI --> APP REPL --> APP TUI --> APP + WEB --> APP APP --> CLI_DEF + APP --> SHELL_AI APP --> CONFIG APP --> CATALOG APP --> STATE @@ -76,6 +80,7 @@ flowchart TB CMD --> DASH CMD --> STATS CMD --> SESSIONS + SHELL_AI --> CMD ``` --- @@ -166,6 +171,7 @@ src/ ├── playbook.rs ▶ Rejeu pas Ă  pas d'une sĂ©quence d'historique ├── plugins.rs 🔌 Scripts d'extension sur les Ă©vĂ©nements (contrat JSON) ├── models.rs đŸ€– Inventaire des modĂšles locaux (ollama, llama.cpp, LM Studio) +├── shell_ai.rs ⚡ Agent shell lĂ©ger : langage naturel → action shell ├── sync.rs 🔄 Push git de l'Ă©tat (journal, sessions, config) ├── agent_config.rs ⚙ Adaptateurs de configuration post-install (TOML/YAML/JSON/key=value) ├── costs.rs 💰 CoĂ»ts estimĂ©s par agent (tokens in/out, modĂšles de prix) @@ -463,6 +469,7 @@ flowchart TB | `am registry publish/search/install` | Registre communautaire de catalogues (Gitea, manifeste + checksum sha256 vĂ©rifiĂ©) | | `am serve --token [--port]` | API HTTP + WebSocket authentifiĂ©e : stats, run, start, stop, ask — rate limiting par IP, TLS derriĂšre reverse proxy | | `am web [--port]` | Dashboard web local en lecture seule (127.0.0.1), contrats `--json` rĂ©utilisĂ©s | +| `am ai "" [--exec] [--files ]` | **Shell AI** : langage naturel → commande/action shell via agent lĂ©ger (AIChat) ; `--dry-run` par dĂ©faut, confirmation avant exĂ©cution | | `am lab --agents a,b --task ` | Benchmark comparatif (durĂ©e, exit, coĂ»t) sur tĂąches YAML versionnables | | `am sync [--message]` | Sauvegarde git de l'Ă©tat (journal, sessions, config — secrets exclus) | | `am migrate export/import` | Bundle de transfert machine A → B (config + Ă©tat + historique) | @@ -711,6 +718,57 @@ flowchart LR --- +## ⚡ Shell AI + +`am ai` (alias `am shell`) est une commande dĂ©diĂ©e aux **actions shell via langage naturel**. Elle repose sur un agent lĂ©ger (par dĂ©faut **AIChat**, installĂ© comme n'importe quel autre agent via le catalogue) et rĂ©utilise le registre de providers LLM (`providers.rs`) pour choisir le modĂšle le plus rapide/cheap. + +### Flux d'exĂ©cution + +```mermaid +sequenceDiagram + autonumber + participant User + participant cli as cli.rs + participant shell_ai as shell_ai.rs + participant catalog as catalog.rs + participant providers as providers.rs + participant runner as runner.rs + participant aichat as aichat (agent) + + User->>cli: am ai "traite les JSON" + cli->>shell_ai: parse args (--exec, --files) + shell_ai->>catalog: agent "aichat" installĂ© ? + catalog-->>shell_ai: Ok / install + shell_ai->>providers: provider & modĂšle par dĂ©faut + providers-->>shell_ai: config (ollama / cheap cloud) + shell_ai->>shell_ai: injecte cwd + fichiers (--files) + shell_ai->>runner: exec aichat -f . -e "..." + runner->>aichat: lancement processus + aichat-->>runner: commande gĂ©nĂ©rĂ©e / exĂ©cutĂ©e + runner-->>shell_ai: output + exit code + shell_ai->>shell_ai: journalise Ă©vĂ©nement shell_ai + shell_ai-->>User: rĂ©sultat ou confirmation +``` + +### SĂ©curitĂ© + +| RĂšgle | DĂ©tail | +|---|---| +| `--dry-run` par dĂ©faut | Aucune commande modifiante n'est exĂ©cutĂ©e sans confirmation | +| Classification risk/certainty | InspirĂ© d'AI CLI : chaque commande est classĂ©e `safe` ou `risky` | +| Confirmation utilisateur | Les commandes `risky` demandent une validation explicite | +| Mode local possible | Support d'Ollama via `providers.rs` pour ne pas sortir les donnĂ©es | + +### DĂ©pendances + +- `src/shell_ai.rs` : parsing du prompt, gestion des flags, appel Ă  l'agent +- `src/providers.rs` : rĂ©solution du provider/modĂšle +- `src/runner.rs` : exĂ©cution du binaire `aichat` +- `src/events.rs` : journalisation `shell_ai` dans le journal JSONL +- `config.yaml` : dĂ©finition de l'agent `aichat` + alias `ai` + +--- + ## 📚 RĂ©fĂ©rences - `src/lib.rs:4` : documentation d'architecture du crate diff --git a/ROADMAP.md b/ROADMAP.md index 0d109d6..d7be391 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -350,14 +350,89 @@ consultable, reprenable, archivable. ### Axe 13 — ⚡ Shell AI & Action ⭐ -🎯 Transformer une commande en langage naturel en une action shell exĂ©cutĂ©e par un agent lĂ©ger, rapide et contextuel. +🎯 Transformer une commande en langage naturel en une action shell exĂ©cutĂ©e par un agent lĂ©ger, rapide et contextuel, sans dĂ©marrer un gros coding agent. -| FonctionnalitĂ© | Effort | Phase | +**Contexte :** `am` gĂšre aujourd'hui ~72 agents IA, principalement des *coding agents*, des assistants et des outils SaaS. Aucun n'est un **shell assistant pur** — lĂ©ger, rapide, conçu pour transformer une phrase en commande ou action sur le systĂšme de fichiers local (ex. *"traite les fichiers JSON du dossier courant pour extraire les clĂ©s uniques"*). + +--- + +#### 13.1 Agents shell AI dĂ©couverts (non prĂ©sents dans le catalogue) + +| Outil | Repo | Langage | Force | MaturitĂ© | +|---|---|---|---|---| +| **AIChat** | `sigoden/aichat` | Rust | Shell assistant natif, RAG, agents, fichiers/rĂ©pertoires, 20+ providers | **10.4k stars**, trĂšs actif | +| **ShellGPT** | `TheR1D/shell_gpt` | Python | GĂ©nĂšre/exĂ©cute commandes shell, code, docs | TrĂšs connu, mature | +| **Fabric** | `danielmiessler/fabric` | Go | Patterns AI (summarize, extract wisdom), CLI | TrĂšs populaire, orientĂ© contenu/texte | +| **Shell AI** | `nishant9083/shell-ai` | TypeScript | Agent ReAct local via Ollama, MCP, filesystem tools | Plus rĂ©cent, prometteur mais jeune | +| **AI CLI** | `kriserickson/ai-cli` | Rust | Natural language → commandes shell avec safety policy (`risk` / `certainty`) | Petit, simple, moins connu | + +--- + +#### 13.2 Recommandation : AIChat (`sigoden/aichat`) + +**Choix privilĂ©giĂ© pour la fonction Shell AI.** + +| Avantage | DĂ©tails | +|---|---| +| **LĂ©ger & rapide** | Rust, binaire unique, cold start rapide, idĂ©al pour RPi 4 | +| **Shell Assistant natif** | GĂ©nĂšre et exĂ©cute des commandes shell Ă  partir du langage naturel | +| **Multi-provider** | OpenAI, Claude, Gemini, DeepSeek, Groq, Ollama, OpenRouter
 | +| **Passage de contexte** | `aichat -f .` injecte le dossier ou les fichiers dans le prompt | +| **Mode exĂ©cution** | `aichat -e "..."` exĂ©cute directement, mode conversationnel sinon | +| **FacilitĂ© d'intĂ©gration** | Release binaire GitHub, installable via `binary` dans le catalogue | + +Exemples d'usage ciblĂ©s : + +```bash +# Lister et traiter les fichiers JSON du dossier courant +aichat -f . -e "liste tous les fichiers JSON et extrait les clĂ©s uniques" + +# RĂ©sumer un dossier de fichiers +aichat -f . "rĂ©sume les donnĂ©es de ces fichiers JSON" +``` + +--- + +#### 13.3 FonctionnalitĂ©s prĂ©vues + +| FonctionnalitĂ© | Description | Effort | Phase | +|---|---|---|---| +| **Catalogue : ajouter AIChat** | DĂ©finition `AgentDef` + alias `ai` → `aichat` | S | P1 | +| **Commande `am ai `** | Lancer AIChat avec le dossier courant comme contexte | S | P3 | +| **Flag `--exec` / `-e`** | Active le mode exĂ©cution directe (`aichat -e`) | S | P3 | +| **Flag `--files `** | Passer fichiers/dossiers spĂ©cifiques en contexte | S | P3 | +| **SĂ©curitĂ© : `--dry-run` par dĂ©faut** | Simuler avant exĂ©cution ; confirmation si modification | M | P3 | +| **Provider configurable** | RĂ©utiliser le registre `providers.rs` (cheap model par dĂ©faut) | M | P3 | +| **Alias intĂ©grĂ©s** | `am shell`, `am do` comme synonymes | S | P3 | +| **Extensions sƓurs** | `am summarize`, `am explain`, `am fix` (voir ci-dessous) | M | P3 | + +--- + +#### 13.4 Risques & garde-fous + +| Risque | Mitigation | +|---|---| +| ExĂ©cution automatique de commandes dangereuses | `--dry-run` par dĂ©faut, confirmation obligatoire avant toute commande `risky` | +| CoĂ»t API rĂ©current | ModĂšle cheap par dĂ©faut (`gpt-4.1-mini`, `gemini-flash`) ou Ollama local | +| Fuite de donnĂ©es sensibles | Support du mode local Ollama, pas d'envoi hors du provider configurĂ© | +| Installation lente sur RPi | Utiliser l'installateur `binary` GitHub Releases plutĂŽt que `cargo` | + +--- + +#### 13.5 IdĂ©es sƓurs (Ă  intĂ©grer ou lier Ă  d'autres axes) + +| Commande | Description | Axe liĂ© | |---|---|---| -| IntĂ©gration d'un agent shell lĂ©ger (`am ai `) | M | P3 | -| ↳ Candidat principal : **AIChat (Rust)** | | | -| Passage de contexte (fichiers/dossiers) via flags | S | P3 | -| Mode exĂ©cution directe (`-e`) vs. conversationnel | S | P3 | +| `am summarize ` | RĂ©sume un fichier ou un dossier via AIChat/Fabric | Axe 13 | +| `am explain ` | Explique une commande shell avant exĂ©cution | Axe 13 | +| `am commit` | GĂ©nĂšre un message de commit depuis `git diff` | Axe 13 / Axe 3 | +| `am review` | Review rapide d'un diff ou d'une PR | Axe 7 | +| `am translate --to en` | Traduit un fichier markdown/doc | Axe 13 | +| `am ask-code "..."` | Pose une question sur le codebase sans lancer un gros agent | Axe 7 | +| `am doc ` | GĂ©nĂšre un README/doc Ă  partir du code | Axe 13 / Axe 7 | +| `am fix` | Corrige une commande shell qui a Ă©chouĂ© | Axe 13 | +| `am note` | Extrait des action items d'un texte/rĂ©union | Axe 10 | +| `am search-web "..."` | Recherche web rapide et rĂ©ponse synthĂ©tisĂ©e | Axe 7 | ---