同步完整源码至远程:扁平化重构现状 + 未入库源文件
- 补入库:server/internal/db/dump.go、redis 分页/扫描预算测试、opsxdb-mcp main_test、 packages/opsxdb-mcp package-lock、docs 审计与对比文档等 37 个新文件 - 含结构扁平化进行中的 80 处修改与 155 处旧结构删除(server/ src/ src-tauri/ 为当前有效源) - 构建产物(bin/target/dist)与签名私钥仍按规则排除
This commit is contained in:
1 parent
5c0be49217
commit
2c0bfafd8d
269 files changed
+10372
-16435
No files matched your search
+17
-2
@@ -1,5 +1,7 @@
|
||||
# OpsxDB AI / MCP / Agent 任务书
|
||||
|
||||
> 当前行为(2026-10-15 更新):新配置默认启用读写与危险 SQL,连接仍需明确授权;旧配置沿用原权限,设置 → MCP 可一次性「使用默认权限」。设置页移除权限开关,改为紧凑状态展示。Agent 生成写命令后弹出确认框,展示连接、数据库和完整命令;仅确认当前一条,模型不能代确认。下文 P0 只读默认的描述属于历史阶段规划。
|
||||
|
||||
> 更新:2026-10-15 · 用户拍板:**先 MCP,再内部会话,最后 GUI 联动**
|
||||
> 对标:优先 [DBX MCP](https://github.com/t8y2/dbx)(`packages/mcp-server` / `crates/dbx-mcp`);架构思路参考 oh-my-pi;可选对照 Google MCP Toolbox for Databases、DBHub、官方 MCP SDK。
|
||||
|
||||
@@ -199,8 +201,8 @@ go build -o ../bin/opsxdb-mcp ./cmd/opsxdb-mcp
|
||||
|----|------|
|
||||
| Ask | 侧栏分段 **Ask**:走既有 `/api/ai/chat`,不调工具(生成/解释/优化) |
|
||||
| Agent | 分段 **Agent**:`POST /api/ai/agent` → `ai.RunAgent` → 进程内 `aitools.Runtime.Call`(与 MCP 同源) |
|
||||
| 协议 | Agent tool calling 目前仅 **openai-chat**(DeepSeek / OpenAI 兼容) |
|
||||
| 安全 | P0 只读;ConfirmDanger 永不 true;白名单 / 审计同 MCP |
|
||||
| 协议 | Agent tool calling 支持 openai-chat、Anthropic 与 OpenAI Responses;云模型真链路仍需实测 |
|
||||
| 安全 | 默认只读;工具限定当前连接/库,模型不能自行确认写入;白名单 / 审计同 MCP |
|
||||
| UI | 输入框上 Ask\|Agent;回复下可折叠步骤时间线(默认最近 3 步) |
|
||||
| 单测 | `go test ./internal/ai/ ./internal/aitools/`(含 mock tool loop) |
|
||||
| 真库冒烟 | `cd server && go run ./cmd/opsxdb-agent-accept/`(需 `~/.opsxdb/ai.json` 真 key) |
|
||||
@@ -211,6 +213,19 @@ go build -o ../bin/opsxdb-mcp ./cmd/opsxdb-mcp
|
||||
|
||||
MySQL 3306 demo + Redis 6379:`go run ./cmd/opsxdb-mcp-accept/` 全过。实践文档:`~/Downloads/AI-Agent接入GUI工具开发实践.md`。
|
||||
|
||||
### 本地回归 2026-10-15(当前隔离执行环境)
|
||||
|
||||
| 路径 | 结果 |
|
||||
| --- | --- |
|
||||
| `go test ./internal/ai/ ./internal/aitools/ ./internal/server/ -count=1` | 通过;补测 Ask 不强制生成 SQL、MySQL Agent 越界连接/库拒绝、Redis DB1 GET 与 SET 需确认 |
|
||||
| stdio MCP `initialize` / `tools/list` / `tools/call` | 7 个工具可列出;MySQL `DROP` 与 Redis `FLUSHDB` 均按只读策略拒绝 |
|
||||
| `opsxdb-mcp-accept` | 连接列表通过;MySQL `127.0.0.1:3306` 遇 `operation not permitted`,后续真库调用未运行 |
|
||||
| `opsxdb-crud-accept` | 只读拒写通过;MySQL 预检同样被本地连接权限拦截,未进入真实写操作;命令已改为预检失败立即停止并显示原因 |
|
||||
| `opsxdb-agent-accept` | 真模型请求在解析 `api.deepseek.com` 时失败(`no such host`),未得到模型与真库结果 |
|
||||
| 桌面交互 | Computer Use 自动审批拒绝访问 OpsxDB;未验证桌面按钮、视觉和真库操作 |
|
||||
|
||||
上述限制只影响本次环境的真库/云模型回归;不可将失败命令记为产品功能验收通过。实际真库重测仍执行本节 P0 命令,并核对唯一标记的数据写入与清理。
|
||||
|
||||
|
||||
## 会话产品层(阶段 5,2026-10-15)
|
||||
|
||||
|
||||
@@ -244,11 +244,11 @@ confirm_bind = sha256(connection_id + "\n" + normalize(sql_or_command))
|
||||
|
||||
## 9. 验收(会话层)
|
||||
|
||||
- [ ] `go test ./internal/ai/ ./internal/aitools/` 通过(含 outcome / trim / redact / bind)
|
||||
- [ ] 触顶轮次:响应 `run_outcome=incomplete`,`incomplete_reason=max_steps`
|
||||
- [ ] 审计行含 `run_id`(Agent 路径)
|
||||
- [ ] confirm:改 SQL 后旧 bind 拒绝
|
||||
- [ ] (P1)关窗再开:同 session 注入 prior 能继续调工具
|
||||
- [x] `go test ./internal/ai/ ./internal/aitools/ ./internal/server/ -count=1` 通过(含 outcome / trim / redact / bind)
|
||||
- [x] 触顶轮次:单测响应 `run_outcome=incomplete`,`incomplete_reason=max_steps`
|
||||
- [x] 单测 Agent 审计行含 `run_id`;真库审计仍待复验
|
||||
- [x] confirm:单测修改 SQL、连接或数据库后旧 bind 拒绝
|
||||
- [ ] (P1)桌面关窗再开:同 session 注入 prior 能继续调工具(会话层单测已覆盖,桌面操作待验)
|
||||
|
||||
---
|
||||
|
||||
|
||||
+6
-2
@@ -140,8 +140,10 @@
|
||||
| 右侧 AI 面板可开关 | 已收 | — |
|
||||
| 真模型接入(生成/解释/优化) | **已接**(2026-10-14:Provider 预设 + 三协议,见 §23 补记) | 桌面接真实云端 key 验收;流式输出后置 |
|
||||
| MCP 最小工具集 + 安全策略(**P0 纯只读**) | **本轮落地** | `aitools` + `opsxdb-mcp` stdio;白名单/审计/connections.json 双写;写+确认=P1;验收盯 MySQL/PG/Redis |
|
||||
| 内部 Agent 会话(共用 tool runtime) | 未做(P1) | Ask \| Agent UI(设计阶段 2 先只记文档);多轮 + 步骤展示 |
|
||||
| GUI 联动(插入编辑器 / 结果网格) | 未做(P1) | 设置页 MCP 配置片段 |
|
||||
| 内部 Agent 会话(共用 tool runtime) | 已有 Ask / Agent 流式会话、步骤、停止与单槽排队;模式下拉默认 Ask;Agent 工具限制当前连接与库,写入确认绑定库 | 桌面真实模型、多连接切换、跨库限定与写入确认回归;SQL 显式跨库引用仍由数据库权限管控 |
|
||||
| GUI 联动(插入编辑器 / 结果网格) | Ask 生成 SQL 仅在回复中建议,需手动「复制到 SQL 窗口」;Agent 结果可在结果区打开;当前连接和库显示在输入区 | 桌面端跨方言、Redis DB 与结果网格联动回归 |
|
||||
| 大模型设置 | 设置分类改为「大模型 · AI 供应商」;参照 opsxshell 的字段层级整理当前单供应商配置 | 多供应商保存/切换属后续能力,现有后端只保存一个配置 |
|
||||
| AI 验收(2026-10-15) | Ask 自由提问修正为聊天提示词,不再强制生成 SQL;stdio MCP 初始化/7 工具列举及危险命令拒绝通过;Go 单测覆盖 MySQL/Redis Agent 当前库、确认写 | 本次隔离环境禁止连本机 3306/6379、云模型 DNS 不通;桌面 Computer Use 自动审批拒绝 OpsxDB,真库 CRUD 与模型/视觉实测待复验(细节见 15-AI-MCP-Agent) |
|
||||
|
||||
---
|
||||
|
||||
@@ -322,6 +324,8 @@
|
||||
|
||||
详见 [DATABASE-OPERATIONS-AUDIT.md](DATABASE-OPERATIONS-AUDIT.md)。右侧结构页已复用对象树的 MySQL/PG/SQLite 元数据查询,查询失败单组提示并可重试;AI 晚到 SQL 的原标签/未保存状态和切库保护已有回归。下一步真库核对与树节点定位 → 字段/索引设计及 DDL 预览 → CSV 导入 → 表级导出完善 → 逻辑备份与恢复。规划项未标为已完成。
|
||||
|
||||
2026-10-15 的 [OpsxDB / DBX / DBeaver 高频操作评审](DB-CLIENT-REVIEW.md)按关系库工作流重新评分,并复核了源码。优先补表数据新增行、明确 NULL 与改动/部分失败反馈,以及 CSV 导入向导;手动事务须先做绑定查询标签的独占物理连接与生命周期,不能只在现有连接池上发 `BEGIN`。随后处理整表导出截断提示、MySQL/PG 手动备份与恢复演练、结构漂移校验和只读比较。AI/Redis 优势单列,不以视觉旧分替代功能分;规划能力不得显示为已完成。
|
||||
|
||||
### 主题随系统 + AI 真模型接入(2026-10-14 · 参考 opsxshell)
|
||||
|
||||
| 项 | 状态 |
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
# 库、表与数据迁移功能缺项盘点
|
||||
|
||||
更新:2026-10-14(同日复核一轮:右键与复制主路径已落地,本文相关条目同步;代码现状以根级 `src` / `src-tauri` / `server` 布局核查)。依据当前 OpsxDB 代码以及 DBFlux、dbx、RustGrid 本地源码/文档静态核查;未运行参考项目,能力存在不等于所有引擎已验证。本文优先于早期「整表导出尚未实现」等笼统表述。
|
||||
|
||||
## 已确认的现状
|
||||
|
||||
- 按用户要求移除工作台「执行计划」按钮、结果「计划」页签及其前端执行处理。底层 API 保留兼容,不列入近期开发。
|
||||
- 表/视图节点下有字段分组(对象树自带);表节点另有索引、外键、触发器分组(`TableMetadataTree`,按驱动 DDL 能力挂载)。目录查询覆盖 MySQL 系列、PG 系列、SQLite,未适配引擎明确提示而非伪装空列表,尚待真库验证。
|
||||
- 右侧/结果区「结构」页有字段列表,索引/外键/触发器区块已复用对象树的目录查询,覆盖 MySQL 系列、PG 系列和 SQLite;每组单独显示加载、失败重试、空态与截断。编辑入口在表右键「设计表」,MySQL 普通索引可编辑,外键/触发器仍只读;真实数据库兼容性待验收。
|
||||
- 已有当前结果 CSV/JSON/INSERT 导出及服务端整表、完整查询导出入口;表右键已有 CSV/JSON 导出与 SQL 三态转储。这些有行数上限的导出不等于数据库备份。
|
||||
- 编辑器/结果/对象树右键主路径已于 2026-10-14 补齐一轮(格式化、注释、查找替换、定义跳转、复制与导出、SELECT/INSERT 模板、新建查询带库),验收状态以 BACKLOG §3 为准;本文只保留与结构、表设计、迁移相关的条目。AI 晚到 SQL 的原标签、未保存状态和切库保护已补回归。
|
||||
- Redis 键浏览/编辑已有独立面板(`RedisKeyPane`),非本盘点的关系对象迁移范畴。
|
||||
|
||||
## 库与 Schema
|
||||
|
||||
| 操作 | OpsxDB 状态 | 缺口与优先级 |
|
||||
|---|---|---|
|
||||
| 新建查询、刷新、复制名称/连接地址 | 已有(另含设为默认库、删除库、限定名与主机端口复制) | 菜单键盘、焦点、视口约束已统一实现(2026-10-14),待桌面验收;剩余为禁用项说明的一致性 |
|
||||
| 默认库切换 | 部分 | P1:PG Schema/search_path 与会话隔离验证;显示实际生效目标 |
|
||||
| 新建数据库 / Schema | 缺少可视化流程 | P1:库名、字符集/排序规则或 owner 按方言开放,预览 SQL |
|
||||
| 删除数据库 | 有能力裁剪入口 | P1:验收目标确认、权限失败、删除后连接与标签刷新 |
|
||||
| 查看/修改库属性 | 缺少 | P2:编码、排序规则、大小、注释;可修改项按引擎限制 |
|
||||
| 批量选择表 | 缺少 | P1:为多表导出/备份提供选择,不优先批量删除 |
|
||||
| 视图、过程、函数定义管理 | 列表 + 视图可展开字段、复制建表/视图 SQL | P2:查看/复制定义已部分具备,新建/修改/删除、参数调用仍缺;按引擎支持 |
|
||||
| 用户/权限、服务器管理 | 缺少 | 后置:不挤占表设计和迁移优先级 |
|
||||
|
||||
## 表与表设计
|
||||
|
||||
| 操作 | OpsxDB 状态 | 缺口与验收要求 |
|
||||
|---|---|---|
|
||||
| 查看数据、前 N 行、查看结构/DDL | 已有 | 右侧结构已统一字段及三组目录;P1:点击树中索引定位对应详情,并以真库验证权限、方言差异与刷新行为 |
|
||||
| 新建表 | 设计器 v1 已落地(2026-10-14):库右键「新建表…」/表右键「设计表…」,字段网格 + 方言化 CREATE 预览 + 应用 | P0:真库验收新建→改字段→改主键全流程;表选项(引擎/字符集)后置 |
|
||||
| 新增/修改/删除字段 | 设计器 v1 支持列级 diff ALTER(MySQL 族 ADD/DROP/MODIFY/CHANGE、PG 族 TYPE/NOT NULL/DEFAULT/RENAME;SQLite 仅 ADD) | P0:真库各方言验收;结构漂移重校验(执行前被外部修改)后置 |
|
||||
| 主键管理 | 设计器 v1 支持主键组变更(ADD/DROP PRIMARY KEY) | P0:复合主键真库验收;不把普通索引当主键 |
|
||||
| 创建/修改/删除索引 | MySQL 系列设计器可编辑普通 BTREE/唯一及复合索引,实时预览 DROP/ADD;前缀、FULLTEXT、SPATIAL、降序等特殊索引只读。PG/SQLite 仍只读 | P0:MySQL 真库验证索引重建与外部结构漂移;PG 并发索引等高级项后置 |
|
||||
| 外键管理 | 仅查看 | P1:多列映射、引用表列、ON DELETE/UPDATE;依赖检查 |
|
||||
| 检查约束 | 未接入树/设计器 | P2:读取/创建/删除,按引擎版本裁剪 |
|
||||
| 触发器 | 主要是查看 | P2:源码查看/编辑与 DDL 预览;避免假定支持原地 ALTER |
|
||||
| 重命名表、修改表注释 | 缺少专用操作 | P1:方言转义、名称冲突、成功后刷新和旧标签提示 |
|
||||
| 克隆为新表 | 缺少 | P1:仅结构/结构+数据;明确索引、外键、触发器是否复制 |
|
||||
| 清空/截断、删除表 | 已有危险确认入口 | P1:区分 DELETE 与 TRUNCATE,事务/自增/外键语义及失败反馈 |
|
||||
| 生成 SQL | 表右键「生成 SQL」折叠组提供 SELECT/INSERT/UPDATE/DELETE/DDL;新开带库查询,更新/删除有主键时填 WHERE 占位,不自动执行 | P1:复合主键、生成列/自增列和各方言参数占位符真库校验 |
|
||||
| 表数据新增/修改/删除 | 部分内联修改、粘贴和删除 | P1:新增行、待提交变更、明确 NULL 编辑、多行部分失败反馈,避免并发回滚覆盖 |
|
||||
| 表关系图、结构比较、数据比较 | 缺少 | 结构比较 P1(只读差异,目标选择和过滤);数据比较 P2(主键、同构、分页/限量);关系图后置 |
|
||||
|
||||
设计器现状:字段、索引、外键、触发器、SQL 预览分区;大弹窗、紧凑密度、MySQL 表注释、普通索引编辑,外键/触发器只读。应用前展示 DDL 并确认,读取元数据失败或存在不支持的修改时禁止应用。未含:外键/触发器图形编辑、引擎/字符集选项、草稿保留(关闭即丢)、结构漂移重校验、SQLite 重建表流程;这些仍是后续项。
|
||||
|
||||
## 导出、导入、备份与恢复
|
||||
|
||||
| 能力 | OpsxDB 状态 | 必须补齐的闭环 |
|
||||
|---|---|---|
|
||||
| 当前结果 CSV/JSON/INSERT | 已有 | P1:范围、编码、NULL/换行/大整数、取消/保存失败回归 |
|
||||
| 整表 / 完整查询导出 | 表右键可导出 CSV/JSON,输入 1–500000 行上限(默认 100000);服务端流式取数,不受前端结果分页限制。右键还可转储 SQL 三态(仅结构/仅数据/结构和数据) | P1:上限命中时服务端给出明确截断标志、列与条件选择、进度/取消、大表内存验证;目前文件达到上限不能判定是否完整,不可当备份 |
|
||||
| 表结构 SQL 导出 | 表右键转储「仅结构/结构和数据」已可保存 .sql | P1:多表选择、对象依赖顺序;视图/过程/函数纳入 |
|
||||
| CSV 导入 | 缺少向导 | P0:文件预览、编码/分隔符、表头、字段映射、类型/NULL、批次、事务策略、错误行报告 |
|
||||
| SQL 文件执行/导入 | 缺少完整流程 | P1:大文件流式读取、方言分隔符、进度/取消、失败位置;不是简单按分号切开 |
|
||||
| JSON/Excel 导入导出 | JSON 结果导出已有,其他缺少 | P2:先 CSV;Excel 为可选扩展,不先堆格式 |
|
||||
| 单表 / 多表逻辑备份 | 缺少 | P1:结构+数据、索引/约束/触发器范围、快照一致性说明、产物清单 |
|
||||
| 整库逻辑备份 | 缺少 | P1:MySQL/PG 优先,评估原生 dump 工具依赖或自有导出;凭据不放命令行/日志 |
|
||||
| 备份恢复 | 缺少 | P1:目标库确认、冲突策略、对象顺序、失败报告,完成后实际验证可恢复性 |
|
||||
| 定时备份/保留策略/历史 | 缺少 | P2:手动备份恢复验收后再做;桌面退出时不承诺继续运行 |
|
||||
| 物理备份、PITR、binlog/WAL 归档 | 无 | 不纳入近期桌面客户端范围;逻辑 SQL 导出不能冒充灾备 |
|
||||
|
||||
## 三个参考项目取舍与证据
|
||||
|
||||
| 参考 | 静态证据 | 借鉴内容 |
|
||||
|---|---|---|
|
||||
| dbx | `docs/content/docs/table-structure.cn.mdx`;`crates/dbx-core/src/table_structure_sql/` 的 columns/indexes/foreign_keys/sqlite_rebuild/validation;结构编辑器并发与元数据重校验测试 | 字段/索引设计、能力裁剪、DDL 预览、草稿与结构漂移校验,作为表设计主要参考 |
|
||||
| dbx | `crates/dbx-web/src/routes/table_export.rs`(CSV/JSON/XLSX/SQL、进度、取消)、`docs/content/docs/database-backup.cn.mdx`、`crates/dbx-core/src/sql_file_import/table_restore.rs` | 借鉴导出任务反馈、立即备份与恢复;XLSX 按真实需求后置,不把有限行导出称为备份 |
|
||||
| navop | `crates/db_view/src/compare/`、`import_export/table_import_view.rs` | 比较目标、差异预览、失败状态与导入映射。优先只读结构差异,再做按主键的数据比较;同步执行需独立确认与回滚策略 |
|
||||
| AnotherRedisDesktopManager | `src/components/OperateItem.vue`、`MemoryAnalysis.vue`、`src/redisClient.js` | 搜索输入、取消/分批 SCAN 与集群节点处理;不引入会阻塞服务器的 KEYS 全量搜索 |
|
||||
| DBFlux | `crates/dbflux_ui_document/src/import_wizard/column_mapping.rs`、`export_wizard/`、`crates/dbflux_export/src/streaming.rs`、`dbflux_ui_sidebar/src/operations/export_tables.rs` | 导入映射、按对象直达导出、步骤层级与流式任务。不能仅凭 schema_alter policy 推断完整设计器已成熟 |
|
||||
| RustGrid | `README_zh.md`、`crates/rustgrid-backup/src/lib.rs`、`crates/rustgrid-app/src/app/backup.rs`、`crates/rustgrid-postgresql/src/backup.rs` | 中文导入导出向导、备份/还原成对入口;不优先复制专有 .rgbak 格式,先通用 SQL/CSV |
|
||||
|
||||
上述 dbx/navop/dbflux/rustgrid 路径相对 `/Users/logan/devops/demo/db-gui/`,Redis 参考项目位于 `/Users/logan/devops/demo/db-client/`。本文不因参考项目声明功能就宣称其全部驱动均通过验收。
|
||||
|
||||
Navicat 截图的数据库/表/视图与工具图标用于辨识和层级参考;OpsxDB 保留自有 SVG 图标与紧凑桌面工具栏,不复制其图形资产或将比较、备份按钮提前摆在主工具栏。结构比较 P1 先只读展示字段、索引、约束差异;数据比较 P2 要求同构表、明确主键、限量取样与差异统计,跨库同步和无主键全表比较后置。导入以 CSV 预览→字段映射→批量执行→错误报告为 P0;导出优先 CSV/JSON/SQL INSERT/结构 SQL,XLSX 为 P2,整库逻辑备份必须能恢复验证。
|
||||
|
||||
## 推荐开发顺序
|
||||
|
||||
1. **结构查看验收**:目录查询与错误/空态已复用;补树节点定位结构详情,并用 MySQL、PG、SQLite 真库核对索引、复合外键和触发器。
|
||||
2. **表设计器验收**:字段网格、MySQL 普通索引、结构只读页签与 DDL 确认已落地;MySQL 3306 旧版建表/转储验收不覆盖本轮索引改造。下一步真库验收索引重建与结构漂移重校验。
|
||||
3. **日常迁移**:CSV 导入 + 表右键导出 + SQL 文件执行;有进度、取消与错误报告。
|
||||
4. **备份恢复**:先手动单库逻辑备份并完成恢复演练,再多库/定时。
|
||||
5. **按需扩展**:外键/触发器编辑、克隆、关系图/比较,不把整个管理平台塞入默认右键菜单。
|
||||
|
||||
验收矩阵应覆盖:空表/大表/复合主键/无主键/权限不足/断连/取消/名称特殊字符/跨标签切换/结构被外部修改;每种方言单独记录。规划项未实现前不在产品中放置伪可用入口。
|
||||
|
||||
## 本地质量复核
|
||||
|
||||
- 前端构建/类型检查通过,60 项前端测试通过;Go 编译和 2 项无监听的 Redis 扫描预算测试通过,差异空白检查通过。homepage 未改动。
|
||||
- 复核修正:结构页不再把索引等目录查询报错显示为「无」,三组分别加载、报错重试;AI 异步生成 SQL 保留原标签与未保存标记,用户修改 SQL 或切库后不覆盖。
|
||||
- 2026-10-14 晚补充:设计器 v1(tableDdl 11 项单测,前端合计 75 项全绿)、`/api/db/dump` 三态转储、`⌘/` 注释快捷键修正(帮助改 `⌘⇧/`);MySQL 3306 真库端到端验证建表、插数与三种转储输出后已清理测试库。
|
||||
- 尚未完成:真实 MySQL/PG/SQLite 的结构目录校验、桌面视觉/右键/剪贴板验收、表设计与导入备份闭环。完整 Go 集成测试中的本地监听用例在当前受限环境不能运行;这不等于真实数据库验收通过。
|
||||
@@ -0,0 +1,42 @@
|
||||
# 高频数据库操作评审:OpsxDB / DBX / DBeaver
|
||||
|
||||
更新:2026-10-15。依据当前工作区的 OpsxDB 根级 `src/`、`server/`,以及 `/Users/logan/devops/demo/db-gui/dbx`、`/Users/logan/devops/demo/db-client/dbeaver` 的源码和随库文档。**这是静态代码评审与产品取舍,不是三个桌面程序的同机实测,也不是所有驱动的兼容性认证。** 分数只针对日常关系数据库工作流;AI/MCP、Redis 等差异化能力在下文单列,不靠第三方插件数量加分。参考项目自身的文档陈述若未在本轮实测,以“源码中有路径”评价。
|
||||
|
||||
## 评分口径
|
||||
|
||||
每项满分是该列权重;一条功能只存在入口或说明但缺执行、错误恢复和验证时扣分。结果集“筛选已加载行”不等于数据库服务端过滤;限量 SQL 导出不等于可恢复备份。下表为评审判断值,允许在真库与桌面验收后修订,不能与 2026-10-14 的 [GUI 布局评分](GUI-COMPARISON.md)混用。
|
||||
|
||||
| 维度(满分) | OpsxDB | DBX | DBeaver | 主要判断 |
|
||||
|---|---:|---:|---:|---|
|
||||
| 连接、对象树与上下文(15) | 12 | 14 | 14 | OpsxDB 已有多连接、库/表/列及索引/外键/触发器目录和带库标签;PG Schema 与真实驱动目录仍需验收;两参照项目对象导航与目标上下文更完整 |
|
||||
| SQL 编辑、会话与事务(20) | 11 | 18 | 18 | OpsxDB 有选区/当前语句执行、格式化、历史、切库、取消与危险确认;尚无可靠跨请求手动事务;DBX 有标签专用事务会话,DBeaver 有自动提交切换和事务监视 |
|
||||
| 表设计与数据编辑(20) | 12 | 18 | 19 | OpsxDB 有字段/主键、MySQL 普通索引设计及有主键的单元格改/删;缺新增行、批量暂存提交、外键编辑,PG/SQLite 索引只读;参照项目有更完整的编辑持久化路径 |
|
||||
| 导入、导出与恢复(20) | 7 | 18 | 18 | OpsxDB 有结果与整表导出、单表 SQL 三态转储,缺 CSV 导入、完整备份与恢复;DBX 有表导入、数据传输和 MySQL/PG 备份,DBeaver 有数据传输向导与 MySQL/PG 原生备份向导 |
|
||||
| 结果集高频交互与大数据(15) | 11 | 13 | 13 | OpsxDB 有复制/右键、局部筛选排序、分页与继续显示,但服务端按 offset 丢弃前面行;两参照项目有更丰富的过滤、行状态与任务反馈 |
|
||||
| 失败反馈、回归证据与操作安全(10) | 5 | 7 | 9 | OpsxDB 有危险确认与部分单测,桌面及真库矩阵尚未闭环;DBX 有事务/导入/比较专门回归,DBeaver 的持久化器含行标识校验、部分提交与回滚处理。此项不代表本轮运行了第三方测试 |
|
||||
| **合计 / 100** | **58** | **88** | **91** | 能力覆盖与闭环成熟度的当前估计,不是视觉评分或性能基准 |
|
||||
|
||||
OpsxDB 的优势是轻量的连接→对象→查询主路径、Redis 键操作、Ask/Agent 与 MCP 同一会话工具边界;后两项没有纳入上述关系库同口径打分。DBeaver 覆盖广而操作层级多;DBX 的步骤式迁移和上下文入口值得借鉴。OpsxDB 应保持日常操作短路径,复杂任务才进入向导。
|
||||
|
||||
## 对照后最值得补的能力
|
||||
|
||||
| 频率 / 优先级 | OpsxDB 当前缺口与影响 | 参考代码证据 | 适合 OpsxDB 的实现范围 |
|
||||
|---|---|---|---|
|
||||
| 高频 P0:新增/修改/删除一批数据 | `src/ResultPane.tsx` 有主键写回和删除,空输入转 NULL,单元格写入立即提交;没有新增行与可查看的待提交改动。粘贴多格失败时需明确哪些已写入,不能用旧结果覆盖后来的成功写回 | DBX `apps/desktop/src/lib/dataGrid/dataGridContextMenu.ts` 有 clone/restore/delete、NULL/筛选操作;DBeaver `plugins/org.jkiss.dbeaver.ui.editors.data/.../ResultSetPersister.java` 区分 insert/update/delete,并对缺少唯一行标识拒绝删除 | 先做“新增行、显式 NULL、改动预览、保存/撤销”;事务支持前明示逐行立即生效和部分失败。限制表来源与主键,避免任意 JOIN 结果写回 |
|
||||
| 高频 P0:导入 CSV 到已有表 | 无数据导入向导;手工写 INSERT 成本高,易错 | DBX `crates/dbx-core/src/data/table_import.rs`、`crates/dbx-web/src/routes/table_import.rs` 与 `docs/content/docs/table-import.cn.mdx`;DBeaver `plugins/org.jkiss.dbeaver.data.transfer.ui/.../DataTransferWizard.java` | 从表右键进入,文件预览→编码/表头/分隔符→字段映射与 NULL→目标复核→分批写入/进度/取消/错误行;先支持 MySQL/PG/SQLite 的 CSV,测试事务及失败行语义 |
|
||||
| 高频 P0:可控事务 | `server/internal/db/session.go` 按库缓存 `*sql.DB` 连接池,`server/internal/db/ops.go` 每次通过池执行;连发 `BEGIN`、DML、`ROLLBACK` 不能保证同一物理连接。前端没有会话绑定的提交/回滚状态 | DBX `crates/dbx-core/tests/live_manual_transaction.rs`、`apps/desktop/src/components/layout/EditorToolbar.vue`;DBeaver `plugins/org.jkiss.dbeaver.core/.../DataSourceTransactionModeContributor.java` 与 `.../TransactionMonitorToolbar.java` | 先设计每查询标签独占 `*sql.Conn`/`*sql.Tx` 的本机事务句柄,再开放手动模式和提交/回滚。连接/库切换、关闭标签、超时、取消、断连与提交响应未知均有状态处理;事务内不隐式重试。MySQL DDL 的隐式提交单独提示。不能先只加按钮或直接发送 BEGIN |
|
||||
| 高频 P1:备份与恢复 | `server/internal/db/dump.go` 仅单表 SQL 转储;整表 CSV/JSON 上限 500000 行,达到上限未明确是否截断;没有整库一致性备份、依赖顺序或恢复验证 | DBX `docs/content/docs/database-backup.cn.mdx`、`crates/dbx-core/src/scheduled_backup/engine.rs`;DBeaver `plugins/org.jkiss.dbeaver.ext.mysql.ui/.../MySQLExportWizard.java`、`plugins/org.jkiss.dbeaver.ext.postgresql.ui/.../PostgreBackupWizard.java` | 先 MySQL/PG 手动逻辑备份,列出范围、对象与输出文件并做空库恢复演练;查询导出达到上限明确标注不完整。定时与保留策略后置,桌面退出不承诺继续运行 |
|
||||
| 中频 P1:表设计变更可靠性 | 设计器有 DDL 预览,但读取后到应用前未重新校验结构;MySQL 索引支持常见类型,PG/SQLite 索引与外键只读 | DBX `crates/dbx-sql-schema/src/table_structure_sql/`、结构编辑器的验证与 SQLite 重建路径;DBeaver 对象属性编辑路径 | 先校验元数据版本/快照与实际目标,处理复合主键和默认值;PG 普通索引、外键在真库验收后分方言开放。危险 DDL 展示影响与失败后的状态,不追求一次支持所有约束 |
|
||||
| 中频 P1:服务端筛选和高效翻页 | `src/ResultPane.tsx` 的筛选/排序作用于已加载行;`server/internal/db/ops.go` 的 offset 在结果扫描中逐行跳过,深页成本增长,重跑查询可能读到变化后的数据 | DBX `apps/desktop/src/lib/dataGrid/dataGridContextMenu.ts` 的筛选菜单与数据网格;DBeaver 结果集查看/编辑组件 | 表数据增加列条件筛选与稳定排序,清楚标示“当前页”或“全表”;按方言生成带 LIMIT/OFFSET 的安全查询,深页考虑主键游标。不将任意 SQL 重写成服务端过滤 |
|
||||
| 中频 P1–P2:比较/迁移 | OpsxDB 无结构比较/数据比较、跨连接传输;SQL 文件导入也未形成完整解析和进度路径 | DBX `crates/dbx-core/src/data/data_compare.rs`、`apps/desktop/src/components/diff/DataCompareDialog.vue`、`crates/dbx-core/src/data/transfer.rs`;DBeaver `plugins/org.jkiss.dbeaver.cmp.simple.ui/.../CompareObjectsWizard.java` | 先做只读结构差异;数据比较限定同构、唯一键、行数上限并展示样本;跨库传输与同步等 CSV 导入/备份闭环后再排期 |
|
||||
|
||||
路径中 `...` 表示相应插件包内的 `src/org/jkiss/dbeaver/` 前缀,并非 OpsxDB 文件。完整库/表缺项及现有功能参阅 [DATABASE-OPERATIONS-AUDIT.md](DATABASE-OPERATIONS-AUDIT.md)。DBX 表导入文档与核心实现对应,但其 SQL 导入限定字面量 INSERT,不能据此推断任意 SQL 脚本恢复已经通用可用;“可导出 SQL”也不能推断“已验证可恢复”。
|
||||
|
||||
## 项目决策与验收门槛
|
||||
|
||||
1. **先补可信的数据操作**:表网格新增行和明确 NULL;校验主键、唯一行定位、并发变化与多行部分失败。若暂存/批量保存需依赖事务,先把服务器独占连接与标签生命周期打通,再显示“保存/撤销”;与普通 SQL 的手动事务可以共用句柄层,UI 保持简单。
|
||||
2. **CSV 导入做一条完整路径**:从表右键进预填目标的向导,不加额外主工具栏按钮。测试 UTF-8/GBK、引号换行、空串与 NULL、自增/默认字段、重复键、取消、断连和错误行定位;明确每批是否已提交,输出成功/跳过/失败行数。
|
||||
3. **加固现有出口**:整表导出区分“达到行上限”与“完整”;导出失败/取消不留下貌似成功的文件。随后再做 MySQL/PG 的单次整库备份与空库恢复演练,备份内容与对象范围可核对。
|
||||
4. **依赖真库的结构工作随后做**:MySQL 8.4/MariaDB 11/PG 16/SQLite 的新建→改字段/主键/索引→刷新/重连、并发结构变动、无权限和特殊标识符。结构比较先只读;数据比较、XLSX、跨连接复制、定时任务为后续选项。
|
||||
|
||||
本次只读核查三份本地源码,未运行 DBX、DBeaver;未将 OpsxDB 桌面视觉/右键或 MySQL/Redis Agent 真库测试记为通过。当前 Computer Use 访问 OpsxDB 曾被自动审批拒绝,且此前隔离环境不能连接本机数据库;这些验收应在可访问的本机桌面环境补做。此评审不改变 `homepage/` 或产品形态:官网与文档在浏览器,数据库操作仍只走 Tauri 桌面。
|
||||
@@ -0,0 +1,56 @@
|
||||
# 数据库桌面 GUI 对比与优化依据
|
||||
|
||||
日期:2026-10-14。参考目录:`/Users/logan/devops/demo/db-gui` 下的 DBFlux、DBX、RustGrid;目标为 OpsxDB 当前工作区。
|
||||
|
||||
产品取舍(用户确认):以 DBFlux 的布局层级与上下文操作为主要参考;DBX 只借鉴实用功能与细致回归。常用操作一两步可达,按目标显示相关菜单,不堆全量管理能力,不为追求功能数量增加学习负担。
|
||||
|
||||
## 方法与评分
|
||||
|
||||
依据本地仓库截图、用户文档、菜单/编辑器/结果表实现及已有测试进行静态评审。未运行三个参考项目,未测启动速度、内存、海量结果性能或逐引擎兼容性;README 宣称的驱动数量不作为已验证能力。截图可能早于代码。下列分数是相同桌面数据库日常任务下的设计评审分,不是性能或质量认证;OpsxDB 55 分为 2026-10-14 右键与复制补齐**前**的基线,当日一轮「操作闭环」已落地(见 BACKLOG §3)但尚未桌面验收,本文不因此自动上调分数,验收后重评。
|
||||
|
||||
每项 10 分:0–3 缺失或断链,4–6 主路径具备但存在明显缺口,7–8 较完整且有边界处理,9–10 系统化实现及回归证据。总分按权重换算为 100 分。
|
||||
|
||||
| 维度 | 权重 | DBFlux | DBX | RustGrid | OpsxDB |
|
||||
|---|---:|---:|---:|---:|---:|
|
||||
| 布局层级、空间利用、信息密度 | 20% | 9 | 8 | 8 | 6 |
|
||||
| 视觉一致性、主题、可读性 | 15% | 9 | 8 | 7 | 6 |
|
||||
| 编辑器、右键与键盘交互完整度 | 20% | 9 | 9 | 7 | 5 |
|
||||
| 结果浏览、复制、编辑与导出 | 20% | 9 | 9 | 8 | 5 |
|
||||
| 功能组织与对象上下文 | 15% | 9 | 9 | 7 | 6 |
|
||||
| 错误反馈、安全与回归证据 | 10% | 8 | 8 | 6 | 5 |
|
||||
| **加权总分** | **100%** | **89** | **85.5** | **73** | **55** |
|
||||
|
||||
## 布局与设计对比
|
||||
|
||||
| 项目 | 布局与设计 | 适合借鉴 | 详细不足与取舍 |
|
||||
|---|---|---|---|
|
||||
| DBFlux | 连接树 + 文档标签 + 数据区 + 右侧检查器;深浅主题统一;底部状态与任务分离 | 面包屑显示对象上下文、复制/编辑按目标与能力启用、单元格详情、键盘操作 | 三栏同时展开时数据区受挤压;图表、Dashboard、脚本、任务、审计增加学习成本;截图字号偏小,高密度不是所有用户的最佳默认。GPUI 实现不能直接移植进 Tauri |
|
||||
| DBX | 顶部全局操作、连接/库/Schema 树、多标签、结果工具条与 AI 侧栏;类型信息进表头 | 菜单的目标同步、列操作、复制格式、SQL 编辑器边界测试、连接/库/Schema 分层 | 同屏工具条和图标入口较多;AI 展开后宽表横向空间不足;多数据库/云/CLI/浏览器形态使产品复杂,OpsxDB 不应照搬浏览器操作模式;大量能力不等于每个驱动同等成熟 |
|
||||
| RustGrid | Navicat 式大图标工具条、左树、中间对象/查询标签、下方结果与分页 | 清晰的对象类别、显式运行/停止、筛选/排序/导出紧邻数据、中文可发现性 | 大图标顶栏与多排工具条占用垂直空间;截图存在标签截断;界面更传统、设置与细节组织不如前两者统一;README 明示早期迭代,不应按文档能力视为稳定验收 |
|
||||
| OpsxDB | 紧凑顶栏、左侧连接/对象树、编辑器与结果上下分割、可开关 AI;底部状态栏样式存在但未挂载,状态实际经结果工具条与 toast 呈现 | 保留紧凑桌面结构与现有主题;使用已有能力补齐交互 | 图标/文字密度不统一;树、编辑器和结果菜单各自实现;右键主路径已补齐一轮(编辑器/结果/树,2026-10-14 落地待桌面验收);库上下文已随新建查询与模板补齐,PG Schema 语义未完;结果分批 500 行增量显示,仍非真正虚拟滚动;持久化密码是混淆而非钥匙串加密 |
|
||||
|
||||
## 功能对比与证据
|
||||
|
||||
| 能力 | DBFlux | DBX | RustGrid | OpsxDB 缺口 |
|
||||
|---|---|---|---|---|
|
||||
| 编辑器 | 文档工作区、历史、保存查询、键盘命令 | CodeMirror 编辑与上下文菜单、目标同步回归测试 | 高亮、补全、美化、命名查询 | 右键已接入:执行选中/当前、格式化(选区/全文)、注释/取消注释、查找替换、按光标标识符跳 DDL(支持 库.表 限定名);CodeMirror 6 + 库表列补全 + DataGrip 风高亮 + 历史面板。剩余:定义跳转仅限已加载元数据中的明确标识符,别名/CTE/未加载对象后置 |
|
||||
| 结果网格 | 虚拟表格、检查器、过滤、分页、Copy as Query | 复制格式、列冻结/隐藏、筛选/排序、详情、结果上下文工具 | 分页、编辑、筛选、导入导出 | 右键已接入:复制单元格/行/列(TSV)、列名、排序、列宽、行 JSON/INSERT、筛选结果复制、导出当前结果 CSV/JSON;首批 500 行可增量「继续显示」。剩余:非虚拟滚动;TSV 不含表头;桌面剪贴板与保存文件待验收 |
|
||||
| 对象操作 | 驱动能力决定菜单,Schema 层级 | 多 Schema 与连接/查询上下文区分 | 对象类别、表/视图/例程与备份 | SELECT/INSERT 模板已入菜单并新开带库查询(UPDATE/DELETE 函数就绪未开放);新建查询携带所点库并持久化;限定名复制、设为默认库、删除库已有。剩余:PG Schema 语义与 search_path;库节点断开/重连归属;表右键直达导出 |
|
||||
| 设置/安全 | 设置、配置/秘密存储说明、审计与错误关联 | 设置、驱动管理与回归测试较全面 | 主题/语言,XChaCha20-Poly1305 本地密钥存储 | 设置左导航 + 搜索已重构,安全页明示混淆非加密;主题已支持深/浅/随系统(2026-10-14 补齐)。剩余:国际化未实现(无 i18n,文案硬编码中文);凭据仍 Base64 混淆,Keychain 迁移需独立设计 |
|
||||
| 扩展能力 | 图表、Dashboard、可视化查询、脚本/MCP | 数据传输、ER、AI、多引擎与多部署形态 | 导入导出、备份还原、账户与例程 | 主路径优先,不在此轮加入 BI、权限系统、远程协作或第二套客户端 |
|
||||
|
||||
本地证据(相对各参考项目根目录):
|
||||
|
||||
- DBFlux:`resources/dbflux.png`、`docs/USAGE.md`、`crates/dbflux_ui_sidebar/src/context_menu.rs`、`crates/dbflux_ui_document/src/data_grid_panel/context_menu/items.rs`、`data_grid_panel/row_inspector.rs`。
|
||||
- DBX:`docs/screenshot-dark.png`、`docs/screenshot-light.png`、`apps/desktop/src/lib/dataGrid/dataGridContextMenu.ts`、`components/editor/__tests__/QueryEditorContextMenu.spec.ts`、`lib/sql/newQueryContext.ts`(后两项相对 `apps/desktop/src`)。
|
||||
- RustGrid:`docs/img/img2_cn.png`、`docs/img/img4_cn.png`、`crates/rustgrid-app/src/app/grid_menu.rs`、`app/query_editor.rs`(相对同一 src)、`crates/rustgrid-config/src/secrets.rs`、`README_zh.md`。
|
||||
- OpsxDB:`src/Workspace.tsx`、`src/SqlEditor.tsx`、`src/ObjectTree.tsx`、`src/ResultPane.tsx`、`src/store.ts`、`src/secrets.ts`、`src/SettingsModal.tsx`、`src/contextActions.ts`(右键复用工具)、`src/tableMetadata.ts`(表元数据目录查询)。
|
||||
|
||||
## 结合 BACKLOG 的优化路线
|
||||
|
||||
1. **操作闭环(2026-10-14 已落地,待桌面验收)。** 对应 BACKLOG §3:编辑器格式化/注释/查找替换/复制信息与光标标识符定位,库查询上下文,表 SQL 模板与限定名,结果集复制与导出右键;统一菜单的键盘、视口边界与焦点处理。逐项验收清单与剩余边界见 BACKLOG §3,菜单均调用既有逻辑,无仅补文案的占位项。
|
||||
2. **可理解性(已随上项落地)。** 菜单按目标对象与能力裁剪;复制连接信息不带凭据,INSERT 缺少可靠来源时禁用;保留当前浅深主题和桌面产品边界。
|
||||
3. **后续专项:数据层与性能。** PG Schema 默认路径的连接池隔离、真正虚拟滚动、整表导出与导入任务进度;需数据库环境与规模数据实测后验收。
|
||||
4. **后续专项:安全与完整设计系统。** OS Keychain 凭据迁移、统一 SVG 图标、系统主题/语言、统一错误诊断与测试;不能将 Base64 混淆宣传为加密。
|
||||
|
||||
本轮完成情况与未验项回写 `BACKLOG.md`,不因菜单增加直接提升评分;优化后需以桌面任务验收重新评估。
|
||||
Reference in new issue
Block a user