このプロジェクトについて

dsh-sqlはDSH(DeepSeek Harness)向けのデータベースプラグインで、エージェントがデータベースに接続・操作できるようにする。接続管理、読み取り専用クエリ、書き込み操作、スキーマ探索、統計概要、ヘルスチェックをカバーする6つのツールを提供する。 ツール一覧: - sql_list:設定済み接続を一覧表示し、接続テストを実行。 - sql_query:読み取り専用クエリ。SELECT/PRAGMA/EXPLAIN/SHOW/DESCRIBE/WITHをサポートし、キーワードホワイトリストを使用して複数ステートメントを拒否。 - sql_exec:書き込み操作とDDL。複数ステートメントスクリプトを実行可能。readOnlyスイッチと承認ゲートの制約を受ける。 - sql_schema:テーブル一覧を表示、または指定テーブルの構造を表示。テーブル名は識別子ホワイトリストで検証。 - sql_stats:テーブル数、行数、データベースサイズの概要を提供。クエリ失敗は相互に分離。 - sql_health:接続ごとに死活監視とセキュリティ設定チェックを実行。パスワードは表示しない。 エンジンと接続:SQLiteはNode 22.13+組み込みのnode:sqliteを使用し、依存関係ゼロ。MySQLはmysql2コネクションプール、PostgreSQLはpgコネクションプールを使用。設定では複数の名前付き接続を宣言でき、それぞれエンジンと接続パラメータを指定可能。設定が提供されない場合、デフォルトで:memory: SQLite接続が1つ提供される。ただし、設定が存在し形式が無効な場合は、エラーを出して読み込みを停止し、メモリデータベースへのサイレントフォールバックは行わない。 セキュリティ設計: - 語彙レベル読み取り保護:sql_queryは文字列とコメントを除去してから検証し、データ変更CTE(WITH…DELETE/UPDATE)、SELECT INTO、FOR UPDATE/FOR SHARE、PRAGMA代入、複数ステートメントを拒否。 - 書き込み承認ゲート:sql_execはデフォルトで承認を要求。ヘッドレス環境で承認チャネルがない場合は実行を拒否。 - readOnlyモード:書き込み操作を全体として無効化可能。本番データベースに適する。 - ストリーミング行数制限:SQLiteイテレータ、MySQL Readable、PostgreSQL Query行イベントは最大maxRows+1行を収集し、超過時はtruncatedとマーク。MySQLとPostgreSQLは上限到達時にそのクエリ専用接続を閉じ、未到達時は接続プールに返却。全結果をメモリに保持しない。 - キャンセル可能な実行:クエリと書き込み操作はHarnessのexec.signalに従い、キャンセル時は待機を中止し、作業中のMySQL/PostgreSQL専用接続を破棄。 - 大きな整数の無損失処理:bigintはJavaScriptの安全な整数範囲内ではnumberとして出力し、範囲外では10進数文字列として出力。精度のサイレント損失を防ぐ。 - 識別子検証:テーブル名は英数字とアンダースコアのみ許可。スキーマインジェクションを防止。 - キーを設定に残さない:パスワードはDSH_SQL_PASSWORD_<接続名>環境変数で提供可能。 設定項目にはmaxRows(クエリ戻り行数の上限、1〜10000)、queryTimeoutMs(単一クエリのタイムアウト、デフォルト60秒)、execTimeoutMs(単一書き込み操作のタイムアウト、デフォルト120秒)、readOnly、writeApprovalが含まれる。 インストール方法はdsh plugin --profile web add dsh-sql。アンインストール後はWebサービスの再起動が必要。プロジェクトは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の組み合わせパッケージモデルを採用。