Aller au contenu
Quickstart — guide développeur

Du premier accès au déploiement.

Modèle par défaut : Claude (Anthropic). Le pipeline du cerveau exige la clé de modèle du constructeur (BYOK) ; le dépôt de clé n’est pas encore ouvert : le pipeline n’est donc pas encore ouvert aux constructeurs.Zéro règle éthique à coder, zéro orientation crise à maintenir.

Décideur ou CTO ? Objectifs de conception → · Tarifs → · Référence →

Ce que vous n'aurez pas besoin de faire

  • — Héberger vous-même le modèle de génération (modèle par défaut : Claude, Anthropic)
  • — Écrire des règles éthiques ou des prompts de sécurité
  • — Implémenter la détection de crise ou l'orientation crise (3114)
  • — Coder la persistance mémoire utilisateur
  • — Construire le pipeline éthique — il est inclus dans chaque appel

Les étapes

Obtenez votre accès constructeur

Sandbox : clé sk_test_ délivrée à l’ouverture du portail développeur — sans carte bancaire, plafonnée à 500 interactions par mois. Le pipeline du cerveau exige la clé de modèle du constructeur (BYOK) ; le dépôt de clé n’est pas encore ouvert : le pipeline n’est donc pas encore ouvert aux constructeurs. Vous recevrez : ELYSEA_API_KEY, ELYSEA_API_SECRET, ELYSEA_APP_ID, ELYSEA_BASE_URL et la documentation d'onboarding.

Production (sk_live_) : revue individuelle de votre cas d'usage. C'est ce qui protège l'intégrité de l'écosystème.

Portail développeur →

Installation

JavaScript / TypeScript — Node.js 18+ ou navigateur.

bash
npm install @elysea/core
# Clé sk_test_ requise — portail développeur

Configuration

Trois paramètres. La région EU est obligatoire — régions et prestataires : page Hébergement.

typescript
import { createElyseaClient } from '@elysea/core';

const elysea = createElyseaClient({
  baseUrl:     process.env.ELYSEA_BASE_URL!,
  auth: {
    apiKey:    process.env.ELYSEA_API_KEY!,
    apiSecret: process.env.ELYSEA_API_SECRET!,
  },
  appId:       process.env.ELYSEA_APP_ID!,
  countryCode: 'FR',
  region:      'EU',
});

Résoudre l'identité utilisateur

ELYSÉA résout un coreUserId pseudonymisé depuis votre JWT. Vous ne transmettez pas d'email ni de données personnelles.

typescript
// userJwt = le JWT de votre propre système d'authentification
// Ce token vient de votre middleware auth — JWT classique, Supabase, Auth0, NextAuth, etc.
// ELYSÉA n'impose pas de système d'auth : vous passez ce que vous avez déjà.
// Format attendu : la valeur brute du header Authorization (ex: "Bearer eyJ0eXAi...")
const { coreUserId } = await elysea.identity.resolve({
  userJwt: req.headers.authorization,  // Bearer token de votre auth
});
// coreUserId → identifiant interne pseudonymisé ELYSÉA
// Jamais l'email ni les données réelles de l'utilisateur

Premier appel pipeline cognitif

Le pipeline complet — interprétation du signal, vérification canon, génération, post-traitement éthique. Pas de modèle à sélectionner.

typescript
// conversationHistory — format attendu :
//   Array<{ role: 'user' | 'assistant', content: string }>
//   Exemple : [{ role: 'user', content: 'Bonjour' }, { role: 'assistant', content: 'Salut !' }]
//   Max 20 entrées. Vous gérez ce tableau côté serveur — ELYSÉA le consomme en lecture seule.
const result = await elysea.pipeline.run({
  userInput:           userMessage,
  coreUserId,
  conversationHistory: previousMessages,  // optionnel, max 20 entrées
});

// result.response         → réponse canon-conforme
// result.posture          → posture appliquée (ex: 'present_neutral')
// result.guardianAction   → 'pass'|'warn'|'block' (si block : errorCode + errorMessage)
// result.canonConformance → true si conforme aux canons ELYSÉA

Écriture mémoire — optionnel

Si votre app enrichit le contexte de l'utilisateur, vous pouvez écrire dans la mémoire ELYSÉA — avec une preuve de consentement du constructeur (voir ci-dessous) et TTL obligatoire. La lecture directe de la mémoire est bloquée par le pipeline (P2).

typescript
import { createConsentToken } from '@elysea/core';

// Le consentToken est généré côté serveur après consentement explicite de l'utilisateur.
// Il est signé HMAC-SHA256 avec votre apiSecret et valide 24h.
// Ne jamais le générer côté client (apiSecret doit rester serveur).
const consentToken = createConsentToken(
  process.env.ELYSEA_API_SECRET!,  // votre secret HMAC — jamais exposé
  process.env.ELYSEA_APP_ID!,
  coreUserId,
);

await elysea.memory.write(
  coreUserId,
  {
    type:       'contexte_utile',           // parmi les 5 types autorisés
    content:    'Préfère les réponses courtes.',
    expires_at: '2027-01-01T00:00:00Z',    // TTL obligatoire
  },
  consentToken,
  preuve, // preuve de consentement du constructeur — obligatoire (voir « Mémoire : consentement prouvé obligatoire »)
);

Mémoire : consentement prouvé obligatoire

Effectif dans le cerveau déployé : sans preuve, l'écriture est refusée. Le SDK l'exige aussi : sans preuve, rien n'est envoyé.

ELYSÉA n'écrit aucune mémoire sans une preuve de consentement fournie par vous, le constructeur. Le consentToken authentifie l'opération (P7) ; il ne vaut pas consentement.

Ce que vous devez montrer — un texte de consentement mémoire explicite et séparé (pas noyé dans des conditions générales), accepté par un geste positif de l'utilisateur.

Ce que vous devez conserver — le texte exact affiché, sa version, l'horodatage de l'accord et l'utilisateur concerné, pour pouvoir prouver l'accord.

Ce que vous devez envoyer — à chaque memory.write, une preuve MemoryConsentProof. Tous les champs sont obligatoires et non vides ; le SDK n'en remplit aucun à votre place.

ChampContenu
grantedtrue
consent_text_versionversion du texte affiché
libelle_sha256libelleSha256(texte) — SHA-256 hexadécimal des octets UTF-8 du texte exact affiché, sans aucune normalisation
consent_granted_athorodatage ISO 8601 de l'accord, enregistré par vous
constructor_legal_entityvotre entité juridique
app_idvotre application
typescript
import { libelleSha256, ElyseaSDKError, ElyseaNetworkError, type MemoryConsentProof } from '@elysea/core';

// Votre enregistrement de l'accord (texte exact affiché, version, horodatage)
const preuve: MemoryConsentProof = {
  granted: true,
  consent_text_version: accord.version,
  libelle_sha256: libelleSha256(accord.texteAffiche),
  consent_granted_at: accord.accepteLe,
  constructor_legal_entity: 'Votre Société SAS',
  app_id: 'votre-app',
};

try {
  await elysea.memory.write(
    coreUserId,
    { type: 'preferences_communication', content: 'Réponses courtes.', expires_at: '2027-01-01T00:00:00Z' },
    consentToken,
    preuve,
  );
} catch (e) {
  if ((e instanceof ElyseaSDKError || e instanceof ElyseaNetworkError) && e.errorCode === 'CONSENT_PROOF_REQUIRED') {
    // Mémoire désactivée pour cet utilisateur : ne pas réessayer sans preuve complète.
  }
}

Sans preuve, la mémoire reste désactivée

  • preuve absente ou incomplète → ElyseaSDKError CONSENT_PROOF_REQUIRED, avant tout envoi ;
  • refus du cerveau (HTTP 403 CONSENT_PROOF_REQUIRED) → ElyseaNetworkError avec errorCode 'CONSENT_PROOF_REQUIRED' — jamais silencieux, jamais confondu avec une erreur d'authentification.

Retrait — dès que l'utilisateur retire son accord, cessez d'envoyer la preuve (aucune nouvelle écriture n'est alors possible) et effacez les éléments déjà écrits avec memory.delete(coreUserId, itemId, consentToken). Le cerveau n'expose pas encore de route SDK pour retirer l'accord lui-même.


Exemple complet — intégration en 30 lignes

Copiez ce fichier dans votre projet — c'est une intégration fonctionnelle complète.

typescript
// elysea.ts — intégration complète ELYSEA CERVEAU
import { createElyseaClient, type PipelineResult } from '@elysea/core';

const elysea = createElyseaClient({
  baseUrl:     process.env.ELYSEA_BASE_URL!,
  auth: {
    apiKey:    process.env.ELYSEA_API_KEY!,
    apiSecret: process.env.ELYSEA_API_SECRET!,
  },
  appId:       process.env.ELYSEA_APP_ID!,
  countryCode: 'FR',
  region:      'EU',
});

type Message = { role: 'user' | 'assistant'; content: string };

export async function chat(
  userJwt:  string,
  message:  string,
  history:  Message[] = [],
): Promise<PipelineResult> {
  // 1. Résoudre l'identité — jamais l'email, jamais les données réelles
  const { coreUserId } = await elysea.identity.resolve({ userJwt });

  // 2. Appel pipeline cognitif — éthique appliquée par le pipeline, pas configurée
  const result = await elysea.pipeline.run({
    userInput:           message,
    coreUserId,
    conversationHistory: history,
  });

  // result.response         → réponse canon-conforme, prête à afficher
  // result.posture          → posture runtime (present_neutral, firm_safety…)
  // result.guardianAction   → 'pass'|'warn'|'block' (si block : errorCode + errorMessage)
  // result.canonConformance → true si conforme aux canons ELYSÉA
  return result;
}

// Utilisation dans votre handler API :
// const result = await chat(req.headers.authorization, req.body.message, history);
// res.json({ reply: result.response });

Ce que vous recevez dans le résultat

result.response

La réponse

Réponse générée par le pipeline cognitif ELYSÉA — canon-conforme, post-traitée, validée par le Guardian SDK.

result.posture

La posture

Posture runtime appliquée (ex : present_neutral, firm_safety, containment_soft). Lecture seule — le constructeur ne peut pas la forcer.

result.guardianAction

L'action Guardian

'pass', 'warn' ou 'block'. Si 'block' : errorCode + errorMessage disponibles. Décision finale du pipeline éthique.

result.canonConformance

La conformité canon

true si la réponse est conforme aux canons ELYSÉA. Utile pour votre audit interne.


Les 7 postures runtime

Le pipeline sélectionne la posture automatiquement selon le signal interprété. Le constructeur peut suggérer une posture initiale — ELYSÉA garde la décision finale.

present_neutralPrésence sobre, ancrage
clarifierUne question brute unique
direct_no_bsDirect, ferme, sans morale
silent_holdMicro-sorties / silence
firm_safetyOrientation urgences (3114) — non désactivable
containment_softDésescalade douce
meta_repairRecadrage relationnel direct

Source : ELYSEA.SDK.ELYSEAID.v1 §2 (Composant 3 — Postures canon)

sk_test_ immédiate via le portail — sans carte bancaire. Production sur revue individuelle.

sk_test_ obtenue via le portail développeur — sans carte bancaire, plafonnée à 500 interactions par mois. sk_live_ : revue individuelle de votre cas d'usage.

Portail développeur →Docs SDK →Documentation PDF →