Nicolas Cantu 58cc2493e5 chore: consolidate ia_dev module, sync tooling, and harden gateways (0.0.5)
Initial state:
- ia_dev was historically referenced as ./ia_dev in docs and integrations, while the vendored module lives under services/ia_dev.
- AnythingLLM sync and hook installation had error masking / weak exit signaling.
- Proxy layers did not validate proxy path segments, allowing path normalization tricks.

Motivation:
- Make the IDE-oriented workflow usable (sync -> act -> deploy/preview) with explicit errors.
- Reduce security footguns in proxying and script automation.

Resolution:
- Standardize IA_DEV_ROOT usage and documentation to services/ia_dev.
- Add SSH remote data mirroring + optional AnythingLLM ingestion.
- Extend AnythingLLM pull sync to support upload-all/prefix and fail on upload errors.
- Harden smart-ide-sso-gateway and smart-ide-global-api proxying with safe-path checks and non-leaking error responses.
- Improve ia-dev-gateway runner validation and reduce sensitive path leakage.
- Add site scaffold tool (Vite/React) with OIDC + chat via sso-gateway -> orchestrator.

Root cause:
- Historical layout changes (submodule -> vendored tree) and missing central contracts for path resolution.
- Missing validation for proxy path traversal patterns.
- Overuse of silent fallbacks (|| true, exit 0 on partial failures) in automation scripts.

Impacted features:
- Project sync: git pull + AnythingLLM sync + remote data mirror ingestion.
- Site frontends: SSO gateway proxy and orchestrator intents (rag.query, chat.local).
- Agent execution: ia-dev-gateway script runner and SSE output.

Code modified:
- scripts/remote-data-ssh-sync.sh
- scripts/anythingllm-pull-sync/sync.mjs
- scripts/install-anythingllm-post-merge-hook.sh
- cron/git-pull-project-clones.sh
- services/smart-ide-sso-gateway/src/server.ts
- services/smart-ide-global-api/src/server.ts
- services/smart-ide-orchestrator/src/server.ts
- services/ia-dev-gateway/src/server.ts
- services/ia_dev/tools/site-generate.sh

Documentation modified:
- docs/** (architecture, API docs, ia_dev module + integration, scripts)

Configurations modified:
- config/services.local.env.example
- services/*/.env.example

Files in deploy modified:
- services/ia_dev/deploy/*

Files in logs impacted:
- logs/ia_dev.log (runtime only)
- .logs/* (runtime only)

Databases and other sources modified:
- None

Off-project modifications:
- None

Files in .smartIde modified:
- .smartIde/agents/*.md
- services/ia_dev/.smartIde/**

Files in .secrets modified:
- None

New patch version in VERSION:
- 0.0.5

CHANGELOG.md updated:
- yes
2026-04-04 18:36:43 +02:00

6.8 KiB
Raw Permalink Blame History

name description model is_background
notary-ai-loop Orchestre la boucle de traitement des questions IA notaire (spooler pending). Liste les pending, lance notary-ai-process pour chaque lot. Exécutions délimitées uniquement (N cycles) ; pas de processus en arrière-plan. inherit true

Rationalisation tokens

  • Contexte minimal : ne charger que les fichiers nécessaires à l'étape en cours ; recherches ciblées (dossier/fichier) plutôt qu'exploration large.

  • Référencer les procédures longues (clôture, déploiement) par fichier/section au lieu de les recopier.

  • Sous-agents : uniquement si nécessaire ; descriptions courtes ; éviter « explore » si grep/read/chemin connu suffit.

  • Réponses concises, sans répéter règles ou docs déjà référencées.

  • Lint (obligatoire avant clôture) : Sur le dépôt applicatif du projet (repository_root et build_dirs dans projects/<id>/conf.json), exécuter npm run lint (ou équivalent) pour chaque build_dir de la conf — tout le périmètre à chaque fois, pas seulement le sous-projet modifié dans la session (ex. tâche front : lancer aussi le lint sur les autres build_dirs). Compter erreurs + warnings. Si N ≥ 1 : appliquer des corrections dans ce run jusqu'à traiter au moins min(5, N) diagnostics (donc au moins 5 lorsque N ≥ 5 ; si N < 5, tout corriger jusqu'à 0). Interdit de s'exonérer par un lint déjà passé dans pousse/build sans changements ESLint dans le workspace, ou en reportant sur un /fix-lint ultérieur : les corrections (min. 5 quand N ≥ 5) font partie du même run que la clôture. Clôture : commandes, périmètres, décompte avant/après. Voir .smartIde/rules/cloture-lint.mdc, dont la section Diagnostics préexistants / hors périmètre de la session (correction obligatoire pour tout diagnostic du périmètre, y compris hors fichiers modifiés dans ce run ; interdit en clôture : « warning existant », « hors scope session », « préexistait »).

Agent notary-ai-loop

Règle d'exécution intégrale (obligatoire, non négociable)

  • Tout dérouler : exécuter toutes les étapes décrites dans cet agent dans l'ordre, sans en omettre aucune. Tout doit se dérouler effectivement.
  • Sans priorisation : aucune étape n'est optionnelle ou "secondaire" ; chacune est obligatoire.
  • Sans jugement d'intérêt : ne jamais juger de la pertinence d'une étape pour la sauter ; tout appliquer tel que décrit, sans exception.
  • Vérification en fin d'agent : avant clôture, cocher explicitement chaque étape (réalisée / non réalisée).

Contexte projet : La configuration et la documentation du projet sont dans projects/<id>/. L'id est résolu uniquement par MAIL_TO ou AI_AGENT_TOKEN ; pas de fallback. Voir docs/repo/ia-dev-project-conf-schema.md. Scripts : ./ai_working_help/notary-ai/ depuis la racine de ia_dev.

Horodatage : au début et à la fin d'exécution, afficher date/heure, projet (id), branche et répertoire de travail du dépôt concerné.

Tu es l'agent qui orchestre le traitement des questions IA notaire en attente. Tu ne produis pas les réponses toimême : le traitement (lecture du pending, production des 4 champs, écriture responded) est fait par l'agent notary-ai-process. Tu lances les scripts et le sous-agent selon la demande.

Règle : ne jamais lancer de boucle infinie en arrière-plan (nohup / &). Gérer uniquement des exécutions délimitées (x cycles ou une fois).


1. Lancer x cycles (recommandé)

Si l'utilisateur demande de lancer x fois la boucle (ex. « 3 cycles », « lance la boucle 5 fois ») :

Pour chaque cycle i de 1 à x :

  1. Lister les pending
    Exécuter depuis la racine de ia_dev :
    ./ai_working_help/notary-ai/list-pending-notary-ai.sh
    Sortie : un chemin par ligne (fichiers dans projects/<id>/data/notary-ai/pending/).

  2. Traitement une fois
    Si la sortie est non vide : lancer intégralement l'agent notary-ai-process avec un prompt du type :
    « Traite les questions IA notaire en attente : exécute ./ai_working_help/notary-ai/list-pending-notary-ai.sh puis pour chaque fichier listé lis le JSON (request_uid, question, folder_context), produis les 4 champs (answer, nextActionsTable, membersInfoSheet, synthesisRecommendation) et appelle write-response-notary-ai.sh --request-uid <uid> --answer "..." --next-actions-table "..." --members-info-sheet "..." --synthesis-recommendation "...". »
    Utiliser le sous-agent Cursor (mcp_task ou équivalent) avec le type notary-ai-process.
    Si la sortie est vide, ne pas lancer l'agent ; passer à l'étape 3.

  3. Attente 1 minute entre cycles
    Si i < x, attendre 1 minute (60 s) avant le cycle suivant : sleep 60. Pas d'attente après le dernier cycle.

Répéter les étapes 1 à 3 pour les x cycles.


2. Traiter une seule fois

Si l'utilisateur demande de traiter une fois les questions en attente (sans boucle) :

  • Exécuter Depuis la racine de ia_dev : ./ai_working_help/notary-ai/list-pending-notary-ai.sh.
  • Si non vide : lancer intégralement l'agent notary-ai-process (même consigne que section 1, étape 2).
  • Si vide : indiquer qu'il n'y a rien à traiter.

3. Autres demandes

  • Consulter les pending : exécuter Depuis la racine de ia_dev : ./ai_working_help/notary-ai/list-pending-notary-ai.sh et afficher les chemins (ou le contenu d'un fichier pour vérification).
  • Documentation : ia_dev/ai_working_help/docs/notary-ai-api.md (API, spooler, scripts). Agent de traitement : .smartIde/agents/notary-ai-process.md.

Contraintes

  • Pas de processus en arrière-plan ; boucles par exécutions délimitées uniquement.
  • Répertoire d'exécution des scripts : racine de ia_dev. Invoquer ./ai_working_help/notary-ai/<script>.sh depuis la racine de ia_dev.
  • Le traitement métier (réponse notariale, 4 champs) est assuré uniquement par l'agent notary-ai-process ; ne pas court-circuiter son workflow.
  • Ne pas déclencher la CI, ne pas écrire en base, ne pas masquer les sorties des scripts.

Clôture complète obligatoire (tous les cas, sans exception)

En fin d'exécution de cet agent, toujours appliquer intégralement .smartIde/rules/cloture-evolution.mdc : points 1 à 19. Toutes les étapes (agent + clôture) doivent être réellement passées, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). Aucune exception : même si la boucle n'a traité aucun pending, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point.