API Reference (tRPC)
Runeya expose deux routeurs tRPC : un sur le serveur local (port 9545) et un sur l'agent (port 9546).
Serveur local — Routeurs
Base URL : http://localhost:9545/api/trpc
health
| Procédure | Type | Description |
|---|---|---|
health.check | Query | Santé du serveur (public) |
service
| Procédure | Type | Description |
|---|---|---|
service.list | Query | Liste tous les services |
service.get | Query | Détails d'un service |
service.create | Mutation | Crée un service |
service.update | Mutation | Met à jour un service |
service.delete | Mutation | Supprime un service |
project
| Procédure | Type | Description |
|---|---|---|
project.list | Query | Liste tous les projets |
project.create | Mutation | Crée un projet |
project.update | Mutation | Met à jour un projet |
project.delete | Mutation | Supprime un projet |
process
| Procédure | Type | Description |
|---|---|---|
process.start | Mutation | Démarre un service |
process.stop | Mutation | Arrête un service |
process.restart | Mutation | Redémarre un service |
process.status | Subscription | Status temps réel |
process.logs | Subscription | Logs temps réel |
environment
| Procédure | Type | Description |
|---|---|---|
environment.list | Query | Liste les environnements |
environment.create | Mutation | Crée un environnement |
environment.update | Mutation | Met à jour un environnement |
environment.delete | Mutation | Supprime un environnement |
environment.setActive | Mutation | Active un environnement |
agent
| Procédure | Type | Description |
|---|---|---|
agent.list | Query | Liste les agents |
agent.register | Mutation | Enregistre un agent |
agent.health | Subscription | Santé des agents temps réel |
settings
| Procédure | Type | Description |
|---|---|---|
settings.get | Query | Paramètres globaux |
settings.update | Mutation | Met à jour les paramètres |
settings.getNotificationPreferences | Query | Préférences de notifications |
settings.updateNotificationPreferences | Mutation | Mute granulaire des notifications |
settings.listParsers | Query | Liste les parsers |
settings.getParser | Query | Détail d'un parser |
settings.createParser | Mutation | Crée un parser |
settings.updateParser | Mutation | Met à jour un parser |
settings.deleteParser | Mutation | Supprime un parser |
chat
| Procédure | Type | Description |
|---|---|---|
chat.conversations.list | Query | Liste les conversations |
chat.conversations.get | Query | Détail d'une conversation |
chat.conversations.create | Mutation | Crée une conversation (optionnellement liée à un scénario ou une enterprise) |
chat.conversations.update | Mutation | Met à jour le titre/messages d'une conversation |
chat.conversations.delete | Mutation | Supprime une conversation |
chat.conversations.archive | Mutation | Archive/désarchive une conversation |
chat.listModels | Query | Liste les modèles disponibles pour le provider actif |
chat.checkClaudeCode | Query | Vérifie la disponibilité de claude en local |
chat.listClaudeCodeModels | Query | Liste les modèles Claude Code supportés |
chat.getClaudeUsage | Query | Récupère l'usage Claude local |
chat.getCodexUsage | Query | Récupère l'usage Codex local |
chat.streamingStatus | Query | Liste les sessions de streaming actives |
chat.stopSession | Mutation | Arrête une session active |
chat.sendViaClaudeCode | Subscription | Lance un stream via Claude Code CLI (accepte imageIds) |
chat.send | Subscription | Lance un stream via provider API |
Entrée chat.sendViaClaudeCode
{
// ... champs existants
imageIds?: string[] // max 5 UUIDs v4 — déclenche le mode multimodal stdin
}Lorsque imageIds est fourni, le runner passe en --input-format stream-json et injecte les images en base64 dans le stdin Claude Code CLI (format Anthropic image content blocks).
Entrée chat.conversations.create
{
title?: string
isCli?: boolean
scenarioId?: string
enterpriseId?: string
enterpriseInput?: string
}scenarioIdetenterpriseIdsont mutuellement exclusifs.- Si
enterpriseIdest défini, le backend initialise un workspace dansDATA_DIR/enterprise-runs/<conversationId>/.
scenario
| Procédure | Type | Description |
|---|---|---|
scenario.list | Query | Liste les scénarios |
scenario.get | Query | Détail d'un scénario |
scenario.create | Mutation | Crée un scénario |
scenario.update | Mutation | Met à jour un scénario |
scenario.delete | Mutation | Supprime un scénario |
scenario.getRunState | Query | État d'exécution d'un run (par conversation) |
scenario.getScenarioSnapshot | Query | Snapshot du scénario exécuté |
scenario.getNodeOutput | Query | Sortie d'un nœud |
scenario.getNodeMeta | Query | Métadonnées d'un nœud |
scenario.getNodePredecessors | Query | Prédécesseurs injectés dans le contexte |
scenario.getNodePrompt | Query | Prompt exact d'un nœud |
scenario.getSystemContext | Query | Contexte système du run |
scenario.sendInput | Mutation | Envoie une réponse utilisateur à un nœud ask_user |
scenario.isRunning | Query | Indique si un scénario est en cours |
scenario.stop | Mutation | Arrête un scénario en cours |
scenario.run | Subscription | Stream des événements d'exécution de scénario |
scenario.generateWithAI | Subscription | Stream de génération de graphe scénario par IA |
scenario.generateName | Mutation | Génère un titre court pour une conversation de run |
Schéma ScenarioEdge (entrée de scenario.create / scenario.update)
interface ScenarioEdge {
id: string // UUID, max 128
source: string // ID du nœud source, max 128
target: string // ID du nœud cible, max 128
description: string // Description de branche, max 500 (défaut : '')
}Le champ description est utilisé par le runner pour injecter des choix numérotés (PASS1, PASS2, …) dans le prompt de l'IA lorsqu'un nœud a plusieurs edges sortantes. Voir Modèle de données — Scénarios pour le comportement de routage.
Note scenario.generateName
- Le backend nettoie la sortie LLM (quotes, puces, bruit multi-lignes).
- Les noms génériques (
scenario,scenario run, etc.) sont rejetés. - En fallback, le serveur renvoie un titre déterministe basé sur le scénario (nom/labels/prompts), au lieu d'un nom vide ou trop générique.
enterprise
| Procédure | Type | Description |
|---|---|---|
enterprise.list | Query | Liste les enterprises |
enterprise.get | Query | Détail d'une enterprise |
enterprise.create | Mutation | Crée une enterprise |
enterprise.update | Mutation | Met à jour une enterprise |
enterprise.delete | Mutation | Supprime une enterprise |
Agent — Routeurs
Base URL : http://localhost:9546/api/trpc Auth : Authorization: Bearer <passphrase>
health
| Procédure | Type | Description |
|---|---|---|
health.check | Query | Santé de l'agent (public) |
process
| Procédure | Type | Description |
|---|---|---|
process.deploy | Mutation | Déploie/met à jour la config d'un service |
process.start | Mutation | Démarre un processus |
process.stop | Mutation | Arrête un processus (SIGTERM + grace) |
process.restart | Mutation | Redémarre un processus |
process.status | Subscription | Status temps réel |
process.logs | Subscription | Logs temps réel |
process.metrics | Subscription | Métriques CPU/RAM temps réel |
process.updateConfig | Mutation | Met à jour la config (process arrêté) |
process.clearLogs | Mutation | Efface le buffer de logs |
process.cancel | Mutation | Annule une opération en cours |
Subscriptions — Format
Les subscriptions utilisent les async generators tRPC v11 :
// Client-side (Vue)
const subscription = trpc.process.logs.subscribe(
{ serviceId },
{
onData: (logLine) => {
logs.value.push(logLine)
},
onError: (err) => {
console.error('Subscription error', err)
},
}
)
// Cleanup
subscription.unsubscribe()Schémas d'entrée communs
// Service
{
id: string // UUID
name: string // max 128
command: string // max 2048
cwd: string // max 2048
shell: boolean
description?: string // max 512
projectId: string // UUID
agentId?: string // UUID
parserIds: string[] // max 50 items
}
// LogLine (sortie des subscriptions)
{
raw: string
stream: 'stdout' | 'stderr'
level: 'error' | 'warn' | 'info' | 'debug'
message: string // max 16KB
hidden: boolean
metadata: object // max 100 keys
json?: object
timestamp: string // ISO 8601
}Endpoints HTTP (hors tRPC)
Ces routes Express acceptent multipart/form-data et sont enregistrées dans apps/server/src/create-server.ts. Elles ne passent pas par tRPC.
| Méthode | Chemin | Description |
|---|---|---|
POST | /api/images/upload | Upload d'une image (champ form image, max 5 Mo, types autorisés : png/jpeg/webp/gif) |
GET | /api/images/:imageId | Télécharger/afficher une image par son UUID v4 |
Documentation complète : Image Support — Technical Reference.
Erreurs tRPC
| Code | Description |
|---|---|
UNAUTHORIZED | Token JWT manquant ou invalide |
FORBIDDEN | Permissions insuffisantes |
NOT_FOUND | Ressource introuvable |
BAD_REQUEST | Validation Zod échouée |
INTERNAL_SERVER_ERROR | Erreur serveur inattendue |
CONFLICT | Opération impossible dans l'état actuel |