release · v0.10.1

Le saut v0.8.1 → v0.10.1 enfin publié.

npm n'avait plus de release depuis v0.8.1 (janvier 2026). La v0.10.1 consolide 4 générations de travail jamais publiées : v0.9.1 (audit), v0.9.2 (durcissement), v0.10.0 (alignement claude-code), v0.10.1 (patch). Voici ce qui change concrètement pour toi.

sécurité · 01

Sandbox durci. 5 vecteurs d'évasion fermés.

Le sandbox est nettement plus dur à évader.

Avant (v0.8.1)
Maintenant (v0.10.1)
Chaîne this.constructor.constructor("…")() ouverte
Bloquée par analyseur statique (US-002)
git config / update-ref / reflog autorisés
Blocklistés — plus de compromission persistante via core.sshCommand (US-003)
Pas de garde symlink
isSymbolicLink() + vérif realpath sur chaque entrée, plus de cap de profondeur (US-004)
Race TOCTOU entre validate + open
Path validation re-résout au moment du open() (US-005)
Bypass env var DISTILL_LEGACY_EXECUTOR
Supprimé — QuickJS WASM est le seul executor, pas de toggle utilisateur
intégration · 02

Claude Code natif. Parallélisme réel.

C'est le plus gros gain fonctionnel — Distill parle maintenant la vraie langue de Claude Code :

  • annotations.readOnlyHint déclaré → Claude Code dispatche auto_optimize + smart_file_read en parallèle avec d'autres tools read-only sur un même tour. Gain wall-clock mesurable sur les tâches multi-tools.
  • _meta['anthropic/alwaysLoad'] = true correctement émis sur les 3 tools → pas de déférence ToolSearch, les tools sont présents dès le tour 1.
  • structuredContent retiré du wire → Claude Code le stashait dans mcpMeta qui n'est jamais envoyé à l'API Anthropic. Pure bande passante gâchée supprimée.
  • Nouveau : PreCompact hook + [DISTILL:COMPRESSED ratio=X.XX method=<name>] marqueur → tes régions compressées sont préservées verbatim pendant l'autocompact de Claude Code. Opt-in via DISTILL_COMPRESSED_MARKERS=1.
codebase · 03

Plus mince. Plus honnête.

  • ~3 600 LOC de dead code supprimées (import-graph + knip) : analyze-context.ts, dynamic-loader.ts, session-tracker.ts, toon-serializer.ts, le package @distill/ui entier, le package @distill/shared entier, src/middleware/ (313 LOC de dispatch chain inutile), etc.
  • CI avec 5 jobs parallèles bloquants : lint, typecheck, test+coverage, build, knip. Plus de continue-on-error: true.
  • Seuils de coverage enforcés : lines 70 %, branches 56 %, functions 70 %, statements 69 % (raisés de +1pt par v0.9.2). Build CI fail en dessous.
  • Documentation vérifiée citation par citation : 11 mécanismes claude-code chacun ancré sur claude-code/<path>:<line> dans CLAUDE.md, avec commande de re-vérif.
patch · 04

Bugs corrigés. v0.10.1.

  • code_execute({ code: 'console.log("x")' }) ne crash plus avec "Cannot read properties of undefined (reading 'match')". Un console.log sans return retourne maintenant success: true, tokensUsed: 0, output: "(no output)".
  • smart_file_read skeleton n'émet plus export async async createServer(...) sur les fonctions TS async.
invariants · 05

Ce qui n'a pas bougé. Par design.

  • Les 3 tools (auto_optimize, smart_file_read, code_execute) gardent exactement la même signature.
  • L'algo de compression, les parsers AST, le moteur sandbox sont inchangés.
  • Aucune breaking change pour les utilisateurs de v0.8.1 côté API.
bilan

Distill fait la même chose qu'en v0.8.1, mais plus vite (parallélisme natif), plus sûr (5 vecteurs d'évasion fermés), moins bavard (docs + codebase alignés sur la réalité), et avec un hook d'autocompact qui n'existait nulle part ailleurs dans l'écosystème MCP.

next

Prêt à mettre à jour ?

Une commande pour upgrade. Zéro breaking change.

Distill - Save 98% LLM Tokens with Smart Context Compression