quest'n'click 4.5.0 · r1

Construite pour quest'n'click 4.5.0, révision r1. Si elle est publiée, et laquelle est la courante, est dit par publication.json.

API du Studio

English · Type : référence · Public : auteur, contributeur · Contexte : Studio local · Statut : prête · S'applique depuis : 4.4.0

Le Studio local · contrat : stable · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Chromium de bout en bout (les vérifications du Studio) ; Windows : la suite unitaire seulement · vérifications automatiques : jobs e2e, windows ; plan de CI e2e, windows ; 2 fichiers de tests · passes humaines : studio-hero-matrix pas faite (#238) · limites connues : hosted-only-routes

Le Studio Server (Studio d'équipe hébergé) · contrat : expérimental · vérifié par la CI (matrice de support de la 4.4.0, 2026-10-23) : Postgres, S3 et Keycloak en CI ; Chromium et Firefox (job studio-hosted) ; WebKit sous macOS, à la main seulement · vérifications automatiques : jobs studio-hosted, studio-install-smoke ; plan de CI studioHosted ; 3 fichiers de tests · passes humaines : studio-hosted pas faite (#149), studio-collab pas faite (#150), studio-preview pas faite (#166), studio-assets-hosted pas faite (#167), studio-mcp-remote pas faite (#196), studio-oidc-generic pas faite (#197) · limites connues : hosted-only-routes

L'API JSON à laquelle parle la page du Studio : lire le jeu, modifier un lieu, lancer les vérifications. Chaque route ci-dessous a sa propre section ; on y renvoie par studio.api.md#put-room-id-layout (la méthode et le chemin en minuscules, - entre les mots).

Vue d'ensemble

Les mêmes opérations en fonctions

Les routes appellent les simples fonctions de studio-server/src/ops/core.ts, qu'utilisent aussi le plugin Vite, les tests et le serveur MCP : gameInfo(), getRoom(id), setLayout(id, layout), setText(id, path, value), addEntity(id, e), getStoryboard(), setStoryboard(sb), exportStoryboardMarkdown(), getNotes(), addNote(n), editNote(id, { text, about? }), deleteNote(id), validate(), solve(from?), screenshot(room, checkpoint, devServerUrl) pour le jeu courant, et createStudio({ gameDir, root, importFresh }) pour n'importe quel autre dossier de jeu.

Limite · hosted-only-routes Cette page couvre la table que les deux serveurs partagent et les routes propres au serveur de dev. Les routes propres au Studio Server (sessions et connexion, membres et invitations, commentaires, builds et prévisualisations, ses routes Assets, le curseur du journal /api/ops, la mise à niveau du moteur, les sondes, /mcp) ne sont pas décrites ici : voir les pages du Studio hébergé.

Textes

Un littéral de chaîne sous defineRoom({...}) est un texte, repéré par son chemin JSON, quand le chemin finit par name, topic, toast, lines[n], say[1], shout[1], guide.say, choice[n].text, look.<id> ou look.<id>[n], ou quand c'est une chaîne nue dans une liste de commandes (do, once, then, else, cutscene, after, onEnter, ou une branche de nth, cycle, random, parallel) : ce sont des répliques du héros. kind dit laquelle (name, look, say, hero, topic, hint, toast, choice, guide) ; who est le locuteur d'un say.

Diffusion

La page du Studio est studio.html à la racine du moteur (point d'entrée src/studio/main.ts). N'importe quel serveur de dev la sert à /__studio/ (npm run dev aussi) ; npm run studio l'ouvre en plus. Un build de production ne l'inclut pas, sauf avec STUDIO=1 (le mode démo). L'onglet Rooms affiche /?edit=<room>&at=<checkpoint> dans une iframe et parle à l'éditeur via postMessage (éditeur de placement). La page du Studio ignore les rechargements complets de Vite causés par les fichiers du jeu : la vue du moteur se recharge, le Studio garde ce que vous êtes en train de taper et suit le changement via GET /events.

Le jeu et ses lieux

Lire le jeu, lire un lieu, et écrire le layout, les textes, les entités et les valeurs structurées d'un lieu. Chaque écriture est une opération du journal du jeu, gardée sur le jeu tel qu'il serait après elle.

GET /game

GET /room/:id

PUT /room/:id/layout

PUT /room/:id/text

POST /room/:id/add

PUT /room/:id/value

PUT /room/@game/value

Révisions et annulation

Ce qui a changé entre deux révisions du journal, les lieux qu'il nomme dessinés aux deux, et l'annulation et le rétablissement des modifications du Studio.

GET /diff/:from..:to

GET /diff/:from..:to/captures

POST /undo

POST /redo

GET /history

Storyboard, carte du scénario et notes

Le storyboard (storyboard.json), les regroupements de la carte du scénario (groupings.json) et les notes partagées (notes.json) du dossier du jeu.

GET /storyboard

PUT /storyboard

POST /storyboard/markdown

GET /groupings

PUT /groupings

GET /map

GET /notes

POST /notes

PUT /notes/:id

DELETE /notes/:id

Vérifications et vues

Le validateur, le solveur, le lint, les playtests, la couverture du storyboard, le profileur, la carte du monde, le graphe des énigmes et l'IR du jeu : en lecture seule, le jeu rechargé à chaque appel. Sur le Studio Server, validate, solve, lint et playtests tournent sur l'application de traitement.

POST /validate

POST /report

GET /graph

POST /puzzle

POST /coverage

POST /playtests

POST /lint

POST /solve

GET /ir

Voix et héros

La table des voix de chaque langue (voices.json) et la matrice héros × langue.

GET /voices[/:lang]

PUT /voices/:lang/:id

GET /voices/:lang/csv

GET /hero-matrix

Flux des changements et captures

Les évènements envoyés par le serveur de dev et les captures de lieux qu'il rend.

POST /screenshot

GET /screenshots/:name

GET /events

Onglet Assets

Chaque image et chaque son du jeu avec l'endroit où il sert, les prompts d'image par planche, et les envois. Rien n'est jamais supprimé : un fichier remplacé est d'abord gardé en <nom>_v<N>.<ext> à côté. Depuis 4.2.1 chaque envoi est une opération du journal : les sauvegardes, les nouveaux fichiers et les cases qu'un outil a découpées sont écrits ensemble ou pas du tout. Un corps JSON fait 96 Mio au plus (413 au-delà). Le Studio Server sert ses propres routes Assets (studio-server/src/server/hosted-assets.ts), non décrites ici.

GET /assets

GET /assets/file/:path

GET /assets/prompts

POST /assets/sheet

POST /assets/cell

POST /assets/sound

POST /assets/decor

POST /assets/prepare

Assistant

L'Assistant du Studio sur le serveur de dev : une conversation relayée vers un modèle de chat, et une tâche pour un agent connecté en MCP.

POST /assistant/chat

POST /assistant/task


Modifier la source de cette page · Signaler une erreur