Sobre el proyecto

dsh-sql es un plugin de base de datos para DSH (DeepSeek Harness), que permite al agente conectarse y operar bases de datos. Proporciona seis herramientas que cubren gestión de conexiones, consultas de solo lectura, operaciones de escritura, exploración de esquemas, resumen de estadísticas y autocomprobación de salud. Herramientas: - sql_list: lista las conexiones configuradas y realiza pruebas de conectividad. - sql_query: consulta de solo lectura, compatible con SELECT/PRAGMA/EXPLAIN/SHOW/DESCRIBE/WITH, utiliza lista blanca de palabras clave y rechaza múltiples sentencias. - sql_exec: operaciones de escritura y DDL, puede ejecutar scripts de múltiples sentencias, sujeto al interruptor readOnly y a la puerta de aprobación. - sql_schema: lista el inventario de tablas o muestra la estructura de una tabla específica; los nombres de tabla se verifican mediante una lista blanca de identificadores. - sql_stats: proporciona un resumen del número de tablas, filas y tamaño de la base de datos; los fallos de consulta están aislados entre sí. - sql_health: comprueba la actividad de cada conexión y verifica la configuración de seguridad; no muestra contraseñas. Motores y conexiones: SQLite utiliza node:sqlite integrado en Node 22.13+ con cero dependencias; MySQL utiliza un pool de conexiones mysql2; PostgreSQL utiliza un pool de conexiones pg. En la configuración se pueden declarar múltiples conexiones con nombre, especificando el motor y los parámetros de conexión para cada una. Si no se proporciona configuración, se crea una conexión SQLite :memory: por defecto; pero si la configuración existe y tiene un formato inválido, se produce un error y se detiene la carga, sin retroceder silenciosamente a la base de datos en memoria. Diseño de seguridad: - Protección de solo lectura a nivel léxico: sql_query primero elimina cadenas y comentarios antes de validar; rechaza CTE de modificación de datos (WITH…DELETE/UPDATE), SELECT INTO, FOR UPDATE/FOR SHARE, asignación de PRAGMA y múltiples sentencias. - Puerta de aprobación de escritura: sql_exec muestra una aprobación por defecto; en entornos headless sin canal de aprobación, rechaza la ejecución. - Modo readOnly: puede deshabilitar completamente las operaciones de escritura, adecuado para bases de datos de producción. - Limitación de filas en streaming: el iterador de SQLite, Readable de MySQL y los eventos de fila de PostgreSQL Query recopilan como máximo maxRows+1 filas; si se supera, se marca como truncated; MySQL y PostgreSQL cierran la conexión dedicada de esa consulta al alcanzar el límite, y si no se alcanza, devuelven la conexión al pool, evitando que todos los resultados permanezcan en memoria. - Ejecución cancelable: las consultas y operaciones de escritura respetan exec.signal de Harness; al cancelar, se interrumpe la espera y se destruyen las conexiones dedicadas de MySQL/PostgreSQL en uso. - Enteros grandes sin pérdida: bigint se emite como number dentro del rango seguro de enteros de JavaScript; fuera de ese rango se emite como cadena decimal, evitando la pérdida silenciosa de precisión. - Validación de identificadores: los nombres de tabla solo permiten letras, números y guiones bajos, para prevenir la inyección de esquema. - Las claves no se guardan en la configuración: las contraseñas se pueden proporcionar mediante la variable de entorno DSH_SQL_PASSWORD_nombre_conexión. Los elementos de configuración incluyen maxRows (límite de filas devueltas por consulta, 1-10000), queryTimeoutMs (tiempo de espera de una consulta, 60 segundos por defecto), execTimeoutMs (tiempo de espera de una operación de escritura, 120 segundos por defecto), readOnly y writeApproval. La instalación se realiza con dsh plugin --profile web add dsh-sql; tras desinstalarlo, debe reiniciarse el servicio web. El proyecto utiliza la licencia MIT; para el desarrollo se usa pnpm install y pnpm test (compilación más suite de pruebas completa, incluida la integración real con SQLite). La documentación del README ha sido verificada en @deepseek-ai/dsh@0.1.5-rc.1 oficial y Node 24.16.0, utilizando el modelo de paquete combinado cordis.patch.yml y dsh.bundle.patch.