Bibliothèque et politique
29 routes. Chemins relatifs à https://api.nexus-engine.eu/api/v1.
GET
/me/pack-defaut
Le pack posé d’office sur chacun de MES nouveaux projets. Préférence personnelle : elle ne change rien pour les collègues. Un pack supprimé ou dépublié se lit `null`.
PUT
/me/pack-defaut
Règle mon pack par défaut, ou le retire (`packId: null`). Un identifiant qui ne désigne pas un pack publié de l’entreprise est refusé plutôt qu’enregistré sans effet.
CorpspackId (nullable)
RéponsePackDefautDto
GET
/me/modules-defaut
MES modules par défaut : ceux qui me suivent dans TOUS mes projets, en plus de ceux du projet, et que mes agents seuls reçoivent. Un module supprimé, dépublié ou d’une autre entreprise n’y figure pas.
PUT
/me/modules-defaut
session de l’application seulement
Règle mes modules par défaut : la liste REMPLACE la précédente. Réservé à une personne en session — s’en donner un change ce que MES agents reçoivent. Les identifiants inconnus ressortent dans `ecartes`.
CorpsitemIds (string[])
RéponseModulesDefautDto + ecartes
NoteFermée à tout agent, l’assistant compris (7 novembre 2026) : un agent n’étend pas ses propres outils. Il mène la personne à Paramètres › Gestion module ; poser un module sur UN projet reste ouvert (`POST /library/:id/apply`, l’outil des modules).
PUT
/library/:id/portee
session de l’application seulement
À qui ce module s’adresse SUR CE PROJET. Une liste VIDE efface la portée : le module redevient celui de toute l’équipe, qui est le défaut. Réservé à une personne en session ; installer, lui, reste ouvert à un agent.
CorpsprojectId, memberIds (string[])
Réponse{ ok, memberIds, ecartes }
GET
/library
Les modules de la bibliothèque : commandes, sous-agents, compétences, serveurs MCP, modèles.
Requêtestatus=PENDING (administrateurs : les propositions en attente) ; types=INTERFACE (ou une liste séparée par des virgules) : ne rend que ces types ; icones=adresse : les logos hors du JSON (`iconImage` vide, `iconeEmpreinte` à la place) ; portraits=0 : les portraits des auteurs à null ; leger=1 : ni logos ni portraits
RéponseLibraryItemDto[]
NoteSans `types`, les dispositions de l’interface (type INTERFACE) sont écartées : elles s’installent sur un poste, jamais dans un projet, et un poste plus ancien ne saurait pas les montrer. Sans `icones=adresse`, les logos voyagent dans le JSON, comme avant (≈ 2 Mo pour le catalogue d’usine) : un client qui en dessine les lit plutôt à `GET /library/:id/icone/:empreinte`. La réponse porte un `ETag` (faible) : `If-None-Match` → 304 sans corps quand rien n’a changé pour ce membre.
GET
/library/diffusions
Les modules diffusés par tous les espaces : la vitrine (nom, description, présentation, auteur), jamais le contenu ; plus ce que l'éditeur doit décider.
RéponseModulesDiffusesDto
GET
/library/diffusions/:id/contenu
Le contenu d'un module diffusé. 402 s'il a un prix que l'espace n'a pas payé ; toujours ouvert à son espace et à l'éditeur.
Réponse{ id, type, content }
POST
/library/diffusions/:id/installer
Owner et Admin session de l’application seulement
Pose une copie du module dans la bibliothèque de l'espace, sur aucun projet (ou remet à jour la copie déjà là). 402 s'il n'est pas payé.
POST
/library/diffusions/:id/decision
session de l’application seulement
L'éditeur de Nexus valide un module pour tous les espaces, ou le refuse.
Corpsdecision (VALIDER | REFUSER), motif
DELETE
/library/diffusions/:id
session de l’application seulement
Retire un module du catalogue de tous les espaces. Les copies déjà installées restent.
GET
/library/:id/diffusion
L'état de la diffusion d'un module de l'espace : au catalogue, en attente, et ce que le module lui-même interdit.
RéponseModuleDiffusionEtatDto
POST
/library/:id/diffusion
session de l’application seulement
Diffuse une copie figée d'un module publié à tous les espaces, à valider par l'éditeur. Un refus se rend en 200, avec la liste. Module d'usine, copie d'un module d'ailleurs, pack, connecteur, dépôt : refusés.
Corpsconfirmation (le nom du module, recopié)
RéponseModuleDiffusionResultatDto
GET
/library/:id/icone/:empreinte
Le logo d’un module, à l’adresse de son empreinte (md5 de la data URL, `iconeEmpreinte`).
Requêteforme=json : `{ dataUrl }` plutôt que l’image
Réponseimage (PNG, JPEG, WebP, GIF, SVG) ou { dataUrl }
NoteEmpreinte à jour : `Cache-Control: private, max-age=31536000, immutable` — un logo changé a une autre adresse. Empreinte périmée : le logo du moment, `no-cache`. `ETag` + `If-None-Match` → 304. Le module d’une autre entreprise, ou sans logo : 404.
GET
/library/:id
Un module, contenu et documentation compris.
POST
/library
Propose un module (publié d’office par un administrateur, en attente sinon).
Corpstype (COMMAND, AGENT, MCP, TEMPLATE, SKILL), name, slug, description, content, docs, versionLabel, versionNote, icon, iconImage, repoUrl, links, projectIds
RéponseLibraryItemDto
NoteUne disposition de l’interface (type INTERFACE) s’écrit par une personne en session : 403 pour une clé ou un agent. Son `slug` commence par « interface- », son `content` est le JSON d’une disposition, jugé strictement (400 au premier défaut), et `projectIds` reste vide. LOGO DU MODULE (`iconImage`), deux sources. (1) Le logo OFFICIEL du service : télécharge-le toi-même dans ton dossier de travail (logo SVG du site, apple-touch-icon, favicon PNG — le plus net), puis donne son CHEMIN ; Nexus ne va chercher aucune adresse. (2) Un logo DESSINÉ dans la DA de Nexus, en SVG 256×256 : tuile arrondie <path d="M64 8H192C230 8 248 26 248 64V192C248 230 230 248 192 248H64C26 248 8 230 8 192V64C8 26 26 8 64 8Z"/> remplie d'un dégradé vertical entre les deux teintes d'UNE palette (bleu #63C9F4→#1B5FB5, vert #82DF94→#167940, turquoise #45CDBB→#0C6B6D, violet #CA91F9→#6329B3, indigo #A095FF→#3B32A8, ambre #FFD578→#D98005, corail #FFAA90→#BD432C, ardoise #A9BFD6→#435773, cyan #64DCE5→#147FAD, rose #FF9CC9→#B72A68), et un seul symbole simple en blanc translucide (opacité .72 à .96), centré dans ~140 px, sans texte, sans ombre ni relief, lisible à 28 px. Formes acceptées : le CHEMIN d'un fichier du poste (PNG, JPEG, WebP, GIF ou SVG, 150 Ko au plus), le SVG écrit en texte, ou une data URL base64 ; « » rend l'avatar par défaut. Un SVG ne porte ni script, ni on…, ni <foreignObject>, ni référence externe. Le chemin et le SVG en texte sont convertis par l’application de bureau ; par une clé d’API, seule la data URL passe.
PATCH
/library/:id
Modifie un module (auteur ou administrateur) ; un contenu changé crée une version.
Corpsmêmes champs que la création, tous facultatifs
RéponseLibraryItemDto
NoteChanger le LOGO d’un module : `{ "iconImage": … }` seul — il ne crée pas de version et ne renvoie pas le module en relecture. LOGO DU MODULE (`iconImage`), deux sources. (1) Le logo OFFICIEL du service : télécharge-le toi-même dans ton dossier de travail (logo SVG du site, apple-touch-icon, favicon PNG — le plus net), puis donne son CHEMIN ; Nexus ne va chercher aucune adresse. (2) Un logo DESSINÉ dans la DA de Nexus, en SVG 256×256 : tuile arrondie <path d="M64 8H192C230 8 248 26 248 64V192C248 230 230 248 192 248H64C26 248 8 230 8 192V64C8 26 26 8 64 8Z"/> remplie d'un dégradé vertical entre les deux teintes d'UNE palette (bleu #63C9F4→#1B5FB5, vert #82DF94→#167940, turquoise #45CDBB→#0C6B6D, violet #CA91F9→#6329B3, indigo #A095FF→#3B32A8, ambre #FFD578→#D98005, corail #FFAA90→#BD432C, ardoise #A9BFD6→#435773, cyan #64DCE5→#147FAD, rose #FF9CC9→#B72A68), et un seul symbole simple en blanc translucide (opacité .72 à .96), centré dans ~140 px, sans texte, sans ombre ni relief, lisible à 28 px. Formes acceptées : le CHEMIN d'un fichier du poste (PNG, JPEG, WebP, GIF ou SVG, 150 Ko au plus), le SVG écrit en texte, ou une data URL base64 ; « » rend l'avatar par défaut. Un SVG ne porte ni script, ni on…, ni <foreignObject>, ni référence externe. Le chemin et le SVG en texte sont convertis par l’application de bureau ; par une clé d’API, seule la data URL passe.
PUT
/library/:id/review
Owner et Admin
Publie ou refuse un module proposé.
Corpsstatus (PUBLISHED, REJECTED, PENDING), reviewNote
RéponseLibraryItemDto
PUT
/library/:id/featured
Owner et Admin
Met un module en avant, avec un mot d’explication.
Corpsfeatured, featuredNote
RéponseLibraryItemDto
PUT
/library/:id/authors
Owner et Admin
Nomme les contributeurs d’un module.
CorpsmemberIds
RéponseLibraryItemDto
DELETE
/library/:id
Supprime un module.
POST
/library/atelier
Pose l’atelier d’un module à écrire avec un agent : le dossier « Module » de la barre (réutilisé ou créé) et un projet « Nouveau module » dont l’auteur est membre.
Réponse{ projectId, folderId }
POST
/library/:id/apply
application de bureau seulement
Installe un module dans un ou plusieurs projets. Sur un PACK, étend la liste : ses membres publiés sont rattachés et ses tâches posées, et la réponse NOMME ce qui n’a pas pu l’être (`packs[].inconnus`, `ecartes`).
CorpsprojectId ou projectIds, withPackTasks (pack : défaut vrai)
Réponse{ ok, projectIds, packs?: PosePackDto[] }
Note409 pour une disposition de l’interface (type INTERFACE) : elle s’installe sur un poste, depuis la bibliothèque de Nexus.
POST
/library/:id/detach
application de bureau seulement
Retire un module de projets. Sur un PACK, retire aussi ses membres — sauf ceux qu’un AUTRE pack suivi réclame encore, et ceux que `garder` nomme. La réponse rend leurs identifiants : c’est avec eux que le poste efface les fichiers du dépôt.
CorpsprojectIds, garder (pack : membres à laisser en place)
Réponse{ ok, projectIds?, packs?: RetraitPackDto[] }
POST
/library/:id/attachments
Joint une capture ou un fichier à un module (8 Mo au plus).
Corpsname, mimeType, dataBase64
RéponseLibraryAttachmentDto
GET
/library/:id/attachments/:attId
Le contenu d’une pièce jointe de module, en base64.
Réponse{ name, mimeType, size, dataBase64 }
DELETE
/library/:id/attachments/:attId
Retire une pièce jointe de module.
GET
/policy
La politique de l’entreprise : conventions par défaut, commandes interdites, serveurs MCP autorisés.
PUT
/policy
Owner et Admin session de l’application seulement
Remplace la politique de l’entreprise.
CorpsdefaultConventions, forbiddenCommands (liste), allowedMcpServers (liste), previewCheckRequired, deployOffHoursBlocked, timezone, preprodAutoDeploy, agentBrowserProduction, agentBrowserAnywhere, agentServerProduction (les gestes d’un agent sur une machine de production : vrai = sans clic, journalisé ; faux = refus net), agentComputerControl (un agent peut demander à contrôler l’ordinateur d’un membre : vrai = la personne répond à chaque fois ; faux = refus net)
RéponsePolicyDto