Files
opsxdb/docs/BACKLOG.md
T
logan 0b68c8344d feat(mcp): P0 只读 MCP tool runtime + opsxdb-mcp stdio
- aitools 共用 runtime:list/describe/schema/query/redis(纯只读,无写确认)
- 白名单 ~/.opsxdb/mcp.json;审计 mcp-audit.jsonl;复用 danger.go
- 桌面 connections 双写 ~/.opsxdb/connections.json(ox1. 解码)
- Cursor 配置示例与任务书验收勾选更新;写操作与 Agent UI 留 P1
2026-10-15 11:14:08 +08:00

378 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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) | 未做(P1) | Ask \| Agent UI(设计阶段 2 先只记文档);多轮 + 步骤展示 |
| GUI 联动(插入编辑器 / 结果网格) | 未做(P1) | 设置页 MCP 配置片段 |
---
## 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 <x>` → 测连 → 查询。
---
## 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 导入 → 表级导出完善 → 逻辑备份与恢复。规划项未标为已完成。
### 主题随系统 + 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 结果当作完整集合 |