这个项目能做什么
dsh-sql 是面向 DSH(DeepSeek Harness)的数据库插件,让 agent 能够连接并操作数据库。它提供六个工具,覆盖连接管理、只读查询、写操作、结构探查、统计概览与健康自检。
工具一览:
- 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 连接;但配置存在且格式无效时会直接报错停止加载,不会静默回退到内存库。
安全设计:
- 词法级只读保护:sql_query 先剥离字符串与注释再校验,拒绝 data-modifying CTE(WITH…DELETE/UPDATE)、SELECT INTO、FOR UPDATE/FOR SHARE、PRAGMA 赋值与多语句。
- 写审批门:sql_exec 默认弹出审批,headless 环境无审批通道时拒绝执行。
- readOnly 模式:可整体禁用写操作,适合生产库。
- 流式行数钳制:SQLite 迭代器、MySQL Readable、PostgreSQL Query 行事件最多收集 maxRows+1 行,超量标记 truncated;MySQL 与 PostgreSQL 达到上限时关闭该查询的专用连接,未达上限则归还连接池,避免全量结果驻留内存。
- 可取消执行:查询与写操作遵守 Harness 的 exec.signal,取消时中止等待并销毁工作中的 MySQL/PostgreSQL 专用连接。
- 大整数无损:bigint 在 JavaScript 安全整数范围内输出 number,超出范围输出十进制字符串,避免静默丢精度。
- 标识符校验:表名只允许字母、数字与下划线,防止 schema 注入。
- 密钥不落配置:密码支持通过 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 组合包模型。
评论
0 评分人数达到10人后显示
登录后参与讨论。