# OpsxDB 待开发 / 待验证清单 > 维护:项目经理 / 全栈 / 测试补记 · 更新:2026-10-14 > 已完成能力见各迭代验收;本文只列**未做完 / 待真实例 / P1 后置**,方便排人。 ## 使用说明 - **P0**:影响主路径或已承诺,优先排 - **P1**:增强体验,可后置 - **环境缺口**:代码/表单已有,缺真实例才能验;有环境再测 - 改代码后:`./run.sh restart`(改 `server` 必须重编) --- ## 去 Web 客户端(产品口径 · 2026-09-20) | 项 | 状态 | 说明 | |----|------|------| | `./run.sh web` 只起 Gin 官网/docs | **已做** | 浏览器不当客户端 | | `:5174` 不作产品入口 | **已做** | 仅桌面 Vite 源;`web-only` 弃用提示 | | `src` / `src-tauri` | **保留** | Tauri `devUrl`/`frontendDist` | | README 写清形态 | **已做** | 浏览器=站;操作=桌面 | | 验收 | 待测 | `gui` 可用;浏览器无工作台主路径;`:8788` 官网/docs 通 | --- ## 1. 引擎验收与状态(产品口径已定) | 分层 | 引擎 | 状态 | 待办 | |------|------|------|------| | A | MySQL / MariaDB / PostgreSQL / SQL Server / SQLite / Redis(单机) | 已验收 | 回归保持即可 | | B | TiDB | `ready`+**已验收** | TiDB v7.5.0 docker 真实例全链路(2026-09-21) | | B | PolarDB / OceanBase / TDSQL / Kingbase / GaussDB·openGauss | **已翻「已验收」**(2026-09-21 用户决策) | 验收口径放宽:协议族同码 + 代码审查通过即可先上线,真例 bug 即修;族真实例(TiDB/PG)已验 | | B 环境限 | Oracle | **已翻「已验收」**(2026-09-21 用户决策) | 代码审查通过(go-ora);本机 ARM 起不了 XE,真例问题按 bug 修 | | C | MongoDB / Elasticsearch / ZooKeeper / InfluxDB | **已接入+本机验收**(2026-09-21) | 回归保持;ES 走原生 SQL API(官方 JDBC 付费),ZK/Mongo 走 JVM agent,InfluxDB 走原生 HTTP | | C | 达梦 | **已翻「已验收」**(2026-09-21 用户决策) | agent 桥 sqlite-jdbc 端到端验证;jar 自备(fetch.sh 指引),真例问题按 bug 修 | 注册表:`connection-types/connection-types.json`(`ready` / `verified` / `notes`)。 --- ## 2. Redis 拓扑与工作台 | 项 | 状态 | 待办 | |----|------|------| | 单机 + 键浏览 | 已收 | — | | 键树按分隔符编文件夹 + 类型色点 | 已交 2026-09-20 | 对标 ARDM | | 键详情(TTL / 重命名 / Hash 增删改 / JSON) | 已交 2026-09-20 | 对标 ARDM + opsxsql | | CLI 与 SQL 共用编辑器(Redis 按行、命令补全、通用 Do) | 已交 2026-09-20 | 不另开 CLI 页;独立 REPL 列为后置 | | Sentinel / Cluster **表单 + 后端** | 已交 | — | | Cluster 真实例测连 + 键浏览 | **本地 3 主拓扑已实测**(2026-09-21:表单建 Cluster 连接、跨分片扫键 19/19 全量、键值/行操作回归);2026-10-15 复验修复后 SET/GET/DEL 跨槽正常(见文末补记) | — | | Sentinel 真实例 | **已实测**(2026-10-15:docker 起最小拓扑 master+sentinel,FailoverClient 经 sentinel 解析 master,SET/GET/SCAN 键列表/多 DB 0-15 全通;测后容器已清理) | 多 sentinel/主从切换 failover 场景未测 | | Sentinel / Cluster 文档 | 已交 2026-09-20 | `08-redis.md` / `04-connect.md` | | 独立 Redis CLI Tab / 监控 / 慢日志 | 后置 | 对标 ARDM CliTab、opsxsql 监控页;非主路径 | --- ## 3. 右键菜单 **2026-10-14 对比优化后状态:主路径已补齐一轮,尚未全部验收。** 设计评分与详细不足见 [GUI 对比报告](GUI-COMPARISON.md)。下表覆盖历史补记中相关「已做」口径;已有工具栏功能不等于已接入右键。标记「已接入」表示代码已落地,仍需在桌面 Tauri 中逐项验收,源码与单测不替代实机及方言验证。 | 编号 | 优先级 / 区域 | 功能 | 当前状态 | 待开发 / 验收要求 | |------|---------------|------|----------|-------------------| | 1 | P0 编辑器 | 格式化 / 美化 SQL | 已接入右键,与工具栏复用 | 有选区仅格式化选区,无选区格式化全文;待桌面回归撤销与各方言 | | 2 | P0 编辑器 | 执行选中 / 当前语句 | 右键已有,共用执行逻辑 | 回归选区、空白处、语句边界,与工具栏行为一致 | | 3 | P0 编辑器 | 注释 / 取消注释 | 已接入 CodeMirror 注释命令 | 覆盖选区与当前行;非 SQL 驱动禁用;待桌面方言回归 | | 4 | P0 编辑器 | 复制为纯文本 / 带连接信息 | 已接入,两种复制方式 | 无选区复制全文;连接摘要仅白名单字段,不含用户、密码、SSH 密钥;剪贴板失败不删除选区 | | 5 | P0 编辑器 | 查找替换 / 跳转到定义 | 搜索替换已接入;明确表名可跳 DDL | 仅解析已加载元数据中的明确标识符,跳过字符串/注释;别名、CTE、未加载对象和复杂解析仍后置 | | 6 | P0–P1 库 / Schema | 新建查询(带当前库) | 已绑定所点库并持久化 | 普通新查询继承连接默认库;旧标签库不随默认库改变,已有单测;PG Schema 独立上下文见第 10 项 | | 7 | P0–P1 库 / Schema | 刷新对象 | 已实现 | 回归刷新范围、加载态与失败提示 | | 8 | P0–P1 库 / Schema | 复制连接串 / 主机端口 | 连接/库菜单已增加无凭据地址与主机端口 | IPv6 已覆盖;完整 JDBC、Oracle SID、Redis Sentinel/Cluster 多节点 DSN 仍需按驱动完善,当前地址不宣称可直接导入全部客户端 | | 9 | P0–P1 库 / Schema | 断开 / 重连 | 部分:连接节点已有,库节点没有 | 补齐库节点入口或明确归属连接入口;验证状态同步与失败反馈 | | 10 | P0–P1 库 / Schema | 设为默认库 | 部分:修改保存的连接配置 | 补齐会话语义:MySQL 默认库切换、PG Schema 的 `SET search_path`;验证后续查询与重连,不只显示成功提示 | | 11 | P1 表 / 视图 | 打开表数据 / 前 N 行 | 已接入前 N 行输入(1–10000) | 通过请求分页传递行数,不向预览 SQL 固化 LIMIT;已加载结果每批显示 500 行,可继续展开;待真库分页与大结果验证 | | 12 | P1 表 / 视图 | 查看表结构 / DDL | 已有,DDL 按驱动能力控制 | 回归表与视图、目标对象及不支持引擎的禁用状态 | | 13 | P1 表 / 视图 | 生成 SELECT / INSERT 模板 | 已接入并新开带库查询,避免覆盖草稿 | 视图不提供 INSERT;引用列名与限定名;INSERT 为待填值模板,待真库方言回归 | | 14 | P1 表 / 视图 | 导出表 CSV / JSON(可后置) | 部分:表右键已接「转储 SQL 文件」三态(2026-10-14,见文末补记);CSV/JSON 整表右键直达仍缺 | 复用导出能力,明确整表与当前结果范围,验证格式与失败提示 | | 15 | P1 表 / 视图 | 清空表 / 删除表 | 已实现,按能力裁剪并危险确认 | 回归取消不执行、确认后执行及刷新;视图不显示清空表 | | 16 | P1 表 / 视图 | 复制表名(带库前缀) | 已增加限定名复制 | MySQL 使用库前缀,PG/MSSQL 使用 Schema;标识符转义已有单测,异常元数据命名仍需真库回归 | | 17 | P1 结果集 | 复制单元格 / 行 / 列(TSV) | 已接入单元格、行号、列头和空白菜单 | 基于实际右键目标与当前排序;TSV 不含表头,保留 NULL/JSON 并引用制表符/换行;待桌面剪贴板验收 | | 18 | P1 结果集 | 复制为 INSERT / JSON | 已接入当前行 INSERT/JSON 与当前结果 JSON | INSERT 使用结果自身记录的表来源;任意 SQL 无可靠来源则禁用;不猜测全局表名 | | 19 | P1 结果集 | 导出当前结果 | 右键已接入 CSV / JSON | 复用当前结果导出;只导出当前已加载结果,不冒充整表;待桌面保存文件验证 | ### 第二轮:数据展示、上下文操作、视觉细节 产品原则:借鉴 DBFlux 的布局与上下文层级,借鉴 DBX 的实用功能和回归;保持操作简单,不堆功能。以下为代码已落地、待桌面视觉/交互验收项目。 | 方向 | 已落实 | 验收重点 / 剩余限制 | |---|---|---| | 数据展示 | 本地跨列筛选、匹配数、对象路径/列数/耗时;首批 500 行,可继续显示全部已加载行 | 明确本地筛选不查库;已移除固定 2000 行不可继续查看的限制;分批展示不等于虚拟滚动 | | 值可读性 | NULL、空字符串、空白文本和布尔值区别展示;数值右对齐;长 JSON/文本详情可复制 | 详情只读;大整数文本排序已有精度回归,数据库原始值不改动 | | 右键实用性 | 单元格:详情/复制;列头:列名/复制列/排序/适应列宽;空白:结果复制/导出 | 按目标隐藏无关操作,不堆一屏禁用按钮;Ctrl/Cmd+C、Shift+F10 和方向键待桌面回归 | | 视觉层级 | 修复粘性表头被相对定位覆盖;轻量结果工具条、分批加载提示、双击列边界适应内容 | 浅深主题、窄窗、长列名、滚动和数字对齐待实机验收 | | 连接右键 | 复用统一菜单:连接/断开、重连、编辑、复制、危险操作分组 | 视口约束、Esc、方向键、外点焦点保持;对象树旧菜单仍需后续统一 | | 状态与正确性 | 列宽/排序按结果集保存,切换时阻止旧状态串写;写回/回滚只更新原结果集;来源不明确禁用 INSERT/写回 | 已新增跨结果更新回归;真实数据库失败与切换时序仍待验证 | 下一轮:完成桌面右键任务验收、PG Schema 默认路径与连接池隔离;之后完善整表导出、驱动专属连接串和真正虚拟滚动。断开/重连归属连接节点,第 9 项的库节点入口暂不重复添加。 本轮验证:前端构建与类型检查通过,54 项测试通过,Go 编译通过;覆盖复制/标识符/库上下文、跨结果集更新、筛选、数值排序与长值展示。新增菜单支持上下方向键、Home/End、Enter、Esc、视口约束与焦点归还。桌面操作工具未获准访问 OpsxDB,视觉、剪贴板与真库验收仍待完成;不据此将评分自动上调。 统一验收:选区与空白右键、菜单视口边界、Esc / 外点关闭、禁用项说明、操作后焦点恢复;涉及执行的操作复用现有危险确认与错误反馈。仅在桌面验收,不把 `:5174` 作为浏览器产品入口。 核查入口:`src/Workspace.tsx` / `src/SqlEditor.tsx`(编辑器)、`src/ObjectTree.tsx` / `src/ConnectionSidebar.tsx`(树与连接)、`src/ResultPane.tsx`(结果集)。 其他后置项:创建片段、AI 自动填充、表重命名、UPDATE/DELETE 模板开放、执行 SQL 文件、索引/外键编辑(设计表 v1 与转储/新建表已于 2026-10-14 落地,见文末补记)。同步、比较、权限、BI、逆向等不在本轮范围,需另行立项。 --- ## 4. 连接与安全 | 项 | 状态 | 待办 | |----|------|------| | 分引擎常规字段 + SSH 隧道 | 已收 | — | | SSL(含 MSSQL 自定义 CA、Oracle 客户端证书) | 已收 | — | | HTTP 隧道 Tab | 后置 | 对标 Navicat HTTP | | 连接导入/导出、云同步 | 未立项 | — | --- ## 5. 工作台与结果集 | 项 | 状态 | 待办 | |----|------|------| | 多结果集 / 书签 / 查询历史 | 已收 | 执行计划按钮及结果页签按用户要求移除;不再列入近期开发 | | 查询取消 | 已收 | — | | 内联编辑 / 多格粘贴 / 行删 / 撤销本格 | 已收 | — | | 虚拟滚动大数据集 | 部分(限显截断) | P1:真虚拟滚动 | | 深色/浅色/随系统主题 | **已做**(2026-10-14 补「随系统」:设置三段选择 + `prefers-color-scheme` 监听,系统切换即时生效,编辑器高亮跟随生效主题) | 桌面切换系统外观实测 | --- ## 6. AI / MCP / Agent > 任务书:[15-AI-MCP-Agent.md](15-AI-MCP-Agent.md)(2026-10-15:**MCP-first**,内部会话共用工具层) | 项 | 状态 | 待办 | |----|------|------| | 右侧 AI 面板可开关 | 已收 | — | | 真模型接入(生成/解释/优化) | **已接**(2026-10-14:Provider 预设 + 三协议,见 §23 补记) | 桌面接真实云端 key 验收;流式输出后置 | | MCP 最小工具集 + 安全策略(**P0 纯只读**) | **本轮落地** | `aitools` + `opsxdb-mcp` stdio;白名单/审计/connections.json 双写;写+确认=P1;验收盯 MySQL/PG/Redis | | 内部 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) | --- ## 7. 桌面 / 文档 / 工程 | 项 | 状态 | 待办 | |----|------|------| | `./run.sh gui` / DMG 打包 | 已有 | 发版流程与签名(若上架) | | docs + 落地页 | 已有 | 补「测试环境」页(链到 `tests/README.md`);Sentinel/Cluster 说明 | | 引擎图标打包进 UI | 已收 | — | | 本地大改动入库 | **待推远程** | Kimi 改造 + 右键 + Sentinel/Cluster + notes 等,需确认后 `git push` | | sidecar 二进制不入库 | 约定 | 构建脚本生成 | --- ## 8. 测试环境(联调) 文档:`tests/README.md` · 启动:`cd tests && ./dbctl.sh up a|b|c|…`(**一次一个库**) | 代号 | 库 | 端口 | 账号 | 密码 | |------|----|------|------|------| | a | MySQL | 3306 | root / opsx | Demo@123 | | b | MariaDB | 3307 | root / opsx | Demo@123 | | c | PG | 5432 | opsx | Demo@123 | | d | SQL Server | 1433 | sa | Demo@12345 | | e | Oracle | 1521 | opsx | Demo@123(本机常起不来) | | f | Redis | 6379 | — | — | 联调顺序:`./run.sh gui` → `dbctl up ` → 测连 → 查询。 --- ## 9. 建议排期(给人用) 1. ~~文案/注册表:B 层 `notes`~~(已写,悬停「未验收」可见) 2. **入库**:整理 diff → 提交推 Gitee 3. **环境到位再测**:真 Oracle / 真国产库 / Redis Sentinel·Cluster 4. **P1 选做**:结果表右键、生成 SQL、导出、美化 SQL、AI 真接、Redis 独立 CLI/监控 有实例或排人变更时,改本文件并注明日期。 --- ## 10. 全栈待办补记(2026-09-20) | 项 | 优先级 | 说明 | |----|--------|------| | B 层 `notes` | 已做 | 见 `connection-types.json`;UI「未验收」悬停展示 `notes` | | 推远程 | 待你点头 | 右键 P0、Sentinel/Cluster、引擎图标打包、B notes、BACKLOG 等仍在本地 | | 结果表自绘右键 | P1 | 现仅 `preventDefault` | | Redis 拓扑 docs | 已做 | `08-redis.md` Sentinel/Cluster/键树/CLI 决策 | | Redis 键树 + 键详情 | 已做 | 分隔符文件夹、类型色点、TTL/字段编辑 | | Redis 独立 CLI Tab | 后置 | 与 SQL 编辑器共用,见 08-redis.md | | C 层驱动接入 | 立项 | Mongo/ES/ZK/Influx/达梦 | | 真 Sentinel·Cluster 联调 | 环境缺口 | 有实例再改再测 | --- ## 11. 测试侧待办(测试工程师) | 项 | 状态 | 待办 | |----|------|------| | 右键验收 1–3 / C 灰态 / A 回归 | 已绿(2026-09-20 再跑) | sqlite/a/b/c/f/d 顺序单实例全绿;Oracle ORA-00442 | | B 层协议冒烟 | 已做;**不摘标** | 真 TiDB/Polar/OB/Gauss/Kingbase/TDSQL 实例到位再验 → 再谈 `verified` | | Oracle / 达梦 | 环境限 / 未接入 | 2026-09-20 Oracle 容器起了但 ORA-00442;达梦未接入 | | Redis Sentinel·Cluster 真拓扑 | 表单+字段校验已绿 | 有拓扑:测连 + 键浏览(扫/看/删) | | 结果表自绘菜单 / 右键 P1 | 代码已接入,待桌面验收 | 按 §3 核对右键目标、排序后复制、NULL/换行、多结果切换与文件保存 | | 改 `server` 后 | 约定 | 验收前确认 `./run.sh restart`,避免旧二进制误判 | 验收时勿并开多个 `dbctl` 库;结论回写本文件或群对齐即可。 --- ## 12. 设计侧待办(设计师 · 2026-09-20) | 项 | 状态 | 说明 | |----|------|------| | SQL 编辑器右键 P0 结构 | 2026-10-14 已扩充 | 格式化、注释、搜索替换、定义跳转与连接摘要复制;实际边界见 §3 | | 对象树三套 P0 线框 | 已钉 | 库 / 表 / Redis 键;P1 虚线项见群线框与 §3 | | Redis Sentinel·Cluster 表单字段 | 已钉 | 同页切部署模式;节点列表 · masterName · 双密码;Cluster 无 DB 索引 | | 引擎缺图 fallback | 待验 | 灰底首字母,禁用蓝 `?`;未就绪灰 / 未验收橙+悬停 | | 对象树右键 P1 视觉 | 未开 | 生成 SQL ▸ · 导出 ▸ · 设计表 · 新建表 等,全栈开做时补密度 | | 结果表自绘菜单 | 已接入,待视觉验收 | 标题标明列目标、操作分组、方向键导航、视口约束与焦点恢复 | | 顶栏文案 | 已收 | 连接 · 新建连接 · 新建查询 · 查询历史 · 快捷键 | 线框产物(本机):`~/devops/opsxdb/.ui-review/ctx-menus/`。新增设计待办只改本文件。 --- ## 13. 全栈补记(2026-09-21 · ZCode 会话交付) ### Redis 工作台增强(对标 ARDM/opsxsql 后落地) | 项 | 状态 | |----|------| | 键搜索:输入即子串过滤 + 回车服务端模糊 SCAN(无通配符自动包 `*q*`) | 已做 | | 类型筛选下拉(string/hash/list/set/zset/stream,前端过滤 + 计数同步) | 已做 | | 去掉「键 N」中间层:db 展开直接是 `agent 39` 文件夹 | 已做 | | 行级复制 = 完整重建命令(ZADD/HSET/SADD/RPUSH key …),实测剪贴板 | 已做 | | JSON 单元格:单行 minified 摘要(160 截断)+「更多」+ 点击弹层 pretty 查看/复制 | 已做 | | zset Score 毫秒/秒时间戳 → 可读时间副显(`tsLabel`,误判有单测) | 已做 | | 表格分批渲染:首屏 100 行 + 「加载更多(已显示 X / 共 Y)」 | 已做 | | 集群跨分片 SCAN(`scanAll` ForEachMaster,本地 3 主 19/19 键实测;编辑器 SCAN 同步修) | 已做 | | Key 树 SCAN 续扫(单机/Cluster 按主节点保存游标,逐页合并去重) | 已做;真大键空间/集群拓扑变化待桌面复验 | | Hash/Set/ZSet 值分页(HSCAN/ZSCAN cursor,>500 大键真翻页) | 已有续载实现;真实大键待复验 | | 批量操作(多选删/按 pattern 批删/导出导入)、监控 INFO/慢日志、更多 viewer(hex/msgpack) | 后置 | | Sentinel 真拓扑联调 | 环境缺口 | ### 通用工作台(本会话交付) | 项 | 状态 | |----|------| | 对象树库/表过滤框(命中自动展开、计数同步) | 已做 | | 查询历史:去重置顶、一键重跑 ▶、过滤框、耗时/行数/失败红标(上限 200) | 已做 | | 点表名打开前 100 行(单击延迟/双击立即,脏 Tab 确认) | 已做 | | Tab 标题表名化(打开表的新 Tab 显示表名而非「查询 N」) | 已做 | | 表右键:生成 SELECT/INSERT/UPDATE/DELETE(列感知+方言引号+主键 WHERE)+ 截断/删除表(危险确认) | 历史交付记录;2026-10-14 已补 SELECT/INSERT 菜单,UPDATE/DELETE 模板未开放;截断/删除已接入,当前状态见 §3 | | 库右键:新建查询 | 2026-10-14 已补所点库上下文与持久化回归,见 §3 | | 结构页:索引/外键/触发器区块(MySQL 族 information_schema,前端直连) | 已做 | | 表设计器 / 表重命名 / CREATE TABLE 生成 | **未做**(P1);右侧结构查看已有字段及部分引擎的索引/外键/触发器,不等于修改能力 | | 数据导出(CSV/JSON/INSERT/整表/完整查询) | **已有部分入口**;表右键、流式大表验收、文件与失败处理仍待完善,详见专项盘点 | | 结果表自绘右键 | 2026-10-14 已补复制与导出,桌面验收待办见 §3 | ### 去 Web 客户端收尾(在 §「去 Web 客户端」基础上) | 项 | 状态 | |----|------| | 死包清理:`packages/transport`、`packages/core`(opsxapi 残留,零引用)整包删除 + 依赖/alias/test:core 清理 | 已做 | | 生产构建浏览器守卫:非 Tauri + PROD → 「请在桌面应用中打开」导引页(桌面不受影响) | 已做 | | CORS 收紧:仅留 5174(桌面 devUrl)与 tauri:// 两个来源 | 已做 | | 文档/官网口径统一:删「Web 自托管」形态卡与双形态表述;FAQ 明确「浏览器不能操作」 | 已做 | > 历史验收口径:当时「已做」项经桌面 App 实测(本地 MySQL/Redis 单机 + 3 主 Cluster)或单测覆盖(38 例全绿);不代表迁移后的当前状态,右键菜单以 §3 的 2026-10-14 核查及后续桌面复验为准。测试侧复跑按 §11 流程。 ## 23. 三项目状态收敛 + opsxdb 设置重构与 DataGrip 高亮(2026-10-14) | 项 | 状态 | |----|------| | 三项目基线提交(防再丢) | opsxdb 456fa69 / opsxapi 6452026 / opsxshell be151cb;迁移/官网拆分等改动已全部入库。目录还原事件教训=每完成一步立即 commit | | opsxdb 设置重构(对齐 opsxshell) | 左导航:搜索框 + 图标/主标题/副文案三层 + 选中左强调条;宽 176→208;语言切换(自动/中文/English)进常规分区 | | 「连接已断开」横幅移除 | 已做:整条顶部红色横幅删除(状态行已有提示,顶部横幅不友好);重连能力保留 | | SQL 高亮 DataGrip 风 | 已做:关键字亮蓝加粗 / 字符串红 / 数字浅绿 / 注释灰斜体 / 标识符浅灰白;light 同构对齐 IntelliJ | | opsxapi 迁移 | 回滚到可用基线 6452026(apps 布局保留)——用户确认只做 opsxdb;迁移半成品已弃 | | 修复:GUI 样式全丢(白底裸控件) | 已修:根级迁移漏了 tailwind.config.ts / postcss.config.js(content 路径已改 ./src)与 index.html/public 资源;CSS 产物 12KB→32KB(Tailwind 全量恢复)。教训:单包迁移 checklist 应含样式链 | - 2026-10-14:完成根级 Tauri 2 目录整理,移除 apps/packages 重复副本,修复启动、打包、sidecar 路径及图标引用;homepage 未改动。 ### 对象树与 dbx 表操作补充(2026-10-14) - 库下保留表、视图、存储过程、函数四类分组,按驱动能力裁剪;视图现在可展开字段。 - 表下增加索引、外键、触发器分组,展开时才查询;支持独立刷新、复制名称和定义/详情,失败提示重试,未适配引擎明确提示。MySQL 系列、PG 系列、SQLite 已实现目录查询,真实引擎兼容性待验收。元数据最多取 1000 项并提示截断。 - 表右键补齐「查看结构」及「复制建表 / 视图 SQL」,与已有查看数据、前 N 行、DDL、复制名称、SELECT/INSERT 模板、刷新、危险确认操作组成常用菜单。 - 当时对 dbx 截图的后续清单:重命名、表级导入、克隆表;UPDATE/DELETE 模板及表级 CSV/JSON 导出已在后续落地。关系图、数据比较后置;检查约束尚未接入。 - 验证:新增目录查询边界测试;桌面展开/收起、主题、右键定位及真实数据库权限、目录兼容性仍需验收。 ### AI 与 Redis 易用性(2026-10-14) - AI 数据库上下文优先跟随 SQL 标签的当前库;输入区展示连接/库。精简顶部重复选择器和快捷按钮为底部操作选择、多行输入、简短空态。响应仅写入原标签且不覆盖等待期间修改的 SQL。 - Redis Key 搜索框支持回车/搜索按钮;单机各 DB 节点和 Cluster 顶部有独立搜索。输入阶段不请求服务端;无通配符时自动按 `*关键词*` 扫描,完整同名 Key 单独置顶;每批最多 20 次 SCAN(COUNT 200 为提示而非硬限制)、通常返回约 500 项。后续已加入「加载更多」游标续扫;有限扫描无命中不代表 Key 不存在。Cluster 只显示 Key 树,隐藏 DB0 层。 - SQL 工具条可切 Redis 单机 DB0–DB15;切换连接时选择该连接的查询标签,或新建一个标签,AI 库上下文只读取当前连接对应的标签。新建/重选旧标签及命令执行统一校正 Redis 库号,Cluster 固定 DB0 并拒绝 SELECT 切到非零库。AI 操作改为可见选项,删除“方言”。Key 树仅标有效期,不重复标“永久”;键详情可修改 TTL 并保存,0 秒禁止误删。 - 集群拒绝连接增加可操作诊断;本机未发现 7001 监听。需确认用户的种子地址与节点公布地址,不能宣称连接故障已修复。 - 前端构建及 81 项测试通过,Go 编译及 2 项无网络扫描预算回归通过;需监听端口的 Redis 集成测试受沙箱限制,真实集群和桌面视觉仍待验收。 ### 工作台标签整理(2026-10-15) - 启动时无内容的「查询 1」只作为内部编辑器占位,有实际标签时自动移除;表预览命名为「表名@库名」,旧表标签按当前库显示同样格式。标签只显示驱动图标、名称和未保存标记,连接名移至悬停提示;选中态和关闭按钮统一整理。相同表的当前预览可重复刷新,不再生成同名标签;已有 SQL/草稿不会被表预览覆盖。 - 验证:82 项前端测试、前端构建通过;真实桌面窄窗口和多标签滚动仍待视觉验收。 ### 表设计器对比与增强(2026-10-15) - 对照 dbx 结构编辑器和 Navicat 截图:此前弹窗只有字段单页与列级 DDL,宽度不足,缺少普通索引与表注释编辑。借鉴分区标签、紧凑网格、固定预览层级;DBFlux 的代码重点在 Schema 树与浏览,当前未直接复制第三方实现。 - 设计器改为大工作区与字段/索引/外键/触发器/SQL 预览分区。MySQL 系列可编辑普通 BTREE、唯一/复合索引与表注释;特殊索引只读,PG/SQLite 索引及外键/触发器只读。字段排序仅新建表有效。元数据读取失败、存在不支持的变更时禁用应用;实际应用前展示 DDL 确认。 - 修复 MySQL 列 `Extra` 未传递造成自增属性在字段修改时可能丢失的问题。索引 DDL 与转义有单测,真实桌面交互、MySQL/MariaDB 兼容性以及结构漂移校验仍待验收。 ### 查询标签的 USE 切库(2026-10-15) - 普通 SQL 通过当前标签的库发给本机会话,后端按库打开连接池。原先 MySQL/SQL Server 的 `USE` 只修改池中的单条物理连接,标签与下一条语句可能仍指向旧库;现改为验证目标库并更新发起执行的标签,脚本中后续语句读取新库。无效语法或目标库不可用不改变标签,并停止该批次后续语句以免在旧库误执行。PG 改用工具条切库;Redis 单机 `SELECT n`、集群 DB0。 ### 库、表、表设计与数据迁移专项盘点 详见 [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) | 项 | 状态 | |----|------| | 设置→常规主题三段:深色 / 浅色 / 随系统(`prefers-color-scheme` 监听,系统切换即时生效;编辑器高亮跟随生效主题而非原始偏好) | 已做,桌面切换系统外观待实测 | | AI Provider 预设(DeepSeek / OpenAI / Qwen / Kimi / GLM / MiniMax / Anthropic / Gemini / Ollama / 自定义,选预设自动填 Base URL、协议、默认模型;`src/aiPresets.ts`) | 已做 | | AI 三协议:openai-chat / openai-responses / anthropic(`x-api-key` + `anthropic-version`),Go 端 `server/internal/ai/remote.go` 按协议分派,旧配置按 provider 推断协议 | 已做 | | 安全:Base URL 默认仅放行 HTTPS;本地/内网 HTTP 需在设置中显式开启(Ollama 预设默认开启且免鉴权 `authStyle=none`) | 已做 | | 修复:保存 AI 配置时 key 留空不再静默清空已存 key(服务端合并旧值);LoadConfig 补读 protocol/authStyle/allowInsecureHttp | 已修 | | 验证:Go ai 包单测(endpoint 校验/三协议解析/协议推断)、前端 aiPresets 测试、64 项前端测试;后端重启后端到端(anthropic 配置回读、HTTP 拦截文案、本机 Ollama 实连返回 404 model not found 证明链路通) | 已过;真实云端 key 桌面验收待做,流式输出后置 | ### 表设计器 v1 + 转储 SQL + ⌘/ 注释(2026-10-14 · 参考 dbx/rustgrid) | 项 | 状态 | |----|------| | 表右键「设计表…」/ 库右键「新建表…」→ 设计器 v1(`src/TableDesigner.tsx`):字段网格(名/类型/长度/NULL/自增/主键/默认/注释)+ 实时 DDL 预览 + 应用 | 已做,真库验收待做 | | 设计器 DDL 生成(`src/tableDdl.ts`):新建 = 方言化 CREATE(MySQL 族 ENGINE/CHARSET、PG 族双引号);编辑 = 列级 diff ALTER(MySQL ADD/DROP/MODIFY/CHANGE,PG TYPE/NOT NULL/DEFAULT/RENAME,主键组变更 ADD/DROP PRIMARY KEY);SQLite 仅建表+ADD COLUMN,其余注释说明不静默生成 | 已做,11 项单测覆盖 | | 应用走 execSql,ALTER/CREATE 命中服务端危险词表自然进入二段确认;应用后自动刷新对象树 | 已做 | | 表右键「转储 SQL 文件 ▸」三态(仅结构 / 仅数据 / 结构和数据),服务端 `POST /api/db/dump` 流式输出 .sql(结构=SHOW CREATE TABLE/拼装 DDL + 注释头;数据=复用 insert 编码;不带 DROP TABLE) | 已做 | | 快捷键修正:`⌘/`(Mod-/)= 注释/取消注释(CodeMirror toggleComment,对齐 dbx/dbflux/navicat 惯例);帮助面板改 `⌘⇧/`(⌘?);设置与帮助浮层文案同步 | 已做 | | 验证:前端 75 项测试全绿、tsc 通过、Go build/vet 通过;MySQL 3306 真库端到端(建库建表插数据 → 三种转储模式输出正确、文件名头正确、`库.表` 参数归一) | 已过 | | 桌面验收清单:设计器新建表→改字段→改主键全流程、转储大表流式与取消、⌘/ 在选中/单行/Redis 命令模式行为 | 待做 | 设计器 v1 后续:普通 MySQL 索引已可编辑,特殊索引和 PG/SQLite 索引仍只读;外键/触发器编辑、引擎/字符集选项、重命名表、克隆表、结构漂移重校验仍待做,详见审计文档。 ### 表右键与 Redis 键视图细节(2026-10-15) | 项 | 状态 | |----|------| | 表右键按「生成 SQL / 导出数据 / 转储 SQL」折叠,SQL 提供 SELECT、INSERT、UPDATE、DELETE、DDL 五项;CSV/JSON 可输入最多 500000 行上限,默认 100000;达到上限可能不完整,不能代替备份 | 已做;复合主键和大表导出回归待做 | | Redis Cluster 在隐藏 DB0 层的键树顶部提供搜索;单机与集群统一「加载更多」;String 默认 Raw、切 JSON 格式化高亮并可编辑、复制值;集群连接地址显示配置的种子节点(例如 127.0.0.1:7101) | 已做;真实多主大键空间及视觉验收待做 | | CSV 导入向导(预览/列映射/错误行)、结构只读比较、数据比较、导出 XLSX、整库备份/恢复 | 未做;按 `docs/DATABASE-OPERATIONS-AUDIT.md` 的依赖与优先级实施,不加无效按钮 | ### Redis 集群连接失败定位与修复 + 标签确认精简(2026-10-15) | 项 | 状态 | |----|------| | 集群诊断结论:`opsxdb-redis-cluster3`(7101-7103,3 主 16384 槽)健康、宿主机可直连;`opsx-redis-cluster`(:7000)是 `cluster_state:fail` 的孤儿容器(0 槽、无 meet);旧地址 7001-7003 已无监听 | 已定位,**集群无需重启**;建议删除 7000 坏容器避免误连 | | 修复:`redisMode` 未显式选择但填了多个节点时自动按 Cluster 处理(Sentinel 需显式选+masterName 不受影响);单机客户端收到 MOVED/ASK 时错误文案附「切换部署模式为 Cluster」指引 | 已修,`redis_mode_test.go` 补推断与提示单测 | | 端到端(127.0.0.1:8790 临时实例):显式 cluster 与省略 mode 两种方式 SET/GET/DEL 跨槽键全部正常(此前同键 MOVED 直抛);单机 6379 PING 回归正常 | 已过 | | 移除「当前查询未保存…新开标签写入 SELECT?」确认:新开标签不覆盖任何内容,确认无意义;改为 dirty 时直接新开。关闭标签的未保存确认保留(会丢内容) | 已改,前端 75 项测试回归全绿 | | ⚠ 环境冲突待用户处理:`:8788` 被同族 `opsxapi` 的 `opsxdbapi-server` 占用(2026-10-15 00:06 启动,两项目默认同端口);`./run.sh gui` 探测 health 命中后误以为 opsxdb 后端已运行。需停掉 opsxapi 或为其改端口 | 待用户决策 | ### Redis 键浏览与编辑安全(2026-10-15 · 对照 ARDM / DBFlux / dbx) | 项 | 状态 | |----|------| | 参照 ARDM 的暂停/继续 SCAN、DBFlux 的 Cluster 主节点独立游标:左侧单机各 DB 与 Cluster 键树提供「继续查找 Key」;每页最多 20 次 SCAN、通常约 500 项,跨分片续扫,同名 Key 合并,输入新搜索词重新从头查 | 已实现;SCAN 非快照,扫描期间增删 Key 仍可能重现或遗漏;真实多主集群大键空间待复验 | | String 详情保存改为 `SET … KEEPTTL`,避免编辑清除原 TTL;Redis 6.0 前遇到不支持该参数时用原子脚本读取 PTTL/写回;并发时旧键消失会报错提示刷新 | 已修,真实 Redis TTL 往返待复验 | | List 单行删除由 `LREM 1 value` 改为校验索引/原值的原子脚本,避免重复值误删前面一行;按排序/过滤后的真实索引编辑 | 已修;大列表脚本耗时及多人并发需真库复验 | | 值详情已有 hash/list/set/zset 分页、过滤排序、行编辑及 TTL 设置;当前过滤仅作用于已加载行(不宣称全键搜索) | 已有;真大集合翻页待复验 | | 借鉴 DBFlux 的可见键数量/内存大小、服务端 `SCAN TYPE` 和 stream 值管理,dbx 的搜索历史/视图状态与分组设置 | P1:先做服务器端类型筛选与大键提示,再评估 stream 编辑;搜索历史和自动滚动按实际使用反馈取舍 | | CSV/JSON 键级导入导出、批量 UNLINK、离线 RDB 分析、监控/慢日志 | 后置:先验证单键安全与续扫,批量删除不能把 SCAN 结果当作完整集合 |