112 lines
6.0 KiB
Markdown
112 lines
6.0 KiB
Markdown
# 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 l’exécution des **agents** / OpenShell sur chemins autorisés.
|
||
|
||
L’**éditeur** et une partie de l’UX 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 « d’intelligence » 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 d’outil, 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 l’hôte sans contrôle : **sandboxes** avec droits dérivés du **type d’agent** 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 d’exécution, outils requis, **politiques OpenShell**, formats d’entrée/sortie, stratégies de rejet (pas de fallback silencieux), journalisation, possibilité d’appeler d’autres agents.
|
||
|
||
Sans cette couche, l’IDE 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** l’agent
|
||
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
|
||
|
||
L’utilisateur ne « choisit pas un agent » dans le flux nominal : il exprime une **intention** (`ask`, `fix`, …). Le **routeur** sélectionne l’agent ou la chaîne d’agents.
|
||
|
||
## 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 d’un 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 d’agents). Pas de contournement par défaut.
|
||
|
||
## Mémoire d’exécution
|
||
|
||
Conserver une mémoire d’exécution **exploitable** : rejouer, auditer, promouvoir une exécution réussie en **recette** versionnée.
|