Об этом проекте

dsh-sql — это плагин базы данных для DSH (DeepSeek Harness), позволяющий агенту подключаться к базам данных и управлять ими. Он предоставляет шесть инструментов, охватывающих управление соединениями, запросы только для чтения, операции записи, исследование структуры, обзор статистики и самодиагностику. Список инструментов: - sql_list: перечисляет настроенные соединения и выполняет тесты связности. - sql_query: запросы только для чтения, поддерживающие SELECT, PRAGMA, EXPLAIN, SHOW, DESCRIBE и WITH, с использованием белого списка ключевых слов и запретом на несколько инструкций. - sql_exec: операции записи и DDL, способные выполнять скрипты с несколькими инструкциями, ограниченные переключателем readOnly и шлюзом утверждения. - sql_schema: перечисляет таблицы или показывает структуру указанной таблицы, имена таблиц проходят проверку по белому списку идентификаторов. - sql_stats: предоставляет обзор количества таблиц, строк и размера базы данных, ошибки запросов изолированы друг от друга. - sql_health: проверяет работоспособность каждого соединения и настройки безопасности, не отображая пароли. Движки и соединения: SQLite использует встроенный в Node.js 22.13+ модуль node:sqlite, без зависимостей; MySQL использует пул соединений mysql2; PostgreSQL использует пул соединений pg. В конфигурации можно объявить несколько именованных соединений, указав для каждого движок и параметры подключения. Если конфигурация не предоставлена, по умолчанию создается соединение SQLite :memory:; однако если конфигурация существует и имеет недействительный формат, процесс загрузки немедленно завершается ошибкой, без тихого возврата к базе данных в памяти. Проектирование безопасности: - Лексическая защита только для чтения: sql_query сначала удаляет строки и комментарии перед проверкой, отклоняя CTE, изменяющие данные (WITH...DELETE/UPDATE), SELECT INTO, FOR UPDATE/FOR SHARE, присваивания PRAGMA и несколько инструкций. - Шлюз утверждения записи: sql_exec по умолчанию запрашивает утверждение; в безголовых (headless) средах без канала утверждения выполнение отклоняется. - Режим readOnly: позволяет глобально отключить операции записи, что подходит для производственных баз данных. - Ограничение количества строк в потоковом режиме: итератор SQLite, Readable MySQL и события строк Query PostgreSQL собирают максимум maxRows+1 строк, помечая результат как truncated при превышении лимита; MySQL и PostgreSQL закрывают выделенное соединение для запроса при достижении лимита, а при его недостижении возвращают соединение в пул, предотвращая хранение полных результатов в памяти. - Отменяемое выполнение: запросы и операции записи следуют сигналу exec.signal из Harness, прерывая ожидание и уничтожая рабочие выделенные соединения MySQL/PostgreSQL при отмене. - Без потерь для больших целых чисел: bigint выводится как number, если находится в диапазоне безопасных целых чисел JavaScript, и как десятичная строка, если превышает его, избегая незаметной потери точности. - Проверка идентификаторов: имена таблиц допускают только буквы, цифры и подчеркивания, предотвращая инъекции в схему. - Секреты не хранятся в конфигурации: пароли могут предоставляться через переменные окружения DSH_SQL_PASSWORD_<имя_соединения>. Параметры конфигурации включают maxRows (лимит строк, возвращаемых запросом, 1-10000), queryTimeoutMs (таймаут одного запроса, по умолчанию 60 секунд), execTimeoutMs (таймаут одной операции записи, по умолчанию 120 секунд), а также readOnly и writeApproval. Способ установки: dsh plugin --profile web add dsh-sql. После удаления требуется перезапуск веб-сервиса. Проект лицензирован под MIT. При разработке используются команды pnpm install и pnpm test (сборка с полным набором тестов, включая реальную интеграцию с SQLite). В README указано, что проект проверен на официальной версии @deepseek-ai/dsh@0.1.5-rc.1 и Node 24.16.0, с использованием комбинированной модели пакетов cordis.patch.yml и dsh.bundle.patch.