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("…")() ouverteBloquée par analyseur statique (US-002)
git config / update-ref / reflog autorisésBlocklisté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_EXECUTORSupprimé — QuickJS WASM est le seul executor, pas de toggle utilisateur
Claude Code natif. Parallélisme réel.
C'est le plus gros gain fonctionnel — Distill parle maintenant la vraie langue de Claude Code :
annotations.readOnlyHintdéclaré → Claude Code dispatcheauto_optimize+smart_file_readen 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'] = truecorrectement émis sur les 3 tools → pas de déférence ToolSearch, les tools sont présents dès le tour 1.structuredContentretiré du wire → Claude Code le stashait dansmcpMetaqui 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 viaDISTILL_COMPRESSED_MARKERS=1.
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/uientier, le package@distill/sharedentier,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.
Bugs corrigés. v0.10.1.
code_execute({ code: 'console.log("x")' })ne crash plus avec "Cannot read properties of undefined (reading 'match')". Unconsole.logsans return retourne maintenantsuccess: true, tokensUsed: 0, output: "(no output)".smart_file_readskeleton n'émet plusexport async async createServer(...)sur les fonctions TS async.
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.