mirror of
https://github.com/JMP-MS/ASPIC.git
synced 2026-10-27 18:17:09 +00:00
56 lines
11 KiB
Markdown
56 lines
11 KiB
Markdown
# 31. Compétences, Missions et premier chantier agentique — Sophia et les sites web
|
|
|
|
**Origine (10-11 septembre 2026).** En utilisant l'outil "Tester l'identité" (voir section 28, Réflexions stratégiques section 20), Jean-Marc a constaté que Sophia se mettait à lui réclamer des informations et des fichiers pour "créer des sites web" pour lui — alors qu'aucune capacité réelle ne lui avait jamais été donnée, seulement une conversation. Claude a fait remarquer que ce n'était pas un problème en soi (elle n'avait aucun moyen d'agir) mais un symptôme : rien dans son prompt système ne la bornait sur ce qu'elle pouvait réellement proposer. Point retenu comme leçon de fond pour toute la suite du chantier.
|
|
|
|
**Reformulation par Jean-Marc : ce n'est pas un besoin ponctuel, c'est un chantier de fond.** Plutôt que de traiter la demande de Sophia isolément, Jean-Marc a explicitement élargi le sujet : donner à chaque collaborateur des **compétences**, pour qu'il puisse accomplir seul (pour commencer, mono-collaborateur) des **Missions** — reprenant directement le concept déjà posé sans être conçu le 8 septembre (Réflexions stratégiques, section 18). Les deux petits outils actuels ("Construire une identité"/"Tester l'identité") ont été explicitement qualifiés par Jean-Marc de **provisoires** — utiles aujourd'hui, pas destinés à survivre tels quels dans l'application finale.
|
|
|
|
**Périmètre de la compétence, fixé explicitement par Jean-Marc avant tout schéma :**
|
|
- Sophia ne devient en aucun cas productrice de sites pour des clients tiers de l'entreprise — elle reste strictement dans le périmètre du CRM : le site produit est celui de l'entreprise qui utilise ASPIC elle-même.
|
|
- Elle ne travaille qu'avec les documents de l'entreprise — mais en creusant ce point, aucune table réelle n'existe encore derrière les classeurs "Catalogue"/"Documents" (voir section 19 : classification actée, contenu non construit). Pour cette première version, elle travaille donc uniquement à partir de ce qui lui est fourni directement dans la conversation ; un outil de lecture du catalogue/documents réels est remis à plus tard, quand ces données existeront pour de bon.
|
|
- Elle doit pouvoir mettre à jour un site déjà créé (retours clients, nouveaux produits).
|
|
- Une fois ses créations validées, elle doit pouvoir les faire **publier** — mais la publication reste un acte humain déclenché par Jean-Marc, jamais un outil laissé entre les mains du modèle (même discipline que la clôture d'une Mission, jamais calculée automatiquement, section 18).
|
|
|
|
**Modèle de données.** Cinq tables créées dans `MS-DEV` (pas encore dans `MS-TST`, synchronisation manuelle à refaire le jour venu, les deux bases ne se répliquant pas automatiquement) :
|
|
- `ASP_Competences` — catalogue curaté par Jean-Marc, même logique que le catalogue de consignes (section 15/18) : c'est le code (`mission_agent.php`), pas une donnée éditable en base, qui définit réellement ce qu'un outil fait.
|
|
- `ASP_AgentsCompetences` — jonction agent/compétence.
|
|
- `ASP_Missions` — objectif, statut (`ouverte`/`close`), collaborateur assigné, compétence mobilisée, site éventuellement lié, et un champ `MIS_Journal` (brouillon vivant, accumulé par `CONCAT`, même mécanique que `AGN_Experience`).
|
|
- `ASP_SitesWeb` — un site par ligne, `SIT_NomDomaine` plutôt qu'un slug générique : Jean-Marc a d'emblée deux domaines réels en tête (`mevelia-solutions.bzh` pour la future agence, `aspic.bzh` pour le CRM lui-même).
|
|
- `ASP_SitesWebFichiers` — métadonnées des fichiers d'un site, noms **prévisibles** (`index.html`, etc.) — volontairement différent du coffre-fort documentaire de la section 21 (noms randomisés) : là où un PDF doit rester inatteignable, un site web doit au contraire être servable.
|
|
|
|
**Convention de nommage imposée par Jean-Marc en cours de route :** chaque champ d'une table doit commencer par le préfixe de **sa propre** table, jamais celui de la table référencée par une clé étrangère — ex. dans `ASP_AgentsCompetences`, le champ pointant vers `ASP_Agents.AGN_Incr` doit s'appeler `AGC_AgentIncr`, pas `AGN_Incr`. Toutes les tables ont été (re)nommées en conséquence avant création.
|
|
|
|
**Clarification de fond sur `AGN_Identite`/`AGN_Experience`, apportée par Jean-Marc et qui affine la section 20 :** `AGN_Identite` est le profil fixe du collaborateur à l'embauche, avant toute mission — écrasable à volonté. `AGN_Experience` est ce qui se met à jour à la **clôture** d'une mission (pas l'identité, contrairement à ce que la section 20 laissait entendre). La mécanique de clôture elle-même (comment `MIS_BilanCloture` vient effectivement enrichir `AGN_Experience`) reste non codée à ce stade.
|
|
|
|
**Stockage — brouillon hors racine web, publication dans la racine.** Nouveau volume Docker `./sites_brouillons:/var/www/sites_brouillons` ajouté à `docker-compose.yml` (hors de tout chemin servi par Apache — aucune URL ne peut jamais l'atteindre, même principe que le coffre PDF de la section 21) ; `crm-app` recréé pour appliquer le volume (brève coupure de service). Un second dossier, `sites_publies`, vit lui À L'INTÉRIEUR du volume existant `./src:/var/www/html` — sans volume supplémentaire — puisqu'un site publié est, par nature, censé être atteignable par une URL.
|
|
|
|
**Incident de permissions, première fois que du code PHP écrit sur disque dans ce projet.** `/var/www/html` appartient à `1001:1001` (chown fait par la commande de démarrage du conteneur) mais Apache tourne en réalité en tant que `www-data` (uid 33, vérifié via `ps aux`) — sans droit d'écriture nulle part par défaut. Un `chmod 0777` a été posé spécifiquement sur les deux dossiers de stockage (`sites_brouillons` et `sites_publies`), jamais sur le reste de l'arborescence. Choix du `chmod` plutôt que d'un `chown` vers `www-data` : la commande de démarrage du conteneur refait un `chown -R 1001:1001 /var/www/html` à **chaque redémarrage**, ce qui aurait annulé un `chown` ciblé sur `sites_publies` (qui est sous `/var/www/html`) — un `chmod`, lui, n'est jamais touché par cette commande et survit donc aux redémarrages.
|
|
|
|
**`mission_agent.php` — la boucle agentique, fichier séparé de `collaborateur_dialogue.php`.** Décision explicite de ne jamais faire glisser le bac à sable sans effet de bord ("Tester l'identité") vers un endpoint qui écrit réellement sur disque. Différences clés avec `collaborateur_dialogue.php` :
|
|
- L'historique complet des échanges (texte ET appels d'outils, format Anthropic) est conservé côté serveur (nouvelle colonne `ASP_Missions.MIS_HistoriqueJson`, ajoutée en cours de session — besoin technique découvert, pas anticipé dans le schéma initial), pas côté navigateur : une Mission doit être reprenable depuis n'importe quel ordinateur, exigence explicite de Jean-Marc (il travaille sur plusieurs machines).
|
|
- Paquet d'outils fixé par compétence (`outilsDeLaCompetence()`), une seule câblée pour l'instant (`SITE_WEB`) : `lister_fichiers_site`, `lire_fichier_site`, `ecrire_fichier_site` — extensions autorisées limitées à `html/css/js/json/svg` (pas de PHP, pas d'exécutable ; pas d'images/binaire pour cette première version, complexité d'encodage remise à plus tard).
|
|
- Sandbox fichiers : chemin relatif uniquement, résolution par `realpath()` vérifiée sous la racine du site (protection traversée de chemin), taille max 2 Mo par fichier.
|
|
- Boucle plafonnée à 6 aller-retours d'outils par message, même discipline que `consigne_completer_code_postal()` (section 30) : ne jamais laisser un enchaînement s'emballer.
|
|
- Chaque appel d'outil (réussi ou refusé) journalisé dans `MIS_Journal` — jamais un échec silencieux.
|
|
- Création différée du site (`ASP_SitesWeb` + dossier physique) au tout premier `ecrire_fichier_site()` réussi, jamais à l'ouverture de la mission — pour ne pas laisser de site fantôme si une mission n'aboutit à rien.
|
|
|
|
**`sites_web.php` — publication, action humaine.** Liste les sites et leurs fichiers ; l'action `publier` vide le dossier publié puis le repeuple **uniquement** à partir des fichiers connus d'`ASP_SitesWebFichiers` (jamais une copie brute de dossier, qui traînerait un fichier orphelin). Le rattachement à un vrai nom de domaine (vhost Apache ou entrée dans `npm-app-1`) reste une étape manuelle de Jean-Marc, hors périmètre de cet endpoint.
|
|
|
|
**`missions.php`** — ouverture/liste des missions ; refuse explicitement la création si le collaborateur assigné n'a pas la compétence demandée.
|
|
|
|
**`mission_test.html`** — outil de mise au point interne (même esprit "terminal" que `contact_ia_test.html`), pas un écran utilisateur : le classeur "Missions" du bureau n'a toujours aucun écran réel (section 19), inutile de construire l'écran final avant que le mécanisme lui-même soit validé.
|
|
|
|
**Donnée d'amorçage.** Compétence `SITE_WEB` créée et attribuée à Sophia (`AGN_Incr = 13`).
|
|
|
|
**Premier essai réel.** Jean-Marc a d'abord tenté d'ouvrir `mission_test.html` en tapant l'URL directement, sans passer par l'écran d'identification — échec attendu ("Non identifié — veuillez vous connecter."), aucune session PHP ouverte : même règle que tous les autres écrans de l'application, rien de spécifique à cette fonctionnalité. Une fois connecté dans le même onglet, l'ouverture d'une mission a fonctionné : Sophia s'est montrée réactive, et a spontanément fait référence aux échanges précédents des sessions "Tester l'identité" — confirmation en conditions réelles que le mécanisme de mémoire (`AGN_Experience` réinjecté dans le prompt système de la mission) fonctionne comme prévu. Vérification détaillée de ce qu'elle a réellement écrit comme fichiers laissée à une prochaine session (Jean-Marc fatigué).
|
|
|
|
**Découverte en cours de route : du travail de la session précédente jamais poussé.** `git status` a révélé des modifications non committées antérieures à cette session (`collaborateur_dialogue.php`, `collaborateurs_identite.php`, `ecran_fond.html`, `version.php`, plus `collaborateur_experience_append.php` non suivi) — le chantier "collaborateurs" du 10 septembre (section 28/20) n'avait jamais été poussé sur GitHub. Signalé à Jean-Marc, décision de commit/push en attente.
|
|
|
|
**Statut.** Mécanisme construit et atteignable de bout en bout (tables, deux endpoints de gestion, la boucle agentique, un outil de test, une compétence réelle attribuée) ; premier échange réel validé comme cohérent et réactif. Points explicitement laissés ouverts :
|
|
- Clôture de mission (`MIS_Statut`, `MIS_BilanCloture`, et le mécanisme concret d'enrichissement d'`AGN_Experience`) — non conçue en détail, non codée.
|
|
- Lecture réelle du catalogue/documents de l'entreprise — dépend de classeurs encore vides (section 19).
|
|
- Rattachement à un vrai nom de domaine une fois un site publié — étape d'infrastructure manuelle.
|
|
- Support des images/fichiers binaires dans un site — non traité (texte uniquement pour l'instant).
|
|
- Synchronisation du schéma vers `MS-TST` — pas encore faite.
|
|
|
|
`<code>` avance (tables + quatre nouveaux fichiers PHP/HTML + volume Docker) ; `<conception>` avance également, une nouvelle section (22) ouverte dans les Réflexions stratégiques pour la partie conceptuelle de cette même session — nouvelle version **V1.21.22**.
|