- runner.rs: timeout 30s sur les commandes capturees (doctor ne pend plus) + pipes stdout/stderr draines dans des threads (anti-deadlock) ; run_untimed() pour les installations longues (npm/cargo/go) — sh() des installateurs l'utilise, les sondes gardent le timeout
- migrate_cmd.rs: rejet des chemins unsafe (path traversal) dans import_bundle
- process.rs: is_running Windows via OpenProcess/GetExitCodeProcess (fiable vs tasklist)
- probe.rs: drain des pipes en threads dans detect_external_version
- web.rs: boucle de traduction i18n (curseur, plus de boucle infinie si la traduction contient {{)
- serve.rs: frames WebSocket RFC 6455 avec vraies longueurs > 125 octets (126/127)
- secrets.rs: index keyring serialise en JSON (cles contenant des virgules)
- sandbox.rs: tests sans fuite de TempDir (plus de mem::forget)
- version 1.1.6, man pages et ROADMAP maj
lazycodex (run: npx lazycodex-ai) et nanobot (run: python -m nanobot)
étaient déclarés « external » dès que npx/python étaient sur le PATH :
la sonde utilisait le premier mot de run au lieu du vrai binaire.
- AgentDef.detect : sonde PATH explicite, repli sur first_token sinon
- probe.rs : cache invalidé quand les tokens du catalogue changent
(token_hash), plus besoin d'attendre un changement de PATH
- config.yaml : detect: lazycodex-ai / detect: nanobot
- tests : detect_token_prefers_explicit_binary + 432 tests verts
- v1.0.3, man pages régénérées