@ai_kit/server fournit un serveur Hono préconfiguré qui expose vos agents et workflows sous forme d’API HTTP. Il gère les invocations synchrones, le streaming (SSE), la reprise des workflows en attente et peut générer automatiquement une documentation OpenAPI.
Installation
@ai_kit/core afin de partager les agents et workflows que vous avez déjà déclarés.
Besoin d’un projet clé en main ? Lancez simplement :
Exemple minimal
0.0.0.0 et le port PORT (ou 8787). Les instances d’agent et de workflow sont conservées en mémoire et réutilisées à chaque requête.
Besoin de verrouiller l’API ? Consultez le guide Authentification pour activer les tokens bearer et vos gardes personnalisés.
Endpoints exposés
| Route | Description |
|---|---|
GET /api/agents | Liste tous les agents déclarés dans la configuration du serveur. |
POST /api/agents/:id/generate | Exécute Agent.generate une fois et retourne la réponse complète. |
POST /api/agents/:id/stream | Diffuse Agent.stream via SSE ou l’API DataStreamResponse fournie par ai. |
GET /api/workflows | Liste tous les workflows déclarés dans la configuration du serveur. |
POST /api/workflows/:id/run | Démarre un run et renvoie son runId + l’état final (ou waiting_human). |
POST /api/workflows/:id/stream | Diffuse chaque WorkflowEvent et l’état final via SSE. |
POST /api/workflows/:id/runs/:runId/resume | Reprend un run suspendu avec des données humaines. |
inputData et peuvent ajouter metadata. Pour les agents, fournissez soit prompt, soit messages (aligné sur AI SDK).
Consommer depuis ClientKit
Pour appeler le serveur depuis un autre service Node.js ou un worker edge, installez@ai_kit/client-kit et pointez-le vers l’URL publique du serveur :
- Les propriétés
runtimeouruntimeContextfusionnent leursmetadata/ctxavec celles passées directement (metadata,ctx). resumeWorkflowreste disponible pour débloquer un run en attente humaine avec{ stepId, data }.- Passez
signaldans les options pour annuler une requête (compatible fetch standard).
Streaming et reprise
streamutilise unReadableStreamSSE : l’événementruncontient lerunId, puis chaque étape déclenche un événement dont le nom =event.type.- Lorsque le workflow passe en
waiting_human, le stream se ferme après avoir envoyé l’état. Utilisez ensuiteresumeavec{ stepId, data }pour relancer l’exécution. - La route
/streamannule automatiquement le run si le client ferme la connexion.
Middleware
Vous pouvez brancher des middlewares Hono (même syntaxe que Mastra) via l’optionserver.middleware. Passez soit une simple fonction (middleware global), soit un objet { path, handler } pour limiter la portée à certaines routes (path doit être une chaîne Hono valide, par exemple /api/*). Le champ middleware à la racine reste pris en charge pour compatibilité mais sera retiré à terme.
Swagger / OpenAPI
Swagger est activé par défaut hors production. Personnalisez-le viaswagger :
- L’UI est servie sur
route(par ex./docs). - L’OpenAPI JSON est disponible sur
route + ".json". - Passez
falsepour désactiver Swagger même en développement, outruepour l’activer en production.
Utiliser le binaire CLI
Le package expose la commandeserver-kit (exécutable via npx @ai_kit/server) qui démarre une instance ServerKit en lisant les variables d’environnement suivantes :
PORT(défaut8787).HOST(défaut0.0.0.0).NODE_ENVinflue sur l’activation automatique de Swagger.
ServerKit dans votre application (par exemple dans apps/api/server.ts) et que vous n’y passez vos modules AI Kit. Inspirez-vous du CLI pour intégrer ServerKit dans votre outil de déploiement habituel.
Options de configuration
| Option | Type | Rôle |
|---|---|---|
agents | Record<string, Agent> | Enregistre les agents disponibles sous /api/agents/:id/*. |
workflows | Record<string, Workflow> | Déclare les workflows exposés sous /api/workflows/:id/*. |
server.middleware | ServerMiddleware[] | Ajoute des middlewares globaux ou scoped avant les routes intégrées. |
swagger | boolean | SwaggerOptions | Active/désactive Swagger ou précise route, title, version, description. |
telemetry | boolean | ServerTelemetryOptions | Active l’export Langfuse et transmet les options à ensureLangfuseTelemetry. |
listen({ port, hostname, signal }) accepte également un AbortSignal pour arrêter proprement le serveur.
Pour une implémentation complète, consultez packages/server/src/ServerKit.ts.
Télémétrie Langfuse
Activez Langfuse directement via la configurationServerKit — aucun fichier d’instrumentation séparé n’est requis :
telemetryaccepte un booléen ou la configuration complète d’ensureLangfuseTelemetry.- Définissez les variables
LANGFUSE_PUBLIC_KEY,LANGFUSE_SECRET_KEY(et optionnellementLANGFUSE_BASE_URL). - Le CLI expose les flags
--telemetry/--no-telemetrypour activer ou désactiver rapidement la télémétrie.