このプロジェクトについて
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の組み合わせパッケージモデルを採用。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.