26.2 KB · updated 2026-07-31 · md

feature-map.fr.md

docs/i18n/feature-map.fr.md

Carte des fonctionnalités

<!-- translations:start -->

English · 한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch

<!-- translations:end --> Ce document résume les fonctionnalités actuellement implémentées dans Tesserae, avec statut, fichiers sources et où elles sont documentées.

Tesserae est un moteur de contexte reposant sur trois piliers : (1) la surveillance de sessions, (2) l’ingestion de connaissances autonome et proactive, et (3) les docs/contexte à la demande. Le graphe typé, le vault et le site statique sont des projections de la base de connaissances. Les fonctionnalités ci-dessous sont groupées selon le pilier qu’elles servent ; le jalon v0.5.0 (juin 2026) a livré la colonne vertébrale du moteur et la fonctionnalité vedette du pilier 3, le compilateur de contexte à la demande.

Légende de statut : ✅ livré · ⚠ en cours / partiel.

Inter-projets & UX — v0.11.0 (juin 2026)

FonctionnalitéStatutSourceNotes
Fédération inter-projetsMD0ask --scope federated assemble UN graphe depuis plusieurs projets enregistrés — fusion d’identité (même arxiv/repo/hash/symbole) + liens shares_concept_with adossés aux embeddings avec opt-out — et retourne une seule réponse citée et croisée sur l’union (PPR + compile_context). Le graph.json par projet est en lecture seule ; déterministe en mode identité seule.
Routeur ask intelligent (pas de projet actif)MD0Le concept de « projet actif » est supprimé — tous les projets enregistrés sont égaux. Un ask nu se route lui-même (nomme un projet → celui-là ; comparatif → fédéré ; relance → garde la route ; sinon repli fédéré), avec un départage LLM optionnel et une continuité par conversation. Les opérations par projet résolvent le projet depuis le cwd.
Inspection de la fédérationtesserae/federation.py, cli.pytesserae federation status (comptes de nœuds par projet, fusions d’identité, liens sémantiques) et federation explain <node> (pourquoi un nœud fait pont entre projets).
Serve multi-projetsMD0, cli.pyUn tesserae serve nu sert CHAQUE projet enregistré sous un même serveur (accueil à /, chacun à /<alias>/, un sélecteur Projects dans l’en-tête, chemins confinés) ; --project X en sert un seul avec le widget ask en direct.
Couche de concepts LLM dans compilecli.py, MD1, MD2tesserae compile construit la couche concepts/claims par défaut (--extractor llm) via le fournisseur configuré (codex/claude/api selon llm_provider) ; --extractor deterministic est l’opt-out structurel octet-stable ; selective-llm --llm-include … --llm-limit N est sensible au coût.
tesserae setup (interactif)cli.py, MD1tesserae setup de niveau supérieur — interactif par défaut (fournisseur/effort LLM + quelles deps optionnelles) ; les drapeaux sautent les invites. Les installations fonctionnent dans les envs uv-tool sans pip (repli uv-pip).

Interop, recherche & setup — v0.10.0 (juin 2026)

FonctionnalitéStatutSourceNotes
Import/export Google OKF v0.1MD0tesserae export okf [--import DIR]. Bundle markdown + frontmatter YAML ; fait l’aller-retour sans perte des bundles propres de Tesserae via un espace de noms x_tesserae, les bundles étrangers au mieux.
Recherche rapide de transcriptions (memex)MD0Index BM25 nicosuave/memex sur les transcriptions Claude/Codex, câblé au tableau de bord des sessions de tesserae serve via GET /api/transcript-search. Optionnel + gracieux en son absence.
Handles de discipline de lectureMD0compile_context preview=N retourne un aperçu borné + un handle clé par contenu ; get_handle pagine le reste. Garde les énormes payloads hors du contexte de l’agent.
Signaux de qualité d’extractionMD0confidence + confidence_rationale + revisit_signals par constat (octet-stable ; exposés dans fresh_insights).
Setup machine + depsMD0, cli.pytesserae setup écrit les défauts LLM globaux + installe les deps optionnelles (memex, raganything) ; tesserae config deps liste/installe ; tesserae init propose memex. La config par projet prime toujours.

Moteur de contexte — v0.5.0 (juin 2026)

La colonne vertébrale du moteur qui anime les trois piliers. Voir MD0 pour la carte des modules du moteur, le sidecar de mémoire d’auto-amélioration et le flux de données du compilateur de contexte.

Colonne vertébrale du moteur (piliers 1 & 2)

FonctionnalitéStatutSourceNotes
Pipeline — chaîne de refresh réutilisable retournant List[StepResult]MD0Un seul exécuteur d’étapes que la CLI, le daemon et MCP appellent tous. Attrape Exception par étape ; s’arrête au premier échec.
Daemon — superviseur asyncio à propriétaire uniqueMD0Surveille sources + vault + répertoire de sessions de harness ; un debounce cancel-and-reschedule coalesce une rafale en un seul Pipeline.run(). Pidfile ; survit aux exceptions en vol.
project engine / project daemonMD0--interval, --debounce, --once. daemon est un alias d’engine.
project refresh — chaîne en prose (ingest → compile → project)cli.py + MD1--changed-only (incrémental opt-in), --no-sessions.
Moniteur de sessions en direct → constatsharness_sessions.py + modules session-graphLes sessions importées alimentent le graphe ; fresh_insights / find_session_findings les font remonter.

Mémoire d’auto-amélioration (pilier 2)

FonctionnalitéStatutSourceNotes
Sidecar SQLite node_memory (décrue / confiance / supplanté)MD0NodeMemoryRow + accesseurs agnostiques du store ; état mutable uniquement. Le first-seen vit dans le sidecar séparé node_provenance.
Score de décrue d’EbbinghausMD0Classe les constats de session du plus récent + plus accédé d’abord (anime fresh_insights).
Passe de supplantation (activée par défaut)MD0Un verdict déterministe marque un insight quasi-doublon plus ancien comme supplanté par un plus récent ; ajoute une arête supersedes.
Liaison insight → symbole de codeMD0Arêtes discusses des insights de session vers les symboles qu’ils référencent.
Passes de renforcement + contradictionMD0, MD1Renforcement d’accès + détection de contradictions sur le même sidecar.
Confiance de récurrence numérique en sortieMD0Les faits temporels estampillent confidence depuis NodeMemoryRow.confidence, avec repli sur infer_confidence.

Récupération + embeddings (piliers 2 & 3)

FonctionnalitéStatutSourceNotes
Récupérateur hybride (BM25 + lexical + embedding, RRF k=60)MD0Local d’abord, entièrement déterministe.
Personalized PageRank (HippoRAG-2)MD0Expansion multi-sauts des graines ; sous-graphe borné en profondeur.
Vrais embeddings par défaut (Track B, Phase 6)retrieval/hybrid.pyDéfaut = pseudo-embedding hash-bucket déterministe (sans deps) ; sentence-transformers (all-MiniLM-L6-v2) préféré, chargé paresseusement quand installé. L’outil MCP embedding_status rapporte le backend actif.

Compilateur de contexte à la demande (pilier 3 — vedette)

FonctionnalitéStatutSourceNotes
compile_contextContextBundle cité en mémoireMD0Résolution des graines → expansion PPR → sélection bornée par budget → markdown cité → synthèse LLM optionnelle. Déterministe sauf si synthesize=true. N’écrit rien sur disque.
CLI project contextcli.py[query], --seeds, --depth (2), --budget (32000 ; ≤0 = sans plafond), --llm, --output.
Outil MCP compile_contextMD0Même pipeline via MCP ; budget=0 est sans plafond.
Tranches d’export ciblées par topicMD0 slice_export_context_for_topicllms.txt ciblé par topic + render_harness_context via compile_context.

Compilation incrémentale (Phase 4 — expérimental)

FonctionnalitéStatutSourceNotes
Sidecar de provenance (node_provenance, first-seen)MD0Fondation des suppressions changed-only ; toujours enregistré.
Surface de suppression GraphStoreMD0delete_node, delete_nodes_by_source (supprime les nœuds dont l’ensemble de provenance se vide ; les concepts multi-fichiers survivent).
Dispatch de store runtime url_resolverMD0sqlite:///… / hypepaper-postgres://…GraphStore.
Drapeau incremental_compileMD0OFF par défaut / expérimental. Parité octet prouvée pour plusieurs formes d’édition mais des lacunes multi-propriétaires/cycle de vie producteur demeurent ; la compilation complète reste le défaut.

Refonte du frontend — avril 2026

Un wiki hiérarchique orienté documents remplace l’ancien déversement de graphe. Voir MD0 pour la visite route par route et MD1 pour le modèle à trois couches.

Couche wiki (markdown L2)

FonctionnalitéStatutSourceAncre doc
WikiPageStore (écritures idempotentes par hash de corps, parseur de frontmatter)MD0architecture.md § Module map
WikiLayerProjector — une page md par nœud de la couche wikiMD0architecture.md § Pipeline
Pages sources/wiki_projector.pyfrontend-redesign.md § Sources
Pages concepts/wiki_projector.pyfrontend-redesign.md § Concepts
Pages entities/wiki_projector.pyfrontend-redesign.md § Entities
Pages papers/wiki_projector.pyfrontend-redesign.md § Papers
Pages repos/wiki_projector.pyfrontend-redesign.md § Repos
Pages topics/wiki_projector.pyfrontend-redesign.md § Topics
Pages questions/ (questions ouvertes)wiki_projector.pyfrontend-redesign.md § Questions
Pages syntheses/MD0frontend-redesign.md § Syntheses

Types de synthèse (L2 → dérivé)

SynthesisProjector produit sept modèles déterministes et ajoute des nœuds Synthesis + des arêtes synthesizes / summarizes en retour dans le graphe.

TypeStatutSourceNotes
pulse (un global, anime /)synthesis.pyReconstruit à chaque compilation.
daily_digestsynthesis.pyUn par data/research/daily/<date>/.
weeklysynthesis.pyUn par data/research/weekly/<iso-week>/.
topicsynthesis.pyUn par cluster ResearchTopic / ApproachFamily ≥ 3 papers.
comparisonsynthesis.pyUn par paire d’ApproachFamily en concurrence sur la même tâche.
field_overviewsynthesis.pyUn par ResearchField.
Résumés améliorés par LLM (drapeau env)hook seulementLa ligne de base heuristique est livrée ; le hook TESSERAE_SYNTHESIS_LLM=1 reste un stub.

Routes du site statique

RouteStatutSourceNotes
/ (accueil, hero pulse)MD0 render_homeRangée de stats + points d’entrée choisis + activité récente.
/sources/, /sources/<slug>.htmlpages.py::render_sources_index, render_source_detail
/concepts/, /concepts/<slug>.htmlpages.py::render_concepts_index, render_concept_detail
/entities/, /entities/<slug>.htmlpages.py::render_entities_index, render_entity_detail
/papers/, /papers/<slug>.htmlpages.py::render_papers_index, render_paper_detail
/repos/, /repos/<slug>.htmlpages.py::render_repos_index, render_repo_detail
/topics/, /topics/<slug>.htmlpages.py::render_topics_index, render_topic_detail
/syntheses/, /syntheses/<slug>.htmlpages.py::render_syntheses_index, render_synthesis_detail
/questions/, /questions/<slug>.htmlpages.py::render_questions_index, render_question_detail
/timeline/pages.py::render_timelineHeatmap + liste des jours + rail de synthèses.
/timeline/<YYYY-MM-DD>.html (détail par jour)pas encoreLes cellules de la heatmap lient vers la page source digest.md du jour en intérim. Le sous-agent P câble les pages de détail par jour via StaticSiteBuilder.
/graph/ (2D + 3D interactif)pages.py::render_graph_view + js.py3d-force-graph + Three.js, infobulles au survol, étiquettes d’arêtes, zoom ancré au curseur.
/about.htmlpages.py::render_aboutSchéma, infos de build.

Exports adaptés aux IA

ArtefactStatutSourceObjet
Sibling <page>.txt par pageMD0 write_siblingsVue texte brut d’une page (sans nav, sans style).
Sibling <page>.json par pageexports.py::write_siblings{title, kind, body, body_text, links, source_path, frontmatter}.
llms.txtexports.py::render_llms_txtIndex court llmstxt.org.
llms-full.txtexports.py::render_llms_full_txtLe corps de chaque page, plafonné à 5 Mo.
graph.jsonldexports.py::render_graph_jsonldDataset schema.org, nœuds de la couche wiki uniquement.
graph.json__init__.py::write_sitePayload complet du graphe (y compris les nœuds de code pour l’outillage).
search-index.jsonMD0Palette + recherche de pages ; types de la couche wiki uniquement.
sitemap.xmlexports.py::render_sitemap_xmlChaque route émise, lastmod depuis le frontmatter.
rss.xmlexports.py::render_rss_xmlLes 30 dernières synthèses.
robots.txtexports.py::render_robots_txtPermissif — crawl + index.
ai-readme.mdexports.py::render_ai_readmePlan du site lisible par machine.
manifest.json__init__.py::_manifestsha256 + taille pour chaque fichier émis (harnais d’idempotence).

Design visuel + UX

FonctionnalitéStatutSourceNotes
Design tokens (thèmes clair + sombre, accent terracotta)MD0Un seul bundle CSS dans assets/style.css.
Bascule de thème (persistée, sans flash)MD0data-theme="dark" dans localStorage, appliqué avant le paint.
Palette de recherche (cmd+k / ctrl+k / /)js.pyCorrespondance floue sur search-index.json ; liste des pages récentes.
TOC droite collantepages.py + tokens.pyDesktop uniquement ; tiroir mobile via <details>.
Heatmap d’activité avec étiquettes de mois + jours de semainecomponents.py::heatmap_svgSVG sur 26 semaines, les cellules lient vers le digest.md du jour.
Sparkline (par concept/entité)components.py::sparkline_svgComptes de mentions hebdomadaires, 12 dernières semaines.
Coquille mobile (rail en tiroir, nav basse, typographie fluide)tokens.py + pages.pyCibles tactiles ≥ 44 px.
Transitions de page (opacité 120 ms, prefers-reduced-motion)tokens.py
Vue graphe 3D + 2D (survol, étiquettes d’arêtes, zoom ancré au curseur)pages.py::render_graph_view + js.py3d-force-graph + Three.js, vendoré comme snapshot CDN.
Pied de page des siblings IA par pagecomponents.py::ai_siblings_footerLiens inline vers le .txt et le .json de la page courante.
Pages d’historique des sessions de harnessMD0 + MD1Import Claude Code/Codex explicite ; index /sessions/ et pages de détail avec tours en markdown, rail de tours à gauche, usage d’outil replié et entrées de recherche.

Pipeline + CLI

FonctionnalitéStatutSourceNotes
project compile appelle synthèse + wiki + site dans l’ordreMD0Phase 3 du plan de refonte.
project build-site autonomeproject.py + MD1Lit wiki/ + graph.json, écrit site/.
project serve HTTP localcli.pyServeur stdlib simple.
project deploy → GitHub PagesMD0Push par worktree vers gh-pages ; --enable-pages optionnel via la CLI gh. --build, --dry-run, --branch, --remote, --force.
project sessions discover/import/listMD0 + cli.pyHistorique de sessions entrant pour Claude Code/Codex ; la découverte est explicite et limitée au répertoire de travail du projet.
project watch reconstruction au changementMD0 + MD1Watcher autonome par sondage : --interval, --debounce, --once, --paths, --quiet. Le superviseur multi-sources vit sous project engine/daemon (voir Moteur de contexte).
project context — compiler un doc de contexte citécli.py + MD1Vedette du pilier 3 ; voir la section Moteur de contexte.
project refresh / project engine / project daemoncli.py + MD1Chaîne de refresh en prose + boucle superviseur ; voir la section Moteur de contexte.

Fonctionnalités préexistantes (reportées telles quelles)

CLI et installation

  • ✅ Paquet Python installable via pyproject.toml.
  • ✅ Commandes console : tesserae, tesserae, tesserae_mcp.
  • scripts/install.sh pour l’installation curl | bash.
  • ✅ Installations éditables par défaut pour un développement local rapide.

Extraction

  • ✅ Extracteur déterministe de notes de recherche avec vocabulaires contrôlés de nœuds/arêtes.
  • ✅ Extracteur Claude CLI/OAuth pour une extraction structurée de meilleure qualité sans clés API.
  • ✅ Routage Claude sélectif par glob et limite de budget.
  • ✅ Extracteur déterministe de code de développement pour les projets Python.
  • ✅ Ingestion par lot avec hachage de contenu et prise en charge de --changed-only.
  • ✅ Lecture de sources tolérante à l’UTF-8 malformé.

Gouvernance du graphe

  • ✅ Liste ResearchNodeType contrôlée — inclut désormais SYNTHESIS.
  • ✅ Liste blanche de types d’arêtes contrôlée — inclut désormais synthesizes, summarizes.
  • ✅ Validation pour rejeter la dérive de schéma.
  • ✅ Canonicalisation des alias.
  • ✅ File de revue pour les nœuds quasi-doublons ambigus.
  • ✅ Modèle de décisions de revue et workflow fusionner/garder-séparé.
  • ✅ Synthèse des tendances du corpus depuis les graphes par fichier.

Persistance et rapports

  • ✅ Export JSON du graphe.
  • ✅ Store de graphe SQLite.
  • ✅ Store de graphe Kuzu optionnel.
  • ✅ Rapport de graphe avec comptes, couverture de preuve, nœuds orphelins, buckets de dates, nœuds riches en alias.
  • ✅ Rapport concurrentiel décrivant les idées absorbées de MegaMem, Graphiti/Zep, serveurs de graphe MCP, RAG agentique.

Workflow local au projet

  • tesserae init --bare
  • tesserae compile <paths>
  • tesserae compile
  • tesserae projects mcp-config
  • tesserae export site
  • tesserae serve
  • tesserae export site --deploy (GitHub Pages)
  • tesserae sessions discover/import/list (import explicite d’historique d’agent local)
  • tesserae export site --watch (watcher autonome par sondage)
  • tesserae engine (boucle superviseur — v0.5.0)
  • tesserae refresh (chaîne en prose ingest → compile → project — v0.5.0)
  • tesserae context (compilateur de contexte à la demande — v0.5.0)
  • tesserae export harness
  • tesserae vault export
  • tesserae export graphiti
  • tesserae export graphiti --sync

Obsidian

  • ✅ Export de vault prêt à ouvrir.
  • .obsidian/app.json et réglages du graphe.
  • ✅ Projection markdown.
  • ✅ Structure raw/assets/.
  • _meta/dashboard.md avec requête Dataview.

Harness d’agents

Fichiers cibles générés pour :

  • ✅ Claude Code : CLAUDE.md, .claude/settings.json
  • ✅ Codex : AGENTS.md, mcp.toml
  • ✅ Gemini : GEMINI.md, .gemini/settings.json
  • ✅ Kiro : steering et réglages MCP
  • ✅ Cursor : règles de projet et config MCP
  • ✅ OpenCode : AGENTS.md, opencode.json

Graphiti / faits temporels

  • ✅ Projection de faits temporels avec provenance, actualité, confiance et champs d’invalidation.
  • ✅ Export JSONL d’épisodes Graphiti sans dépendance.
  • ✅ Test à blanc sync-graphiti --dry-run sans Graphiti installé.
  • ✅ Sync en direct optionnelle avec graphiti_core et Neo4j.

Serveur MCP

  • tesserae_mcp / python3 -m tesserae.mcp_server en JSON-RPC sur stdio.
  • ✅ Outils de récupération/graphe : schema, graph_summary, search_nodes, node_context (avec use_ppr), search_facts, timeline, graph_ppr, wiki_page, raw_source, lint_report, doctor_report.
  • ✅ Outils du moteur de contexte (v0.5.0) : compile_context, embedding_status, fresh_insights (classés par décrue), list_communities, find_session_findings, find_code_symbol_mentions, ask.
  • ✅ Outils de setup : tesserae_setup_plan, tesserae_setup_apply.
  • ✅ Registre multi-projets : list_projects, register_project, unregister_project, list_sessions. Dispatch d’URL de store via url_resolver.

Tests

La suite actuelle couvre :

  • ✅ garde-fous d’ontologie (y compris le nouveau nœud Synthesis + les arêtes synthesizes / summarizes) ;
  • ✅ extraction déterministe ;
  • ✅ parsing/validation du wrapper Claude CLI ;
  • ✅ routage Claude sélectif ;
  • ✅ workflow canonicalisation/revue ;
  • ✅ ingestion par lot ;
  • ✅ rapports ;
  • ✅ persistance SQLite/Kuzu ;
  • ✅ export/sync Graphiti à blanc ;
  • ✅ workflow CLI projet ;
  • ✅ export de harness d’agent ;
  • ✅ export Obsidian ;
  • ✅ génération du frontend + intégrité des liens (pas de nodes/codeclass-*.html) ;
  • ✅ idempotence du store wiki ;
  • ✅ golden + idempotence du projecteur de synthèses ;
  • ✅ composants, pages, exports, pertinence du site ;
  • ✅ forme des siblings IA (.txt + .json par page) ;
  • ✅ idempotence compile-deux-fois de bout en bout ;
  • ✅ colonne vertébrale du moteur : pipeline, chaîne de refresh, cœur du daemon + sources, CLI project engine ;
  • ✅ mémoire d’auto-amélioration : sidecar, décrue/supplantation, suppression de supplantés (y compris MCP), renforcement/contradiction ;
  • ✅ récupération + embeddings : recherche hybride, PPR, vrais embeddings par défaut (Phase 6) ;
  • ✅ compilateur de contexte : forme/intégrité des citations/déterminisme/budget/repli PPR, CLI project context, MCP compile_context ;
  • ✅ compilation incrémentale (expérimental) : différenciateur, portes de parité, préparation de la provenance, provenance SQLite ;
  • ✅ installation du paquet et contrat de l’installeur.