Novedades
Novedades
Puede encontrar información más detallada sobre los cambios en cada versión directamente en GitHub Releases.
v3.0.0
- 🔑 Nuevo endpoint de inicio de sesión (breaking): el método JSON-RPC
get_jwtse sustituye porPOST /{prefix}/{database}/token, que recibe el login y la contraseña de PostgreSQL como autenticación HTTP Basic — las credenciales ya no viajan en el cuerpo de la petición y un proxy inverso puede limitar los inicios de sesión por URL.get_jwten/jsonrpcresponde ahora 404 /-32601. Migración:curl -X POST …/token -u login:password. - 📥 Descarga de archivos: el nuevo endpoint
POST /{prefix}/{database}/filesirve archivos binarios desde funciones de PostgreSQL que devuelven conjuntos de filas — una fila directamente, varias como ZIP en streaming — con la misma autenticación, cambio de rol y límite de tasa que JSON-RPC.capabilities()informakind: "file". Vuelva a aplicarsql/schema.sql(es idempotente) para obtener los nuevos campos. - 🧰 Herramientas: nuevo JWT Signer, que firma tokens localmente en el navegador a partir de un
JWT_SECRETintroducido a mano (sin acceso a la red, el secreto nunca se guarda), capturas de pantalla y versiones alojadas de todas las herramientas (explorer.,sse-tester.,jwt-getter.,jwt-signer.pgarachne.com), tarjetas clicables y enlaces cruzados. Las carpetas detools/pasan a llamarseexplorer,jwt-getterysse-tester: actualiceSTATIC_FILES_PATHsi las sirve. - 🐛 Correcciones y refuerzo: una función que devuelve
NULLde SQL ahora produce"result": nullen lugar de HTTP 500; las rutas ZIP de/filerechazan nombres hostiles de Windows y colisiones sin distinguir mayúsculas; los resultados vacíos se revierten. - 📚 Documentación y dependencias: Quick Start paso a paso, la página JSON-RPC como referencia pura, la decisión de arquitectura «Por qué PostgreSQL», guía de proxy inverso para descargas grandes y módulos de Go actualizados (actualización de seguridad de
golang.org/x/net).
v2.2.0
- 🔑 JWT opcional:
JWT_SECRETya no es obligatorio. Sin él, JWT queda desactivado (get_jwtdevuelve 404 /-32601) y los clientes usan credenciales HTTP Basic o tokens de API. - 🛡️ Límite de intentos para todos los métodos de autenticación (seguridad):
LOGIN_RATE_LIMITahora cubre también HTTP Basic y Bearer (JWT/token de API) en todos los endpoints, no sologet_jwt. Antes se podían adivinar contraseñas medianteAuthorization: Basicsin límite. - 🔒 Acceso gobernado solo por privilegios (breaking): se elimina
pgarachne.allowed_schemas().capabilities()(y con ello MCPtools/listy la exportación OpenAPI) lista toda funciónjsonbque quien llama puede ejecutar y cuyo esquema puede usar. RevoqueEXECUTE/USAGEdonde no se desee; consulte la página de Seguridad. - ⚠️ Otros cambios incompatibles:
save_idempotency_keyahora recibe un ámbito por rol (vuelva a aplicarsql/schema.sqlantes de actualizar el binario),universal_update/universal_deleterechazan filtros vacíos salvo que se pase"all": true, yuniversal_readsolo acepta*o nombres de columna simples enselect(cierra una vía de inyección SQL). - 🐛 Correcciones: interbloqueo de SSE al reconectar el listener, inicios de sesión lentos o con contraseña errónea que bloqueaban otras peticiones, renderizado de argumentos en MCP
prompts/get, un comentario de función mal formado que rompíacapabilities, resultados «falsy» mostrados como errores en el Explorer y un XSS en la vista de resultados del Explorer. - 📚 Documentación: nuevo
llms-full.txt, tarjeta de GitHub Sponsors, tooltips en los iconos de la barra de navegación; esta página ahora también incluye v2.0.3 y v2.1.0.
v2.1.0
- 📄 Exportación OpenAPI por método:
generate_openapi_spec()ahora también genera una ruta solo de documentación por cada método expuesto, para herramientas que esperan una operación por ruta (Swagger UI, Postman, generación de código). Un nuevo endpointopenapi.yamldevuelve la misma especificación en formato YAML. - 🔒 Exportación OpenAPI autenticada y filtrada por rol:
/openapi.jsonahora requiere la misma autenticación que/jsonrpcy solo lista los métodos que el rol del solicitante puede ejecutar — anteriormente el endpoint no requería autenticación y mostraba todos los métodos a cualquiera. - 🔌 Actualización del protocolo MCP: El endpoint MCP ahora habla exclusivamente la versión de protocolo
2026-07-28; el antiguo intercambioinitialize/pingya no es compatible. ConsulteAGENTS.mdpara la referencia completa. - 🐛 Corrección del pool de conexiones: Los pools de conexión de autenticación directa (Basic Auth) ahora se desalojan correctamente cuando están inactivos, corrigiendo un problema por el cual la rotación rutinaria de contraseñas podía eventualmente bloquear el acceso con credenciales nuevas.
- 📦 Actualizaciones de dependencias y CI: Actualización rutinaria de dependencias de Go (ahora requiere Go 1.26) y las correspondientes actualizaciones de herramientas de CI.
v2.0.3
- 🔒 Refuerzo de seguridad: El cambio de rol ya no construye SQL mediante concatenación de cadenas (en su lugar usa la función parametrizada
set_config()), el servicio de archivos estáticos ahora resuelve las rutas a través deos.Rootpara que un symlink no pueda escapar del directorio servido, se reforzaron los permisos de los archivos de registro/PID, y se aplicó una validación más estricta de los enlaces de resultados de búsqueda del sitio de documentación. - 🚀 Nueva página de Inicio Rápido (los 10 idiomas): Un camino rápido desde la instalación hasta un endpoint funcionando, sin el rodeo completo de Instalación/Configuración.
- 📄 Detectabilidad de
llms.txt: Enlazado desde la página de inicio, la página de MCP, el README y el encabezado de cada página, para que los rastreadores de LLM puedan encontrarlo. - 🐛 Correcciones: El interruptor del menú móvil ahora muestra correctamente un botón de Inicio funcional en pantallas anchas, los enlaces de la página 404 personalizada ahora se resuelven correctamente sin importar la profundidad de la URL, y el menú móvil obtuvo una entrada de «Inicio».
v2.0.2
- 🔒 Refuerzo de seguridad: Se cerraron varios hallazgos de análisis estático — las claves de caché del pool de autenticación directa ahora usan HMAC (en lugar de un SHA-256 simple), una comprobación explícita de contención para el servicio de archivos estáticos, escape HTML del texto de estado de inicio de sesión del SSE Tester, una lista blanca de esquemas de URL para los enlaces de resultados de búsqueda del sitio de documentación, y permisos de mínimo privilegio en el workflow de CI.
- 📦 Actualización de dependencias: Se actualizaron todas las dependencias de Go, incluyendo
gin-gonic/gina v1.12.0 ylib/pqa v1.12.3 (ahora requiere Go 1.25). - 🌐 3 idiomas nuevos: El sitio de documentación ya está disponible en polaco, ucraniano y griego — 10 idiomas en total.
v2.0.1
- 🔒 Corrección de seguridad: Se actualizó la dependencia transitiva de HTTP/3
quic-goa v0.59.1, cerrando una vulnerabilidad de expansión de trailers QPACK que podía permitir a un peer malicioso agotar la memoria del servidor o del cliente. - 🎨 Mejoras en el sitio de documentación: Nuevo selector de tema claro/oscuro/automático y selector de idioma solo con iconos, enlaces de icono a GitHub/Apoyo en la barra de navegación, corrección de los datos estructurados JSON-LD codificados por duplicado, y un
llms.txtampliado.
v2.0.0
- 🔒 Valores seguros por defecto (con cambios incompatibles):
DB_SSLMODEahora tiene por defectorequire,ALLOWED_ORIGINSya no usa*por defecto, yJWT_SECRETdebe tener al menos 32 bytes. Los despliegues existentes deben revisar su configuración antes de actualizar. - 🧹 Limpieza de elementos obsoletos: Se eliminaron las rutas de redirección
/api/…y/sse/…y el alias JSON-RPC obsoletologin. Use directamente/{prefix}/:database/…yget_jwt. - 🛡️ Autenticación y manejo de errores más estrictos: Un nuevo límite de inicio de sesión por IP (
LOGIN_RATE_LIMIT_PER_IP) cierra una brecha de credential spraying, y los errores de herramientas MCP ya no exponen texto de error de PostgreSQL sin procesar por defecto (puede reactivarse conMCP_SQL_ERROR_DETAIL). - ⚙️ Límites de conexión configurables: El límite del pool de conexiones de autenticación directa ahora es configurable mediante
DIRECT_POOL_LIMIT. - 🔑 Soporte para IdP externos (BYO JWT): Las nuevas opciones
JWT_ISSUER,JWT_AUDIENCEyJWT_LEEWAYvinculan los tokens emitidos a un emisor/audiencia específicos y permiten ajustar la tolerancia de desfase horario. - 🧰 Nuevas herramientas: Un JWT Getter (
/tools/get-jwt) y un SSE Tester (/tools/test-sse) independientes se unen al Explorador para pruebas manuales rápidas. - 🐛 Correcciones de fiabilidad: Se corrigió un cierre de SSE que podía quedar bloqueado y un error en la recuperación de conexiones muertas que podía dejar al servidor incapaz de reconectar con PostgreSQL.
- 🧪 Refuerzo de CI: Se añadieron
golangci-lint, el detector de carreras de Go ygovulnchecka cada build, junto con una mayor cobertura de pruebas. - 📦 Proceso de publicación: Se añadió
CHANGELOG.mdy se dividió el flujo de publicación enmake release-local(compilación y verificación) ymake release(etiquetado, publicación y actualización del tap de Homebrew).
v1.3.0
- 🌐 Explorador PgArachne – PWA moderno: Renovación visual y funcional completa – tema oscuro/claro (automático), diseño de tarjetas adaptable, resaltado de sintaxis JSON, botón de copiar al portapapeles, mejor UX de autenticación (pestañas de contraseña/token), soporte de instalación PWA (manifiesto, iconos, service worker), enlaces compartibles mediante el parámetro
?url=…. - 🛠️ Soporte para Model Context Protocol (MCP): Nuevo endpoint
/{prefix}/{db}/mcpcon métodos estándarresources/list,resources/read,prompts/list,prompts/get– completamente respaldado por funciones de PostgreSQL y reutilizando la autenticación y el cambio de roles existentes. - 🔧 Prefijo de API configurable: El valor predeterminado cambió a
/db/{database}/jsonrpcy/db/{database}/sse, las rutas antiguas/api/…y/sse/…se mantienen como redirecciones 307 por compatibilidad. Controlado mediante la variable de entornoAPI_PREFIX. - 🛡️ Protección de idempotencia: Campo opcional
idempotencyKeyen solicitudes JSON-RPC – detección automática de duplicados (HTTP 409 + código de error en caso de colisión) usandopgarachne.save_idempotency_key(). - 📚 Mejoras en la documentación: Nueva sección /tools/ con tarjetas (Explorador + próxima barra de herramientas para macOS), nueva página “Architectural Decisions”, SECURITY.md con instrucciones para reportar vulnerabilidades, mejor tipografía en todos los idiomas gracias a TypoLima, soporte mejorado para la página 404 en GitHub Pages.
- 📝 Cambio de nombre del método de inicio de sesión: El método JSON-RPC
loginpasó a llamarseget_jwt(el nombre antiguo se mantiene como alias obsoleto con advertencia en los registros). - 📊 Limpieza de registros (logging): Al registrar en un archivo, la consola muestra solo información mínima de inicio → salida más limpia en entornos de producción/docker.
v1.2.0
- 🛡️ Seguridad: La validación del token de acceso se realiza antes de establecer una conexión con la base de datos. Protección mejorada contra la suplantación de IP (añadida la configuración
TRUSTED_PROXIES) y ocultación de errores internos de la base de datos al usuario final. - 📊 Métricas aisladas: El endpoint de Prometheus
/metricsse trasladó de la API pública a su propio puerto seguro (por defecto, disponible solo en127.0.0.1:9090). - 📦 Nueva opción de instalación: El proyecto ahora tiene un tap de Homebrew oficial para macOS y Linux. Las compilaciones están firmadas y generadas a través de GoReleaser.
- 📚 Documentación rediseñada: Aspecto completamente nuevo basado en el framework Hugo. Se ha añadido búsqueda rápida de texto completo, opción de copiar código y ejemplos de despliegue en producción (Nginx hardening, BYO JWT).
- ⚙️ Gestión de demonio mejorada: Se agregó soporte para la configuración de la ruta personalizada de
PID_FILE.
v1.1.0
- 🔌 API unificada: Llamadas a través de
POST /api/<db>(el método invocado se especifica en el cuerpo JSON-RPC). - ⚡ Notificaciones en tiempo real: Nuevo endpoint
GET /sse/<db>?channels=...para escuchar eventos de la base de datos con soporte multicanal. - 📈 Observabilidad: Métricas detalladas de Prometheus para HTTP, auth, JSON-RPC y SSE.
- 🏋️ Gran mejora de estabilidad: Protección contra clientes lentos, tiempos de espera estrictos y limpieza automática de conexiones.