Documentation / Fonctionnement

Compaction des sorties et stash

Mis à jour le

TL;DR — Une sortie passe par le masquage des secrets, un compacteur propre à la commande ou au format, puis un repli : ce qui dépasse encore 5 000 tokens environ est rangé en entier sur disque et remplacé par un aperçu avec un hash de 12 caractères pour `tokenade expand-ref`. La sortie ne revient jamais plus grosse que l'original.

Chaque sortie traitée par Tokenade suit le même circuit : les secrets sont masqués, un compacteur qui connaît la commande ou le format retire le bruit, et ce qui reste trop volumineux est replié en aperçu, tandis que l'original complet est conservé dans un stash local. L'agent voit l'aperçu et un hash qu'il peut interroger. Rien n'est perdu, et rien ne grossit.

Le circuit

  1. Capture. tokenade wrap exécute la commande (ou un hook reçoit le résultat de l'outil). Plafonds de capture : 16 Mo pour stdout et 4 Mo pour stderr.
  2. Masquage. Les identifiants et autres valeurs ressemblant à des secrets sont remplacés par <redacted> avant tout stockage ou affichage.
  3. Compaction. Un compacteur retire ce dont le modèle n'a pas besoin (voir plus bas).
  4. Repli et stash. Si le résultat dépasse encore le seuil, la sortie complète est écrite dans le stash et l'agent reçoit un aperçu replié avec un bandeau de récupération.
  5. Garde-fou. Si la version compactée devait être plus grosse que l'entrée, ce sont les octets bruts qui sont renvoyés.

Le choix du compacteur

Tokenade reconnaît la commande lancée et utilise un compacteur qui connaît sa sortie : git, cargo, npm, pytest, kubectl, docker, terraform et bien d'autres.

Quand la commande ne fait pas partie de celles qu'il connaît, Tokenade reconnaît plutôt le format de la sortie : JSON, YAML, CSV, XML, Markdown, diffs, traces de pile, tableaux, installations de paquets, logs, schémas, notebooks, entre autres. Le code source est renvoyé tel quel.

Vous pouvez ajouter vos propres règles en TOML ; voir compacteurs personnalisés.

Le repli et son bandeau

Quand la sortie dépasse encore le seuil après compaction, le texte complet part dans le stash et l'agent reçoit un court aperçu. Le bandeau indique combien a été replié et comment le récupérer :

[tokenade:seq 85479 tokens folded away; the stash holds the COMPLETE output — this blob is ~85690 tokens — too large to dump whole. recover with `tokenade expand-ref f6351f5ead9a` · `--prompt "q1, q2"` to ask (RAG, several at once) · `--grep <pat>` exact lines. Any other hash above covers only what was shown.]

Le hash compte 12 caractères hexadécimaux. Pour récupérer le détail, voir Récupérer une sortie repliée.

Seuils et limites

RéglageDéfautModifier avec
Seuil de stash, sortie de commande5 000 tokensTOKENADE_DISCLOSE_THRESHOLD
Seuil de stash, lecture de fichier25 000 tokensTOKENADE_READ_DISCLOSE_THRESHOLD
Répertoire du stash~/.cache/tokenade/stash/ sous Linux, le répertoire de cache de la plateforme ailleursTOKENADE_STASH_DIR
Taille maximale du stash2 Gio, les plus anciennes entrées supprimées d'abordTOKENADE_STASH_MAX_DIR_BYTES
Fichier de stash unique50 Mo
Durée de vie7 jours depuis la dernière utilisation

Combien garder : le mode de lecture

TOKENADE_READ_MODE règle la part d'une longue liste ou lecture qui reste en clair :

ModeEffet
aggressiveGarde moins en clair que le défaut
taskPar défaut
referenceGarde davantage en clair, pour configurations, schémas et diffs complets
entropyGarde les lignes les plus informatives, dans leur ordre d'origine

Un repli qui applique le mode l'indique dans son bandeau, par exemple [tokenade:git-ls-files·aggressive]. Tous les compacteurs n'appliquent pas le mode. tokenade read-mode affiche le mode actif.

Déduplication

Tokenade se souvient du contenu déjà livré. Quand le même fichier ou la même sortie revient inchangé, l'agent reçoit un court renvoi §ref:HASH§ au lieu du texte complet une seconde fois. Une interrogation identique répétée, comme vérifier en boucle l'état d'une compilation, reçoit une courte note « inchangé ».

Masquage des secrets

Tokenade masque les secrets connus dans toutes les sorties qu'il traite : en-têtes Authorization, affectations api_key= et *_TOKEN=, *_KEY=, *_SECRET=, clés AWS, GitHub, Stripe et d'autres fournisseurs, clés privées, numéros de carte et chaînes à forte entropie. Le masquage a lieu avant la déduplication et le rangement : le stash ne contient jamais ce qui a été masqué. Il continue même quand la compaction est désactivée ou que votre licence n'est pas active.

Si quelque chose est passé avant une mise à jour, tokenade scrub-cache réapplique les motifs à ce qui est déjà sur disque.

Ce qui n'est jamais fait

  • Une sortie n'est jamais agrandie : le garde-fou renvoie les octets bruts avec l'étiquette passthrough_inflated.
  • Les codes de sortie ne sont jamais modifiés.
  • tokenade read sur un fichier source le renvoie inchangé.
  • Les économies négligeables ne sont pas comptées (voir Comment les économies sont mesurées).

Voir aussi