Aller au contenu

Flex

Flex (apps/flex/) est l’application phare du projet webmcp-auto-ui. C’est un canvas IA complet qui combine un agent LLM multi-provider, la connexion simultanee a plusieurs serveurs MCP, un systeme de widgets flottants ou en grille, et un ensemble d’outils de debug et d’export. C’est la vitrine de tout ce que l’architecture v0.8 permet de faire.

Quand vous ouvrez Flex, vous decouvrez une interface sombre et epuree. En haut, une barre d’outils horizontale affiche le statut de connexion MCP (avec le nombre d’outils disponibles), un selecteur de modele LLM (modeles distants comme Claude, Gemini, ChatGPT ; Gemma E2B/E4B en WASM ; ou Ollama local), un toggle de theme clair/sombre, un compteur de tokens en temps reel, et un bouton d’export HyperSkill.

Au centre, le canvas occupe tout l’espace. Les widgets generes par l’agent s’y affichent soit en mode float (fenetres deplacables et redimensionnables avec drag & drop), soit en mode grid (grille responsive). Chaque widget porte un badge de provenance indiquant quel outil et quel serveur l’a genere.

A gauche, une sidebar repliable donne acces aux reglages avances : modele LLM, URL du serveur Ollama, temperature, max tokens, max tools, cache prompt, prompt systeme custom, et options d’optimisation de schema (sanitize, flatten). Un panneau de recettes (RecipeModal) liste les recettes WebMCP et MCP disponibles.

En bas, un tiroir lateral (LogDrawer) utilise le composant AgentConsole du package UI pour afficher les logs agent en temps reel : iterations, requetes LLM, reponses, appels d’outils avec arguments et resultats, metriques finales.

Tout en bas, la barre de saisie permet de taper une question en langage naturel. Un bouton Stop permet d’interrompre la generation en cours.

graph TD
subgraph Frontend
Page["+page.svelte<br/>Canvas + Chat + Panels"]
FlexGrid["FlexGrid.svelte<br/>Float/Grid layout"]
Settings["SettingsDrawer.svelte<br/>Config avancee"]
Debug["DebugPanel.svelte<br/>Prompt + metriques"]
Logs["LogDrawer.svelte<br/>AgentConsole"]
History["HistoryModal.svelte<br/>Historique conversation"]
Recipe["RecipeModal.svelte<br/>Recettes MCP/WebMCP"]
end
subgraph Packages
Agent["@webmcp-auto-ui/agent<br/>runAgentLoop, providers,<br/>TokenTracker, ContextRAG"]
Core["@webmcp-auto-ui/core<br/>McpMultiClient"]
SDK["@webmcp-auto-ui/sdk<br/>canvas store, HyperSkill"]
UI["@webmcp-auto-ui/ui<br/>Composants, layouts,<br/>bus, layoutAdapter"]
end
subgraph Backend
Proxy["api/chat/+server.ts<br/>LLM Proxy"]
end
Page --> FlexGrid
Page --> Settings
Page --> Debug
Page --> Logs
Page --> History
Page --> Recipe
Page --> Agent
Page --> Core
Page --> SDK
Page --> UI
Agent --> Proxy
ComposantDetail
FrameworkSvelteKit + Svelte 5 ($state, $derived, $effect)
StylesTailwindCSS 3.4
Iconeslucide-svelte
LLM providersRemoteLLMProvider (LLM distant via proxy), WasmProvider (Gemma in-browser), LocalLLMProvider (Ollama)
MCPMcpMultiClient (connexion simultanee multi-serveurs)
Statecanvas store reactif du SDK
Token trackingTokenTracker avec TokenBubble UI
RAGContextRAG (Nano-RAG experimental)
ExportencodeHyperSkill / summarizeChat
Adapter@sveltejs/adapter-node (SSR)

Packages utilises :

  • @webmcp-auto-ui/agent : runAgentLoop, RemoteLLMProvider, WasmProvider, LocalLLMProvider, buildSystemPrompt, fromMcpTools, trimConversationHistory, summarizeChat, TokenTracker, buildToolsFromLayers, runDiagnostics, buildDiscoveryCache, ContextRAG, autoui
  • @webmcp-auto-ui/core : McpMultiClient
  • @webmcp-auto-ui/sdk : canvas, listSkills, encodeHyperSkill
  • @webmcp-auto-ui/ui : McpStatus, ModelLoader, AgentProgress, EphemeralBubble, TokenBubble, bus, layoutAdapter
EnvironnementPortCommande
Dev3007npm -w apps/flex run dev
Production3007node index.js (via systemd)
Fenêtre de terminal
npm -w apps/flex run dev
# Accessible sur http://localhost:3007

Flex supporte trois familles de providers :

  • LLM distant (e.g. Claude, Gemini, ChatGPT, Mistral) via un proxy server-side compatible OpenAI
  • Gemma WASM (E2B, E4B) charge directement dans le navigateur via LiteRT. Une barre de progression ModelLoader affiche la progression du telechargement (~33 MB)
  • Ollama local via LocalLLMProvider pour utiliser des modeles comme Llama 3.2 sur votre machine

Le provider est selectionne via le composant LLMSelector. Des smart defaults ajustent automatiquement les options d’optimisation selon le provider choisi (ex: flatten active pour Gemma, sanitize pour Claude).

Connectez simultanement plusieurs serveurs MCP. Les outils de chaque serveur sont fusionnes dans les layers de l’agent. Les recettes MCP sont automatiquement chargees si le serveur expose un outil list_recipes.

Les widgets ne sont pas en lecture seule. Quand l’utilisateur clique sur un element dans un widget (ligne de tableau, carte, point de graphique…), l’interaction est capturee, traduite en message pour le LLM, et injectee dans la boucle agent pour generer de nouveaux widgets contextuels.

Basculer entre :

  • Composeur : edition complete, saisie libre, debug panel, export
  • Consommateur : lecture seule des widgets generes
  • Float : fenetres deplacables et redimensionnables via FloatingLayout. L’agent peut deplacer et redimensionner les widgets via les callbacks onMove, onResize, onStyle
  • Grid : grille responsive via FlexLayout

Exportez le canvas complet en URL HyperSkill compressez gzip. L’export inclut optionnellement un resume de la conversation genere par le LLM (summarizeChat) et les metadonnees de provenance.

Le DebugPanel affiche en temps reel :

  • Le prompt systeme effectif (avec les layers)
  • Les outils disponibles avec leur schema JSON
  • Les diagnostics de compatibilite (via runDiagnostics)
  • Les metriques de tokens (input, output, cache, cout)

Active via une checkbox dans la barre d’outils. ContextRAG compacte le contexte de l’agent en utilisant des embeddings pour ne garder que les passages les plus pertinents.

VariableDescriptionDefaut
LLM_API_KEYCle API du provider LLM distant (server-side .env)requis
maxContextTokensFenetre de contexte max150 000
maxTokensTokens max par reponse4 096
maxToolsNombre max d’outils par requete8
temperatureTemperature de generation1.0
cacheEnabledCache prompt (dependant du provider)true
schemaSanitizeNettoyage des schemas JSONauto
schemaFlattenAplatissement des schemasauto
truncateResultsTroncature des resultats MCPauto
compressHistoryCompression de l’historiqueauto

Le composant principal orchestre tout : il declare l’etat reactif ($state), construit les layers a partir des serveurs MCP connectes et des packs locaux ($derived), initialise les providers LLM, et pilote la boucle agent via runAgentLoop. Les callbacks de l’agent alimentent le canvas, les logs, les bulles ephemerales et le token tracker.

Un endpoint SvelteKit qui utilise llmProxy du package agent pour relayer les requetes vers l’API du provider LLM distant. La cle API est lue depuis l’environnement server-side ou depuis le body de la requete (pour le mode BYOK).

Gere l’affichage des widgets en mode float (fenetres deplacables) ou grid. Chaque widget est rendu via WidgetRenderer et encadre par un badge de provenance.

Tiroir lateral avec tous les reglages avances : modele, provider, parametres de generation, options de schema, prompt custom, connexion MCP.

Tiroir bas utilisant AgentConsole pour afficher les logs structures de la boucle agent avec horodatage et type colore.

Pour modifier Flex :

  1. Ajouter un provider LLM : etendre la fonction getProvider() dans +page.svelte
  2. Ajouter des widgets locaux : creer un WebMcpServer et l’ajouter dans les layers
  3. Modifier le prompt systeme : utiliser le champ “System prompt” dans les Settings pour prefixer le prompt genere
  4. Changer le layout : basculer entre float et grid via le bouton dans la barre d’outils
Chemin sur le serveur/opt/webmcp-demos/flex/ (racine)
Service systemdwebmcp-flex
ExecStartnode index.js
Fenêtre de terminal
./scripts/deploy.sh flex