Syngnat
|
88b427c41a
|
🔥 remove(go-test): 删除后端读取源码文本断言的测试函数
- 移除 99 个仅读取同包 .go 源码做字符串包含断言的测试函数,共 3746 行
- 判据为函数内出现 os.ReadFile 读取 .go 文件且剥离字符串字面量后不调用任何生产代码
- 保留 2 个同时调用生产接口的测试函数,清理 45 个文件中失去引用的 import
- go build、go vet 通过,测试失败集合由 40 项减至 39 项且无新增,减少项为已长期失败的墓碑用例
|
2026-07-26 21:37:22 +08:00 |
|
Syngnat
|
57a0bb4f69
|
🐛 fix(about): 修正更新通道选中态被 v2 通用 Segmented 样式覆盖
- 上一提交的选择器特异性只有 (0,3,1),与 v2-theme.css:601 的
`body[data-ui-version="v2"] .ant-segmented .ant-segmented-item-selected` 同分,
而 v2-theme.css 在 App.css 之后导入,同分时后加载者胜出,
选中态仍被 --gn-bg-panel 覆盖回灰底,主题色胶囊实际未生效
- 选择器补上 .ant-segmented(.gonavi-about-update-channel.ant-segmented)把特异性提到 (0,4,1)
- 选中项的 color 一并显式设为白色,避免 v2 通用规则的 --gn-fg-1 在强调色底上对比不足
|
2026-07-26 21:21:51 +08:00 |
|
Syngnat
|
bb3a6ee577
|
🎨 style(about): 修正开关与更新通道选择器的主题色一致性
- 修复 v2 深色下「自动检查更新」开关显示为琥珀色:旧版 UI 的
body[data-theme='dark'] .ant-switch.ant-switch-checked 用了两个类,特异性高于
v2-theme.css 的 .ant-switch-checked,即便 v2 样式后加载也会被压过。
给旧版规则加 :not([data-ui-version='v2']) 限定,让 v2 的 --gn-accent 生效
- 同一根因的 .ant-radio:hover 琥珀描边一并限定(v2 未覆盖该选择器,同样会泄漏)
- 更新通道选择器改为主题色实心胶囊:原深色下选中态 rgba(30,41,59,.98) 与容器底
rgba(15,23,42,.55) 对比极低,选中状态几乎不可辨且未体现主题色。
选中项与切换滑块统一用 var(--gn-accent) + 白字,未选项透明底、hover 微亮,
并补充跟随主题色的键盘焦点环
- --gn-accent 仅在 v2 下定义,故新规则限定 v2 作用域,旧版 UI 保留原中性配色
未加测试:两处均为纯 CSS 视觉改动,jsdom 不加载外部样式表、无法断言计算样式;
且项目已立规约禁止新增读取源码文本的断言型测试(src/testPolicy.test.ts)。
已通过 tsc --noEmit 与 useAppUpdateManager/customThemeStore/v2ThemeModalConfirm/testPolicy 共 34 项测试。
|
2026-07-26 21:18:27 +08:00 |
|
Syngnat
|
3ea04f5530
|
🐛 fix(webserver): 修复 X-Forwarded-For 可绕过登录失败锁定
- clientIP 改为以不可伪造的直连对端地址为准:该头完全由客户端控制,原实现无条件采信其首值,
直连攻击者每次请求换一个值即可拿到全新限流桶,彻底绕过 5 次失败锁定
(口令下限仅 6 位可在线爆破),并使 attempts map 无界增长;且每次尝试都会触发一次
64 MiB 的 Argon2id 推导,形成认证面的 CPU/内存 DoS
- 新增 GONAVI_WEB_TRUSTED_PROXIES(IP/CIDR 逗号分隔):仅当对端命中该列表时才采信
X-Forwarded-For,并取最右侧的非可信跳(左侧可被客户端预先伪造);非法值不予采信,
避免用任意字符串制造新桶
- loginAttemptTracker 增加条目上限与过期清扫:条目原先只在登录成功或同 key 再次 allow 时
才删除,分布式来源下会单向增长
- docker.web-server.env.example 补充新变量说明(含反代部署下必须配置的提示)
- 补 4 项回归测试,已确认还原为采信 XFF 首值后必定失败
|
2026-07-26 21:08:49 +08:00 |
|
Syngnat
|
0c10be0aa2
|
🐛 fix(db): 修复大整数与 IP 列显示丢值、会话路径方言退化、MariaDB 漏影响行数校验
- normalizeQueryValue 的 Struct 分支补「指针接收者 Stringer」探测:big.Int 的 String() 定义在
*big.Int 上,clickhouse-go 对 Int128/UInt128/Int256/UInt256 列返回 big.Int 值,原先落到
fmt.Sprintf("%v") 变成内部结构体转储,前端与 CSV/JSON/XLSX 导出的原始数值完全不可恢复
- Slice 分支对具名字节切片先试 Stringer、再回退 bytesToDisplayValue:net.IP 是具名 []byte,
不匹配上层的 case []byte,原先被展开成 [192,168,0,1] 而非 "192.168.0.1"
- MySQL/MariaDB 的 OpenSessionExecer 补回扫描方言:原先传空串使 DATE 列在会话路径
(流式导出、SQL 编辑器托管事务)被格式化成 RFC3339,与网格直查的 2006-01-02 不一致
- MariaDB.ApplyChanges 的 DELETE/UPDATE 补 requireSingleRowAffected(与 mysql_impl 对齐):
原先丢弃 sql.Result,无主键表上一次单元格编辑可能静默改写多行,或 0 行命中仍提示提交成功
- 补 5 项回归测试,并断言既有的 MySQL BIT 位掩码语义未被破坏
未修:query_value.go 的 PG bit/varbit 文本位串被当作二进制位掩码解释。该缺陷需要给 6 个
PG 系驱动都补 scanDialect 才能可靠区分方言;仅按字节内容启发式会把 MySQL BIT(8) 存值 48
(字节 0x30 即 ASCII '0')误显示为 "0",属于用一个静默错误换另一个,故留待单独处理。
|
2026-07-26 20:52:58 +08:00 |
|
Syngnat
|
8e3a183abb
|
♻️ refactor(frontend-test): 剥离混合型测试中的寄生源码文本断言
- 基于 TypeScript AST 精确识别 readFileSync 派生变量及其断言,仅删除不改写保留代码
- 断言全为源码文本的 it() 块整块移除,混合块中只剔除单条源码断言
- 清理随之失效的变量声明、空 it()/describe() 与无用 import,6 个文件因无用例残留而删除
- 累计移除 1283 处代码区间、8270 行,守卫基线由 130 条收敛至 12 条
- 全量测试失败集合无新增,TabManager 悬浮信息用例的 CRLF 误报一并消除
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-26 20:52:35 +08:00 |
|
Syngnat
|
4c93e7f175
|
🐛 fix(driver-agent): 移除 IPC 单行 8 MiB 上限,避免大批次请求打死连接
- 请求主循环由 bufio.Scanner 改为 bufio.Reader.ReadString:Scanner 的单行上限硬编码 8 MiB,
超限时 Scan() 返回 false 使循环退出、进程终止,该连接从此永久不可用(主进程后续所有
查询/元数据操作都返回 EOF,只能手动重连)。而主进程写入端本就无上限:一个 1000 行的导入
批次或一个大 JSON/CLOB 单元格都能轻易超过 8 MiB
- 循环抽出为 serveAgentRequests(input, writer, runtimeState) 以便测试,并正确处理末行无换行符
- 补 3 项回归测试:12 MiB 超大行后续请求仍被处理、非法 JSON 只回错误不终止循环、末行无换行符
- 已实测确认前提:8 MiB 上限的 Scanner 对 12 MiB 单行读到 0 行并返回 token too long
|
2026-07-26 20:42:50 +08:00 |
|
Syngnat
|
9074cd9707
|
🔥 remove(frontend-test): 删除源码文本断言型测试并补齐全局 i18n 校验
- 删除 105 个纯静态测试文件(6624 行):仅把源码当字符串断言、不执行被测代码
- 新增 testPolicy 守卫:禁止新增读源码文本的测试,131 个存量文件记入只减不增的基线
- 新增 i18n keyResolution:校验源码 t() 引用的 key 均可经完整解析链得到译文
- 新增 i18n catalogIntegrity:校验占位符跨语言一致、无空译文
- 补齐 6 个语言包缺失的 common.retry,修复审计面板重试按钮显示字面量 key
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-26 20:39:11 +08:00 |
|
Syngnat
|
663ef8259b
|
🐛 fix(app): 修复已存查询导入丢失 SQL 与连接配置并发写入互相覆盖
- saved_queries.Import 改为复制 file.Queries 再原地更新:原先直接引用底层数组,下标写会同时
污染 file.Queries,使 replaceQueries 拿到的「磁盘旧快照」已含新值,比较 previous.SQL 相等
而跳过写盘。同 ID 同名条目只改 SQL 时,元数据已更新但 .sql 文件仍是旧内容,新 SQL 永久丢失
- connections.json 增加包级互斥 savedConnectionsMu:savedConnectionRepository() 每次返回新
实例,实例级锁无效。Save/Delete/Duplicate 与 migrateSavedConnectionSecrets 的
load→修改→saveAll 序列纳入同一临界区,避免后写者用旧列表整体覆盖前写者导致连接静默丢失,
以及 Delete 删除密文后被 Save 写回而产生的僵尸连接
- saveAll 改为临时文件 + Sync + 原子替换:os.WriteFile 先截断,进程在该窗口被杀会留下空的
connections.json;原子替换后读者只会看到旧文件或完整新文件,只读路径无需加锁
- 补 4 项回归测试,均已确认在移除修复后必定失败(12 条并发保存、并发混合增删的 JSON 完整性、
原子写无临时文件残留、同名改 SQL 的落盘)
|
2026-07-26 20:36:04 +08:00 |
|
Syngnat
|
2bdbdc9382
|
🐛 fix(sync): 修复分页比对与 DDL 字面量缺反斜杠转义导致的错删行与语法错误 DDL
- quoteSyncSQLString 改为方言感知:新增 syncDialectEscapesBackslash,对 mysql/mariadb/
clickhouse/tdengine/starrocks/diros/oceanbase 先翻倍反斜杠再翻倍单引号;postgres 系、
sqlserver、sqlite、duckdb 保持原样(翻倍反而会写入两个反斜杠并损坏比对)
- 含反斜杠的主键原先在 IN 列表里被目标库解释成别的字符串,导致源端存在的行先被判为插入、
反查时又匹配不到而被判为删除并真的从目标删掉,最终 Success=true 但目标永久缺行
- dbType 逐层传入 formatSyncSQLLiteral 的 3 个调用点:buildPKInSelectQuery、
buildKeysetPagedTableQuery、buildSourceQueryPKInSelectSQL
- escapeMySQLStringLiteral 同类修复:列注释与 DEFAULT 值内联进 MySQL/ClickHouse DDL 时,
以反斜杠结尾的注释会让 COMMENT '...\' 吞掉闭合引号并生成语法错误的 DDL
- 补 5 项回归测试,方言分组做双向断言(漏加与误加都会失败)
|
2026-07-26 20:19:29 +08:00 |
|
Syngnat
|
01c3c2f9c9
|
🐛 fix(sync): 修复 SQL 结果集全量覆盖先清空目标表导致的数据不可恢复丢失
- 加自表守卫:源查询是任意 SQL、无法可靠判断是否引用目标表,故抽出 isSameSyncEndpoint
做端点级比较,源与目标同端点时退回非分页路径(该路径先把源行读入内存再清空,语义安全)。
分页叠加自表覆盖本质不可行:清空后的分页会读到空表,目标最终只剩第一页数据
- 改为先读首页、成功后才清空目标,与 tryApplyDirectImportInPages 保持一致。
原顺序先 TRUNCATE 再首读,源查询一旦报错就留下被清空且无法恢复的目标表
(TRUNCATE 在 MySQL 上是 DDL、隐式提交不可回滚),而函数还把读到 0 行当作同步成功
- isSamePhysicalSyncTable 改为复用 isSameSyncEndpoint,表名比较语义不变
- 补 4 项回归测试:端点比较、表名语义不变、自表退回且退回前未清空、先读后清顺序
|
2026-07-26 20:11:52 +08:00 |
|
Syngnat
|
1128c501c3
|
🐛 fix(mqtt): 修复关闭连接与在途消息拉取竞争导致的进程崩溃
- pahoMQTTRuntime 增加 RWMutex 与 activeClient() 快照取用:FetchMessages 会在 4~30 秒
等待窗口结束后才在 defer 里解引用客户端,而 Close() 原先无锁把 client 置为 nil,
保活探测失败或用户断开连接时那次 nil 接口方法调用会崩掉整个桌面进程
- Close() 改为只置 closed 标志并断开连接,不清空在途读者会解引用的字段;并保证幂等
- FetchMessages/Publish/Ping 全程改用入口处的客户端快照,defer 中的 Unsubscribe 同样使用快照
- MQTTDB.Close() 不再把 m.runtime 置 nil,消除 QueryContext/Publish 通过 nil 检查后
解引用的窗口;关闭后的 runtime 对所有调用返回「连接未打开」,报错口径不变
- 补 3 项回归测试:在途读者快照可用性、并发 Close 交错、Close 幂等性
|
2026-07-26 20:08:07 +08:00 |
|
Syngnat
|
e8ef3b3f01
|
🐛 fix(webserver): 修复登录/初始化页 next 参数的 DOM XSS 与开放重定向
- 客户端补归一化:两个页面脚本都用 location.search 重读原始 next,服务端过滤对其完全无效。
新增共用的 safeNextTarget(),用 URL 解析器做同源判定(javascript:/data: 的 origin 为 null),
归一化后再交给 window.location.replace,堵住 ?next=javascript:... 在页面自身源内执行、
进而携带会话 Cookie 调用 /api/invoke 读取全部已保存连接并执行任意 SQL 的链路
- 服务端补 /\ 缺口:抽出 isSafeLocalRedirect 供 resolvePostAuthRedirect 与
buildAuthRedirectURL 共用。WHATWG URL 解析器对 special scheme 把反斜杠等价为斜杠,
故 /\evil.com 会被解析成 //evil.com,原先仅查 // 前缀挡不住该变体
- 补回归测试:覆盖 javascript:/data:///evil.com//\evil.com 等载荷,
并断言两个页面脚本不再出现未归一化的 next 裸读
|
2026-07-26 19:56:50 +08:00 |
|
Syngnat
|
6a21b75ff7
|
🐛 fix(export): 补齐 SQL 导出反斜杠转义漏掉的 ClickHouse 与 TDengine 方言
- isMySQLLikeDBType 更名为 dialectEscapesBackslashInStringLiteral,按语义而非协议族命名
- 新增 clickhouse/tdengine/taos:这三个方言的字符串字面量同样支持 C 风格反斜杠转义,
上一提交漏掉会导致其 dump 还原时仍被静默改写
- 补充双向断言:漏加方言(数据被改写)与误加方言(反斜杠被写成两个)都会测试失败
|
2026-07-26 19:43:41 +08:00 |
|
Syngnat
|
1a8effb51f
|
🐛 fix(export,ssh,secret,explain): 修复 SQL 导出注入与六处静默数据丢失/资源泄漏
- SQL 导出:formatSQLValue 按方言转义反斜杠,修复 MySQL 系 dump 还原时静默改写数据、
且以反斜杠结尾的值吞掉闭合引号致源库恶意行可执行任意 SQL 的问题;非 MySQL 方言保持原样
- 明文凭据:daily_secrets.json 由 0o644 改为 0o600、目录改 0o700,并对历史文件显式 Chmod
- SSH 隧道:RegisterSSHNetwork 改为确定性 network 名并复用缓存客户端,消除驱动全局 dialer
表随重连线性增长、永久钉住 ssh.Client 的连接与 goroutine 泄漏
- xlsx 导入:单元格 r 属性列号增加 OOXML 16384 上限并提前熔断,避免篡改文件放大分配致 OOM
- 数据导出:三处非 SQL 导出入口捕获 file.Close 错误,不再在落盘失败时返回“导出成功”
- 数据根迁移:copyFile 捕获 Close 错误并补 Sync,避免被截断的副本被判定为迁移成功
- 执行计划:节点 ID 改为按 ExplainResult 派生,移除进程级全局计数器与 reset,
修复并发诊断互相踩踏编号导致的重复 node ID 与错挂父子边
- 补充 5 个回归测试文件,含“导出→切分”闭环断言与未转义时的反向对照
|
2026-07-26 19:40:33 +08:00 |
|
Syngnat
|
702a21cbfa
|
🐛 fix(proxy,export): 修复转发器并发竞争泄漏与 xlsx 导出错误吞噬
- 转发器缓存改为写锁内双重检查,避免并发下重复创建 listener 造成端口与 goroutine 泄漏
- writeRowsToXlsx 通过命名返回值捕获 file.Close 错误,防止导出数据未落盘被静默忽略
|
2026-07-26 18:53:51 +08:00 |
|
Syngnat
|
fb0b2fe7c7
|
修复前端主线测试基线与连接保护兼容 (#724)
## 变更内容
- 保留旧连接配置 `readOnly: true` 的四项保护兼容语义,并确保 Redis 等不支持保护模式的数据源忽略旧标记
- 修复 QueryEditor 内联、原生分离和浮动结果窗口传递的实际表身份,避免元数据表名覆盖 schema-qualified 结果表名
- 修复 QueryEditor renderer/result-session 测试隔离,同步托管事务、all-columns 定位和 SQL
Logs 等当前行为
- 更新 Sidebar/DataGrid 拆分后的 i18n source guards,以及
DataGrid、TabManager、ConnectionModal、JVM 等现有组件契约
## 验证
- `npm --prefix frontend test`:509 个文件、3946 项测试全部通过
- `npm --prefix frontend run build`:通过(仅保留既有 chunk size warning)
- `git diff --check upstream/dev...HEAD`:通过
## 风险
- 生产改动仅涉及连接 RPC 保护配置归一化和查询结果 DataGrid 的表身份传递
- 其余改动均为测试隔离、源码 owner 迁移和当前行为契约同步
- 未包含 Issue #719 的 `v2-theme.css` 或 `DataGrid.layout.test.tsx` 变更
## 回滚
可按提交逆序回滚;生产行为提交与测试提交已分离,连接保护与查询结果身份修复可独立撤销。
|
2026-07-26 18:52:31 +08:00 |
|
Syngnat
|
9ff05df9ae
|
🐛 fix: 修复 Issue #719 (#723)
## 关联 Issue
Closes #719
## 变更内容
V2 数据表工具栏的“提交事务”按钮被专属样式覆盖为浅色背景,即使存在待提交变更也不够醒目,且启用态与禁用态区分不足。
- 将可提交状态改为实心主题强调色,并补充 hover、focus、active 交互反馈
- 将无待提交变更时的禁用状态恢复为中性灰色
- 补充启用、交互和禁用状态的 CSS 回归断言
- 修改仅影响 V2 DataGrid 的提交事务按钮,不涉及 SQL 编辑器事务按钮或提交逻辑
## 测试结果
- `npm --prefix frontend test -- --run
src/components/DataGrid.layout.test.tsx`:通过,55 项测试全部通过
- `npm --prefix frontend run build`:通过
- `git diff --check`:通过
- `npm --prefix frontend test`:与 `upstream/dev` 基线一致,均为 509 个测试文件中 39
个失败、3943 项测试中 70 项失败;失败集中在既有 i18n、Sidebar、QueryEditor 和 DataGrid DDL
测试,本次修改未新增失败
## 风险说明
- 不涉及数据结构、数据迁移或后端行为变化
- 不涉及 API 或兼容性变化
- 样式使用现有主题变量,可适配内置和自定义主题
- 如需回滚,可直接还原本 PR 的 CSS 与测试提交
|
2026-07-26 18:51:43 +08:00 |
|
Syngnat
|
564282ba80
|
🐛 修复外部 SQL 恢复并支持表字段复制粘贴 (#722)
## 背景
关联 Issue:#717。
## 变更
- 修复外部 SQL 标签关闭后,React 卸载清理逻辑重新写回草稿、导致 GoNavi
重启后恢复已关闭文件的问题。标签已关闭时清理草稿,仍存在时保留卸载保存行为。
- 为表设计器增加字段定义 `Ctrl+C` / `Ctrl+V`。使用带版本前缀的 JSON 剪贴板协议,保留字段定义属性并重新生成 UI
key。
- 粘贴字段统一追加到表格末尾;字段重名按不区分大小写自动生成 `_copy`、`_copy_2` 等后缀。
- 在文本输入框、textarea、select、contenteditable 中保留原生剪贴板行为。
## 验证
- `npm --prefix frontend run build`:通过。
- 字段剪贴板、DataGrid 剪贴板、批量动作、表设计器 SQL/元数据相关回归:通过。
- 新增外部 SQL 生命周期回归:2/2 通过。
- `go test ./internal/app ./internal/db -run ApplyChanges|ChangePreview
-count=1`:通过。
- `npm --prefix frontend run i18n:scan`:退出码 0,报告仓库既有扫描发现。
- 完整前端/Go 测试套件存在仓库既有 i18n 断言失败及可选驱动、外部服务、JVM/网络环境相关失败;本次新增回归未失败。
Closes #717
|
2026-07-26 18:51:33 +08:00 |
|
mango
|
aec7e596d6
|
✅ test(frontend): 同步现有组件行为契约
|
2026-07-26 00:25:10 +08:00 |
|
mango
|
23cb8097c0
|
✅ test(i18n): 更新组件拆分后的源码守卫
|
2026-07-26 00:24:59 +08:00 |
|
mango
|
54f973479c
|
🐛 fix(connection): 修复 RPC 保护配置构建类型
|
2026-07-26 00:24:42 +08:00 |
|
mango
|
2d9e92fbf9
|
✅ test(query-editor): 修复结果测试隔离与过期断言
|
2026-07-25 23:49:15 +08:00 |
|
mango
|
cf553fda48
|
🐛 fix(query-editor): 修复查询结果实际表身份
|
2026-07-25 23:33:00 +08:00 |
|
mango
|
9ad5cb4888
|
🐛 fix(connection): 保留旧连接保护配置兼容性
|
2026-07-25 23:24:45 +08:00 |
|
mango
|
fe69404431
|
🐛 fix: 修复 Issue #719 (Closes #719)
|
2026-07-25 22:42:42 +08:00 |
|
mango
|
9e30ccca01
|
Merge branch 'dev' of https://github.com/Syngnat/GoNavi into dev
|
2026-07-25 21:35:13 +08:00 |
|
mango
|
7f4feef3d6
|
🐛 fix(table-designer): 修复外部 SQL 恢复并支持字段复制粘贴 (#717)
|
2026-07-25 21:02:25 +08:00 |
|
Syngnat
|
6eff9eb854
|
✨ feat(datagrid): 支持选区单元格复制粘贴 (#718) (#720)
## 背景
修复 #718:复制表格中的多行多列单元格后,可以从选中的目标单元格起像 Excel 一样粘贴。
## 变更
- 支持从目标单元格起按剪贴板二维矩阵向右、向下粘贴
- 支持 CRLF、空单元格和精确大写 `NULL` 到数据库 `null` 的转换
- 超出当前加载行或列范围时截断,不跨页、不新增行
- 保持不可编辑列的原坐标并跳过,不覆盖已有草稿
- 同步 `modifiedRows` 与 `modifiedColumns`,沿用现有手动/自动提交流程
- 保护输入框、弹窗等原生粘贴场景,并覆盖浮动窗口中的表格
## 验证
通过:
- `npm --prefix frontend run build`
- 剪贴板聚焦测试:12 tests passed
- 数据表格相关回归:除基线已有的 3 个 DDL/字段信息断言外全部通过
- `npm --prefix frontend run i18n:scan`
- `go test ./internal/app ./internal/db -run
'ApplyChanges|ChangePreview' -count=1`
- `git diff --check`
- Vite smoke check:`http://127.0.0.1:5173/` 返回 `200 OK`
说明:完整前端套件仍有 39 个既有失败文件、70 个失败用例;与 `upstream/dev`
基线对照失败文件数一致,新增剪贴板测试全部通过。`go test ./...` 的失败来自当前环境中的可选数据库驱动未启用、代理/网络、AI
超时和 Java fixture 等,与本次前端改动无关。
Fixes #718
|
2026-07-25 17:28:21 +08:00 |
|
mango
|
cb399e743b
|
🔧 chore(repo): 忽略本地 zcode 工作目录
|
2026-07-25 17:18:24 +08:00 |
|
mango
|
eddbe563e2
|
✨ feat(datagrid): 支持选区单元格复制粘贴 (#718)
实现从选中单元格起按二维剪贴板矩阵粘贴,支持多行多列、NULL 空值和现有草稿更新。\n\nFixes #718
|
2026-07-25 17:15:00 +08:00 |
|
Syngnat
|
3be626af05
|
🚀 release: 发布 v0.9.0 (#716)
## 发布内容
- 表右键新建查询展开全部字段,连接分组快捷新建与环境预设
- 侧栏折叠性能优化、置顶星标只读指示、近期查询管理与标签自适应
- 修复 SSH 非 id_rsa 私钥选择、关于页滚动条、标签圆角与主题一致性
- 加固 driver-agent revision 校验与控制台 Form/Modal 弃用警告清理
- 修复 datagrid 筛选/滚动、Kingbase 查询、表设计排序与结果刷新统计
## 发布基线
- 源分支:`release/0.9.0`
- 候选提交:`fdfdebf24e445e088ed5190c2688dd4c7887803b`
- 目标分支:`main`
- 合并方式:merge commit
## 验证
- 基于 `origin/dev` 当前 tip 切出发布分支
- 合并后将在 `main` 合并提交创建 `v0.9.0` 标签
- 推送标签后由 Release 工作流完成构建与 latest 发布
## 发版后
- 将 `main` 回流合并到 `dev`,避免分支漂移
v0.9.0
|
2026-07-25 09:55:42 +08:00 |
|
Syngnat
|
fdfdebf24e
|
✨ feat(sidebar): 表新建查询展开全部字段而非 select *
- 新建查询时通过 DBGetColumns 拉取字段并生成 SELECT 列表
- 元数据不可用时回退 SELECT *,消息队列仍保持 LIMIT 预览
- 覆盖 V2/旧版右键菜单与表总览入口,补充模板单测
Refs #710
|
2026-07-25 09:25:04 +08:00 |
|
Syngnat
|
365c72ad22
|
🐛 fix(tabs/theme): 修复标签顶条与标题栏主题不一致 (#715)
## 背景
V2 工作区的活动 Tab
顶部仍显示一条绿色强调线,与当前圆角标签样式不协调。同时,自定义标题栏使用独立的固定背景,切换内置或自定义主题后无法与侧栏表面颜色保持一致。
## 变更点
- 移除 V2 主工作区活动 Tab 顶部的 inset 强调条
- 保留活动 Tab 的选中背景、8px 圆角及原有交互状态
- V2 自定义标题栏改为复用侧栏的 `--gn-bg-panel-2` 主题表面
- 补充活动 Tab 和标题栏主题来源的回归断言
## 影响范围
- 仅影响 V2 主工作区 Tab 和应用自定义标题栏的视觉表现
- legacy 标题栏继续使用原有 `bgMain`,透明度与模糊逻辑不变
- Modal、Drawer 等其他 Ant Tabs 的强调条不受影响
- 不修改标签尺寸、拖拽、关闭、窗口控制或主题配置逻辑
- 无后端、数据库、依赖或配置变更
## 验证
- `npm test -- --run src/components/TabManager.adaptive-width.test.ts
src/App.sidebar-collapse.test.ts`:12/12 通过
- `npx tsc --noEmit --pretty false`:通过
- Playwright 运行时验证:标题栏与侧栏背景一致,主题 token 更新后同步变化
- Playwright 活动 Tab 样式验证:`box-shadow: none`、顶部伪元素隐藏、圆角保持 8px
- `git diff --check origin/dev...HEAD`:通过
|
2026-07-24 22:44:44 +08:00 |
|
Syngnat
|
17a3ea91a1
|
🐛 fix(ci): 加固 driver-agent revision 校验避免 gaussdb 空值失败
- metadata 探测增加重试、stdout/stderr 诊断与 UPX 解压回退
- UPX 冒烟失败恢复未压缩产物后仍做 metadata 自检
- gaussdb revision 指纹补齐 postgres_impl 依赖
|
2026-07-24 22:43:57 +08:00 |
|
Syngnat
|
4c0f0a8fdd
|
🔧 fix(ui): 清理控制台 Form 与 Modal 弃用警告
- 关闭消息发送弹窗时不再对已卸载 Form 调用 resetFields
- 缩放修复路径中 ResetWebViewZoom 不可用时最多告警一次
- 将 Drawer/Modal 的 destroyOnClose 统一迁移为 destroyOnHidden
|
2026-07-24 22:31:33 +08:00 |
|
AutumnNazi
|
a2dc8db513
|
🐛 fix(tabs/theme): 修复标签顶条与标题栏主题不一致
- 移除 V2 工作区活动标签顶部强调条,保留圆角与选中背景
- 让 V2 自定义标题栏跟随侧栏主题表面,同时保持 legacy 背景逻辑
- 补充标签与标题栏主题回归断言
|
2026-07-24 21:49:19 +08:00 |
|
Syngnat
|
4400fd67c0
|
🔧 fix(sidebar): 修复 resize 测试类型断言导致镜像构建失败
- 将 FakeHTMLElement 断言改为 unknown 中转,消除 tsc TS2352
- 恢复 image CI 中 npm run build 可通过
|
2026-07-24 21:42:14 +08:00 |
|
Syngnat
|
2a7ef109fd
|
🐛 fix(ssh): 修复非 id_rsa 私钥无法浏览选择与读取
- 修正 OpenFileDialog 默认目录,支持无扩展名密钥路径
- macOS 下取消错误文件名过滤,显示隐藏项以选择 ~/.ssh 密钥
- 私钥读/解析失败返回明确错误,示例改为 id_ed25519
- 补充选钥目录解析与私钥读取失败回归测试
Refs #711
|
2026-07-24 21:31:21 +08:00 |
|
Syngnat
|
e6f39d34d3
|
Merge remote-tracking branch 'origin/dev' into dev
|
2026-07-24 21:30:30 +08:00 |
|
Syngnat
|
ce9fdbebc7
|
🐛 fix(about): 移除关于页非必要滚动条 (#714)
## 背景
Issue #702 中,安装版在“已是最新版本”且页面内容可以完整展示时,关于页右侧仍会出现滚动条。原因是内容根节点额外的 18px
底部留白造成了临界溢出。
## 变更点
- 移除关于页内容根节点冗余的底部留白
- 保留详情容器原有的 `overflowY: auto`,仅在内容真实溢出时显示滚动条
- 补充设置中心布局回归断言,防止非必要底部留白再次引入
## 影响范围
- 仅影响设置中心“关于 GoNavi”页面的垂直布局
- 已是最新版本且内容可完整展示时不再出现滚动条
- 有可用更新并显示“本次更新包”等额外信息时,内容溢出仍可正常滚动
- 不修改更新检查、下载、安装或自动检查间隔逻辑
- 无后端、数据库、依赖或配置变更
## 验证
- `npm test -- --run App.settings-center.test.ts`:22/22 通过
- `npx tsc --noEmit --pretty false`:通过
- Playwright 运行时验证:最新安装版内容 591px / 容器 599px,无溢出;有更新时内容 624px / 容器
599px,保留 25px 可滚动区域
- `git diff --check origin/dev...HEAD`:通过
Closes #702
|
2026-07-24 21:29:46 +08:00 |
|
Syngnat
|
2f427d3baf
|
🐛 fix(tabs/query-editor): 优化标签圆角并修复搜索提示遮挡 (#713)
## 背景
Issue #695 希望统一右侧工作区标签的圆角样式。同时,查询页打开 Monaco
搜索后,顶部按钮的悬浮提示会被编辑器区域裁剪,影响操作提示阅读。
## 变更点
- 将 V2 工作区标签四角统一为 8px 圆角
- 使用尊重圆角边界的 inset 激活色,避免顶部绿色条遮住圆角或形成悬浮短条
- Monaco 查找组件可见时放开编辑器区域的浮层裁剪,保持搜索按钮及查找框位置不变
- 补充标签圆角和搜索提示显示的回归测试
## 影响范围
- 仅影响 V2 主工作区标签样式及查询编辑器查找浮层
- 不改变标签尺寸、间距、拖拽和关闭逻辑
- 不改变 Monaco 查找框位置,也不恢复顶部额外留白
- 无后端、数据库、依赖或配置变更
## 验证
- `npx vitest run src/components/TabManager.adaptive-width.test.ts`(7/7
通过)
- `npx vitest run src/components/QueryEditor.external-sql-save.test.tsx
-t "shows Monaco find button hovers without moving the find widget"`(1/1
通过)
- `npx tsc --noEmit`
- `npm run build`
- Playwright 实际页面验证标签圆角、激活色和 Monaco 搜索按钮 Tooltip
Closes #695
|
2026-07-24 21:29:42 +08:00 |
|
AutumnNazi
|
a6c83d9164
|
🐛 fix(about): 移除关于页非必要滚动条
- 移除关于页冗余底部留白,内容完整时不再触发滚动
- 保留内容溢出时的滚动能力并补充布局回归断言
|
2026-07-24 20:53:19 +08:00 |
|
AutumnNazi
|
82a0a02c56
|
🐛 fix(tabs/query-editor): 优化标签圆角并修复搜索提示遮挡
- 将 V2 工作区标签统一为四角圆角,并让激活色沿圆角自然显示
- 放开 Monaco 查找组件可见时的浮层裁剪,不改变按钮位置和顶部间距
- 补充标签圆角与查找提示显示的回归测试
|
2026-07-24 20:23:46 +08:00 |
|
Syngnat
|
cbca312a50
|
🐛 fix(sidebar): 将表置顶星标改为只读状态指示
- 仅为已置顶表展示非交互实心星标
- 保留右键菜单中的置顶与取消置顶入口
- 补充侧边栏置顶指示器回归测试
|
2026-07-24 20:20:23 +08:00 |
|
Syngnat
|
0c9e807674
|
⚡️ perf(sidebar): 消除左侧树拖拽改宽时的卡顿
- 拖拽与松手提交期间标记 data-sidebar-resizing,关闭 Sider 默认 transition
- 避免 Ant Design transition:all 带动工作台/DataGrid 连续 reflow
- 补充 resize 标记生命周期与 CSS 约束回归测试
|
2026-07-24 19:50:58 +08:00 |
|
Syngnat
|
e1bc65b788
|
✨ feat(connection): 支持分组快捷新建与环境预设 (#712)
## 背景
Issue #698
希望在连接分组的右键菜单中直接新建连接,减少先创建再手动移动分组的操作。后续需求还需要为连接和分组增加环境预设,使生产、测试、开发和本地环境在侧栏与工作台中可辨识。
## 变更点
- 在 V2 与旧版侧栏的分组右键菜单中增加“新建连接”,保存成功后自动归入触发操作的分组
- 为连接和分组增加生产、测试、开发、本地四种环境预设,默认使用本地环境
- 在分组图标和连接相关 Tab 底部展示对应环境颜色,并由直接所属分组优先决定展示环境
- 将连接环境类型持久化到 connections.json,并支持连接包导入导出;旧数据或非法值兼容回落为本地环境
- 补充多语言文案、Wails 类型绑定和前后端回归测试
## 影响范围
- 影响新旧侧栏分组菜单、连接编辑弹窗、连接分组弹窗和连接相关 Tab 的环境标识
- 分组预设只覆盖其直属连接的展示环境,不会批量改写连接自身保存的预设类型
- environmentType 为可选兼容字段,不需要数据库迁移;旧连接和旧连接包可继续加载
- 未新增依赖,未修改构建链路;回滚时可直接回退本提交
## 验证
- npm run build
- npx tsc --noEmit
- 相关 Vitest:13 项通过(分组新建连接、连接/分组环境、Tab 环境标识、Store 持久化)
- Go 定向测试通过(连接持久化、旧数据兼容、连接包导入导出)
- go vet ./internal/app ./internal/connection
- 6 个 i18n JSON 文件解析通过,npm run i18n:scan 正常完成
- 完整组合测试中仍有 origin/dev 已存在的 3 条 TabManager 源码字符串断言失败及 1 条无关 Store
超时;本次新增用例均已单独通过
Closes #698
|
2026-07-24 19:16:30 +08:00 |
|
AutumnNazi
|
66531b6abd
|
✨ feat(connection): 支持分组快捷新建与环境预设
- 在新旧侧栏分组右键菜单中增加新建连接,并在保存后自动归入目标分组
- 为连接与分组增加生产、测试、开发和本地环境预设及颜色标识
- 持久化连接环境元数据,兼容旧数据与连接包导入导出
- 补充多语言文案及前后端回归测试
|
2026-07-24 18:31:40 +08:00 |
|
Syngnat
|
b7636f5fdd
|
Merge remote-tracking branch 'origin/dev' into dev
|
2026-07-24 18:13:22 +08:00 |
|
Syngnat
|
10db415d7a
|
🐛 fix(datagrid): 修复筛选字段选择失效
- 将 Select 下拉选项识别为交互目标
- 避免页内查找焦点逻辑中断字段选择
- 补充下拉选项交互目标回归测试
|
2026-07-24 18:12:47 +08:00 |
|