5.3 KB · updated 2026-07-31 · md

v0.25.0.fr.md

docs/i18n/release-notes/v0.25.0.fr.md

Tesserae v0.25.0 — Descent : naviguer dans n'importe quel graphe au sein d'une seule fenêtre de contexte

<!-- translations:start -->

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

<!-- translations:end -->

Publié 2026-07-24 · PyPI · GitHub release · pip install --upgrade tesserae==0.25.0

Un graphe de projet compilé finit par dépasser toute fenêtre de contexte — le projet de référence se sérialise désormais en 2,5 M de tokens, soit 12× une fenêtre de 200k, et il continue de croître. La récupération à plat peut trouver un nœud, mais un agent n'a jamais pu survoler le graphe : le seul aperçu borné était la couche de résumés la plus grossière, à 47 communautés, et tout ce qui se trouvait en dessous restait invisible. Cette version livre Descent : la hiérarchie comme contrat au moment de la requête, pour qu'un agent puisse naviguer d'une vue d'ensemble du graphe entier jusqu'à un nœud unique en une poignée d'appels bornés — quelle que soit la taille du graphe.

1 · graph_map — un seul outil de descente pour tous les graphes

Un nouvel outil MCP, graph_map(scope, budget_chars, cursor), ramène chaque source de connaissance à la même chose : un arbre de scopes servi en cartes calibrées au budget. Sans scope, il renvoie la carte racine — comptages du graphe, avertissements de hubs et cartes des communautés les plus grossières. Un id de communauté descend d'un niveau dans le dendrogramme ; le niveau le plus fin liste les nœuds membres. agent:<key> rend l'index L1 distillé d'un agent, org:root l'arbre d'organisation des agents, et <alias>:: la carte d'un projet frère — mêmes cartes, même protocole, aucun cas particulier. Chaque carte porte parent_scope, donc remonter n'est qu'un appel graph_map de plus, et les niveaux trop volumineux se paginent de façon déterministe (+N more, cursor=K) au lieu de tronquer silencieusement.

2 · La hiérarchie a toujours été là — désormais elle est conservée

Louvain calcule déjà un dendrogramme complet à chaque compilation ; nous en utilisions un niveau et jetions le reste. La compilation persiste maintenant l'intégralité dans un sidecar .tesserae/hierarchy.json — 4 niveaux sur le graphe de référence — comme fonction pure et déterministe du contenu du graphe : seed fixe, ordre canonique, zéro appel LLM, à 5k comme à 1M de nœuds. Les octets de graph.json restent intacts, la parité complet-vs-incrémental vérifie désormais des dendrogrammes identiques à chaque niveau, et les caches de résumés de communautés périmés sont purgés selon la vivacité de tous les niveaux.

3 · CTX-01 — aucune réponse d'outil ne dépasse jamais son budget

Un unique helper fit_to_budget borne désormais chaque réponse MCP : plafonds par entrée, admission déterministe, une seule ligne de continuation. Les outils capables d'inonder une session sont corrigés — query_decisions et find_session_findings gagnent des paramètres limit, list_communities renvoie un compte de membres plus un handle au lieu de milliers d'ids bruts, search_nodes/node_context/timeline/search_facts tronquent élément par élément. Le coût d'une session vaut désormais depth × budget — indépendant de la taille du graphe.

4 · Les résumés apparaissent là où vous regardez vraiment

Les communautés de niveau fin reçoivent leurs titres paresseusement : la première descente dans un scope non résumé déclenche un appel LLM, mis en cache par digest d'appartenance ; sans client, on retombe sur un titre structurel déterministe — jamais bloquant, jamais d'exception. Les prompts de résumé-de-résumés sont validés par citation (une prose qui ne cite aucune communauté enfant est rejetée), donc les niveaux supérieurs ne peuvent pas dériver de ce qu'ils résument. Le cycle de sommeil du daemon gagne une troisième opération, SUMMARIZE, qui préchauffe les caches des communautés que les agents visitent réellement — en dépensant un budget LLM borné par tick, proportionné à la demande et non à la taille du corpus.

5 · Compilation hiérarchique du contexte

compile_context apprend scope=<community> — récupération restreinte au sous-graphe induit d'une communauté, ce qui tue structurellement l'explosion des hubs — et strategy="hierarchical" : matcher d'abord la couche de résumés, descendre dans les branches retenues, puis exécuter PPR à l'intérieur. La projection PPR gagne un plafond de degré derrière un flag et une dépondération des arêtes de provenance pour désamorcer les méga-hubs. Les chemins par défaut restent byte-identiques ; les deux fonctionnalités sont opt-in en attendant leur A/B.

Mise à niveau

pip install --upgrade tesserae==0.25.0

Recompilez une fois pour écrire le sidecar de hiérarchie, puis demandez à votre agent d'appeler graph_map() — le graphe entier, une page bornée à la fois.