Skip to content

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édureTypeDescription
health.checkQuerySanté du serveur (public)

service

ProcédureTypeDescription
service.listQueryListe tous les services
service.getQueryDétails d'un service
service.createMutationCrée un service
service.updateMutationMet à jour un service
service.deleteMutationSupprime un service

project

ProcédureTypeDescription
project.listQueryListe tous les projets
project.createMutationCrée un projet
project.updateMutationMet à jour un projet
project.deleteMutationSupprime un projet

process

ProcédureTypeDescription
process.startMutationDémarre un service
process.stopMutationArrête un service
process.restartMutationRedémarre un service
process.statusSubscriptionStatus temps réel
process.logsSubscriptionLogs temps réel

environment

ProcédureTypeDescription
environment.listQueryListe les environnements
environment.createMutationCrée un environnement
environment.updateMutationMet à jour un environnement
environment.deleteMutationSupprime un environnement
environment.setActiveMutationActive un environnement

agent

ProcédureTypeDescription
agent.listQueryListe les agents
agent.registerMutationEnregistre un agent
agent.healthSubscriptionSanté des agents temps réel

settings

ProcédureTypeDescription
settings.getQueryParamètres globaux
settings.updateMutationMet à jour les paramètres
settings.getNotificationPreferencesQueryPréférences de notifications
settings.updateNotificationPreferencesMutationMute granulaire des notifications
settings.listParsersQueryListe les parsers
settings.getParserQueryDétail d'un parser
settings.createParserMutationCrée un parser
settings.updateParserMutationMet à jour un parser
settings.deleteParserMutationSupprime un parser

chat

ProcédureTypeDescription
chat.conversations.listQueryListe les conversations
chat.conversations.getQueryDétail d'une conversation
chat.conversations.createMutationCrée une conversation (optionnellement liée à un scénario ou une enterprise)
chat.conversations.updateMutationMet à jour le titre/messages d'une conversation
chat.conversations.deleteMutationSupprime une conversation
chat.conversations.archiveMutationArchive/désarchive une conversation
chat.listModelsQueryListe les modèles disponibles pour le provider actif
chat.checkClaudeCodeQueryVérifie la disponibilité de claude en local
chat.listClaudeCodeModelsQueryListe les modèles Claude Code supportés
chat.getClaudeUsageQueryRécupère l'usage Claude local
chat.getCodexUsageQueryRécupère l'usage Codex local
chat.streamingStatusQueryListe les sessions de streaming actives
chat.stopSessionMutationArrête une session active
chat.sendViaClaudeCodeSubscriptionLance un stream via Claude Code CLI (accepte imageIds)
chat.sendSubscriptionLance un stream via provider API

Entrée chat.sendViaClaudeCode

typescript
{
  // ... 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

typescript
{
  title?: string
  isCli?: boolean
  scenarioId?: string
  enterpriseId?: string
  enterpriseInput?: string
}
  • scenarioId et enterpriseId sont mutuellement exclusifs.
  • Si enterpriseId est défini, le backend initialise un workspace dans DATA_DIR/enterprise-runs/<conversationId>/.

scenario

ProcédureTypeDescription
scenario.listQueryListe les scénarios
scenario.getQueryDétail d'un scénario
scenario.createMutationCrée un scénario
scenario.updateMutationMet à jour un scénario
scenario.deleteMutationSupprime un scénario
scenario.getRunStateQueryÉtat d'exécution d'un run (par conversation)
scenario.getScenarioSnapshotQuerySnapshot du scénario exécuté
scenario.getNodeOutputQuerySortie d'un nœud
scenario.getNodeMetaQueryMétadonnées d'un nœud
scenario.getNodePredecessorsQueryPrédécesseurs injectés dans le contexte
scenario.getNodePromptQueryPrompt exact d'un nœud
scenario.getSystemContextQueryContexte système du run
scenario.sendInputMutationEnvoie une réponse utilisateur à un nœud ask_user
scenario.isRunningQueryIndique si un scénario est en cours
scenario.stopMutationArrête un scénario en cours
scenario.runSubscriptionStream des événements d'exécution de scénario
scenario.generateWithAISubscriptionStream de génération de graphe scénario par IA
scenario.generateNameMutationGénère un titre court pour une conversation de run

Schéma ScenarioEdge (entrée de scenario.create / scenario.update)

typescript
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édureTypeDescription
enterprise.listQueryListe les enterprises
enterprise.getQueryDétail d'une enterprise
enterprise.createMutationCrée une enterprise
enterprise.updateMutationMet à jour une enterprise
enterprise.deleteMutationSupprime une enterprise

Agent — Routeurs

Base URL : http://localhost:9546/api/trpc Auth : Authorization: Bearer <passphrase>

health

ProcédureTypeDescription
health.checkQuerySanté de l'agent (public)

process

ProcédureTypeDescription
process.deployMutationDéploie/met à jour la config d'un service
process.startMutationDémarre un processus
process.stopMutationArrête un processus (SIGTERM + grace)
process.restartMutationRedémarre un processus
process.statusSubscriptionStatus temps réel
process.logsSubscriptionLogs temps réel
process.metricsSubscriptionMétriques CPU/RAM temps réel
process.updateConfigMutationMet à jour la config (process arrêté)
process.clearLogsMutationEfface le buffer de logs
process.cancelMutationAnnule une opération en cours

Subscriptions — Format

Les subscriptions utilisent les async generators tRPC v11 :

typescript
// 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

typescript
// 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éthodeCheminDescription
POST/api/images/uploadUpload d'une image (champ form image, max 5 Mo, types autorisés : png/jpeg/webp/gif)
GET/api/images/:imageIdTélécharger/afficher une image par son UUID v4

Documentation complète : Image Support — Technical Reference.

Erreurs tRPC

CodeDescription
UNAUTHORIZEDToken JWT manquant ou invalide
FORBIDDENPermissions insuffisantes
NOT_FOUNDRessource introuvable
BAD_REQUESTValidation Zod échouée
INTERNAL_SERVER_ERRORErreur serveur inattendue
CONFLICTOpération impossible dans l'état actuel

Publié sous licence MIT.