Changelog
Version history and changes for Zé Papagaio.
v0.1.29latest2026-04-27
- •🐛 L'installateur continuait à sortir silencieusement à 'Vérification des ports nécessaires...' — dans 3 points supplémentaires non couverts par le fix de 0.1.28. Le bug de propagation de `set -e` en bash 3.2 macOS apparaissait dans populate_docker_ps_cache (`[ "$ZE_DOCKER_PS_CACHE_LOADED" = "1" ] && return 0` échouait au premier appel, touchant CHAQUE installation fresh), dans find_existing_vaults (même forme, touche les utilisateurs sans vault Obsidian préalable), et dans la for-loop de réutilisation des ports lisant CONFIG_ENV (`__existing=$(grep | pipe)` avec pipefail abandonnait quand grep ne trouvait pas la clé). Tous remplacés par `if cmd; then return 0; fi` + `|| true` sur le pipe. Bonus : ajouté guard `prepublishOnly` dans npm-wrapper qui rejette le publish si une régression des 2 patterns connus est détectée.
v0.1.282026-04-27
- •🐛 L'installateur sortait silencieusement sur macOS quand le premier port par défaut était occupé — bug critique non couvert par 0.1.27. check_port_free utilisait `cmd; return $?` — en bash 3.2 macOS (défaut /bin/bash), set -e se propage dans les fonctions appelées en if, comportement historique différent de bash 4+/5. Quand python3 socket.bind retournait != 0 (port occupé), le script abandonnait avant d'atteindre return $? — l'utilisateur voyait 'sortie silencieuse pendant le scan de ports'. Bash 4+ n'a pas ce comportement, c'est pourquoi ça passait sur Linux. Fix : remplacé `cmd; return $?` par `if cmd; then return 0; else return 1; fi` (forme POSIX, capture exit code dans toute version de bash). Reproduit et validé.
v0.1.272026-04-27
- •🐛 Le pre-flight des ports se figeait sur macOS avec Docker Desktop en réveil lent. En 0.1.26, is_our_container_on_port appelait docker ps par port testé — et find_free_port scanne jusqu'à 100 alternatives par service × 6 services = jusqu'à 600 appels dans le pire des cas. Sur macOS avec Docker Desktop endormi (1-2s/appel), le pre-flight restait bloqué 10-20 min. Fix : docker ps mis en cache une seule fois, avec timeout de 3s via polling kill -0 (portable vers bash 3.2 macOS, sans dépendance au timeout de coreutils). Bonus : indicateur de progression (. tous les 10 ports testés) dans find_free_port pour que personne d'autre ne pense que c'est figé.
v0.1.262026-04-24
- •🚀 Vérification préalable des ports dans install.sh : avant de lancer Redis/Neo4j/MinIO/Infinity, vérifie que le port par défaut est libre. En cas de conflit, propose le prochain port libre (accepte O/n/port custom) ou choisit automatiquement avec --auto-port. Les compose.yml lisent maintenant ${ZE_REDIS_PORT:-6379}, etc., en conservant le choix dans ~/.config/zepapagaio/env. Nouvelle commande ze portas (alias ports) liste tous les ports actuels et met en évidence ceux qui divergent du défaut.
v0.1.252026-04-23
- •✨ Deux nouvelles skills dans seeds/skills-library/ : bash-portability-macos (10 pièges concrets quand les scripts bash traversent Linux↔macOS — bash 3.2, BSD vs GNU, flock keg-only, get.docker.com, emoji 4-bytes, locale, etc) et docker-multi-arch-and-rosetta (gestion d'images amd64-only sur Apple Silicon, docker manifest inspect, platform override, quand Rosetta vaut le coup). Disponibles via skill-autopilot sur toute installation fraîche.
v0.1.242026-04-23
- •🔧 docker compose up échouait sur Apple Silicon avec 'no matching manifest for linux/arm64/v8' car michaelf34/infinity:latest-cpu n'a que le build amd64. Ajouté platform: linux/amd64 au compose du rag — OrbStack/Docker Desktop tournent via Rosetta 2 sur Macs ARM, perte de perf ~2-3x mais imperceptible pour usage personnel.
v0.1.232026-04-23
- •🔧 pipx introuvable tuait l'installation du composant testing sur macOS. Maintenant appelle pkg_install pipx (brew sur mac, apt/dnf/pacman sur Linux) avec fallback vers python3 -m pip install --user pipx + export PATH pour environnements sans gestionnaire de paquets.
v0.1.222026-04-22
- •🔧 Cause racine trouvée pour la bannière vide sur macOS : assigner un emoji littéral 4-bytes (PARROT_INLINE="🦜") en bash 3.2 sous LC_CTYPE=C peut produire une chaîne vide. 🦜 est U+1F99C (hors BMP, 4 bytes UTF-8) — le /bin/bash de macOS ne préserve pas ces bytes dans les affectations littérales quand la locale est C. Node spawn peut hériter de LC_CTYPE=C même si le terminal est UTF-8. Fix : définir via printf '\xf0\x9f\xa6\x9c' (bytes hex bruts), indépendant de la locale.
v0.1.212026-04-22
- •🔧 La bannière affichait $PARROT_INLINE vide sur macOS. La détection 0.1.20 utilisait elif case ... esac; then inline — syntaxe que bash 3.2 (toujours par défaut dans /bin/bash sur macOS) parse de façon imprévisible. Réécrit en bash 3.2-proof avec fallback explicite > pour que la variable ne soit jamais vide.
v0.1.202026-04-22
- •🔧 La bannière retombait sur le fallback ASCII > au lieu de 🦜 même sur Mac. L'ancienne détection exigeait 3 conditions (TTY + locale charmap + LANG), et via npx le pipe Node cassait le check isatty. Fix : macOS utilise toujours l'emoji (Terminal.app/iTerm2/Warp le rendent nativement depuis ~2010); Linux garde la détection par locale.
v0.1.192026-04-22
- •🔧 La bannière affichait $PARROT_INLINE littéralement au lieu de l'emoji 🦜. Le heredoc était entre guillemets simples (<<'EOF'), bloquant l'expansion des variables en bash. Remplacé par <<EOF — affiche maintenant 🦜 (ou > sur les terminaux sans emoji).
v0.1.182026-04-22
- •🔧 macOS : date -Iseconds n'existe pas dans BSD date. Remplacé par date -u +%Y-%m-%dT%H:%M:%SZ dans install.sh et scripts/ze — produisait silencieusement un timestamp cassé.
- •🔧 macOS : sed -i 'X' file est incompatible avec BSD sed (BSD exige sed -i '' 'X' file). La réécriture de OBSIDIAN_API_KEY échouait sur macOS. Remplacé par grep -v + mv, fonctionne à l'identique sur GNU et BSD.
v0.1.172026-04-22
- •🔧 macOS : l'installation appelait curl get.docker.com | sh, qui ne fonctionne que sur Linux. Détection de macOS et affichage des deux options : OrbStack (brew install --cask orbstack) ou Docker Desktop (brew install --cask docker). Ni l'un ni l'autre ne peut être 100% automatisé sur macOS — tous deux exigent l'acceptation d'une licence et le lancement de l'application pour démarrer le daemon.
- •🔧 macOS : la vérification du plugin docker compose essayait de télécharger le binaire Linux. Docker Desktop et OrbStack incluent docker compose. Si absent sur macOS, le message indique maintenant 'app non lancée, ouvrez Docker Desktop/OrbStack'.
- •🔧 macOS : le fallback 'docker non lancé' appelait systemctl start docker, qui n'existe pas sur macOS. Message adapté à la plateforme.
v0.1.162026-04-22
- •🔧 macOS Apple Silicon : l'installation échouait avec 'Falha ao instalar flock'. Homebrew installe util-linux en keg-only (binaires dans /opt/homebrew/opt/util-linux/bin, pas dans le PATH) pour éviter un conflit avec le uuid.h natif de macOS. L'installateur détecte désormais macOS et ajoute le keg-only au PATH de la session.
- •🔧 flock est maintenant optionnel. S'il n'est pas disponible, l'installation continue avec un avertissement et vault-autocommit fonctionne sans verrou — git commit est atomique, au pire un commit redondant. git, curl, python3 restent obligatoires.
v0.1.152026-04-22
- •✨ Nouveau fournisseur d'embeddings par défaut : Infinity local. Conteneur Docker exécutant intfloat/multilingual-e5-small (384 dim, multilingue), sans clé, sans coût, hors ligne. La recherche sémantique est désormais 100% locale par défaut.
- •L'installateur demande maintenant quel fournisseur d'embeddings utiliser : Infinity local (par défaut) ou OpenAI. Si Infinity est choisi, OPENAI_API_KEY devient optionnelle (seul le composant multimodal en a besoin).
- •🔧 install.sh est maintenant idempotent face aux conteneurs orphelins — exécute docker compose down --remove-orphans avant up. Résout les conflits de nom lorsqu'une installation précédente a été interrompue.
- •🔧 server.py n'ajoute plus automatiquement /v1 à ZE_EMBED_BASE_URL. L'utilisateur passe le chemin exact attendu par le fournisseur (Infinity v2 : sans /v1 ; OpenAI : https://api.openai.com/v1). Permet de pointer vers Ollama, LocalAI et autres backends compatibles OpenAI sans surprise.
v0.1.142026-04-22
- •🔒 Security: Neo4j was previously bound to 0.0.0.0 despite docs stating loopback-only. Fixed in components/graph/docker-compose.yml — both ports (7474, 7687) now bind to 127.0.0.1, matching Redis and MinIO. Users running 0.1.13 or earlier on untrusted networks (cafés, coworking WiFi) should update immediately.
- •Added SECURITY.md with coordinated disclosure channel, supported versions, and known limitations (including the user-wide hook scope caveat).
- •Added CHANGELOG.md (this file) and repository/bugs fields in package.json for vendor auditability.
- •🙏 Thanks to Pedro Ernesto (SOC 2 analyst) for the comprehensive security review that made this release possible.
v0.1.132026-04-13
- •Python 3.14 compatibility: pysqlite3-binary now uses a conditional marker (`python_version < '3.14'`). On 3.14+ the code falls back to stdlib sqlite3 — modern Pythons already ship with enable_load_extension. Before this fix, initial vault indexing would fail on Macs running Python 3.14 because pysqlite3-binary only has wheels up to cp313.
v0.1.122026-04-13
- •Neo4j auto-recovery fixed: component bind mount (not a named volume) is now actually cleaned when credentials go stale
- •Post-boot auth check via cypher-shell: if the .env password does not match the one persisted in the volume (Neo4j ignores NEO4J_AUTH on non-empty volumes), the installer resets and restarts automatically
v0.1.112026-04-13
- •Auto-recovery: install.sh detects containers in bad state (crashed, volumes with stale credentials) and cleans them up before reinstalling
v0.1.102026-04-13
- •Neo4j password is now generated automatically (32 chars), like Redis and MinIO — no more confusing "will be created now" prompt
v0.1.92026-04-13
- •Neo4j password validation: requires a minimum of 8 characters (Neo4j rejects shorter passwords and would crash the container)
v0.1.82026-04-13
- •Neo4j startup timeout bumped from 60s to 180s (first boot on Mac Docker Desktop takes longer due to virtualization)
- •Heartbeat every 30s while waiting for Neo4j, with dead-container detection to avoid unnecessary waits
v0.1.72026-04-13
- •macOS bash 3.2 compatibility: fixed "unbound variable" error when no Obsidian vault was found
- •Removed `local` usage outside functions that broke the multi-vault selection flow
v0.1.62026-04-13
- •Parrot emoji 🦜 with automatic ASCII fallback for terminals without Unicode support
v0.1.52026-04-13
- •Auto-install dependencies: Docker, uv, Claude Code, Node.js, Obsidian — all installed automatically if missing
- •Automatic Obsidian vault creation: detects existing vaults or creates a new one with .obsidian/, plugins, git init, and welcome note
- •Fix: pysqlite3-binary fallback for Pythons without enable_load_extension (common on Ubuntu via apt)
- •Fix: autoMemoryDirectory now set in settings.json — Claude recognizes Zé after install
- •Post-install screen redesigned: parrot ASCII art, step-by-step usage tutorial, and useful commands
- •Default vault renamed to ~/cofre/ai-zepapagaio to avoid collision with existing vaults
v0.1.42026-04-12
- •macOS compatibility: fallback for realpath -m (GNU/Linux-only flag)
v0.1.32026-04-12
- •Install counter: anonymous ping at end of install, API on site, live display in hero
- •Site favicon replaced with green parrot icon (was Vercel default)
- •Nav reorganized: fewer items, no overflow, hamburger menu on mobile
- •Architecture diagram in docs replaced from ASCII to styled HTML cards
- •Docs and changelog are now fully multilingual (pt-BR + en complete)
v0.1.22026-04-12
- •Installer now detects Obsidian and auto-registers the obsidian MCP server
- •Skills section added to the website landing page
- •Documentation and changelog pages added to the site
v0.1.12026-04-11
- •60 seed skills shipped (API design, debugging, Next.js, security, and more)
- •Auto-index images: hook automatically indexes relevant images without asking
- •npm packaging — npx zepapagaio init now works out of the box
v0.1.0Phase 22026-04-11
- •Unified Docker Compose — all services in a single compose.yml
- •Cache layer: Redis for tool call, RAG, and GitHub API caching
- •Storage layer: MinIO with buckets for images (30d TTL), test artifacts, and vault attachments
- •Multimodal pipeline: screenshot → GPT-4o-mini description → vault note → RAG index
- •Testing: Robot Framework + headless Playwright in isolated container
- •New hooks: auto-extract graph entities, auto-index images
- •New CLI commands: ze cache, ze imagem, ze testa, ze parar, ze voltar
v0.0.1Phase 12026-04-10
- •vault-rag MCP: semantic search via OpenAI embeddings + sqlite-vec
- •vault-graph MCP: Neo4j knowledge graph with Cypher queries
- •Autocommit hook: automatic git commits on vault changes
- •CLI ze: ze status, ze lembra, ze puxa, ze grafo, ze desinstala, ze doctor
- •Seed memory files: initial notes for bootstrapping a new vault
- •Obsidian MCP integration (optional, requires Local REST API plugin)