Versions fichier
Automatique — project/.versions/
- Déclenché : Ctrl+S, autosave, modification agent
- v1 créée à la création du fichier
- Rattrapage à l'ouverture du modal si fichier legacy
Mon Agent IA
Architecture · LLM · Docker · Portainer · MySQL · SonarQube
Stack complète de Mon Agent IA : application PHP, intelligence artificielle, conteneurs preview par projet, qualité du code et provisioning automatique. Version 2.6 — historique des releases.
Mon Agent IA est une application PHP 8.2+ / Apache dont seul le dossier
public/ est exposé. La logique métier vit dans includes/,
les données dans data/ (hors web).
public/ · includes/ · data/
maia-ws-{project_id} — Apache/PHP
| Couche | Rôle |
|---|---|
public/ | Interface web, API JSON, proxy preview, symlinks workspace |
includes/ | Auth, projets, agent, Portainer, Sonar, versions, LLM |
data/ | Utilisateurs, projets, conversations, logs, settings, clés SSH |
docker/ | Images app et preview PHP |
| Conteneurs preview | Exécution isolée du code utilisateur (volume partagé avec le workspace) |
/var/www/html/
├── config.php # Config (secrets → variables d'env en prod)
├── public/ # DocumentRoot Apache
│ ├── index.php, guide.php, technique.php
│ ├── chat.php, code.php, preview.php, terminal.php
│ ├── api/ # Endpoints JSON (+ terminal-session.php)
│ └── ws/{id}/ → symlink # Listing workspace
├── includes/
│ ├── ProjectStore.php # CRUD projets, README, preview
│ ├── ProjectPreviewManager.php
│ ├── CodeAgent.php # Agent (blocs <<<file>>>)
│ ├── Workspace.php # Fichiers + versions
│ ├── LlmClientFactory.php # Open WebUI / routeur API
│ └── …
├── data/
│ ├── projects-by-user/{user}/{id}/
│ │ ├── project.json
│ │ ├── workspace/
│ │ ├── conversations/
│ │ ├── .versions/ # Historique fichiers
│ │ └── .releases/ # Snapshots projet
│ ├── settings/ # llm.json, features.json, preprompts
│ └── logs/
└── docker/
├── app/
└── preview-php/
Le chat et l'Espace Code partagent la même couche LLM, configurable en administration.
| Composant | Rôle |
|---|---|
data/settings/llm.json | Fournisseur actif, clé et modèle du routeur API |
LlmSettings.php | Lecture / écriture, surcharge par variables d'env |
OpenWebUIClient | API /v1/chat/completions + streaming SSE |
OpenAiCompatibleChatClient | Client OpenAI-compatible (routeur API) |
| Variable | Description |
|---|---|
LLM_PROVIDER | openwebui ou routeur API |
OPENWEBUI_API_URL | URL de l'instance Open WebUI |
OPENWEBUI_API_KEY | Clé API Open WebUI |
| Routeur API | URL, clé et modèle — Admin → Paramètres ou data/settings/llm.json (surcharge possible via variables d'environnement, voir config.example.php) |
L'agent modifie les fichiers réels du workspace via des blocs
<<<file path="…">>>. Il ne se connecte pas en SSH :
l'utilisateur exécute les commandes shell si besoin.
api/code-chat.php (flux SSE).CodeAgent + LlmClientFactory → réponse LLM.Workspace::write() — écriture disque.php -l + test HTTP, max 3 corrections).<<<choices>>>.| Fichier clé | Rôle |
|---|---|
CodeAgent.php | Parse opérations, applique write/mkdir/delete |
Workspace.php | CRUD fichiers, versions, upload |
AgentUndoStore.php | Annulation dernière série de modifs agent |
ConversationStore.php | Discussions code par projet |
Chaque projet Espace Code déclenche le déploiement d'une stack Docker via l'
API REST Portainer. La stack s'appelle maia-ws-{project_id}
sur le réseau llm_default (configurable).
| Modèle | ID | Image | Port app |
|---|---|---|---|
| Site web (PHP) | site-web | maia-preview-php:latest | 80 |
workspace/ du projet.PORTAINER_HOST_DATA_PATH/home/mike/docker_config/llm).{HOST}/data/projects-by-user/{user}/{id}/workspace dans le conteneur.
| Variable | Description |
|---|---|
PORTAINER_URL | URL API Portainer |
PORTAINER_TOKEN | Jeton d'accès API |
PORTAINER_ENDPOINT_ID | ID de l'endpoint Docker |
PORTAINER_HOST_DATA_PATH | Chemin hôte des données projet |
PORTAINER_NETWORK | Réseau Docker (défaut llm_default) |
PORTAINER_SSH_CONNECT_HOST | IP/DNS pour SSH vers conteneurs |
Deux URLs distinctes par projet :
| URL | Rôle |
|---|---|
/ws/{id}/ | Listing Apache du workspace (symlink) |
/preview/{id}/ | Proxy HTTP vers le conteneur PHP |
workspace/README.md (section auto-générée).composer, pip, logs, tests CLI./terminal.php (xterm.js, module web_terminal) — auth root/mot de passe preview via sshpass, TERM=xterm-256color, poll séquentiel.
À la création d'un projet, ProjectDatabaseProvisioner crée automatiquement
une base et un utilisateur dédiés via un compte MySQL admin configuré dans
config.php.
| Variable | Description |
|---|---|
CHATBOT_MYSQL_HOST | Hôte MySQL admin |
CHATBOT_MYSQL_PORT | Port (défaut 3306) |
CHATBOT_MYSQL_ADMIN_USER | Compte avec droits CREATE DATABASE / USER |
CHATBOT_MYSQL_ADMIN_PASSWORD | Mot de passe admin |
Les identifiants projet sont injectés dans le README.md du workspace et exportés dans l'archive ZIP.
Automatique — project/.versions/
Manuel — project/.releases/
VERSIONS.md + CHANGELOG.mdDiscussions code : renommage au clic, recherche dans la discussion active (bouton loupe, surlignage côté client).
Analyse statique déclenchée depuis l'Espace Code. Le scan s'exécute via le conteneur
sonar-scanner-cli et communique avec le serveur SonarQube configuré.
.maia/rapport-analyse.md + .maia/rapport-analyse.json| Variable | Description |
|---|---|
SONARQUBE_ENABLED | Activer le module |
SONARQUBE_URL | URL serveur SonarQube |
SONARQUBE_TOKEN | Jeton d'authentification |
SONARQUBE_SCANNER_IMAGE | Image scanner (défaut sonarsource/sonar-scanner-cli) |
Fichier data/settings/features.json — lu par AppFeatures.php, activable en admin.
| Clé | Effet |
|---|---|
project_export | Export ZIP projet (+ dump SQL MySQL) |
project_versions | Snapshots projet + changelog IA |
file_versions | Historique automatique par fichier |
code_sonar | Analyse qualité SonarQube |
php_validation | Vérification PHP post-agent |
agent_choices | Boutons <<<choices>>> |
ws_access | Protection mot de passe /ws/ |
web_terminal | Terminal SSH web (/terminal.php) |
Modèle de projet : data/settings/project-models.json (Site web PHP).
| Endpoint | Rôle |
|---|---|
api/chat.php | Chat général (SSE) |
api/code-chat.php | Agent code (SSE + application fichiers) |
api/files.php | Arbre, lecture, écriture, versions fichier |
api/projects.php | CRUD projets, export, versions projet, restore_version |
api/code-conversations.php | Discussions code (list, create, rename…) |
api/upload.php | Import fichiers workspace |
api/share-conversations.php | Partage lecture seule |
api/terminal-session.php | Session terminal web SSH (start/poll/send/resize/stop) |
| Composant | Version |
|---|---|
| PHP | 8.2+ (extensions curl, json, mbstring, pdo_mysql, zip) |
| Apache | 2.4 — mod_rewrite, DocumentRoot = public/ |
| Open WebUI | Instance accessible (URL + clé API) |
| MySQL / MariaDB | Provisioning BDD par projet |
| Docker + Portainer | Preview conteneurisé par projet |
cd /var/www/html
sudo php scripts/fix-permissions.php
sudo apache2ctl configtest
sudo systemctl reload apache2
sh scripts/build-preview-images.sh # sur le NUC
php scripts/repair-preview-setup.php
Documentation détaillée : README du dépôt, docs/SCHEMA-PROJET.md,
docs/MIGRATION-NOUVELLE-INFRA.md, docs/CHOIX-MODELE-LLM.md.
| Script | Rôle |
|---|---|
scripts/fix-permissions.php | Droits www-data + symlinks public/ws/ |
scripts/build-preview-images.sh | Build image maia-preview-php |
scripts/repair-preview-setup.php | Sync data/.maia-docker/ |
scripts/diagnose-preview-portainer.php | Test config Portainer + dry-run compose |
scripts/ensure-preview-ssh-keys.php | Paire clés SSH plateforme |
config.php et data/ hors DocumentRoot./ws/ : authentification requise.data/logs/app-AAAA-MM-JJ.log.Guide utilisateur pour le mode d'emploi, accueil pour la présentation produit.