Caméléon CVM — Guide Utilisateur v0.21.6-dev


1. Introduction

Caméléon est un orchestrateur de workflows IA dont le moteur d'exécution — la CVM (Caméléon Virtual Machine) — repose sur la théorie des réseaux de Petri.

Le POC v0.12 est une démonstration visuelle et interactive de ce moteur, entièrement en HTML/JS pur, sans framework ni dépendance externe.

Mapping Petri net → Caméléon

Le modèle Caméléon est une transposition directe du formalisme des réseaux de Petri :

Réseau de PetriModèle Caméléon
PlaceConnexion (lien entre un plug output et un plug input)
TransitionOpérateur
TokenDonnée en transit sur une connexion
Arc place → transitionPlug input de l'opérateur
Arc transition → placePlug output de l'opérateur
RÉSEAU DE PETRI P1 T P2 Place Transition Token = MODÈLE CAMÉLÉON Op A Connexion Donnée Op B Opérateur Output Input
Fig. 1 — Correspondance Réseau de Petri ↔ Modèle Caméléon

Principe fondamental : l'état du système est porté par les connexions (= places), pas par les opérateurs (= transitions). C'est la bijection exacte avec le marquage d'un réseau de Petri.


2. Interface

Layout 5 zones

L'interface est organisée en 5 zones autour du canvas central :

Logo + Progress Visual | Code | Split CVM Controls Catalogue (futur) Canvas SVG Visual / Code / Split Inspecteur (futur) Connexions Opérateurs CVM Log Footer — Auteurs & Release notes
Fig. 2 — Layout général de l'interface v0.12
ZonePositionContenu
HeaderHautLogo, barre de progression, mode switcher, contrôles CVM, scrubber
CatalogueGauche (200px)Future bibliothèque d'opérateurs (placeholder)
CanvasCentre (flex)Vue visuelle SVG, vue code .cm, ou les deux (split)
Vue / Propriété / ContrôleurDroite (260px)Vue (plug view), Propriété (config editor), Contrôleur (human/live interaction)
Panneau basBas (160px)Connexions (places), Opérateurs (transitions), CVM Log

Panneaux redimensionnables

Les trois panneaux latéraux (gauche, droite, bas) sont redimensionnables par drag sur les séparateurs situés entre les zones.

Panneaux masquables

Chaque panneau peut être caché ou montré via les rails situés sur les bords du canvas (style VS Code). Ce sont des bandes fines qui s'élargissent au survol et révèlent une icône flèche.

RailPositionAction
Rail gaucheBord gauche du canvasMasque / affiche le panneau Catalogue
Rail droitBord droit du canvasMasque / affiche le panneau Vue / Propriété / Contrôleur
Rail basBord bas du canvasMasque / affiche le panneau d'informations

Note : la taille d'un panneau est mémorisée lorsqu'il est masqué et restaurée lorsqu'il est réaffiché.


3. Lire la composition

Anatomie d'un opérateur

Chaque opérateur est représenté par un cercle avec un gradient radial. Il possède un label (nom), un numéro d'instance, et change de couleur selon son état.

1 GPT4Call IDLE en attente 1 GPT4Call READY peut tirer 1 GPT4Call FIRING en cours de tir
Fig. 3 — Les trois états visuels d'un opérateur

Anatomie d'un plug

Les plugs sont les points d'entrée (inputs) et de sortie (outputs) des opérateurs. Ils orbitent autour du cercle de l'opérateur.

Input cercle plein ← reçoit une donnée Output anneau + dot central → émet une donnée
Fig. 4 — Plugs input vs output

Types de données

TypeCouleurDescription
Binary#a0b0c8Données binaires brutes
DataString#4f8affChaîne de caractères
DataJSON#a78bfaStructure JSON
DataBool#f4845fBooléen
DataChunk#00e5a0Fragment de texte extrait

États des connexions

EMPTY pointillés gris — pas encore de donnée NEW trait plein coloré — donnée disponible OLD tirets atténués — donnée consommée ACTIVE tirets animés — connexion impliquée dans un tir en cours
Fig. 5 — Les quatre rendus visuels d'une connexion

4. Contrôles CVM

Barre de commandes

Les boutons de contrôle se trouvent dans le header, à droite du mode switcher :

BoutonCouleurAction
← Backsignal #4f8affRecule d'un pas dans l'historique (annule le dernier tir)
Fwd →go #00b4d8Avance d'un pas : tire le prochain opérateur éligible
▶ Runcvm #00e5a0Exécution automatique jusqu'à Completed ou Deadlock
⏸ Pauseamber #ffb547Interrompt l'exécution automatique
⏮ Rwdsignal #4f8affRewind automatique jusqu'au début
dimReset : remet le système à l'état initial
Ann.amber #ffb547Toggle annotations (labels et types des plugs)

Scrubber

Le scrubber dans le header (à gauche de Rwd) permet de naviguer dans l'historique d'exécution. Le badge 3 / 7 indique la position courante / nombre total d'étapes.

Règles de tir

Conditions terminales

ÉtatConditionCouleur
CompletedPlus aucune connexion NEW et aucun opérateur ne peut tirercvm (vert) #00e5a0
DeadlockDes connexions NEW ou EMPTY restent mais aucun opérateur ne peut tirerrust (rouge) #f4845f

Cycle d'exécution

EMPTY fire source NEW fire op OLD
Fig. 6 — Cycle de vie d'une connexion (= place)

5. Modes Visual / Code / Split

Le mode switcher est centré dans le header. Il permet de basculer entre trois vues du canvas :

Visual { } Code Split
Fig. 7 — Mode switcher dans le header (Visual actif)
ModeRaccourciDescription
VisualCtrl+1Vue par défaut : graphe SVG interactif avec les opérateurs, plugs et connexions
CodeCtrl+2Affiche le code source .cm de la composition (YAML, lecture seule pour l'instant)
SplitCtrl+3Vue divisée : graphe visuel à gauche, code à droite, séparateur redimensionnable

Mode Visual

C'est la vue principale. Le canvas SVG occupe tout l'espace central. Toutes les interactions (drag, zoom, pan, tooltips) sont disponibles.

Mode Code

Le graphe SVG est masqué. Un éditeur affiche le fichier .cm en syntaxe YAML avec le header exemple.cm. Le code est en lecture seule dans cette version.

Roadmap : dans une version future, le code sera éditable et les modifications se répercuteront en temps réel sur le graphe visuel (bijection code ↔ visuel).

Mode Split

Les deux vues sont affichées côte à côte : visuel à gauche, code à droite. Un séparateur draggable permet d'ajuster les proportions (minimum 120px par côté).

Op A Op B Visual EXEMPLE.CM operators: - id: pdf_loader label: PDF Loader instance: 1 - id: converter ... Code
Fig. 8 — Mode Split : visuel à gauche, code à droite

6. Interactions souris

Drag & drop des opérateurs

Clic gauche + drag sur un opérateur : déplace l'opérateur. Toutes les connexions (courbes Bézier), les plugs et les annotations sont recalculés en temps réel.

avant 1 Op curseur : grabbing
Fig. 9 — Drag & drop d'un opérateur

Drag & drop des plugs

Clic gauche + drag sur un plug : le plug tourne librement sur son orbite autour de l'opérateur. L'angle choisi est mémorisé et persisté même si l'opérateur est ensuite déplacé.

Op avant après
Fig. 10 — Rotation libre d'un plug sur son orbite

Zoom

PlateformeGeste
Mac / PCShift + molette
Op dézoomé ← Ctrl+🖱 → 1 GPT4Call zoomé
Fig. 11 — Zoom centré sur le curseur

Pan (déplacement de la vue)

GesteAction
Shift + clic gauche + dragDéplace la vue (translation du viewport)

Tooltips

Au survol d'un opérateur ou d'un plug, une infobulle affiche le label, le type, la direction et l'état courant.


7. Raccourcis clavier

RaccourciAction
Ctrl+1Mode Visual
Ctrl+2Mode Code
Ctrl+3Mode Split
Shift + moletteZoom in / out (centré curseur)
Shift + clic gauche + dragPan (déplacer la vue)

8. Charte visuelle

Palette

CouleurHexUsage
void#04060aFond principal
deep#090d14Surfaces secondaires
ice#e8f0ffTexte principal
go#00b4d8Forward
cvm#00e5a0NEW, Run
rust#f4845fDeadlock
amber#ffb547Firing
signal#4f8affBack, Rwd

Polices

PoliceUsage
IBM Plex MonoInterface, code, labels, annotations
Fraunces (italic)Nom de marque « Caméléon »
Fig. 12 — Logo Caméléon : anneau externe, cercle central, trois satellites

9. Pipeline de démo

Schéma global

La composition de démonstration est un pipeline RAG avec 7 opérateurs :

1 PDF Loader source 2 User Input source 3 Converter 4 GPT4Call 5 ValidJson 6 FormatResp. 7 PrintString sink Binary String String String JSON String String
Fig. 13 — Pipeline RAG de démonstration — 7 opérateurs, 7 connexions

Walkthrough : exécution pas à pas

Étape 0 — État initial

Toutes les connexions sont EMPTY. Les deux sources (PDF Loader et User Input) sont READY car leurs sorties sont vides.

Étape 1 — Fwd : PDF Loader tire

La connexion c0 (PDF Loader → Converter) passe à NEW.

Étape 2 — Fwd : User Input tire

La connexion c2 (User Input → GPT4Call) passe à NEW.

Étape 3 — Fwd : Converter tire

c0 passe à OLD. c1 (Converter → GPT4Call) passe à NEW. GPT4Call a maintenant ses deux entrées NEW : il devient READY.

Étape 4 — Fwd : GPT4Call tire

c1 et c2 passent à OLD. Les sorties c3 et c4 passent à NEW.

Étape 5 — Fwd : ValidJson tire

c4 passe à OLD. c5 passe à NEW. FormatResponse a ses deux entrées NEW.

Étape 6 — Fwd : FormatResponse tire

c3 et c5 passent à OLD. c6 passe à NEW.

Étape 7 — Fwd : PrintString tire

c6 passe à OLD. Plus aucune connexion NEW : état Completed.

Astuce : utilisez ▶ Run pour l'exécution complète, puis ⏮ Rwd pour rembobiner et observer chaque étape. Ou passez en mode Split (Ctrl+3) pour voir le code et le graphe simultanément.


Caméléon — shinoe — Guide v0.21.6-dev — 20/03/2026