Nodefony 10.0.0-beta.5
Framework Node.js fullstack — HTTP & WebSocket, même contexte

Référence d'API — @nodefony/ai

stable

Documentation › Référence d’API › @nodefony/ai

Générée depuis les déclarations de types publiées de @nodefony/ai 10.0.0-beta.5 : exactement ce que reçoit une application qui l’installe. Cette page n’existe dans aucun dépôt — pour la corriger, on corrige le TSDoc du code.

@nodefony/ai#

import { … } from "@nodefony/ai" — 106 symboles.

Classes (3)#

AiError#

class AiError extends Error

Erreur du module ai.

SessionTicketStore#

class SessionTicketStore

Tickets à usage unique qui autorisent l’ouverture d’UNE session pour une identité donnée — celle au nom de laquelle un outil MCP tire de vraies requêtes HTTP vers l’application.

default#

class AiModule extends Module

Fonctions (30)#

aiConfigJsonSchema#

function aiConfigJsonSchema(): unknown

JSON Schema de la config — Studio en dérive son formulaire d’édition (libellés, types, défauts, descriptions), sans une ligne d’UI écrite à la main.

callMcpTool#

function callMcpTool(name: string, args: Record<string, unknown>, tools: readonly IMcpTool[], caller?: IMcpCaller, run?: IMcpToolRun): Promise<IMcpToolResult | null>

Exécute un outil par son nom public.

checkMcpAccess#

function checkMcpAccess(input: IGuardInput, policy: IGuardPolicy): GuardVerdict

Décide si un appel MCP peut être servi.

collectMcpTools#

function collectMcpTools(options: IMcpCollectOptions): IMcpTool[]

Ramasse les outils SERVIS à cet appelant.

createMcpResponseStream#

function createMcpResponseStream<S extends IMcpEventSink>(options: IMcpResponseStreamOptions<S>): IMcpResponseStream<S>

Fabrique le flux de réponse paresseux d’une requête MCP.

createProgressReporter#

function createProgressReporter(token: McpProgressToken | null, notify: (notification: IJsonRpcNotification) => void, now?: () => number, minIntervalMs?: number): IMcpProgressReporter

Fabrique le rapporteur de progression d’un appel.

declareMcpTools#

function declareMcpTools(options: IMcpDeclareOptions): IMcpTool[]

Énumère ce que cette application DÉCLARE — les outils de ses modules, lus par getMcpTools() — sans rien retenir sur l’identité de qui que ce soit.

defineAiConfig#

function defineAiConfig(config?: unknown): IAiConfig

defineMcpGate#

function defineMcpGate(definition: IMcpGateDefinition): IMcpGate

Définit une porte MCP — UNE fois, à côté de son controller.

defineTicketSessionGate#

function defineTicketSessionGate(definition: ITicketSessionGateDefinition): ITicketSessionGate

Définit une porte de session par ticket : ce qui permet à un outil MCP de tirer de vraies requêtes HTTP vers l’application AU NOM d’un compte.

fingerprintSessionTicket#

function fingerprintSessionTicket(ticket: string): string

Empreinte sous laquelle un ticket est rangé : le ticket brut n’est jamais gardé.

handleMcpMessage#

function handleMcpMessage(message: IJsonRpcMessage | null, context: IMcpServerContext, headers?: IMcpHeaders): Promise<IMcpHttpReply>

Traite UN message JSON-RPC.

insufficientScopeMessage#

function insufficientScopeMessage(name: string, missing: readonly string[]): string

Le message d’un appel refusé faute de scope — le même pour le résultat isError et la description du défi 403.

isLocalAddress#

function isLocalAddress(address?: string): boolean

isNotification#

function isNotification(message: IJsonRpcMessage): boolean

Un message est-il une NOTIFICATION — un appel SANS membre id ?

isRelayedRequest#

function isRelayedRequest(headers: Readonly<Record<string, string | string[]>>): boolean

La requête a-t-elle traversé un relais (proxy inverse, répartiteur) ?

isSessionFlowView#

function isSessionFlowView(value: unknown): value is ISessionFlowView

Le service résolu est-il un flux de session utilisable ?

isSessionServiceView#

function isSessionServiceView(value: unknown): value is ISessionServiceView

Le service résolu est-il un service de sessions utilisable ?

jsonRpcFailure#

function jsonRpcFailure(id: JsonRpcId | null, code: number, message: string, data?: unknown): IJsonRpcFailure

Fabrique une réponse d’erreur — data n’apparaît que s’il est donné.

jsonRpcSuccess#

function jsonRpcSuccess(id: JsonRpcId, result: unknown): IJsonRpcSuccess

Fabrique une réponse de succès.

mcpCallScopes#

function mcpCallScopes(tool: IMcpTool, args: Readonly<Record<string, unknown>>): readonly string[] | null

Tous les scopes qu’exige UN appel : ceux de l’outil, puis ceux que ses arguments ajoutent (IMcpTool.scopesFor). Seule source de la règle, lue par l’appel en process ET par le défi insufficient_scope d’une porte.

mcpCallerRoles#

function mcpCallerRoles(posture: IMcpGatePosture, operatorRoles?: readonly string[]): readonly string[]

Quels rôles porte l’appelant d’une porte MCP — la règle, à un seul endroit.

mcpDeclaredScopes#

function mcpDeclaredScopes(options: IMcpDeclareOptions): string[]

Le vocabulaire de scopes que cette porte EXIGE — l’union de ce que ses outils déclarent, jamais une liste écrite à côté.

mcpText#

function mcpText(value: unknown, isError?: boolean): IMcpToolResult

Rend un résultat d’outil — les données partent en JSON COMPACT.

openTicketSession#

function openTicketSession(request: ITicketSessionRequest, deps: ITicketSessionDeps): Promise<TicketSessionVerdict>

Décide l’ouverture d’une session par ticket.

publishMcpTools#

function publishMcpTools(tools: readonly IMcpTool[]): IMcpToolDefinition[]

Projette les outils pour tools/list — sans leur implémentation.

readProgressToken#

function readProgressToken(params: Record<string, unknown>): McpProgressToken | null

Lit le jeton de progression d’une requête (params._meta.progressToken).

readTicketSessionVerdict#

function readTicketSessionVerdict(body: string | null): { identifier: string; roles: readonly string[]; ref: string; } | { message: string; }

Lit, côté outil, la réponse de la route de connexion par ticket — sans lui faire confiance. Vit à côté de openTicketSession, qui en produit la forme : deux copies du format divergeraient.

serveMcpStdio#

function serveMcpStdio(gate: IMcpGate, options: IMcpStdioOptions): Promise<void>

Sert une porte MCP sur un flux de lignes, jusqu’à la fin de l’entrée.

toTicketSessionUser#

function toTicketSessionUser(value: unknown, identifier: string): ITicketSessionUser

Lit le compte rendu par le flux de session, sans lui faire confiance.

Constantes (23)#

JsonRpcError#

const JsonRpcError: { readonly PARSE_ERROR: -32700; readonly INVALID_REQUEST: -32600; readonly METHOD_NOT_FOUND: -32601; readonly INVALID_PARAMS: -32602; readonly INTERNAL_ERROR: -32603; }

Les cinq codes d’erreur que JSON-RPC 2.0 §5.1 définit.

MCP_DEFAULT_NEGOTIATED_VERSION#

const MCP_DEFAULT_NEGOTIATED_VERSION = "2025-03-26"

Révision supposée quand un client n’en déclare AUCUNE.

MCP_PROGRESS_MESSAGE_MAX#

const MCP_PROGRESS_MESSAGE_MAX = 1000

Longueur maximale du message d’une progression, en caractères.

MCP_PROGRESS_MIN_INTERVAL_MS#

const MCP_PROGRESS_MIN_INTERVAL_MS = 100

Intervalle minimal entre deux notifications de progression, en millisecondes.

MCP_PROTOCOL_VERSION#

const MCP_PROTOCOL_VERSION = "2026-07-28"

Révision PRÉFÉRÉE de ce serveur — celle qu’il met en tête de ce qu’il sait faire.

MCP_RESERVED_PREFIX#

const MCP_RESERVED_PREFIX = "nodefony_"

Préfixe RÉSERVÉ aux modules du framework (@nodefony/*) — un agent qui lit nodefony_inspect doit pouvoir croire que c’est le framework qui répond.

MCP_STREAM_GRACE_MS#

const MCP_STREAM_GRACE_MS = 5000

Délai de grâce, en ms : au-delà, un appel sans réponse ouvre le flux. Très en deçà du délai d’inactivité d’une requête (30 s par défaut), assez long pour qu’un outil ordinaire réponde en JSON comme avant.

MCP_STREAM_MAX_EVENT_BYTES#

const MCP_STREAM_MAX_EVENT_BYTES: number

Plafond d’un événement sur le flux de réponse MCP, octets UTF-8 — celui de la réponse finale, qui porte le résultat entier de l’outil (16 Mio).

MCP_SUPPORTED_VERSIONS#

const MCP_SUPPORTED_VERSIONS: readonly [ "2026-07-28", "2025-11-25", "2025-06-18", "2025-03-26", "2024-11-05" ]

Versions que ce serveur sait servir — publiées par server/discover, listées dans l’erreur UnsupportedProtocolVersion, et candidates à l’écho d’initialize. De la plus récente à la plus ancienne.

MCP_TEXT_MAX_CHARS#

const MCP_TEXT_MAX_CHARS = 32000

Au-delà de quoi une réponse cesse d’être une réponse.

META_PROTOCOL_VERSION#

const META_PROTOCOL_VERSION = "io.modelcontextprotocol/protocolVersion"

Clé de métadonnée par laquelle un client MODERNE déclare sa révision.

META_SERVER_INFO#

const META_SERVER_INFO = "io.modelcontextprotocol/serverInfo"

Clé de métadonnée portant l’identité du serveur dans server/discover.

McpProtocolError#

const McpProtocolError: { readonly HEADER_MISMATCH: -32020; readonly UNSUPPORTED_PROTOCOL_VERSION: -32022; }

Codes réservés par la spec MCP, hors plage JSON-RPC standard.

RELAY_HEADERS#

const RELAY_HEADERS: readonly [ "forwarded", "x-forwarded-for", "x-real-ip", "via" ]

Les en-têtes qu’un relais pose — leur présence suffit à dire que la requête n’est pas arrivée directement, quelle que soit l’adresse de la connexion.

SESSION_TICKET_HEADER#

const SESSION_TICKET_HEADER = "x-nodefony-session-ticket"

En-tête qui porte le ticket vers la route de connexion par ticket.

SESSION_TICKET_LENGTH#

const SESSION_TICKET_LENGTH = 43

Longueur d’un ticket : 32 octets d’aléa en base64url, sans remplissage.

SESSION_TICKET_MAX_PENDING#

const SESSION_TICKET_MAX_PENDING = 8

Tickets en attente au plus. Un outil en émet UN et le rachète aussitôt : en atteindre huit signale un usage anormal, refusé plutôt qu’accumulé.

SESSION_TICKET_TTL_MS#

const SESSION_TICKET_TTL_MS = 10000

Durée de vie d’un ticket : le temps d’une requête de connexion en boucle locale.

TICKET_SESSION_REFUSED#

const TICKET_SESSION_REFUSED = "ticket de session refus\u00E9"

Message unique de tout refus : la cause fine ne sort jamais vers l’appelant.

aiConfigSchema#

const aiConfigSchema: z.ZodObject<{ enabled: z.ZodDefault<z.ZodBoolean>; }, z.core.$strict>

mcpConfigSchema#

const mcpConfigSchema: z.ZodObject<{ enabled: z.ZodDefault<z.ZodBoolean>; allowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString>>; allowRemote: z.ZodDefault<z.ZodBoolean>; authorization: z.ZodDefault<z.ZodObject<{ authorizationServers: z.ZodDefault<z.ZodArray<z.ZodString>>; resource: z.ZodDefault<z.ZodString>; additionalResources: z.ZodDefault<z.ZodArray<z.ZodString>>; resourceName: z.ZodOptional<z. …

Réglages de la porte MCP (POST /nodefony/mcp) — la SOURCE UNIQUE du schéma mcp.*, que tout module qui sert ou configure la porte importe d’ici.

mcpGateSchema#

const mcpGateSchema: z.ZodObject<{ enabled: z.ZodDefault<z.ZodBoolean>; allowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString>>; allowRemote: z.ZodDefault<z.ZodBoolean>; authorization: z.ZodDefault<z.ZodObject<{ authorizationServers: z.ZodDefault<z.ZodArray<z.ZodString>>; resource: z.ZodDefault<z.ZodString>; additionalResources: z.ZodDefault<z.ZodArray<z.ZodString>>; resourceName: z.ZodOptional<z.Zo …

Le schéma d’une porte — les réglages de transport et d’autorisation de mcpConfigSchema (les MÊMES clés que devkit.mcp.*), plus ce que la porte publie et comment. Strict : une clé inconnue arrête le démarrage en la nommant, au lieu d’être ignorée.

ticketSessionGateSchema#

const ticketSessionGateSchema: z.ZodObject<{ factor: z.ZodString; localOnly: z.ZodDefault<z.ZodBoolean>; }, z.core.$strict>

Définition d’une porte de session par ticket — validée et figée au boot.

Interfaces (36)#

IGuardInput#

interface IGuardInput

Ce que la garde a besoin de savoir d’une requête.

IGuardPolicy#

interface IGuardPolicy

Réglages qui gouvernent les gardes (viennent de la config du module).

IJsonRpcFailure#

interface IJsonRpcFailure

Réponse d’erreur.

IJsonRpcMessage#

interface IJsonRpcMessage

Message ENTRANT, tel qu’il arrive du réseau : rien n’y est garanti.

IJsonRpcSuccess#

interface IJsonRpcSuccess

Réponse de succès.

IMcpCacheHints#

interface IMcpCacheHints

Indices de cache d’un résultat MCP (spec server/utilities/caching).

IMcpCaller#

interface IMcpCaller

Ce que le transport a pu ÉTABLIR de l’appelant — jamais ce qu’il prétend.

IMcpCollectOptions#

interface IMcpCollectOptions extends IMcpDeclareOptions

Ce qu’il faut pour ramasser les outils SERVIS à un appelant.

IMcpDeclareOptions#

interface IMcpDeclareOptions

Ce qu’il faut pour ÉNUMÉRER les déclarations d’outils d’une application.

IMcpEventSink#

interface IMcpEventSink

Ce qu’une porte sait ouvrir : un puits d’événements, ordonné.

IMcpGate#

interface IMcpGate

Une porte MCP définie — à servir depuis une action de controller.

IMcpGatePosture#

interface IMcpGatePosture

Ce qu’une porte MCP sait d’elle-même et de son appelant, au moment de dire quels rôles celui-ci porte.

IMcpGateRequest#

interface IMcpGateRequest<S extends IMcpEventSink = IMcpEventSink>

Ce que la porte a reçu — lu par elle, jamais par la mécanique.

IMcpGateRuntime#

interface IMcpGateRuntime

Ce que l’environnement fournit à une réponse — serve() le lit seul.

IMcpHeaders#

interface IMcpHeaders

En-têtes HTTP dont le protocole se sert.

IMcpHttpReply#

interface IMcpHttpReply

Ce que le serveur MCP rend, avant traduction en réponse HTTP.

IMcpProgressReporter#

interface IMcpProgressReporter

Le rapporteur d’UN appel : ce que l’outil appelle, ce que la porte clôt.

IMcpResponseStream#

interface IMcpResponseStream<S extends IMcpEventSink>

Le flux de réponse d’UNE requête, vu de la porte.

IMcpResponseStreamOptions#

interface IMcpResponseStreamOptions<S extends IMcpEventSink>

Options de createMcpResponseStream.

IMcpServerContext#

interface IMcpServerContext

Tout ce dont le traitement d’un message a besoin.

IMcpStdioOptions#

interface IMcpStdioOptions

Ce que sert une boucle stdio.

IMcpStdioRequest#

interface IMcpStdioRequest

Ce qu’un transport de process (stdio) a reçu : une ligne, sans en-tête ni adresse.

IMcpTool#

interface IMcpTool extends IMcpToolDefinition

Un outil exécutable : ce que tools/list publie, plus ce qui répond.

IMcpToolAnnotations#

interface IMcpToolAnnotations

Ce qu’un outil promet de son effet — les indices ToolAnnotations de la spec MCP (révision 2026-07-28, schema.ts), publiés dans tools/list.

IMcpToolDefinition#

interface IMcpToolDefinition

Un outil tel que tools/list le publie — sans son implémentation.

IMcpToolResult#

interface IMcpToolResult

Ce que rend un outil — du contenu, et l’aveu d’un échec métier.

IMcpToolRun#

interface IMcpToolRun

Ce que la porte prête à un outil pendant SON exécution : de quoi savoir que l’agent est parti, et de quoi lui donner signe de vie.

IMcpTransport#

interface IMcpTransport

Le transport d’UNE requête, vu du protocole.

IServerInfo#

interface IServerInfo

Ce que ce serveur sait faire, annoncé à l’initialisation.

ISessionFlowView#

interface ISessionFlowView

Vue minimale du flux de session (authFlow, fourni par @nodefony/security). Ce module n’en dépend pas : le service se résout par NOM.

ISessionServiceView#

interface ISessionServiceView

Vue minimale du service de sessions (sessions, @nodefony/http).

ISessionTicketStoreOptions#

interface ISessionTicketStoreOptions

Réglages du magasin — injectés par les tests, défauts en production.

ITicketSessionDeps#

interface ITicketSessionDeps

Ce dont la décision a besoin, fourni par la porte.

ITicketSessionGate#

interface ITicketSessionGate

Une porte de session par ticket définie — à servir depuis une action de controller.

ITicketSessionRequest#

interface ITicketSessionRequest

Ce que la route reçoit, tel que la requête le présente.

ITicketSessionUser#

interface ITicketSessionUser

Compte pour lequel la session vient d’être ouverte.

Types (14)#

GuardVerdict#

type GuardVerdict = { allowed: true; } | { allowed: false; why: string; }

Verdict d’une garde : passer, ou refuser en disant pourquoi.

IAiConfig#

type IAiConfig = z.output<typeof aiConfigSchema>

Config telle que le CODE la lit — défauts appliqués, rien d’optionnel.

IAiConfigInput#

type IAiConfigInput = z.input<typeof aiConfigSchema>

Config telle que l’APP l’écrit dans use() — tous les champs optionnels.

IMcpConfig#

type IMcpConfig = z.output<typeof mcpConfigSchema>

Réglages mcp.* tels que le CODE les lit — défauts appliqués.

IMcpGateDefinition#

type IMcpGateDefinition = z.input<typeof mcpGateSchema>

Ce qu’on écrit pour définir une porte (défauts compris).

IMcpGateResponse#

type IMcpGateResponse<S extends IMcpEventSink = IMcpEventSink> = { kind: "json"; status: number; body: unknown; headers?: Readonly<Record<string, string>>; } | { kind: "empty"; status: number; headers?: Readonly<Record<string, string>>; } | { kind: "stream"; stream: S; }

Réponse DÉCRITE par la mécanique — la porte l’écrit.

IMcpGateSettings#

type IMcpGateSettings = z.output<typeof mcpGateSchema>

Les réglages EFFECTIFS d’une porte, validés et figés.

ITicketSessionGateDefinition#

type ITicketSessionGateDefinition = z.input<typeof ticketSessionGateSchema>

Ce qu’on passe à defineTicketSessionGate.

ITicketSessionGateSettings#

type ITicketSessionGateSettings = z.output<typeof ticketSessionGateSchema>

Réglages effectifs d’une porte de session par ticket.

JsonRpcId#

type JsonRpcId = string | number

Identifiant d’une requête : chaîne ou nombre (JSON-RPC 2.0 §4).

McpGateSeverity#

type McpGateSeverity = "DEBUG" | "WARNING" | "ERROR" | "CRITIC"

Sévérités qu’une porte MCP écrit au journal.

McpProgressToken#

type McpProgressToken = string | number

Un jeton de progression : chaîne ou entier (progress §Progress Flow).

McpProtocolVersion#

type McpProtocolVersion = (typeof MCP_SUPPORTED_VERSIONS)[number]

Une révision du protocole que ce paquet sait servir.

TicketSessionVerdict#

type TicketSessionVerdict = { readonly status: 200; readonly identifier: string; readonly roles: readonly string[]; readonly ref: string; } | { readonly status: 403 | 503; readonly message: string; }

Verdict de la route : la session ouverte, ou un refus.


← Toutes les références d’API