✕ Fermer
Guide développeur

Que peut faire une Nova ?

Une Nova Constellae est une petite application (React) qui tourne dans un bac à sable sécurisé. Il ne code jamais de secret ni d'appel réseau en dur : il s'appuie sur des fonctions window.* fournies par la plateforme. Voici, en un coup d'œil, tout ce qu'elles permettent — et ce qu'elles interdisent.

📜 C'est quoi, « la Convention » ?

La « Convention » est le contrat de développement d'une Nova Constellae : elle décrit les règles à respecter (bloc de métadonnées, palette de marque, internationalisation, cloisonnement) et l'intégralité de l'API du bac à sable (les fonctions window.*). Elle est TOUJOURS à jour et fait référence : à lire avant de coder. Version humaine : /contrat.php · version machine : GET /api/public/convention · via un assistant IA : outil MCP get_convention.

✅ Ce que vous pouvez faire

Chaque capacité est une fonction window.* détaillée dans la Convention.

🗄️Stocker des données

Persister l'état de l'application sans jamais toucher la base du site.

window.storage Utilisateur · Org
get/set/delete/list(key)

Clé/valeur simple (remplace localStorage). Portée par utilisateur, ou PARTAGÉE avec toute l'org (dernier argument true).

window.db Utilisateur · Org
open(nom[,{shared}]) → run/query/exec/save

Vraie base SQLite (WASM) dans le bac à sable. Par défaut par utilisateur ; { shared:true } = base COMMUNE À L'ORG (versionnage optimiste anti-écrasement).

window.files Utilisateur
upload/list/url/delete/download(id)

Fichiers/photos de l'utilisateur (quota par utilisateur).

window.vault Nova (perso/org)
list/read/write/delete(path,{shared})

Disque PRIVÉ de la Nova (perso ou partagé org). Accessible à la Nova mais JAMAIS parcourable par l'utilisateur — pour des données de service, anti-fuite.

⚙️Configurer & personnaliser

Des réglages pour toute l'organisation ET des préférences par utilisateur.

window.config Nova × Org/Utilisateur
get() → {org,user,effective} · setUser · setOrg

Configuration profonde de la Nova : défaut ORG (écriture réservée admin d'org ou admin délégué) + personnalisation par utilisateur ; lecture fusionnée.

window.store Organisation
owns(slug) → bool · get(slug) → données|null · list()

Halos (compléments) POSSÉDÉS par l'organisation. owns() déverrouille une fonction ; get() charge un contenu (thème, jeu de données) uniquement si l'org détient le Halo. L'org acquiert les Halos dans le Cosmos.

✨Intelligence artificielle

Appeler un modèle sans jamais manipuler de clé (elle reste côté serveur).

window.claude Org (clé serveur)
complete(prompt,{model?}) · messages({messages})

Génération de texte par l'IA. Le fournisseur (Claude par défaut, ou un LLM tiers) et la clé sont gérés par l'organisation.

Constellation → agents Via Constellation
nœud « Agent » d'un flux

Pour faire intervenir un AGENT (Voilà, agent d'org, agent de plateforme), reliez votre Nova à un flux Constellation : l'agent s'exécute côté serveur et vous rend son livrable.

🔌Services externes (API tierces)

Joindre un service HTTP enregistré, sans exposer aucun secret.

window.api Org/Utilisateur (clé serveur)
api(besoin,{method,path,query,body})

Appel d'un service externe via un « besoin » déclaré par un admin. La clé (plateforme, org, ou propre à chaque utilisateur) est injectée côté serveur. Couvre les API REST/HTTP, dont Supabase/PostgREST.

window.drive Utilisateur · Org
providers/list/read/write/mkdir/… · shares · links

Drives cloud de l'utilisateur (Google/OneDrive/Dropbox) + disque intégré (Perso/Partagé/Entreprise), avec partage natif.

📡Collaborer & temps réel

Échanger des données entre utilisateurs et entre Novas.

window.channel Org (membres)
get/set/list · files · can() · subscribe() · callback()

Canaux partagés entre membres d'une org (KV + fichiers), avec temps réel (subscribe) et rôles Lecteur/Éditeur. Sert aussi de boîte de réception des webhooks.

window.channels Org
list() · mine()

Découverte du registre des canaux à l'exécution (co-usage sans coder les noms en dur).

window.user Utilisateur (soi)
get() → {id,email,name,…}

Profil de l'utilisateur COURANT (lecture seule). Pour un annuaire, motif « présence » via un canal partagé.

🛰️Automatiser (Constellation)

Relier votre Nova à l'orchestrateur no-code « Constellation ».

window.constellation Org
emit(evenement, donnée)

Démarre tous les flux Constellation abonnés à un évènement de cette Nova (ex. « un fichier est déposé »). La donnée devient l'entrée du flux.

window.actions Org
input() · complete(result) · list · invoke

Être une ÉTAPE d'un flux : recevoir une intention (input) et rendre la main avec un résultat (complete). Ou passer la main à un autre Nova.

Cartes de décision Org
channel(nom).list('hook.msg.') · callback(id, choix)

Un chat peut afficher les cartes à boutons postées par une étape « Demander une validation » (ou un webhook) et y répondre : le choix reprend le flux en attente. Gère l'adressage (value.workflow) et la validation successive (plusieurs valideurs).

🎨Interface & expérience

S'intégrer au cadre de l'hôte, être multilangue, télécharger.

window.menu Utilisateur
set([{id,label,icon,children?}]) · onSelect

Menu latéral de l'hôte : entrées, sous-menus, badges, pied épinglé.

window.i18n Utilisateur
locale · t({fr,en,…}) · onChange

Internationalisation : rendez l'application multilangue (jamais de texte en dur).

window.download Utilisateur
download(blob | {name,mime,data})

Vrai téléchargement d'un fichier généré (le bac à sable ne le peut pas seul).

Widgets Utilisateur
export function Widget({id})

Tuiles compactes pour la page d'accueil, déclarées dans le META.

🛡️Droits & cloisonnement

Qui peut quoi — géré côté serveur, jamais contournable par le code de la Nova.

Admin délégué Org
fiche « Partager » → Administrateurs de la Nova

Un admin d'org peut confier le paramétrage d'UNE application à un membre (droits window.config.setOrg), sans en faire un admin de toute l'org. Non transitif.

Cloisonnement Automatique
org_id + X-Artifact-Id (serveur)

Config, base partagée et vault sont cloisonnés par organisation ET par Nova. L'identité de la Nova est posée par l'hôte (non falsifiable par le code) et recoupée avec l'org de session.

🚫 Ce qui n'est pas possible

Par sécurité et cloisonnement — avec, à chaque fois, la bonne alternative.

✕Faire un appel réseau direct (fetch/XHR vers Internet)
Le bac à sable n'a pas d'accès réseau libre (sécurité).
➜ À la place : window.api (service déclaré par un admin, clé injectée côté serveur).
✕Ouvrir une connexion SQL brute (Postgres/MySQL en TCP)
Impossible depuis un navigateur.
➜ À la place : Une API HTTP (Supabase/PostgREST…) via window.api ; ou window.db (SQLite local).
✕Utiliser localStorage / sessionStorage
Bannis dans le bac à sable.
➜ À la place : window.storage (persistant, cloisonné).
✕Déclencher un téléchargement avec <a download> / window.open
Bloqué par l'isolation de l'iframe.
➜ À la place : window.download(blob).
✕Lire la base de données du site ou les données d'un AUTRE Nova
Cloisonnement strict par Nova et par organisation.
➜ À la place : Vos propres espaces (storage/db/vault/config) ou un canal partagé prévu à cet effet.
✕Accéder aux données d'un AUTRE utilisateur
Chaque espace « perso » est privé.
➜ À la place : Un canal partagé (window.channel) ou une portée « org » explicite.
✕Manipuler une clé d'API / un secret en clair
Les secrets restent côté serveur.
➜ À la place : window.api / window.claude (la clé est injectée, jamais exposée).
✕Exécuter du code serveur, un cron ou une tâche de fond « maison »
Une Nova est une iframe React côté navigateur, sans exécution serveur.
➜ À la place : Le module Constellation (déclencheurs programmés / évènements) pour automatiser.
✕S'exécuter « sans écran » (headless), hors d'un onglet ouvert
Une Nova a besoin d'un navigateur pour tourner.
➜ À la place : Un nœud « Agent » ou « Connecteur » du flux (eux s'exécutent côté serveur).
✕Appeler une URL arbitraire depuis un connecteur Constellation
Anti-SSRF : seuls les services enregistrés sont joignables.
➜ À la place : Faire déclarer le service par un admin (Services API).
✕Toucher au DOM de l'hôte ou d'un autre Nova
Chaque Nova est isolé dans son bac à sable.
➜ À la place : Les API window.* (menu, channel, actions…) pour interagir proprement.

📚 Aller plus loin

Exemples, aide et spécification complète.

La Convention (spécification complète)
Le document de référence : règles + toutes les fonctions window.*. À lire avant de coder.
Convention — version machine (JSON/Markdown)
Pour les outils et les IA. Aussi via MCP : get_convention / get_contract.
Registre des canaux
Ce que les Novas de la plateforme exposent, et sur quel canal (co-usage).
Exemple : Nova intégré à Constellation
examples/constellation-action-demo.tsx
Déclare des actions et un déclencheur ; montre window.actions.complete et window.constellation.emit.
Assistant IA (MCP)
Branchez Claude : outils get_convention, list_capabilities, list_channels, list_categories…
Constellae · v3.249.0 · La spécification à jour fait toujours foi : la Convention.