> ## Documentation Index
> Fetch the complete documentation index at: https://docs.one.fim.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Feuille de route

> Feuille de route des fonctionnalités et planification des versions pour FIM One.

> Objectif : Construire une **plateforme d'agents tout-en-un pour les entreprises mondiales × chinoises** — livrée via trois modes progressifs : Standalone (assistant portail), Copilot (intégré au système hôte), Hub (orchestration centrale inter-systèmes).
>
> Principes : **Agnostique des fournisseurs** (pas de verrouillage propriétaire), **abstraction minimale**, **orienté protocole**, **orienté connecteurs** (l'intégration est la valeur centrale).

## Vision produit

FIM One est une **plateforme d'agent tout-en-un** qui propose trois modes de livraison progressifs :

```
Standalone   → Your own AI assistant (Portal)
Copilot      → AI embedded in a host system (iframe / widget / embed)
Hub          → Central cross-system orchestration (Portal / API)
```

**L'orchestration inter-systèmes est le différenciateur clé.** Les clients d'entreprise disposent de systèmes hérités — ERP, CRM, OA, finance, HR — qui doivent communiquer entre eux via l'IA :

```mermaid theme={null}
flowchart LR
  subgraph Sources["Source Systems"]
    ERP["ERP<br/>(SAP/Kingdee)"]
    CRM["CRM<br/>(Salesforce)"]
    OA["OA<br/>(Seeyon/Weaver)"]
    DB["Custom DB<br/>(PG/MySQL)"]
  end

  subgraph Hub["FIM One Agent Core"]
    A["Agent A: Finance Audit"]
    B["Agent B: Contract Review"]
    C["Agent C: Approval Assist"]
    D["Agent D: Data Reporting"]
  end

  subgraph Targets["Notification Targets"]
    T1["Lark / Slack"]
    T2["Email / WeCom"]
    T3["Teams / Webhook"]
    T4["Any API"]
  end

  subgraph Delivery["Delivery"]
    Portal["Portal (UI)"]
    API["API (headless)"]
    Embed["iframe (embed)"]
  end

  ERP --> A --> T1
  CRM --> B --> T2
  OA --> C --> T3
  DB --> D --> T4
  Hub --> Delivery
```

**Stratégie GTM : Land and Expand**

| Étape  | Mode          | Ce qui se passe                                                 |
| ------ | ------------- | --------------------------------------------------------------- |
| Land   | Copilot       | Intégrer dans un système, prouver la valeur dans leur interface |
| Expand | Copilot → Hub | Déployer sur plusieurs systèmes ; le mode Hub les agrège        |

## Problèmes connus

Bugs suivis qui sont reproductibles en production mais pas encore corrigés. Chaque entrée nomme le symptôme, la zone de surface suspecte et la solution de contournement (le cas échéant). Les éléments sont déplacés vers une section de version une fois qu'un correctif est défini et planifié.

* **L'arrêt et la nouvelle tentative du playground affichent des artefacts visuels transitoires qu'une actualisation de page efface toujours.** Trois sources de rendu concurrentes — `activeConversation.messages` (snapshot DB), le flux SSE `messages` et l'espace réservé optimiste `pendingQuery` — ne sont pas regroupées dans un seul état dérivé, donc entre le clic sur « Retry » et l'arrivée de la réponse de l'assistant appairée, l'interface utilisateur peut (a) brièvement afficher deux fois la même requête dans la fenêtre pré-flux, (b) supprimer les bulles utilisateur orphelines antérieures de l'historique de nouvelle tentative tandis que `hasLiveMessages` est vrai et avant le rechargement du snapshot, et (c) scintiller dans la fenêtre étroite entre l'événement SSE « done » et l'actualisation `selectConversation` suivante. **Les données ne sont jamais perdues** — chaque message utilisateur (y compris les nouvelles tentatives abandonnées) est conservé dans `conversation.messages`, transporté dans l'appel LLM suivant via `normalize_alternating_messages` et rendu correctement après actualisation via `HistoryTurn.orphanUserContents` introduit dans le correctif de rendu `48ba08c6`. Pour le contexte, l'interface web propre de Claude présente une classe analogue de bug — arrêter au milieu d'une réponse et envoyer immédiatement une requête de suivi crée parfois la requête de suivi en tant que branche d'édition sœur de la première requête plutôt que de l'ajouter en tant que nouveau tour — c'est donc un problème difficile connu dans les conceptions optimiste-UI + SSE + historique-persistant, et non un défaut spécifique à FIM One. Un correctif approprié nécessite de regrouper les trois sources de rendu dans un seul état dérivé ; reporté jusqu'à une refonte plus large de la machine d'état du Playground.

## Architecture Program — Agent Core&#x20;

Scoped, not yet scheduled into a version. Batches are dependency-ordered; each expands into concrete tasks in the companion design.

* [ ] **Governance**: bug-class defensive-patterns doc, design-note lifecycle states, markdown link gate.
* [ ] **Session event log**: every model-visible input becomes a durable, ordered fact, with model history derived from it.
* [ ] **Runtime invariants + keyless snapshot replay**: assert owned relationships in production; diff assembled transcripts in CI without a key.
* [ ] **Tool pipeline seams**: pre/execute/post stages so permission, timeout, sandbox and background work leave the agent loop.
* [ ] **Code Mode preset**: one program composes several connector calls through the same pipeline, replacing multi-round-trip orchestration.
* [ ] **Agent presets as declared capability sets**, plus plan and background state recorded as log facts rather than side files.
* [ ] **Typed frontend from OpenAPI** and generated tool/env catalogs, replacing hand-maintained copies that drift.

## Backlog (Low Priority)&#x20;

Durcissement différé — ne bloque pas ; à reprendre uniquement si le scénario correspondant se présente.

* [ ] **DAG evidence gets its own truncation budget**, decoupled from `DAG_ANALYZER_TRUNCATION`, so source evidence isn't re-clipped by the summary budget before the analyzer/synthesis verify against it.
* [ ] **Structure-aware evidence truncation** (head+tail / keep lists & tables) so long enumerations survive the cap instead of silently losing their tail.
* [ ] **Port the source-fidelity guideline into the ReAct fallback synthesis prompt** so total/severity mislabels are caught in ReAct too, not only in DAG.

# Versions Expédiées

### v0.1 (2026-02-22) — MVP : ReAct + DAG Planner

* ReActAgent avec outils (calculator, python\_exec, web\_search)
* DAG Planner (LLM génère des graphes de dépendances)
* Portal UI avec streaming + KaTeX

### v0.2 (2026-02-24) — Multi-Model + Memory

* Retry / rate limiting / usage tracking
* Native function calling (no JSON-only parsing)
* Multi-model support (fast + main LLM)
* Memory: WindowMemory, SummaryMemory
* FastAPI backend with SSE streaming

### v0.3 (2026-02-25) — Web Tools + MCP

* Outils web (web\_search, web\_fetch) via Jina/Tavily/Brave
* Outil d'opérations sur fichiers
* Client MCP (intégration d'outils standard)
* Découverte automatique d'outils + catégories
* Visualisation DAG avec clic-pour-défiler
* Exécution de code dans Docker (`--network=none`)

### v0.4 (2026-02-25) — Multi-Turn + Agents

* Conversations multi-tours (DbMemory)
* Interface de repliement des étapes d'outils
* Outils de requête HTTP + exécution shell
* Gestion des agents (créer, configurer, publier)
* Authentification JWT
* Mode d'exécution par agent + contrôle de température

### v0.5 (2026-02-28) — Full RAG + Grounded Gen

* Pipeline RAG complet (embedding + magasin vectoriel + FTS + RRF + réclassement)
* Génération ancrée (citations, scores de confiance)
* Gestion des documents de base de connaissances (CRUD, recherche, nouvelle tentative, migration de schéma)
* ContextGuard + messages épinglés (gestionnaire de budget de tokens)
* Persistance DbMemory + LLM Compact
* Replanification DAG (jusqu'à 3 tours)

### v0.6 (2026-03-01) — Connector Platform

* **Connector CRUD**: create, read, update, delete
* **ConnectorToolAdapter**: converts Connector → BaseTool
* **Per-user credentials**: AES-GCM encryption
* **Confirmation gate**: write operation approval
* **Audit logging**: all tool calls recorded
* **Circuit breaker**: graceful degradation on failures
* **Utility tools**: email\_send, json\_transform, template\_render, text\_utils
* **Embedding options**: Jina, OpenAI, custom providers

### v0.7 (2026-03-06) — Admin Platform + Multi-Tenant

* **Admin Platform**: gestion des utilisateurs, basculement des rôles, réinitialisation de mot de passe, activation/désactivation de compte
* **Inscription sur invitation uniquement**: trois modes (ouvert/invitation/désactivé) + CRUD de code d'invitation
* **Gestion du stockage**: utilisation disque par utilisateur, nettoyage, suppression des fichiers orphelins
* **Modération des conversations**: liste/suppression admin de toutes les conversations
* **Déconnexion forcée par utilisateur**: révocation de tous les jetons
* **Tableau de bord de santé API**: statistiques système, métriques des connecteurs
* **Assistant de configuration initiale**: création guidée du compte administrateur
* **Centre personnel**: instructions globales par utilisateur, préférence de langue
* **Authentification JWT**: authentification SSE basée sur jetons, propriété des conversations
* **Serveurs MCP globaux**: provisionnés par l'administrateur, chargés dans toutes les sessions
* **Compatibilité rétroactive**: migration automatique registration\_enabled → registration\_mode

### v0.7.x (2026-03-07 à 2026-03-12) — Stabilité + Perfectionnements

* Gestion des codes d'invitation
* Quotas par utilisateur (application 429)
* Journalisation d'audit structurée
* Filtrage des mots sensibles
* Historique de connexion administrateur
* Navigateur de fichiers administrateur
* Vues administrateur améliorées (champs model\_name, tools, kb\_ids)
* Déploiement Docker Compose (image unique, volumes nommés)
* Détection automatique OAuth depuis window\.location
* Support de la réflexion étendue / raisonnement (`LLM_REASONING_EFFORT`, `LLM_REASONING_BUDGET_TOKENS`) pour OpenAI o-series, Gemini 2.5+, Claude
* Activation/désactivation par outil administrateur (outils désactivés exclus du chat à l'exécution)
* Gestion des serveurs MCP déplacée vers la page Connecteurs
* Support de base de données double : SQLite (par défaut sans configuration) + PostgreSQL (production) ; Docker Compose provisionne automatiquement PostgreSQL
* Page de documentation de configuration des modèles avec configuration de la réflexion étendue par fournisseur
* Protocole SSE v2 : streaming de réponses en temps réel avec champs `delta_reasoning`, `usage` et événements `done`/`suggestions`/`title`/`end` séparés ; taille du pool SQLite 5 -> 20
* Expansion AI Builder : 7 nouveaux outils de construction (GetSettings, TestConnection, ImportOpenAPI pour connecteurs ; ListConnectors, AddConnector, RemoveConnector, SetModel pour agents), drapeau `is_builder` sur agents, actualisation automatique du prompt de construction, protection SSRF
* Frontend SSE v2 : curseur avec point pulsant en streaming, snapshots de re-plan DAG sous forme de cartes réductibles, mise en page DAG découplée des états d'étape
* Page de documentation du concept AI Builder avec guides de construction de connecteurs et d'agents
* Système d'organisation : CRUD complet avec adhésion basée sur les rôles (propriétaire/administrateur/membre), interface de gestion administrateur
* Visibilité des ressources à trois niveaux (personnel/org/global) pour agents, connecteurs, bases de connaissances, serveurs MCP
* API de publication/dépublication pour tous les types de ressources ; délégation de propriétaire pour agents publiés
* Point de terminaison administrateur set-visibility (remplace clone-to-global) ; assistant de requête `build_visibility_filter()` unifié
* Connecteurs de base de données (Phase 1-3) : accès SQL direct à PG/MySQL/Oracle/SQL Server + bases de données héritées chinoises ; introspection de schéma, annotation IA, exécution de requête en lecture seule, identifiants chiffrés, 3 outils par connecteur (`list_tables`, `describe_table`, `query`)
* **Centre d'évaluation** : benchmarking quantitatif de la qualité des agents — CRUD d'ensemble de données de test (prompt + comportement attendu + assertions), exécutions d'évaluation (exécution parallèle + évaluateur LLM + résultats par cas réussi/échoué/latence/token), visionneuse de résultats avec interrogation automatique ; migration `r8t0v2x4z567`
* Trois rôles de modèle (Général/Rapide/Raisonnement) avec isolation de configuration env par niveau ; le modèle rapide n'hérite plus des paramètres du modèle principal
* Classe de données `StepOutput` remplaçant les résultats d'étape en chaîne simple pour les données structurées et le passage d'artefacts
* Cache d'outils pour l'exécution DAG — appels d'outils identiques mis en cache par exécution avec verrou asynchrone pour prévention de ruée (`DAG_TOOL_CACHE`)
* Vérification LLM par étape avec 1 nouvelle tentative en cas d'échec (`DAG_STEP_VERIFICATION`)
* Routage automatique : LLM rapide classe les requêtes comme ReAct ou DAG ; point de terminaison `/api/auto` ; bascule de mode 3 voies frontend (`AUTO_ROUTING`)
* [x] ~~**Organisation du marché fantôme + Abonnements aux ressources**~~ : Organisation Market intégrée (fantôme, pas d'adhésion automatique) remplace l'organisation Platform ; ressources découvertes via navigation marketplace et explicitement souscrites (modèle pull) ; API Market pour s'abonner aux ressources partagées ; la publication sur Market nécessite toujours un examen ; table d'abonnements aux ressources ; partage de ressources basé sur l'organisation remplaçant la visibilité globale
* [x] ~~**Découverte automatique d'agents et liaison de sous-agents**~~ : drapeau `discoverable` sur agents ; liste blanche `sub_agent_ids` ; CallAgentTool pour déléguer des tâches à des agents spécialisés
* [x] ~~**Identifiants de serveur MCP + Remplacement par utilisateur**~~ : table `mcp_server_credentials` ; point de terminaison `PUT /api/mcp-servers/{id}/my-credentials` ; drapeau `allow_fallback` pour le comportement de secours des identifiants
* [x] ~~**Bascule connecteur/KB**~~ : `POST /api/connectors/{id}/toggle` et `POST /api/knowledge-bases/{id}/toggle` pour suspendre/reprendre les ressources
* [x] ~~**Conversations KB autonomes**~~ : champ `kb_ids` sur conversations pour chat KB direct sans liaison d'agent

### v0.8 (2026-03-20) — Connecteur Configuration Déclarative + Divulgation Progressive

* [x] **Connecteurs de base de données** : accès SQL direct (PostgreSQL, MySQL, Oracle) *(livré en v0.7.x — Phase 1-3)*
* [x] **RBAC** : contrôle d'accès au connecteur par utilisateur/rôle *(livré en v0.7.x — système org + visibilité trois niveaux)*
* [x] **Chiffrement des identifiants du connecteur + remplacement par utilisateur** : table `connector_credentials`, chiffrement Fernet via `CREDENTIAL_ENCRYPTION_KEY`, drapeau `allow_fallback`, points de terminaison `GET/PUT/DELETE /my-credentials`, résolution des identifiants par utilisateur dans le chargement des outils de chat
* [x] **Interface d'examen de publication** : système d'examen de publication au niveau org — bascule d'examen par org, ReviewsSheet avec flux d'approbation/rejet, badges de statut sur les cartes de ressources, avis d'examen dans la boîte de dialogue de publication, renvoi pour les ressources rejetées
* [x] **Divulgation Progressive du Connecteur (Phase 1-2)** : `ConnectorMetaTool` unique remplace les outils par action ; l'invite système reçoit uniquement des **stubs** légers (nom + description d'une ligne, \~30 tokens/connecteur vs \~250 tokens/action) ; l'agent appelle `discover(connector)` pour charger le schéma d'action complet à la demande — le schéma ne se charge que lorsque le modèle sélectionne un connecteur, maintenant le préfixe d'invite stable pour la mise en cache. Suit le modèle de chargement d'outils différé courant dans les frameworks d'agent modernes. Sous-commande `execute` ; drapeau de fonctionnalité pour la compatibilité rétroactive.
* [x] **Système de Compétences d'Agent + Instructions Compactes** : chargement à la demande des instructions d'agent — modèle `Skill` (nom, contenu/SOP, scripts optionnels) attaché aux agents ; référencé dans l'invite système par nom uniquement (\~10 tokens/compétence) ; l'agent appelle `read_skill(name)` pour charger le contenu complet à la demande. Réduit le coût des tokens d'instruction par conversation d'environ 80 % tout en permettant des bibliothèques SOP plus riches. Homologue de la divulgation progressive de ConnectorMetaTool appliquée au niveau des instructions. Active la différenciation « instructions + outils + compétences ». Ajoute également le champ `compact_instructions` au modèle Agent — liste de priorités de compression par agent injectée dans `ContextGuard` lors de la compression (par exemple, « préserver les ID de commande et les montants, supprimer les réponses API brutes »), remplaçant l'invite générique statique actuelle. Suit la convention Instructions Compactes largement adoptée dans les frameworks d'agent modernes.
* [x] **Import/export de connecteur** : partager les modèles de connecteur
* [x] **Duplication de connecteur** : cloner et personnaliser les connecteurs existants
* [x] **Nœuds Workflow Phase 2** : Iterator, Loop, VariableAggregator, ParameterExtractor, ListOperation, Transform, DocumentExtractor, QuestionUnderstanding, HumanIntervention — 9 types de nœuds avancés avec frontend + backend complets + 150 nouveaux tests (275 au total). Nouvelle tentative de nœud avec backoff exponentiel, évaluation d'expression sécurisée. Panneau de statistiques avec barre de taux de réussite. 12 modèles intégrés. Menu contextuel du volet (Coller, Sélectionner tout, Ajuster la vue, Mise en page automatique).
* [x] **Nœuds Workflow Phase 3 : SubWorkflow + ENV** — 2 nouveaux types de nœuds (25 nœuds au total), 14 nouveaux tests (306 au total), 14 modèles intégrés. SubWorkflow : exécuteur de workflow imbriqué entièrement sauvegardé en base de données avec sélection de workflow cible, mappage de variables et limite de profondeur configurable pour prévenir la récursion infinie. ENV : lit les variables d'environnement chiffrées avec sélecteur de clé et valeurs par défaut de secours. Frontend complet (composants de nœud, panneaux de configuration, entrées de palette, couleurs de minimap). Panneau de statistiques d'exécution par nœud (taux de réussite, durées, comptages d'échecs triés du pire au meilleur). Client API `getNodeStats` + type `NodeStatEntry`. Dialogue des raccourcis clavier (touche `?`).
* [x] **Déclencheurs Planifiés du Workflow** : configuration cron par workflow avec fuseau horaire, entrées par défaut et calcul de la prochaine exécution. Boutons cron prédéfinis, 30 tests de déclencheur.
* [x] **Déclencheurs API du Workflow** : clés API publiques par workflow (préfixe `wf_`) pour l'exécution externe sans authentification utilisateur, avec limitation de débit. Dialogue de gestion des clés API avec générer/régénérer/révoquer, URL de déclenchement et exemples cURL/JS.
* [x] **Exécution par Lot du Workflow** : `POST /batch-run` avec jusqu'à 100 ensembles d'entrée, parallélisme configurable (1-10), résultats par élément réductibles, export JSON. 14 tests d'exécution par lot.
* [x] **Visionneuse du Journal d'Exécution du Workflow** : flux d'événements SSE chronologique en temps réel dans le panneau d'exécution avec horodatages, badges en code couleur et bascules de filtre par type d'événement.
* [x] **Statistiques d'Exécution du Workflow** : le backend récupère par lot les comptages d'exécution et les taux de réussite via une sous-requête GROUP BY ; le frontend affiche les statistiques sur les cartes de workflow avec indicateurs de taux de réussite en code couleur.
* [x] **Démon Planificateur du Workflow** : service asynchrone en arrière-plan interrogeant toutes les 60 secondes les workflows basés sur cron dus. Support de fuseau horaire Croniter, sémaphore de concurrence, suivi `last_scheduled_at`, livraison webhook. 14 tests.
* [x] **Résolveur de Conflits d'Import du Workflow** : détecte les références d'agent/connecteur/KB/MCP non résolues lors de l'import. Requêtes DB par lot avec filtrage de visibilité, avertissements toast frontend. 17 tests.
* [x] **Exécution de Nœud Test du Workflow** : test de nœud unique isolé avec variables fictives, intégré dans l'éditeur (bouton Test du panneau de configuration + menu contextuel). 23 tests.
* [x] **Diff de Version du Workflow** : comparaison de blueprint côte à côte avec détection de changement de nœud/arête, indicateurs en code couleur (ajouté/supprimé/modifié).
* [x] **Gestion des Exécutions du Workflow** : supprimer les exécutions individuelles (`DELETE /runs/{run_id}`) et effacer toutes les exécutions terminées (`DELETE /runs`), avec dialogues de confirmation frontend.
* [x] **Superposition de Relecture d'Exécution du Workflow** : bouton « Afficher sur le canevas » dans l'historique d'exécution pour superposer les résultats d'exécution passés sur le canevas, affichant le statut et la sortie par nœud sans réexécution.
* [x] **Favoris/Épinglage du Workflow** : étoile/épingle les workflows en haut de la liste avec persistance localStorage.
* [x] **Export de l'Historique d'Exécution du Workflow** : exporter l'historique d'exécution en tant que téléchargement de fichier JSON avec métadonnées d'exécution complètes et résultats par nœud.
* [x] **Gestion des Workflows Admin** : onglet du panneau admin pour gérer tous les workflows entre utilisateurs — liste, bascule actif/inactif, suppression avec confirmation. Points de terminaison par lot pour suppression, bascule et publication avec journalisation d'audit.
* [x] **Système de Modèles de Workflow** : modèle ORM `WorkflowTemplate` avec CRUD admin, API de listing/clone public et 5 modèles seed insérés automatiquement au premier démarrage.
* [x] **Badges de Validation Inline du Workflow** : `ValidationBadge` par nœud en temps réel sur le canevas avec info-bulles d'erreur/avertissement pour un retour visuel immédiat lors de l'édition.
* [x] **Visionneuse de Trace d'Exécution du Workflow** : visionneuse de trace basée sur la chronologie Sheet avec paramètre `trace_level` du moteur et snapshots de variables par nœud pour le débogage pas à pas.
* [x] **Limitation de Débit et Délai d'Expiration du Workflow** : `WorkflowRateLimiter` par utilisateur (fenêtre glissante 10 exécutions/min, 3 concurrentes) et délai d'expiration global par défaut de 10 minutes.
* [x] **Système de Blueprint du Workflow** : éditeur de workflow visuel pour concevoir et exécuter des blueprints d'automatisation multi-étapes — modèles ORM `Workflow` / `WorkflowRun`, CRUD complet + API d'exécution SSE, import/export, duplication, point de terminaison de validation de blueprint, `WorkflowEngine` avec tri topologique + concurrence basée sur sémaphore + branchement conditionnel et 12 types de nœuds (Start, End, LLM, ConditionBranch, QuestionClassifier, Agent, KnowledgeRetrieval, Connector, HTTPRequest, VariableAssign, TemplateTransform, CodeExecution), `VariableStore` avec interpolation `{{node_id.output}}` et espace de noms `env.*`, stratégies d'erreur par nœud (STOP\_WORKFLOW / CONTINUE / FAIL\_BRANCH) avec délai d'expiration par nœud et interface de configuration avancée, éditeur visuel React Flow v12 avec palette glisser-déposer + panneau de configuration de nœud + combobox de sélecteur de variable + ajouter-nœud-sur-arête + mise en page automatique (ELK.js) + feuille d'historique d'exécution, conception de nœud compact de style Dify avec statut d'exécution basé sur anneau et transitions d'arête animées, 4 modèles de démarrage intégrés (Chaîne LLM Simple, Routeur Conditionnel, QA Augmentée par Connaissance, Pipeline API HTTP) avec dialogue de sélecteur de modèle et API `GET /templates` + `POST /from-template`, point de terminaison de statistiques, paramètre URL `?run=true` ouverture automatique, sécurité d'exécution de code basée sur subprocess, suite de tests 105 (modèles, aplatissement d'espace de noms eval, avertissements de validation de blueprint, suppression de nœud/arête, import/export/duplication, détection de blocage, branchement multi-condition)
* [x] **Audit opérationnel** : journalisation détaillée de qui a fait quoi — onglet d'audit du journal d'examen admin ajouté (piste d'examen de publication par org/ressource)
* [x] **Annotations de Schéma Sémantique** : étendre les champs de schéma du connecteur avec `semantic_tag`, `description` et drapeaux `pii` ; annotations affichées dans les descriptions d'outils LLM afin que l'agent comprenne l'intention du champ sans deviner à partir des noms de colonne

### v0.8.1 (2026-03-29) — Progressive Disclosure Maturity + ReAct Hardening

* Progressive disclosure for DB connectors (`DatabaseMetaTool`), MCP servers (`MCPServerMetaTool`), and on-demand tool loading (`request_tools` meta-tool)
* DAG quality overhaul (5 improvements: model upgrade, skill auto-discovery, citation verifier, structured content preservation, domain-aware routing)
* Domain model escalation in ReAct (specialist domains auto-escalate to reasoning model)
* Per-model Native Function Calling toggle (`tool_choice_enabled`)
* ReAct cycle detection (deterministic duplicate tool call prevention)
* ReAct completion checklist (pre-answer verification when tools were used)
* Resource Fork Phase 1 (MCP Server + Skill fork endpoints with lineage tracking)
* Workflow Connection Dep Auto-Subscribe (recursive sub-workflow dependency resolution)
* Prebuilt Solution Templates (8 vertical solutions seeded to Market on first registration)
* Admin notification improvements (timezone-aware, master switch, SMTP Reply-To)
* Per-turn token budget circuit breaker (`REACT_MAX_TURN_TOKENS`)
* Centralized tool truncation, dynamic system prompt budgeting
* File attachment download, duplicate message submission fix

### v0.8.2 (2026-04-10) — Agent Core Hardening + Vision Documents

* **Agent Core Phase 0** — Compact prompt upgraded to 9-section structured format; empty tool result protection (descriptive message instead of `(no output)`); anti-loop prompt + cycle detection threshold lowered to 2; domain classifier + pre-flight DB config resolution parallelized (400–1100 ms saved per request); SSE `end` event sent immediately after answer, with title/suggestions moved to background tasks
* **Agent Core Phase 1 (Context Anti-Bloat)** — `MicroCompact` rule-based old tool result cleanup (keep last 6); `REACT_TOOL_RESULT_BUDGET=40000` aggregate cap; reactive compact on context overflow (auto-compact to 50% budget and retry instead of crashing)
* **Agent Core Phase 2 (Speed)** — Keyword-based tool pre-selection (skips LLM call on obvious matches, 200–500 ms saved); `SharedHttpClient` LLM connection pooling; completion check skipped for answers >200 tokens; `FallbackLLM` wraps primary+fast with automatic failover on 429/503/529/connection errors
* **Intelligent Document Processing (Vision-Aware)** — Adaptive document handling: PDF pages rendered as images via PyMuPDF for vision-capable models (GPT-4o, Claude 3/4, Gemini), text-only fallback via pdfplumber. Per-model `supports_vision` flag. Modes via `DOCUMENT_PROCESSING_MODE`, `DOCUMENT_VISION_DPI`, `DOCUMENT_VISION_MAX_PAGES`. DOCX/PPTX embedded image extraction. Multi-turn vision persistence across conversation turns. Smart PDF processing (text-rich pages extract text + images; scanned pages render as full-page PNG). Pre-built sandbox image (`Dockerfile.sandbox`) with common data-science packages for `--network=none` code execution
* **Resource Fork completion** — Agent / Connector / Workflow fork endpoints added, completing the five-type lineage tracking (KB fork removed — inherently user-local)
* **File integrity guardrail** — System prompt rule prevents the agent from substituting unrelated file contents when a target file is unreadable; uploaded files now include `file_id` in message context for direct `read_uploaded_file` access

### v0.8.3 (2026-04-16) — Universal Document Conversion + Agent Core Phase 3

* **Universal Document Conversion (`convert_to_markdown` + OCR)** — Built-in Agent tool wrapping Microsoft MarkItDown; converts PDF, Word, Excel, PowerPoint, HTML, JSON, CSV, XML, ZIP, EPUB, Outlook .msg, images, audio, YouTube URLs to Markdown. `LiteLLMOpenAIShim` enables OCR via any vision-capable LLM (Claude, Gemini, Bedrock, Azure). Vision-aware RAG ingestion with zero-regression text-only fallback. `LLM_SUPPORTS_VISION` env var for opt-out
* **Agent Core Phase 3 (Runtime Invariant Hardening)** — Conversation recovery (dangling `tool_use` auto-repair); structured compact work card (`WorkCard` typed merge across compaction rounds); turn-level profiler (`REACT_TURN_PROFILE_ENABLED`); per-user rate limiting (`LLM_RATE_LIMIT_PER_USER`); empty-content assistant message with `tool_calls` no longer dropped

### v0.8.4 (2026-04-17) — Prompt Cache + Reasoning Correctness

* **System prompt section registry with cache breakpoints** — Memoized `PromptRegistry` splits system prompts into stable prefix + dynamic suffix; cache-capable providers (Claude, Bedrock Anthropic, Vertex Claude) receive `cache_control: {"type": "ephemeral"}` on the prefix for \~60-80% per-turn input token savings. Non-cache providers get a single concatenated message (zero behavior change)
* **Prompt cache observability** — `cache_read_input_tokens` and `cache_creation_input_tokens` tracked through `UsageSummary` → `TurnProfiler` → `done_payload.cache` field. Structured `turn_cache` log line per turn. Doubles as relay cache-honesty probe
* **Conversation recovery MVP** — Synthetic `tool_result` rows persist after interrupted turns; `POST /chat/resume` replays cached SSE events from a monotonic cursor; frontend `useSseResume` hook auto-reconnects with exponential backoff (300ms → 1s → 3s, max 3 attempts) and "Reconnecting…" indicator
* **Thinking-block persistence with signature** — `reasoning_content` + Anthropic `signature` persisted in `metadata_["thinking"]` and replayed on subsequent turns; fixes HTTP 400 signature mismatch on Claude 4 multi-turn conversations
* **Provider-aware reasoning replay policy** — Centralized `reasoning_replay_policy()` in `core/prompt/reasoning.py` gates serialization per provider family: Claude replays thinking blocks with signature; DeepSeek-R1/Qwen-QwQ/Gemini-thinking/o-series drop `reasoning_content` on outbound (previously leaked, breaking provider KV caches and violating API docs)

### v0.8.5 (2026-04-23) — Intégration de canal + Système de hooks + i18n contributeur

* **Canal Feishu (sous-ensemble Phase 1)** — Ressource `Channel` à portée organisationnelle avec identifiants chiffrés Fernet ; `FeishuChannel` supporte l'envoi de carte interactive + callback (vérification de signature + défi URL) ; interface de gestion Paramètres → Canaux (liste, créer/modifier avec protection d'état modifié, détails avec URL de callback copiable, envoi de test) ; API CRUD (`/api/channels`) et point de terminaison de callback d'événement (`/api/channels/{id}/callback`). Livré en avant-première pour la roadshow du 2026-04-24
* **Système de hooks d'agent (actif dans les runtimes ReAct + DAG)** — Abstraction `PreToolUseHook` / `PostToolUseHook` dans `src/fim_one/core/hooks/` ; les agents déclarant `hooks.class_hooks` dans `model_config_json` ont des hooks instanciés et enregistrés par session de chat. Premier consommateur `FeishuGateHook` publie une carte Approuver/Rejeter au groupe Feishu lié quand un agent appelle un outil `requires_confirmation=True`, bloque l'exécution et reprend ou abandonne selon le verdict
* **Portail de confirmation configurable (en ligne OU canal)** — Chaque agent obtient une section Approbation avec trois modes de routage (Auto / En ligne uniquement / Canal uniquement), sélecteur de portée approbateur (initiateur / propriétaire / n'importe qui dans l'org), remplacement par outil et sélecteur de canal d'approbation explicite. Le mode Auto bascule gracieusement vers une carte d'approbation en ligne quand aucun canal n'est lié. `POST /api/confirmations/{id}/respond` partage un chemin unique d'enregistrement de décision avec le webhook Feishu
* **Notifications de fin de tâche par agent** — Les agents ReAct ou DAG de longue durée peuvent envoyer une carte récapitulative au canal de l'org quand une tâche se termine. Premier consommateur du modèle de notification sortante générique
* **Playground d'approbation de hook** — La feuille de détails des canaux a une action « Tester le flux d'approbation » qui exerce le chemin de production complet (ligne `ConfirmationRequest` authentique, callback Feishu réel, transitions d'état) — le même chemin de code qu'un hook de production utilise
* **Repli i18n CI convivial pour contributeur** — `.github/workflows/i18n-sync.yml` traduit EN → ZH/JA/KO/DE/FR sur master après fusion de PR et valide automatiquement avec `[skip ci]` ; les contributeurs n'ont plus besoin de `LLM_API_KEY` localement. La garde de pré-commit refuse les modifications manuelles aux fichiers de locale générés (`ALLOW_LOCALE_EDIT=1` pour les corrections de traduction légitimes). Vérification de bout en bout via push de test de fumée
* **Docs d'intégration Exa** — Section Intégrations dédiée avec une première page Exa couvrant la surface de recherche Exa complète (neural / fast / deep-reasoning / instant), filtrage, récupération de contenu et trois présets ajustés
* **Support de base de données Xinchuang (信创)** — Le connecteur de base de données répertorie maintenant KingbaseES (人大金仓), HighGo (瀚高) et DM8 (达梦) aux côtés de PostgreSQL/MySQL. Les pilotes compatibles PG réutilisent `asyncpg` ; DM8 utilise `dmPython`. `scripts/test_xinchuang_dbs.py` vérifie la connectivité en direct depuis la CLI
* **Docs d'architecture Canaux + Système de hooks** — `docs/architecture/hook-system.mdx` explique les trois points de hook et parcourt `FeishuGateHook` de bout en bout ; les pages d'architecture existantes se renvoient mutuellement ; le README répertorie les canaux de messagerie comme une capacité de première classe
* **Durcissement** — Les clics de callback Feishu en double produisent une carte de remplacement au lieu de double-décision ; les clics de callback concurrents résolus via vérification de nombre de lignes `UPDATE ... WHERE status='pending'` conditionnel ; les approbations en attente expirent automatiquement après `CHANNEL_CONFIRMATION_TTL_MINUTES` (24h par défaut) via balayeur en arrière-plan ; Paramètres → Canaux respecte le rôle org (les membres voient l'interface en lecture seule) ; l'agrégateur d'appels d'outil parallèle gère les fournisseurs qui réutilisent `index=0` pour chaque delta ; la redirection d'expiration de session préserve la chaîne de requête

### v0.8.6 (2026-05-08) — Facturation Stripe + Améliorations

* [x] MVP de facturation Stripe — Niveaux Gratuit + Pro ; Checkout, Portail Client, cycle de vie webhook ; `/settings?tab=billing` ; CRUD de plan/abonnement admin ; l'application des quotas respecte le plan de chaque utilisateur
* [x] Drapeau de fonctionnalité de facturation contrôlé par l'admin — `system_settings.billing_enabled` contrôle l'ensemble du pipeline Stripe afin que les déploiements privés sans identifiants Stripe ne présentent jamais une UX de paiement non fonctionnelle
* [x] Quota illimité par utilisateur — vide hérite de la valeur par défaut globale, `0` accorde un accès illimité ; auparavant, les deux s'effondraient dans le même état
* [x] Glossaire de traduction comme source unique de vérité — `scripts/translation-glossary.md` consolide les règles par locale ; pre-commit refuse inconditionnellement les modifications manuelles des fichiers de locale générés
* [x] Licence + droit applicable migrés vers FIM Labs Pte. Ltd. (Singapour) ; arbitrage SIAC en anglais ; nouveau fichier `NOTICE` de haut niveau
* [x] Suggestions de suivi du Playground restaurées, opt-in par agent
* [x] Correctifs de stabilité — historique du fournisseur d'alternance stricte, détection de limite d'appel d'outil parallèle, flux de confirmation d'agent non lié, gating de rôle de canal, suppression de doublons de nouvelle tentative, pas de paraphrase post-rejet

### v0.8.7 (2026-06-10) — Security Hardening + Guardrails v0 + Billing Correctness

* [x] JWT token-type confinement — closes a 2FA bypass where any same-signed token (temp/refresh/ticket) could authenticate API and SSE endpoints
* [x] OAuth hardening — email auto-link requires a provider-verified email (account-takeover fix); OAuth refresh tokens stored hashed so session rotation works
* [x] Content guardrails v0 — input/output tripwire layer (`core/agent/guardrail`); ships jailbreak detector + max-length output guardrail, env-var configured
* [x] `file_ops.apply_patch` — V4A diff patches with fuzzy whitespace matching, complements `find_replace`
* [x] Billing-cycle correctness — quota resets on the subscription anniversary (not calendar month); renewals advance the period via authoritative Stripe lookup; usage display aligned to the enforcement window
* [x] Reliability fixes — pseudo-protocol tool-call leak stripped from answers; tunable HTTP keep-alive ends `APIConnectionError` bursts; API-key usage stats persist on read-only requests
* [x] Billing tab visual overhaul — full-width, consistent with other Settings tabs

### v0.8.8 (2026-06-22) — SSRF Hardening + Reliability & Reasoning Fixes

* [x] SSRF hardening — blocklist unwraps IPv4-mapped IPv6 (`::ffff:` instance-metadata bypass); MCP SSE/Streamable-HTTP server URLs SSRF-validated on create + connect
* [x] LLM reliability — shared HTTP pool self-heals after a LiteLLM client-cache eviction closes it; chat sends stream instantly (history folded in background, no full reload)
* [x] Anthropic adaptive-thinking protocol for Opus 4.6+/Sonnet 4.6/Fable 5 — extended thinking works where the old fixed-budget param 400s on 4.7/4.8; warns on OpenAI-proxy misroute
* [x] Reasoning detail preserved end-to-end — genuine final answer streamed verbatim; survives compaction, context rebuilds, and sub-agent steps (no lossy re-synthesis)
* [x] `PreToolUseHook` enforcement hooks fail closed on error — a crashing approval gate no longer silently allows the call; non-enforcement hooks keep fail-open via `fail_open`
* [x] Force-logout timestamp comparison normalized to UTC by conversion + Docker Compose `POSTGRES_*` credential override (no shipped `fim:fim` default)

### v0.8.9 (2026-07-08) — Module Slim-down + Sharing Convergence + Approval Hardening

* [x] Skills & Workflows soft-shelved behind admin module flags (default off) — core-only boot; nothing deleted, reversible from Admin → Settings → Modules
* [x] Sharing converged — KB sharing removed (KBs reach others only via shared Agents), DB connectors unshareable + raw SQL owner-only, workflow builder trimmed to 9 reference-only nodes
* [x] Feishu approval hardening — card clicks enforce approver identity, callback signatures fail closed + encrypted envelopes decrypted, approvals never routed to an unintended chat
* [x] Use-time access re-checks — shared MCP servers and bound KBs re-verified per run; leaving an org revokes subscriptions and saved credentials immediately
* [x] Agent loop hardening — plan board, background tools, incremental DAG replan + checkpoint resume, compaction keeps tool pairing, truncation continuation, 529/504 retry
* [x] `run_workflow` agent tool + workflow correctness — Agent node runs the full agent, confirmation gates fail closed, connector calls access-checked and audit-logged
* [x] Account deletion unified — admin and self-serve funnel through one purge routine covering every record and on-disk file; org owners must transfer ownership first
* [x] Owner-credential fallback now opt-in (breaking) — connectors/MCP servers default `allow_fallback` off, existing rows flipped; no-fallback resources you lack credentials for are hidden from the toolset
* [x] Webhook/cron workflow runs metered to the owner's token quota — the unmetered free-LLM trigger path is closed
* [x] Resource binding unified on visibility — subscribed connectors/KBs/MCP servers bindable to agents; workflow connector steps enforce the runner's access
* [x] Conversation workspace wired into chat — `workspace://` offload of oversized tool results, budget-truncation rescue, pre-compaction transcript snapshots

## Versions Prévues

Replanifié 2026-07-08 : FIM One est un runtime d'agent — un noyau unique (moteur ReAct, identifiants, confirmation gate, audit, orgs multi-tenant) derrière plusieurs surfaces de livraison : Web UI, API, JS embed, sortie MCP. Chaque surface réutilise la même couche d'assemblage pour l'authentification, les identifiants, la confirmation et le metering : plus de frontends, jamais plus de logique. La direction à court terme est la convergence sur la tranche data-Q\&A (ChatBI), vendre des scénarios plutôt qu'une plateforme.&#x20;

### v0.9 — Connecteur Fences + Scenario Onboarding

**Goal**: The post-reduce assets assemble into a complete data-Q\&A product — read-only DB connectors + fences + approval gate + IM entry. Tier-1 fences turn security debt into product features.

#### DB Connector Fences — Tier 1, three PRs&#x20;

* [ ] Masquage des colonnes PII (`ConnectorScopeGuard` PreToolUse hook)
* [ ] Visibilité du schéma — allow-deny table/colonne + blocage des verbes (application read-only)
* [ ] Auditabilité des clôtures — `caller_user_id`, `effective_credential_source`, `scope_rules_applied` dans `ConnectorCallLog`
* [ ] Configuration par hook (`{"name", "config"}` schéma) — le vecteur pour les règles ScopeGuard&#x20;
* [x] Les portes d'approbation persistent lors de la délégation — `call_agent` et les nœuds `AGENT` du workflow exécutent les propres hooks de l'agent au lieu d'aucun

#### Auth & Identity

* [x] La liaison automatique OAuth nécessite une adresse vérifiée des deux côtés, donc un compte créé à partir d'une adresse e-mail de fournisseur non vérifiée n'est jamais une cible de liaison

#### Rendu des réponses

* [x] Les réponses finales se diffusent nativement — la boucle se termine via un signal `finish` et la réponse est écrite comme un tour diffusé en direct par token
* [x] Le markdown diffusé s'affiche par bloc — les blocs terminés restent stables et la syntaxe inline à moitié arrivée ne scintille plus
* [x] Les réponses affichent les diagrammes Mermaid, les figures SVG et les tableaux de comparaison de style carte, avec copie/export sur les réponses, les blocs de code et les tableaux
* [x] Le markdown affiché est désinfecté, fermant l'injection HTML brute de la sortie du modèle et des fichiers téléchargés
* [x] Les diagrammes et les blocs de code se téléchargent en tant que fichiers ; le raisonnement se replie en aperçus d'une ligne par défaut dans les conversations en direct et passées
* [x] Les exports de conversation sont composés pour CJK — le PDF intègre une véritable police (espacement correct, puces et gras), DOCX déclare une police d'Asie de l'Est, les deux à une échelle de taille

#### Workbench UX

* [x] Sidebar reorganized around the chat cluster — conversations directly under New chat/Search, module nav in a compact bottom dock
* [x] `/clear` slash command starts a fresh conversation from the input box
* [x] Admin model lists support checkbox multi-select with Shift-click ranges and one-request bulk delete
* [x] Running agent steps show generated one-line titles in a single folded header, kept in conversation history
* [x] A newly sent message rises to the top of the transcript, with the answer growing into the space below it
* [x] List pages stagger their cards in on first load, and all animation honours the system reduce-motion preference
* [x] Agents ask clarifying multiple-choice questions mid-run (ask\_user\_question) — the ReAct turn pauses on an in-chat card and resumes with the answers
* [x] Composer warns when an attached image would reach a text-only model, resolved from the model the turn would actually use
* [x] Unsent composer text, clips and attachments are kept per conversation (and for new chat), surviving refresh, conversation switches and expired sessions

#### Robustesse du contexte

* [x] Les budgets de contexte se situent 8 % en dessous de la limite matérielle du modèle ; le démarrage avertit lorsque la fenêtre du modèle rapide ne peut pas contenir le budget général
* [x] Discipline du plan-board : rappels de répétition et sans plan, et la finalisation avec des éléments de plan ouverts force désormais un passage de vérification
* [ ] Compaction d'entrée fragmentée et budgets conscients du modèle sur le chemin de chat principal, de sorte que tout mélange de modèles reste dans la fenêtre

#### Moteur DAG

* [x] Étapes DAG typées — le planificateur marque les étapes de transformation/synthèse pures `llm_direct` (appel unique, pas de boucle d'outils) ; les résultats portent des métadonnées d'exécution typées
* [x] Les objectifs ask-first se terminent en un seul tour — le planificateur livre le questionnaire comme étape, l'analyseur l'accepte, le routage automatique préfère Standard

#### Couche Modèle

* [x] GPT-5.x adopte d'abord les Responses-API (outils + raisonnement ensemble ; 404 bascule vers les complétions de chat) ; les autres familles restent sur les complétions par conception
* [x] GPT-5.x conserve son raisonnement à travers les tours d'outils — `/v1/responses` natif avec relecture du raisonnement chiffré, `FIM_GPT5_RESPONSES_MODE` pour revenir en arrière
* [x] Une limite de sortie réduite abandonne tout le lot d'appels d'outils et demande une nouvelle tentative plus petite, donc aucune réponse n'exécute seulement une partie de ce qu'elle avait prévu
* [ ] Vérifier les chiffres d'utilisation du streaming du pont Responses lors de la prochaine mise à niveau de LiteLLM (mauvais mappage en amont suspecté)
* [ ] Retirer le pont chat→responses de LiteLLM une fois que le chemin GPT-5.x natif a exécuté une version complète

#### Intégration de scénarios

* [ ] Le premier lancement commence à partir d'un modèle de scénario (solution\_seeds) au lieu d'un établi vide
* [ ] La page d'accueil de la documentation met en avant trois histoires de scénarios verticaux au lieu d'une référence de module
* [ ] Un modèle de scénario distillé par engagement livré — l'avantage concurrentiel réside dans les actifs de scénarios × la vitesse de livraison

### v0.10 — Two Mouths: JS Embed + IM Inbound&#x20;

**Goal**: The two most sellable delivery surfaces, both on the same kernel and assembly layer.

* [ ] JS bubble / iframe embed — one snippet into a host system; anonymous-visitor identity + billing attribution decided before build
* [x] Feishu callback URL passes verification: unsigned pushes authenticate by Encrypt Key envelope + Verification Token
* [ ] Feishu inbound @mention — agents live in the group: query data, file approvals, chase flows
* [ ] Outbound patterns: failure alerts, budget warnings, scheduled digests, escalation, audit receipts
* [ ] WeCom / DingTalk channels following Feishu

### Parked — signal-gated

Do not start these without their trigger (see the replan §3): the MCP gateway waits for ≥2 unsolicited "mount your tools in my agent" asks; channelization waits for an implementor asking about licensing; IdP/OrgSync waits for customer pull; the rest wait for a delivered engagement that needs them.

* [ ] MCP gateway output — reverse-expose connector discover/execute as MCP tools for downstream agents
* [ ] Channelization / white-label enablement — commercial-license path already in place
* [ ] Identity Provider module + Channel slim-down — Feishu SSO, org graph sync&#x20;
* [ ] Connector authorization Tier 2 (require per-user credentials, key-binding health) + Tier 3 (login-ticket exchange)&#x20;
* [ ] Public API Phase 2 — per-key rate limits/quotas, versioning, SDKs, developer portal&#x20;
* [ ] Observability — Agent Trace Layer (Trace/Span model, timeline viewer, OTel export) + metrics dashboard&#x20;
* [ ] Agent Workspace remainder — handoff notes, file browser UI, cross-session recall, compaction segments (grep-able on-disk summary the agent reads back)&#x20;
* [ ] Guardrails v1 — off-topic filter, PII redactor output guardrail, per-agent guardrail config UI
* [ ] Hook System extras — built-in hooks, `SessionStart` + user YAML hooks&#x20;
* [ ] Connector platform depth — Progressive Disclosure Phase 3-4, YAML/JSON connector config, DB connectors Phase 4 (Oracle / SQL Server / GBase), MCP connection pooling
* [ ] Prompt cache follow-ups — Gemini context cache adapter, per-agent `cache_ttl`&#x20;
* [ ] Hot mid-stream DAG resume — SSE reconnect re-attaches to a running turn (cold retry-resume already shipped)&#x20;
* [ ] Ecosystem — scheduled/event-triggered agents, workflow trigger-identity observability, per-workflow `credential_policy`, DB Schema Advanced Builder, sandbox hardening v2

### Livré du plan de pré-replan v0.9

* [x] ~~Auth & security: JWT token-type confinement + OAuth fixes (v0.8.7); PG tz-aware timestamps (v0.8.6); force-logout UTC + `POSTGRES_*` override + SSRF IPv6-mapped fix (v0.8.8); owner-fallback opt-in + visibility-unified binding + webhook/cron metering (v0.8.9)~~

* [x] ~~Provider compat: Anthropic adaptive thinking + shared LLM pool self-heal (v0.8.8)~~

* [x] ~~Content guardrails v0: tripwire layer + jailbreak detector (v0.8.7)~~&#x20;

* [x] ~~Hook system: skeleton + FeishuGateHook + Approval Playground + ReAct/DAG runtime (v0.8.5); PreToolUse enforcement fail-closed (v0.8.8)~~

* [x] ~~Feishu channel Phase 1 + task completion notification (v0.8.5)~~

* [x] ~~`run_workflow` agent tool (v0.8.9); reasoning detail preserved end-to-end (v0.8.8); workspace tool-output offloading wired into chat (v0.8.9)~~

* [x] ~~Agent loop hardening: plan board, LLM-call resilience, background tools, incremental DAG replan + checkpoint resume, compaction tool-pairing (v0.8.9)~~&#x20;

* [x] ~~Circuit breaker, Workflow run retention cleanup, Workflow version diff summaries~~ *(v0.8 / v0.8.1)*

* [x] ~~DAG quality overhaul, Domain model escalation, Per-model NFC toggle~~ *(v0.8.1)*

* [x] ~~DatabaseMetaTool, MCPServerMetaTool, On-demand `request_tools`~~ *(v0.8.1)*

* [x] ~~Workflow Connection Dep Auto-Subscribe, Workflow real executors~~ *(v0.8.1)*

* [x] ~~ReAct Cycle Detection, Completion Checklist~~ *(v0.8.1)*

* [x] ~~Prebuilt Solution Templates (8 vertical bundles), Resource Fork (MCP/Skill/Agent/Connector/Workflow)~~ *(v0.8.1)*

* [x] ~~Vision document processing (PDF / DOCX / PPTX), MarkItDown OCR~~ *(v0.8.2 / v0.8.3)*

* [x] ~~Smart File Content Injection + `read_uploaded_file`~~ *(v0.8)*

* [x] ~~Agent Core Phase 3: Conversation Recovery MVP, Compact Work Card, Turn Profiler, Per-user Rate Limiting~~ *(v0.8.3)*

* [x] ~~Conversation resume MVP, System prompt registry + cache, Thinking-block persistence, Reasoning replay policy, Cache observability~~ *(v0.8.4)*

### v1.0 — Hot-Plug + Embeddable

**Objectif** : Ajout de connecteurs sans redémarrage, écosystème de paquets et livraison intégrée.

* [ ] **Connector Progressive Disclosure (Phase 5)**: **Semantic-Guided Tool Selection** (extraction d'entités à partir de la requête → recherche dans le registre d'ontologie → réduction de l'ensemble de connecteurs ; réduction de 90%+ des jetons pour les déploiements de 50+ connecteurs) ; Mode d'échelle pour les connecteurs batch/ETL ; Interface universelle de style CLI `connector <name> <action> <params>`

* [ ] **Cross-Connector Entity Alignment (Ontology Registry)** — *rétrogradé 2026-04-21 : livraison personnalisée à la demande, pas une capacité principale* : définir les types d'entités partagées (Customer, Order, Asset) avec mappages de champs entre connecteurs ; DAGPlanner résout automatiquement les clés JOIN inter-systèmes ; active les requêtes inter-connecteurs (par ex., « clients dans Salesforce qui ont commandé dans Shopify ») sans noms de champs codés en dur

* [ ] **Connecteurs hot-plug** : télécharger la spécification OpenAPI, l'IA génère la configuration, en ligne en 5 minutes (pas de redémarrage)

* [x] ~~**Marketplace Redesign Phase 1 — Solutions + Components**~~ : modèle de marché à deux niveaux (Solutions : Agent/Skill/Workflow ; Composants : Connector/MCP Server) ; sélecteur de portée (Marché global / org) ; modèle d'abonnement unifié (suppression auto-apparition org) ; KB supprimée de la portée du marché ; migration de données rétroactive des abonnements pour les membres org existants

* [ ] **Market Package System** : paquets de ressources distribuables pour la Marketplace — remplace les « marketplaces » par type par une couche d'emballage unifiée. Le manifeste `fim-package.yaml` déclare : métadonnées (nom, version, description, auteur, licence, tags, `min_fim_version`), point d'entrée (Skill ou Agent principal), liste de ressources (agents, skills, connecteurs, KBs, serveurs MCP, workflows) avec références de configuration, dépendances inter-paquets (plages semver), identifiants requis (mappés aux références de connecteurs pour la collecte au moment de l'installation) et variables configurables par l'utilisateur avec valeurs par défaut. **Deux modes de consommation** : (1) **install** — création par lot de toutes les ressources + câblage automatique des références internes via substitution d'ID ; installation liée à la source pour les notifications de mise à jour de version ; `POST /api/market/packages/{id}/install` ; (2) **fork** — cloner en tant que copies modifiables détenues par l'utilisateur sans lien de mise à jour (c'est le mode modèle) ; `POST /api/market/packages/{id}/fork`. Points de terminaison supplémentaires : publier (`POST /api/market/packages` avec flux d'examen), désinstaller (`DELETE /packages/{id}/uninstall` avec vérification de dépendance + confirmation de ressource modifiée), historique des versions (`GET /packages/{id}/versions`), mettre à niveau (`POST /packages/{id}/upgrade` avec aperçu de diff par ressource). Résolveur de dépendances pour les exigences de paquets imbriqués avec détection de conflits. La table `PackageInstallation` suit les paquets installés par utilisateur avec mappage d'ID de ressource pour la désinstallation/mise à niveau. **Coexiste avec la publication de ressources individuelles** — Package est une couche de composition, pas un remplacement ; un connecteur unique est toujours publiable de manière autonome. Exemple d'arborescence de dépendances : `Package: contract-review` → `Skill: contract-review` (point d'entrée) → `Agent: contract-analyst` + `Agent: risk-scorer` → `KB: legal-clauses` + `Connector: docusign-api` + `MCP: pdf-extractor` + `Workflow: contract-approval-flow`

* [ ] **Creator Program** : couche de monétisation de la Marketplace — profils de créateurs avec pages de portfolio, analyses par paquet (installations, forks, utilisateurs actifs, évaluations/avis), suivi des commissions d'affiliation lorsque les paquets génèrent de nouveaux abonnements. Niveau de paquet payant avec tarification, flux d'achat et flux de travail d'approbation. Tableau de bord des créateurs avec tendances d'installation, rapports de revenus et retours des utilisateurs. API de créateur public pour la publication de paquets programmatique (CI/CD pour les auteurs de paquets). Fonctionnalités communautaires : commentaires de paquets, Q\&A, journaux des modifications par version

* [ ] **Widget intégrable** : `<script src="fim-one.js">` injecté dans la page hôte

* [ ] **Injection de contexte de page** : le widget lit le contexte de la page hôte (ID actuel, URL, sélecteurs DOM)

* [ ] **Déclencheurs avancés** : événements entrants Webhook ; améliorations des tâches planifiées (multi-fuseau horaire, sensibilité au calendrier)

* [ ] **Exécution par lot** : traiter 1000+ éléments via DAG

* [ ] **Sécurité d'entreprise** : liste blanche IP, chiffrement au repos, SSO

* [ ] **KB Advanced Editor** : agent en mode Builder pour les utilisateurs avancés gérant de grandes bases de connaissances — ingestion d'URL en masse, détection des doublons, analyse des lacunes, gestion du cycle de vie des documents ; étend le chat IA KB existant avec boucle d'outils ReAct

* [ ] Modèle d'accès à la facturation — l'instance choisit pas d'abonnements / inclus+payant / payant uniquement, de sorte que l'auto-hébergement, SaaS et la facturation dès le premier jour restent distincts&#x20;

* [ ] **Stripe Billing (v1 MVP — Pro Subscription)** : abonnement à deux niveaux Free + Pro avec quota de jetons mensuel. Stripe Checkout (hébergé) + Customer Portal (libre-service) + cycle de vie piloté par webhook (`checkout.session.completed` / `customer.subscription.updated|deleted` / `invoice.payment_succeeded|failed`). Plafond souple à l'épuisement du quota (HTTP 402 + invite de mise à niveau) — pas de frais de dépassement en v1. Facturation par utilisateur uniquement ; les abonnements Org/Team sont reportés à v3. Conditions préalables :
  * [x] ~~**Modèle de données + travail SDK** (P1) — tables `billing_plans` / `subscriptions` / `stripe_webhook_events`, modèles ORM, singleton SDK Stripe, graines Free + Pro~~ *(livré en v0.8.6)*
  * [x] ~~**API backend + gestionnaire webhook** (P2) — `/api/billing/*` + `/api/webhooks/stripe` avec vérification de signature + idempotence ; quota conscient du plan ; balayage du cycle de vie toutes les heures~~ *(livré en v0.8.6)*
  * [x] ~~**Onglet facturation frontend + dialogue de mise à niveau 402** (P3) — `/settings?tab=billing` affichage du quota, CTA de mise à niveau, bannière `past_due`, dialogue 402 en cours de flux~~ *(livré en v0.8.6)*
  * [x] ~~**Gestion des plans d'administration** (P4) — CRUD `admin/billing/{plans,subscriptions}`~~ *(livré en v0.8.6)*
  * [x] ~~**Drapeau de fonctionnalité de facturation contrôlé par l'administrateur** (P5) — `system_settings.billing_enabled` ferme le pipeline Stripe ; activation idempotente amorce Free+Pro, définit le pointeur de plan par défaut, rétroactive les utilisateurs ; basculer on/off est un pur basculement de drapeau après activation~~ *(livré en v0.8.6)*
  * [ ] **Rapprochement + e2e + mise en ligne** (P6) — script de rapprochement nocturne `subscriptions` ↔ `stripe.Subscription.list()` pour la récupération des webhooks manqués ; tests de régression de chemin heureux complet / annulation en milieu de période / passé dû ; passer du `stripe_price_id` en mode test à un `price_id` en direct ; test de fumée sur la mise en scène avec une vraie carte.

* [ ] **Plan d'équipe (sièges Stripe)** — Tarification par siège via `stripe.Subscription.quantity`, intégrée à l'adhésion à l'organisation. Permet aux entreprises de s'abonner à un plan d'équipe unique avec N sièges ; le quota et les drapeaux de fonctionnalités se résolvent via le groupe de sièges plutôt que l'utilisateur individuel. S'appuie sur le MVP Stripe v1.0 et le modèle d'organisation existant.

* [ ] **Quota de jetons au niveau du groupe pour les déploiements sans facturation** — Les déploiements d'entreprise/privés sans Stripe configurent les budgets de jetons au niveau de l'organisation. La chaîne de quota s'étend à `override > group > plan > default` ; la résolution de groupe utilise `max(user_quota, group_quota)` de sorte que les VIP individuels ne sont pas limités par le plafond de l'équipe. Arrive aux côtés du plan d'équipe afin que les mêmes primitives servent à la fois les topologies facturées et auto-hébergées.

**Impact** : Les entreprises déploient FIM One de zéro à l'orchestration multi-systèmes en quelques jours. Le système de paquets crée un écosystème de créateurs — les auteurs de solutions publient des paquets composites (Skill + Agents + Connecteurs + KBs + Workflows), les entreprises installent en un clic, les créateurs gagnent de l'adoption. La dualité install/fork couvre à la fois les cas d'utilisation « utiliser tel quel » et « personnaliser à partir du modèle » dans un seul mécanisme.

## Fonctionnalités gelées (livrées, maintenance uniquement)

Selon la [Stratégie d'orthogonalité](/strategy/orthogonality-strategy), ces fonctionnalités sont livrées et fonctionnelles mais ne recevront pas de nouvelles capacités (corrections de bugs uniquement) :

| Fonctionnalité                    | Version            | Raison du gel                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| --------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ReAct Agent                       | v0.1, v0.9         | Les modèles disposent désormais d'appels d'outils natifs. L'auto-réflexion en boucle (v0.9) prévient la dérive d'objectif dans les chaînes longues. La qualité de la synthèse d'observation d'outils s'est améliorée (8K caractères, configurable via `REACT_TOOL_OBS_TRUNCATION`)                                                                                                                                                                                                                  |
| DAG Planning / Re-Planning        | v0.1, v0.5, v0.7.5 | Les capacités de raisonnement des modèles s'améliorent ; la décomposition devient single-shot. La vérification par étape a été livrée en v0.7.5 (`DAG_STEP_VERIFICATION`). Renforcée : propagation des défaillances en cascade, correction du statut du vérificateur, descriptions des outils du planificateur, historique complet de replan, cache d'outils basé sur liste blanche. 14 constantes du moteur exposées en tant que variables ENV — aucune nouvelle primitive de planification prévue |
| Memory (Window, Summary, Compact) | v0.2, v0.5         | Les fenêtres de contexte augmentent (200K+) ; moins besoin de gestion externe de la mémoire                                                                                                                                                                                                                                                                                                                                                                                                         |
| Pipeline RAG                      | v0.5               | Les fournisseurs construisent la récupération nativement (OpenAI file\_search, Gemini Search Grounding)                                                                                                                                                                                                                                                                                                                                                                                             |
| Grounded Generation               | v0.5               | Les modèles s'améliorent dans les citations ; le pipeline à 5 étapes ajoute une valeur décroissante                                                                                                                                                                                                                                                                                                                                                                                                 |
| ContextGuard / Pinned Messages    | v0.5               | Livraison en l'état ; aucune nouvelle fonctionnalité                                                                                                                                                                                                                                                                                                                                                                                                                                                |

## Considéré (Reporté indéfiniment)

Selon la Stratégie d'Orthogonalité, ces éléments seraient très coûteux et risqueraient d'être absorbés :

| Fonctionnalité                                                             | Raison du report                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Orchestration Multi-Agent (hiérarchies profondes)                          | Les fournisseurs construisent nativement (OpenAI Swarm, Google A2A, et offres multi-agent similaires). Le CallAgentTool de FIM One couvre le cas de délégation à un niveau ; les agents d'arrière-plan déclenchés par événement sont couverts par Scheduled Jobs en v0.9                                                                                                                                                                              |
| Compétences Auto-modifiables d'Agent (Mémoire Procédurale)                 | Les agents mettant à jour leur propre `skill.md` pendant l'exécution — complexité élevée, surface de sécurité/audit. Dépend de la livraison du Système de Compétences d'Agent (v0.8) en premier. Réévaluer si les clients d'entreprise demandent explicitement des agents auto-améliorants                                                                                                                                                            |
| ~~Espace de Travail d'Agent (Déchargement de Fichiers de Sortie d'Outil)~~ | Promu en v0.9. La valeur est la **lecture sélective**, non la capacité de contexte — validation inter-frameworks confirmée. Le raisonnement de report original (« les fenêtres de 200K+ réduisent l'urgence ») était incorrect.                                                                                                                                                                                                                       |
| Mémoire Long-Terme Entre Sessions                                          | Les fenêtres de contexte croissent rapidement (200K–2M) ; les fournisseurs ajoutent la mémoire intégrée (mémoire OpenAI, mise en cache de contexte Gemini) ; coût d'implémentation élevé par rapport à la valeur de différenciation décroissante. Réévaluer quand les clients d'entreprise la demandent explicitement                                                                                                                                 |
| Cycle de Vie de la Mémoire (TTL, quotas)                                   | Dépend de la mémoire entre sessions ; reporté ensemble                                                                                                                                                                                                                                                                                                                                                                                                |
| Outil de Compression de Contexte Actif (déclenché par agent)               | Explicitement gelé avec ContextGuard (v0.5). Les fenêtres de contexte à 200K+ réduisent la valeur. Ne sera pas revisité sauf si les coûts de contexte deviennent une plainte majeure d'entreprise                                                                                                                                                                                                                                                     |
| Automatisation de Navigateur / Utilisation d'Ordinateur                    | Coût de maintenance élevé (changements DOM, anti-bot, sandboxing). L'industrie converge vers le mode Computer Use (Anthropic, OpenAI Operator, Google Mariner) et les outils de navigateur MCP (Puppeteer/Playwright MCP). Consommer via intégration MCP, ne pas auto-construire. Réévaluer quand une norme MCP Computer Use stable émerge                                                                                                            |
| Notifications Web Push                                                     | Push natif du navigateur via Service Worker + VAPID. Chevauche l'Intégration de Canal IM (v0.8) qui couvre les canaux préférés d'entreprise (Lark/Slack/WeCom/Email). Le push IM a une valeur d'entreprise plus élevée ; Web Push est un plus pour les utilisateurs du Portail uniquement. Réévaluer après la livraison du Canal IM — si les utilisateurs demandent des notifications de navigateur au-delà de la couverture IM                       |
| Édition Collaborative Multi-utilisateur de Flux de Travail                 | Co-édition en temps réel du même blueprint de flux de travail (style Figma/Notion) avec conscience du curseur, résolution de conflits, et verrous par nœud. Coût d'implémentation élevé (CRDT / OT, infrastructure de présence), demande d'entreprise peu claire par rapport au modèle actuel « un éditeur à la fois + diff de version ». Réévaluer si plusieurs entreprises demandent spécifiquement l'édition partagée en direct                    |
| Permissions d'Exécution de Flux de Travail Par-Nœud (RBAC à l'exécution)   | Autorisation fine-grained *à l'intérieur* d'une seule exécution de flux de travail — par exemple « le nœud X nécessite le rôle `finance_approver` pour s'exécuter ». Aujourd'hui l'autorisation se fait au niveau du flux de travail (qui peut déclencher) et au niveau du connecteur (dont les identifiants s'exécutent) ; RBAC par-nœud ajoute un troisième axe avec complexité matérielle et aucune demande client active                          |
| Partage de Flux de Travail Entre Organisations avec Mises à Jour en Direct | S'abonner à un flux de travail d'une autre organisation et recevoir les mises à jour en amont sans re-forker. Aujourd'hui s'abonner = forker (snapshot), donc les changements en amont cassants ne se propagent jamais. Les mises à jour en direct nécessiteraient l'évolution de schéma compatible en amont + résolution de conflits ; coût de maintenance élevé. Réévaluer si les entreprises demandent « flux de travail partagés entre filiales » |

## Comment les versions s'alignent avec les modes

| Version       | Standalone | Copilot   | Hub        | Notes                                                                         |
| ------------- | ---------- | --------- | ---------- | ----------------------------------------------------------------------------- |
| **v0.1–v0.3** | Working    | Not yet   | Not yet    | Portal-only, single-user                                                      |
| **v0.4**      | Working    | Not yet   | Not yet    | Multi-conversation, agent management                                          |
| **v0.5**      | Working    | Not yet   | Not yet    | Knowledge base + RAG                                                          |
| **v0.6**      | Working    | Possible  | Possible   | Connectors ship; Copilot/Hub possible with manual wiring                      |
| **v0.7**      | Working    | Ready     | Ready      | Admin platform; multi-tenant auth; ready for production                       |
| **v0.8**      | Working    | Ready     | Optimized  | RBAC + audit log per-system; easier to onboard                                |
| **v0.9**      | Working    | Ready     | Production | Observability, performance, hardening                                         |
| **v1.0**      | Working    | Optimized | Enterprise | Package system, creator program, hot-plug, embeddable widget, webhooks, batch |

## Resource Allocation (v0.8–v1.0)

The Orthogonality Strategy shapes where effort goes:

| Category                                                       | Allocation | Versions  | Why                                                                                                                           |
| -------------------------------------------------------------- | ---------- | --------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **Connector Platform** (v0.6+)                                 | 50%        | Ongoing   | Core differentiation; no absorption risk                                                                                      |
| **Enterprise Features** (RBAC, audit, security, observability) | 30%        | v0.8–v1.0 | Boring but durable; production requirement. Agent Trace Layer is commercial anchor                                            |
| **Agent Intelligence** (Skill System, scheduled agents)        | 15%        | v0.8–v0.9 | 指令+工具+技能 differentiation story; low absorption risk — frameworks validate patterns, but enterprise SOPs are customer-specific |
| **v0.1–v0.5 maintenance**                                      | 5%         | Ongoing   | Bug fixes only; no new features                                                                                               |

## Jalons axés sur les métriques

Le succès est mesuré par :

| Métrique                                        | Cible v0.7                 | Cible v0.8                          | Cible v1.0                 |
| ----------------------------------------------- | -------------------------- | ----------------------------------- | -------------------------- |
| Connecteurs déployés                            | 5                          | 20+                                 | 100+                       |
| Clients entreprise                              | 1–2                        | 5–10                                | 20+                        |
| Temps moyen de configuration du connecteur      | 2 semaines                 | 2 jours                             | 5 minutes (hot-plug)       |
| Efficacité des tokens (DAG vs ReAct uniquement) | Réduction de 30 %          | Réduction de 40 %                   | Réduction de 50 %          |
| SLA de disponibilité                            | 99,5 %                     | 99,9 %                              | 99,95 %                    |
| Thèmes des tickets de support                   | Intégration, configuration | Logique personnalisée du connecteur | Hot-plug, mise à l'échelle |

## Questions ouvertes / À définir

* **Modération de la place de marché** : Comment valider les packages communautaires et les ressources individuelles ? Analyse automatisée pour détecter les fuites de credentials dans les configurations de packages ? (v1.0)
* **Économie des tokens** : Comment tarifier les scénarios multi-utilisateurs et multi-agents ? (v1.0)
* **Versioning des packages** : Modifications incompatibles dans les packages installés — mise à niveau automatique avec scripts de migration, ou approbation manuelle par mise à jour ? Résolution du problème du diamant de dépendances ? (v1.0)
* **Tarification des packages** : Niveaux gratuits vs payants, taux de commission pour le Creator Program, intégration du fournisseur de paiement ? (v1.0)
* **UX des credentials de package** : Collecte de credentials au moment de l'installation — assistant étape par étape ou configuration différée ? Partage de credentials entre packages utilisant le même type de connecteur ? (v1.0)
* **Opt-out de télémétrie** : Comment respecter les préférences de confidentialité ? (v0.8)
* **Versioning des connecteurs** : Comment gérer les modifications incompatibles dans les APIs de connecteurs ? (v0.8)
* **Limitation de débit** : Limitation de débit par utilisateur pour les workflows déployée (fenêtre glissante 10 exécutions/min, 3 concurrentes). Limitation de débit par connecteur et par agent à définir (v0.9)
* **Sélection du niveau d'autorisation du connecteur** : comment un administrateur découvre-t-il quel niveau s'applique à un système en amont donné ? Auto-détection (essayer clé API par utilisateur → revenir à ticket de connexion → revenir à BD partagée) vs. déclaration explicite dans la spécification du connecteur ? Comment exprimer « ce connecteur supporte le Niveau 2 mais l'administrateur a choisi d'opérer en Niveau 1 » dans l'interface sans confondre les administrateurs non-techniques ? (v0.9)
* **Dualité Intégration vs Connecteur** : quand une liaison Feishu est simultanément un fournisseur SSO ET une surface d'appel API, comment la présenter dans Paramètres ? Un objet avec trois bascules, ou trois liaisons séparées partageant une credential ? Implications pour la sémantique de désinstallation (révoquer SSO tue-t-il le Connecteur ?) (v0.9)
