开发者文档
从安装运行到二次开发:连接管理、SQL 工作台、AI 能力、数据库迁移、权限安全与架构概览。所有内容均对应当前已实现的真实功能。
快速开始
AI DB Client 是一个基于 Electron 的开源桌面数据库客户端,本地优先、MIT 协议。下面从源码跑起来。
环境要求
- Node.js ≥ 20
- pnpm ≥ 9
- macOS / Windows / Linux
安装与运行
# 克隆仓库
git clone https://github.com/tomseanmy/dbclient.git
cd dbclient
# 安装依赖(会按需编译 better-sqlite3 / keytar 原生模块)
pnpm install
# 启动开发模式(含 HMR)
pnpm dev
pnpm rebuild 重建 better-sqlite3 /
keytar;切换 Node/Electron 版本后也需要重建。
命令与打包
| 命令 | 说明 |
|---|---|
pnpm dev |
启动 Electron + Vite 开发模式(HMR) |
pnpm build |
构建主进程 + preload + 渲染进程 |
pnpm dist:mac |
打包 macOS 安装包(.dmg) |
pnpm dist:win |
打包 Windows 安装包(.exe NSIS,per-user) |
pnpm dist:win:portable |
打包 Windows 便携版(.exe portable,免安装) |
pnpm dist:linux |
打包 Linux 安装包(.AppImage / .deb) |
pnpm typecheck |
TypeScript 类型检查(main + renderer) |
pnpm lint / pnpm test |
ESLint / Vitest 单元测试 |
连接管理
在「连接管理」页新建连接,支持 MySQL / PostgreSQL / SQLite / Redis 四种类型。
- 连通性测试:保存前可测试连接是否可达。
- 凭据安全:密码经 OS 钥匙串存储(macOS Keychain / Win Credential Vault),不以明文落盘,连接时按需读取。
-
环境分级:每个连接标注
dev/staging/prod,驱动安全策略矩阵(详见权限章节)。 - Redis:支持 single 与 cluster 模式(sentinel 为规划项)。
SQL 工作台
基于 Monaco Editor 的全功能 SQL 工作台,原生 SQL、无 ORM。
- 自动补全:根据 FROM/JOIN/INTO 上下文补全表名,按别名与 SELECT/WHERE 上下文补全列名,含关键字与代码片段。
- 格式化:sql-formatter,按方言差异化输出。
- 历史记录:每条执行的 SQL 自动入历史,可回溯复用。
- 保存查询:常用查询可命名保存。
- 导出:结果集一键导出 CSV / JSON。
# 快捷键
Cmd / Ctrl + Enter 执行全部
Cmd / Ctrl + Shift + Enter 执行选中
Cmd / Ctrl + S 保存查询
AI 能力
AI 以三种形态工作,且永远不会擅自动手:生成的写操作 SQL 落入编辑器供你审阅,执行前必须由你确认。
配置 Provider
在「设置 → 模型」中添加 Provider,采用 OpenAI 兼容协议,已验证支持:
- DeepSeek / Qwen / Moonshot
- Ollama(本地自托管)
- 任何 OpenAI 兼容端点
可分别为 agent 与
chat 类别指定默认模型,连通性可一键测试。所有调用记录 token 用量。
三种 AI 形态
| 形态 | 说明 |
|---|---|
| NL2SQL | 自然语言 → SQL,落入编辑器供审阅 |
| 流式对话 | SSE 流式响应,逐字输出 |
| Agent loop | tool-calling 多步执行:listTables / describeTable / 只读查询 / 生成 SQL;出错自动回灌上下文自愈(上限 50 轮) |
runReadQuery 只放行只读白名单(SELECT / WITH / EXPLAIN /
SHOW / DESCRIBE / PRAGMA),并同样经过安全层 checkSql 校验。generateSql
生成的写操作 SQL 不会自动执行。
数据库迁移
结构 diff + 数据 diff + 跨库迁移,方言感知 DDL/DML 生成。4 步向导:选库 → 选表与设置 → 生成脚本 → 执行迁移。
结构 diff
逐表比对建表 / 改列 / 删列、索引、外键,识别变更项:createTable / dropTable、addColumn / modifyColumn / dropColumn、addIndex / dropIndex、外键增删。
数据 diff
行级差异识别,支持三种策略:incremental(增量)/
fullReplace(全量替换)/ insertOnly(仅插入)。
方言脚本与计划
-
按目标方言生成 DDL/DML,类型自动映射(MySQL 的
MODIFY、PostgreSQL 的ALTER COLUMN);不支持项(如 SQLite 改类型)明确标注。 -
每步带风险徽章
safe/caution/danger。 - 迁移计划可命名保存、加载复用;脚本一键导出并在文件管理器中定位。
表结构编辑
在表详情中行内编辑列 / 索引 /
外键,改动以脏行高亮,并实时预览即将生成的
ALTER 语句(只读 Monaco)。
- 类型变更、可空、默认值、注释变更按方言差异化输出。
- SQLite 对部分类型/可空/默认/注释变更不支持,编辑器内会明确标注。
权限与安全
统一的安全闸门:GUI 与 AI 两条执行路径都流经它。
危险级别判定
node-sql-parser 解析 AST → 判定 safe / write /
dangerous。DANGEROUS_KEYWORDS 包含 DROP / TRUNCATE /
SHUTDOWN / GRANT / REVOKE,并检测缺 WHERE 的 DELETE / UPDATE。
环境分级策略
| 环境 | 读 | 写 | DDL / 危险 |
|---|---|---|---|
dev |
✓ 放行 | ✓ 放行 | 弹窗确认(dangerous) |
staging |
✓ 放行 | ✓ 放行 | DDL 弹窗确认 |
prod |
✓ 放行 | ✗ 拦截(除非提权) | ✗ 拦截(即使提权仍确认) |
- 临时提权:生产可 30 分钟临时提权(默认有效期,会话级,自动过期)。
- 审计:所有写操作(含 AI 路径)全过程审计留痕。
架构概览
核心设计:核心领域层 src/main/domain/ 不依赖 Electron,可独立测试,被 GUI 和 AI 链路共用,保证两条执行路径权限一致。
src/
├── shared/ # 共享类型契约(IPC、领域 DTO、迁移类型)
│ ├── types/ # connection / database / llm / security / agent / migration
│ └── db/ # 列类型 + ALTER 语句生成(纯函数,跨进程复用)
├── main/ # Electron 主进程
│ ├── ipc/ # IPC handler(应用服务层)
│ ├── domain/ # 核心领域层(纯逻辑,零 Electron 依赖)
│ │ ├── db/ # 驱动抽象 + mysql/pg/sqlite/redis
│ │ ├── agent/ # Agent tool-calling loop + 工具集
│ │ ├── llm/ # LLM 网关 / prompt / SQL 抽取
│ │ ├── migration/ # 结构 diff / 数据 diff / 方言脚本 / 执行器
│ │ ├── privacy/ # Schema-only 上下文构造
│ │ └── security/# SQL 分析 + 环境分级权限
│ ├── executor.ts # SQL 执行(走安全层)
│ └── infra/ # 本地库 / 凭据 / 日志
├── preload/ # contextBridge 安全桥
└── renderer/ # React UI
自动更新
集成 electron-updater,对接 GitHub Releases。打包应用启动后自动检查(24h 节流 + 10s 延迟;开发模式跳过),新版本下载完成后提示重启。
- 状态机:idle / checking / available / downloading / downloaded / up-to-date / error。
-
产物中由 electron-builder 生成
app-update.yml,autoUpdater 启动时自动读取,无需 setFeedURL。
扩展指南
新增数据库类型
实现 DbDriver 接口并在 createDriver() 工厂注册,补充
DbType 类型与连接表单选项即可被对象浏览、SQL 工作台、迁移复用。
新增 Agent 工具
在 src/main/domain/agent/tools.ts 增加工具定义与
handler;只读查询统一走 isReadOnlySql 白名单 +
checkSql 安全闸门。
新增迁移方言
在 src/main/domain/migration/dialect/ 下新增方言实现(DDL/DML 输出 +
类型映射),并在 MigrationDialect 与 target-loader 注册。