Changelog
Version history and changes for Zé Papagaio.
v0.1.29latest2026-04-27
- •🐛 El instalador seguía saliendo silenciosamente en 'Checando puertos necesarios...' — en 3 puntos más que quedaron fuera del fix de 0.1.28. El bug de `set -e` propagándose en bash 3.2 de macOS aparecía en populate_docker_ps_cache (`[ "$ZE_DOCKER_PS_CACHE_LOADED" = "1" ] && return 0` fallaba en la primera llamada, afectando TODA instalación fresh), en find_existing_vaults (misma forma, afecta usuarios sin vault Obsidian previo), y en el for-loop de reúso de puertos leyendo CONFIG_ENV (`__existing=$(grep | pipe)` con pipefail abortaba cuando grep no encontraba la clave). Todos cambiados por `if cmd; then return 0; fi` + `|| true` en el pipe. Bonus: agregado guard `prepublishOnly` en npm-wrapper que rechaza publish si detecta regresión de los 2 patterns conocidos.
v0.1.282026-04-27
- •🐛 El instalador salía silenciosamente en macOS cuando el primer puerto default estaba ocupado — bug crítico que 0.1.27 no cubrió. check_port_free usaba `cmd; return $?` — en bash 3.2 de macOS (default en /bin/bash), set -e se propaga dentro de funciones llamadas en if, comportamiento histórico distinto al bash 4+/5. Cuando python3 socket.bind retornaba != 0 (puerto ocupado), el script abortaba antes de alcanzar return $? — el usuario veía 'salida silenciosa durante el escaneo de puertos'. Bash 4+ no tiene ese comportamiento, por eso pasaba en Linux. Fix: cambió `cmd; return $?` por `if cmd; then return 0; else return 1; fi` (forma POSIX, captura exit code en cualquier versión de bash). Reproducido y validado.
v0.1.272026-04-27
- •🐛 El pre-flight de puertos se colgaba en macOS con Docker Desktop en wake-up lento. En 0.1.26, is_our_container_on_port llamaba docker ps por cada puerto probado — y find_free_port escanea hasta 100 alternativas por service × 6 services = hasta 600 llamadas en el peor caso. En macOS con Docker Desktop sleeping (1-2s/llamada), el pre-flight quedaba 10-20 min 'colgado'. Fix: docker ps cacheado una sola vez, con timeout de 3s via polling kill -0 (portable a bash 3.2 macOS, sin depender del timeout de coreutils). Bonus: indicador de progreso (. cada 10 puertos probados) en find_free_port para que nadie más lo interprete como colgado.
v0.1.262026-04-24
- •🚀 Pre-flight de puertos en install.sh: antes de subir Redis/Neo4j/MinIO/Infinity verifica si el puerto default está libre. Si hay conflicto, sugiere el siguiente puerto libre (acepta S/n/puerto custom) o elige automáticamente con --auto-port. Los compose.yml ahora leen ${ZE_REDIS_PORT:-6379} etc, persistiendo la elección en ~/.config/zepapagaio/env. Nuevo comando ze portas (alias ports) lista todos los puertos actuales, resaltando los que difieren del default.
v0.1.252026-04-23
- •✨ Dos skills nuevas en seeds/skills-library/: bash-portability-macos (10 trampas concretas al cruzar bash scripts Linux↔macOS — bash 3.2, BSD vs GNU, flock keg-only, get.docker.com, emoji 4-byte, locale, etc) y docker-multi-arch-and-rosetta (manejo de imágenes solo amd64 en Apple Silicon, docker manifest inspect, platform override, cuándo Rosetta vale). Disponibles vía skill-autopilot en cualquier install nuevo.
v0.1.242026-04-23
- •🔧 docker compose up fallaba en Apple Silicon con 'no matching manifest for linux/arm64/v8' porque michaelf34/infinity:latest-cpu solo tiene build amd64. Añadido platform: linux/amd64 al compose del rag — OrbStack/Docker Desktop corren vía Rosetta 2 en Macs ARM, pérdida de rendimiento ~2-3x pero imperceptible para uso personal.
v0.1.232026-04-23
- •🔧 pipx no encontrado mataba la instalación del componente testing en macOS. Ahora llama pkg_install pipx (brew en mac, apt/dnf/pacman en Linux) con fallback a python3 -m pip install --user pipx + export PATH para entornos sin gestor de paquetes.
v0.1.222026-04-22
- •🔧 Causa raíz encontrada del banner vacío en macOS: asignar un emoji literal de 4 bytes (PARROT_INLINE="🦜") en bash 3.2 con LC_CTYPE=C puede producir string vacío. 🦜 es U+1F99C (fuera del BMP, 4 bytes UTF-8) — el /bin/bash de macOS no preserva esos bytes en asignaciones literales cuando el locale es C. Node spawn puede heredar LC_CTYPE=C aunque la terminal sea UTF-8. Fix: setear via printf '\xf0\x9f\xa6\x9c' (bytes hex crudos), independiente del locale.
v0.1.212026-04-22
- •🔧 El banner mostraba $PARROT_INLINE vacío en macOS. La detección en 0.1.20 usaba elif case ... esac; then inline — sintaxis que bash 3.2 (aún default en /bin/bash de macOS) parsea de forma impredecible. Reescrito a código bash 3.2-proof con fallback explícito > para que la variable nunca quede vacía.
v0.1.202026-04-22
- •🔧 El banner caía en el fallback ASCII > en lugar de 🦜 incluso en Macs. La detección anterior exigía 3 condiciones (TTY + locale charmap + LANG), y al correr con npx la tubería de Node rompía el check isatty. Fix: macOS siempre usa emoji (Terminal.app/iTerm2/Warp lo renderizan nativamente desde ~2010); Linux sigue con detección por locale.
v0.1.192026-04-22
- •🔧 El banner mostraba $PARROT_INLINE literal en lugar del emoji 🦜. El heredoc estaba entre comillas simples (<<'EOF'), bloqueando la expansión de variables en bash. Cambiado a <<EOF — ahora renderiza 🦜 (o > en terminales sin emoji).
v0.1.182026-04-22
- •🔧 macOS: date -Iseconds no existe en BSD date. Reemplazado por date -u +%Y-%m-%dT%H:%M:%SZ en install.sh y scripts/ze — generaba timestamp roto en silencio.
- •🔧 macOS: sed -i 'X' file no es compatible con BSD sed (BSD necesita sed -i '' 'X' file). La reescritura de OBSIDIAN_API_KEY fallaba en macOS. Reemplazado por grep -v + mv, funciona igual en GNU y BSD.
v0.1.172026-04-22
- •🔧 macOS: la instalación llamaba curl get.docker.com | sh, que solo funciona en Linux. Ahora detecta macOS y muestra las opciones: OrbStack (brew install --cask orbstack) o Docker Desktop (brew install --cask docker). Ninguno se puede automatizar al 100% en macOS — requieren aceptar la licencia y abrir la app para que el daemon inicie.
- •🔧 macOS: la verificación del plugin docker compose intentaba descargar el binario Linux. Docker Desktop y OrbStack ya incluyen docker compose; si no está disponible en macOS, el mensaje ahora indica 'app no está corriendo, abre Docker Desktop/OrbStack'.
- •🔧 macOS: el fallback 'docker no corriendo' llamaba systemctl start docker, que no existe en macOS. Ahora muestra un mensaje acorde a la plataforma.
v0.1.162026-04-22
- •🔧 macOS Apple Silicon: la instalación fallaba con 'Falha ao instalar flock'. Homebrew instala util-linux como keg-only (binarios en /opt/homebrew/opt/util-linux/bin, no en PATH) para evitar un conflicto con el uuid.h nativo de macOS. El instalador ahora detecta macOS y agrega el keg-only al PATH de la sesión.
- •🔧 flock ahora es opcional. Si no está disponible, la instalación continúa con un aviso y vault-autocommit corre sin lock — git commit es atómico, en el peor caso hay un commit redundante. git, curl y python3 siguen siendo obligatorios.
v0.1.152026-04-22
- •✨ Nuevo proveedor de embeddings por defecto: Infinity local. Contenedor Docker ejecutando intfloat/multilingual-e5-small (384 dim, multilingüe), sin clave, sin coste, offline. La búsqueda semántica ahora es 100% local por defecto.
- •El instalador ahora pregunta qué proveedor de embeddings usar: Infinity local (predeterminado) u OpenAI. Si se elige Infinity, OPENAI_API_KEY pasa a ser opcional (solo el componente multimodal lo necesita).
- •🔧 install.sh ahora es idempotente frente a contenedores huérfanos — ejecuta docker compose down --remove-orphans antes del up. Resuelve conflictos de nombre cuando una instalación anterior fue interrumpida.
- •🔧 server.py ya no añade automáticamente /v1 a ZE_EMBED_BASE_URL. El usuario pasa la ruta exacta que el proveedor espera (Infinity v2: sin /v1; OpenAI: https://api.openai.com/v1). Permite apuntar a Ollama, LocalAI y otros backends compatibles con OpenAI sin sorpresas.
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)