smart_ide/docs/system-architecture.md
2026-03-21 17:43:45 +01:00

112 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Architecture système — IDE, agents, runtime, mémoire
## Répartition physique (première cible)
Pour le **premier déploiement**, un **poste Linux** (client) établit des sessions **SSH** vers un **serveur** qui concentre :
- Ollama, AnythingLLM (et extensions du socle IA) ;
- les **dépôts** et lexécution des **agents** / OpenShell sur chemins autorisés.
L**éditeur** et une partie de lUX peuvent rester sur le client ; le **gateway**, le **policy-runtime** et les **knowledge-services** (fichiers RAG, workspaces AnythingLLM) sont cohérents **côté serveur**, sauf architecture hybride explicitement documentée. Voir [deployment-target.md](./deployment-target.md).
## Couches fonctionnelles (vue cible)
| Couche | Rôle |
|--------|------|
| **Agents `ia_dev`** | Noyau **métier et opératoire** (existant) ; sous-agents, recettes, tools |
| **OpenShell** | **Sécurité et exécution** : sandboxes, politiques, résolution contrôlée |
| **Éditeur (ex. Lapce)** | **Interaction** : texte léger, terminal, palette, timeline, UX intentionnelle |
| **Orchestrateur maison** | **Routage** : pas « dintelligence » au sens LLM, mais décision de flux |
| **Ollama** | Backend d**inférence** locale |
| **AnythingLLM** | **Mémoire documentaire** et RAG ; **un workspace par projet** ([anythingllm-workspaces.md](./anythingllm-workspaces.md)) |
| **ONLYOFFICE** | Backend **documentaire métier** (documents, feuilles, présentations) |
Flux type : demande utilisateur → orchestrateur → préparation (scripts / tools génériques) → agents → besoin LLM → Ollama ; besoin doc / RAG → AnythingLLM ; besoin bureautique → ONLYOFFICE.
## Orchestrateur — décisions de routage
Décider notamment :
- quelle **commande** utilisateur appelle quel **agent principal** ;
- quel agent appelle quel **sous-agent** ;
- quand privilégier un **script** vs un **tool générique** vs `ia_dev` ;
- quand `ia_dev` peut **escalader** vers Ollama ;
- quand interroger **AnythingLLM** ;
- quand passer par **ONLYOFFICE** ;
- quand **refuser**.
## Descripteur stable par agent
Chaque agent devrait exposer au minimum : **nom**, **rôle**, **entrées**, **sorties**, **droits**, **dépendances**, **scripts** appelés, **modèles** éventuels, **préconditions**, **postconditions**, **timeouts**, **coût**, **niveau de risque**.
Un **protocole unique** couvre les implémentations hétérogènes (script, workflow, wrapper doutil, appel IA).
Hiérarchie agent → sous-agent : à **formaliser** explicitement pour éviter un graphe implicite ingouvernable.
## Événements normalisés (exemples)
`started`, `tool_selected`, `script_started`, `model_called`, `waiting_validation`, `completed`, `failed`, `rolled_back`, `artifact_created`.
Sortie **événementielle uniforme** vers léditeur ; **journalisation** ; possibilité de **rejouer**, diagnostiquer, **convertir en recette** stable.
## Sécurité — OpenShell central
- Chaque nouvelle résolution devrait pouvoir devenir **recipe**, **tool** ou **sous-agent** stable (travail des commandes UX de haut niveau).
- Les agents ne devraient **pas** exécuter directement sur lhôte sans contrôle : **sandboxes** avec droits dérivés du **type dagent** et du **projet**.
Exemples de **profils de policy** : lecture seule ; lecture + scripts locaux ; écriture bornée ; déploiement pprod / prod ; génération documentaire ; accès tickets ; accès base ; accès ONLYOFFICE.
**Pas de fallback implicite** non spécifié : refus ou erreur explicite selon les règles du projet.
## Couche de normalisation (registre agents)
Registre unifié des agents `ia_dev`, chacun exposé comme **objet standardisé** :
- identité, catégorie, **commandes déclenchantes**, permissions, environnements compatibles, mode dexécution, outils requis, **politiques OpenShell**, formats dentrée/sortie, stratégies de rejet (pas de fallback silencieux), journalisation, possibilité dappeler dautres agents.
Sans cette couche, lIDE reste dépendant de **conventions implicites** du dépôt.
## Agent gateway (adaptateur)
Ne pas brancher le dépôt `ia_dev` directement dans léditeur : passer par une **agent gateway** qui :
1. Charge le **registre**
2. **Valide** les permissions
3. **Résout** les dépendances
4. Ouvre la **sandbox OpenShell** adaptée
5. **Injecte** le contexte autorisé
6. **Lance** lagent
7. **Capture** les événements
8. **Uniformise** les sorties
9. **Publie** le flux vers léditeur
10. **Journalise**
11. Gère **rollbacks** et statuts
## Modules logiciels (découpage)
| Module | Responsabilité |
|--------|----------------|
| **editor-shell** | Éditeur texte léger, terminal, explorer **mode expert**, onglets, palette de commandes, timeline, UX |
| **agent-gateway** | Adaptateur uniforme UX ↔ `ia_dev` |
| **policy-runtime** | OpenShell, profils de policy, providers, sandboxes, journaux |
| **knowledge-services** | AnythingLLM, mémoire projet, index documentaire, routage RAG |
| **doc-services** | ONLYOFFICE, flux `present`, `write`, `sheet` |
Les **agents** restent le noyau opératoire ; les modules encadrent et exposent.
## UX — masquage des agents
Lutilisateur ne « choisit pas un agent » dans le flux nominal : il exprime une **intention** (`ask`, `fix`, …). Le **routeur** sélectionne lagent ou la chaîne dagents.
## Socle éditeur : Lapce
**Lapce** (open source, Rust, rendu natif / GPU) est le candidat retenu pour un **éditeur rapide et léger** avec agents, au lieu dun IDE historique très chargé. Positionnement aligné avec le rôle « coquille + orchestration + transparence contextuelle » décrit dans [ux-navigation-model.md](./ux-navigation-model.md).
## Taxonomie des droits
Les droits doivent être **nommés**, **vérifiables** et **traçables** (lien avec OpenShell et le registre dagents). Pas de contournement par défaut.
## Mémoire dexécution
Conserver une mémoire dexécution **exploitable** : rejouer, auditer, promouvoir une exécution réussie en **recette** versionnée.