Documentation — Wiki

Wiki interne, arborescence d'articles, édition et Aide IA (mise en forme, génération depuis des notes). Le module IA peut s'appuyer sur le contenu des articles.

Les modules Blueprint Modular font partie de l'application Next.js. Il n'y a pas de package séparé par module (pas de pip install blueprint-modular-wiki ni npm install blueprint-modular-wiki) : on installe l'application une fois, puis on configure la base PostgreSQL et le serveur IA (Ollama) selon les besoins. Cette documentation décrit comment le Wiki fonctionne, comment l'installer (application, base de données, serveur IA et dépendances), où et comment sont sauvegardés les articles (aucun fichier sur disque — tout est en base PostgreSQL), les lignes de commande pour installer le Wiki et toutes ses dépendances (Node, Prisma, Ollama, modèle Qwen), et la gestion des $ dans l'assistant IA pour appeler ou référencer le Wiki dans vos questions.

Comment fonctionne le Wiki

Le module Wiki permet de créer et organiser des articles en arborescence (parent / enfants). Chaque article a un titre, un slug unique (URL), un contenu en Markdown, un éventuel parent pour la hiérarchie, et un statut publié / brouillon. Seul l'auteur (ou un admin) peut modifier ou supprimer un article ; les visiteurs ne voient que les articles publiés.

Workflow typique : vous vous connectez, vous allez sur /modules/wiki, vous cliquez sur « Nouvel article » et renseignez titre et slug (ou laissez le slug être déduit du titre). Vous choisissez éventuellement un article parent pour placer la page dans l'arbre. Vous rédigez le contenu en Markdown dans l'éditeur, vous pouvez utiliser « Mettre en forme » ou « Générer depuis des notes » (Aide IA). Une fois satisfait, vous publiez l'article ; il devient visible pour les autres. Les articles restent modifiables ; vous pouvez changer le parent plus tard en éditant l'article.

  • Arborescence : les articles peuvent avoir un parentId pour former un arbre (sections, sous-pages). La liste des articles est affichée en arbre dans la page /modules/wiki.
  • Édition : l'éditeur propose une barre d'outils (gras, listes, titres, etc.) et du Markdown. Les articles sont sauvegardés via l'API PUT /api/wiki/[slug].
  • Aide IA : depuis l'éditeur, vous pouvez « Générer depuis des notes » (l'IA structure vos notes en article Markdown) ou « Mettre en forme » (amélioration du texte existant). Ces actions appellent POST /api/wiki/generate et utilisent le serveur IA configuré (Ollama / Qwen).
  • Intégration avec l'assistant IA : le module Wiki est enregistré dans le registry des modules. Quand vous discutez avec l'assistant et que le module Wiki est sélectionné, le contenu des articles récents (titres + corps) est injecté dans le contexte pour que l'IA puisse s'y référer.

Base de données et prérequis production : tables WikiArticle, WikiRevision, WikiComment, WikiBacklink ; détail dans docs/DATABASE.md du dépôt.

Où sont sauvegardés les articles

Les articles sont stockés uniquement en base de données (PostgreSQL), dans la table WikiArticle du schéma Prisma. Il n'y a pas de fichiers sur le disque pour le contenu des articles : tout est persistant en base via Prisma. Vous ne choisissez donc pas un « dossier » ou un chemin de fichiers ; vous choisissez un article parent dans l'interface (ou aucun, pour un article à la racine). Les champs principaux en base sont : id, title, slug (unique), content (texte Markdown), parentId (optionnel, pour l'arborescence), authorId, isPublished, createdAt, updatedAt. Le slug est normalisé (minuscules, espaces → tirets, suppression des accents) via lib/slug.ts pour garantir des URLs stables.

Choisir où « placer » un article (parent) :

Lors de la création d'un article (formulaire « Nouvel article »), vous pouvez optionnellement choisir un article parent. Seuls les articles existants sont proposés dans une liste déroulante ; si vous ne choisissez pas de parent, l'article sera à la racine de l'arbre. La position dans l'arbre est donc déterminée uniquement par le champ parentId en base (pas par un chemin de type /dossiers/sous-dossier). Vous pouvez modifier le parent plus tard en éditant l'article (champ parent dans le formulaire d'édition) ou en appelant l'API PUT /api/wiki/[slug] avec un nouveau parentId.

Installation du Wiki et des dépendances

Le Wiki fait partie de l'application Next.js. Il n'y a pas de package séparé à installer pour le Wiki lui-même. En revanche, il faut installer l'application, la base de données, et éventuellement le serveur IA pour les fonctionnalités « Générer depuis des notes » et « Mettre en forme », ainsi que pour l'assistant conversationnel qui s'appuie sur le contenu du Wiki.

1. Installer l'application (dépendances Node et base)

# Cloner ou ouvrir le projet, puis :
npm install
npx prisma generate --schema=prisma/schema.prisma

# Créer la base PostgreSQL (locale ou distante) et appliquer les migrations :
npx prisma migrate deploy

# (Optionnel) Peupler la base avec des données de test :
# npx prisma db seed

La variable DATABASE_URL doit être définie dans .env (voir section Variables d'environnement). Le schéma Prisma inclut le modèle WikiArticle ; la migration crée la table correspondante.

2. Installer et lancer le serveur IA (Ollama + modèle Qwen)

Les fonctionnalités « Générer depuis des notes », « Mettre en forme » dans l'éditeur Wiki, et l'assistant conversationnel (module IA) utilisent un serveur compatible OpenAI (Ollama en local ou sur un VPS). Sans serveur IA, vous pouvez mettre AI_MOCK=true dans .env pour que l'app renvoie des réponses mockées (développement uniquement).

# Installer Ollama (ex. sur Linux / WSL / macOS) :
# https://ollama.com/download

# Lancer Ollama et télécharger le modèle Qwen3 (8B) :
ollama serve
ollama pull qwen3:8b

# L’app est configurée par défaut pour http://localhost:11434 (Ollama).
# Sur un VPS, définir AI_SERVER_URL dans .env (ex. http://votre-vps:11434).

Variables d'environnement utiles : AI_SERVER_URL (URL du serveur Ollama), AI_MODEL (ex. qwen3:8b), AI_MOCK=true pour désactiver les appels réels en dev.

3. Lancer l'application

npm run dev    # Développement (Next.js + Prisma)
# Puis ouvrir http://localhost:3000/modules/wiki

Résumé des commandes (installer le Wiki et toutes les dépendances)

Voici l'enchaînement complet pour installer l'application (dont le Wiki), la base de données, et le serveur IA (Ollama + modèle Qwen) utilisé par l'Aide IA du Wiki et par l'assistant conversationnel :

# 1. Dépendances Node et schéma Prisma
npm install
npx prisma generate --schema=prisma/schema.prisma

# 2. Base PostgreSQL (créer la DB si besoin, puis) :
npx prisma migrate deploy

# 3. Serveur IA (Ollama) — dans un terminal dédié ou en arrière-plan
ollama serve
ollama pull qwen3:8b

# 4. Lancer l'app Next.js
npm run dev

# 5. Ouvrir le Wiki
# http://localhost:3000/modules/wiki

Assurez-vous d'avoir défini DATABASE_URL, NEXTAUTH_SECRET, NEXTAUTH_URL et, pour l'IA, AI_SERVER_URL (ex. http://localhost:11434) et AI_MODEL (ex. qwen3:8b) dans .env. Sans serveur IA, vous pouvez mettre AI_MOCK=true pour utiliser des réponses simulées.

Variables d'environnement

Pour que le Wiki et l’ensemble des modules (dont l’IA) fonctionnent correctement :

  • DATABASE_URL — URL de connexion PostgreSQL (obligatoire pour le Wiki).
  • NEXTAUTH_SECRET, NEXTAUTH_URL — Authentification (requise pour créer / éditer des articles).
  • AI_SERVER_URL — URL du serveur Ollama (ex. http://localhost:11434).
  • AI_MODEL — Modèle utilisé (ex. qwen3:8b).
  • AI_MOCKtrue pour utiliser des réponses mockées sans serveur IA (dév).

Gestion des $ dans l’assistant IA (références aux modules)

Dans le champ de saisie de l'assistant IA (module IA), taper un $ affiche une liste de suggestions de « tokens » permettant d'inclure des références aux modules dans votre question. Par exemple : $wiki (Wiki), $doc (Documents), $metric (Métriques), etc. Ces tokens servent à l'autocomplétion : en sélectionnant $wiki, vous insérez le libellé du module dans le message. Le contenu effectif des articles du Wiki n'est pas inséré à la place du $ ; il est injecté dans le contexte envoyé au modèle lorsque le module « Wiki » est sélectionné dans le panneau de contexte de l'assistant. Ainsi, l’IA reçoit les titres et le contenu des articles récents (jusqu’à une limite configurée, ex. 15 articles) et peut s'y appuyer pour répondre. En résumé : le $ sert à compléter rapidement un nom de module dans la zone de texte ; le choix des modules (Wiki, Documents, etc.) dans le panneau de contexte détermine quelles données sont envoyées au modèle.

Comment utiliser le $ pour appeler le Wiki dans l'assistant :

  1. Ouvrez l'assistant IA (module IA, page /modules/ia).
  2. Dans le panneau de contexte (modules disponibles), cochez ou sélectionnez Wiki pour que le contenu des articles soit inclus dans le contexte envoyé au modèle.
  3. Dans la zone de saisie du message, tapez $ : une liste de suggestions apparaît ($wiki, $doc, etc.). Sélectionnez $wiki pour insérer une référence au module Wiki dans votre texte (par ex. « Résume les points clés $wiki »).
  4. Le $wiki dans le message est un libellé / rappel pour vous ; les données réelles (titres et contenu des articles) sont ajoutées automatiquement au contexte de la requête grâce à la sélection du module Wiki dans le panneau. L'IA peut donc répondre en s'appuyant sur vos articles.

Tokens disponibles (extrait) :

  • $wiki — Wiki (articles).
  • $doc — Documents (analyses, contrats).
  • $metric — Métriques (dashboard).
  • $table, $chart, $data — Autres références données.

API Wiki (résumé)

  • GET /api/wiki — Liste des articles (query : published=true, search=, withContent=true, limit=).
  • POST /api/wiki — Créer un article (body : title, slug, content, parentId, isPublished).
  • GET /api/wiki/[slug] — Détail d'un article par slug.
  • PUT /api/wiki/[slug] — Mettre à jour un article (titre, contenu, statut publié).
  • DELETE /api/wiki/[slug] — Supprimer un article (auteur ou admin).
  • POST /api/wiki/generate — Génération IA : body action: "format" + content (et optionnel title) pour mise en forme ; sinon notes, articleType (guide, procedure, best-practice, reference), workspace (service1, service2, shared) pour génération depuis des notes (streaming).