t8y2
451b3f82cd
feat(release): bump version to 0.5.37
2026-06-23 12:20:08 +08:00
luoianun
8cc7a35c1a
feat: add PrestoSQL connector
2026-06-23 01:27:08 +08:00
t8y2
ac3d3a7948
feat(agent): track execution context activity
2026-06-22 23:17:11 +08:00
fagao
e2f68de455
fix: resolve MySQL connection state desync after disconnect/reconnect
...
- Use synchronous pool removal in desktop disconnect_db to prevent
race condition when user quickly disconnects and reconnects
- Rename recordMetadataLoadError to recordConnectionLostError and
export it for cross-store reuse
- Sync query execution errors back to connection state via
recordConnectionLostError in queryStore catch blocks
- Add backend check_connection_health method (dbx-core) with Tauri
command and web route for proactive pool verification
- Add frontend checkConnectionHealth API (tauri.ts/http.ts/api.ts)
- Enhance ensureConnected to verify backend pool health before
assuming connection is valid, auto-reconnect if stale
2026-06-22 20:40:40 +08:00
t8y2
d6e081cd1b
chore(release): bump version to 0.5.36
2026-06-21 00:14:34 +08:00
林剑凛
41edb3da91
feat(mongo): add database and collection deletion
2026-06-20 22:22:04 +08:00
dalew
f71406c1c2
feat(redis): add slowlog panel and integrate with backend APIs
...
* feat(redis): add slowlog panel and integrate with backend APIs
* fix(redis):Slowlog Panel Compatibility Issues
2026-06-20 21:47:14 +08:00
t8y2
d59997c090
feat(objects): add table statistics columns
2026-06-19 14:35:32 +08:00
t8y2
3cbead1c20
feat(sync): support webdav sync on web
2026-06-19 13:22:19 +08:00
t8y2
ef25653aca
feat(transfer): add target table name case option
2026-06-19 12:16:38 +08:00
t8y2
fffdcb9db1
fix(web): download full database SQL export via browser
2026-06-19 09:35:19 +08:00
Oleksandr Liakhevych
4f5d09aaa8
feat(ai): add Codex CLI as a no-API-key AI provider for Desktop
...
* codex cli provider
* fixes
* mcp check
* reasoning
* simplify
* minor fixes
2026-06-19 08:51:10 +08:00
t8y2
b897011b74
feat(release): bump version to 0.5.35
2026-06-18 20:33:25 +08:00
t8y2
9e75f62dbf
feat(sqlserver): support linked server browsing
2026-06-18 13:17:44 +08:00
t8y2
c4c427fb67
fix: sort tables by FK dependency in transfer and export
2026-06-18 00:00:37 +08:00
t8y2
71db24813e
fix(informix): add informix_server field to test helpers
2026-06-17 22:59:22 +08:00
t8y2
22b8ba17bb
fix(schema): handle view DDL object types
2026-06-17 19:29:24 +08:00
t8y2
b7e47863da
feat(release): bump version to 0.5.34
2026-06-17 16:11:04 +08:00
t8y2
4dbd1c7cc8
fix: convert source to editable form when opening view/procedure editor
2026-06-17 15:20:21 +08:00
t8y2
66e6ca1211
fix(db): refresh stale native pools
2026-06-17 11:14:35 +08:00
miracle and t8y2
2a59d3143e
feat(mq): implement Apache Pulsar message queue admin
...
* feat(mq): implement Apache Pulsar message queue admin
- Add complete MQ admin adapter layer with version detection
* Pulsar adapter with multi-version API support
* OAuth2 token caching and authentication
* JWT token signing for Pulsar clients
* Transport layer (SSH/Proxy) integration
- Implement comprehensive admin operations
* Tenant, namespace, topic management
* Subscription and consumer/producer monitoring
* Rate limits, backlog quotas, retention policies
* Permissions and role-based access control
* Raw admin API for advanced operations
- Add desktop UI components
* MQ admin console with tabbed interface
* Tenant, namespace, topic panels
* Subscription management and cursor operations
* Monitoring panel with stats visualization
* Policy configuration UI
- Add web routes for MQ admin operations
- Add secret store support for MQ auth credentials
- Add comprehensive test coverage
* fix: del local test files
* fix(mq): mark message queue as unsupported mcpMode in driver manifest
MQ admin connections do not use the MCP query bridge - they use a
separate REST admin API. Mark mcpMode as 'unsupported' to align with
the test expectations and reflect the actual architecture.
Fixes CI test: driver-manifest.test.ts
* fix(mq): fix TypeScript errors in MQ components
- Fix typo in SubscriptionsPanel.vue: messagformatError(e)Id -> message.messageId
- Use formatError() helper in RawApiPanel.vue instead of accessing e?.message
- Fix undefined 'tab' reference in ConnectionTree.vue: use config.db_type instead
Fixes frontend CI TypeScript check errors.
* fix(mcp): add 'mq' to MCP server connection type description
The MCP server's connection type description must include all database
types from the driver manifest. Add 'mq' to the list to fix the test:
'add connection database type description includes every manifest database type'
Fixes: packages/mcp-server/tests/driver-manifest.test.ts
* fix(mq): add missing ConnectionConfig fields for Rust compilation
- Add gbase_server and keepalive_interval_secs fields to all ConnectionConfig
test constructors in mq/config.rs, mq/service.rs, and storage.rs
- Import uses_bare_mysql_pool in connection.rs tests module
Fixes compilation errors from upstream ConnectionConfig changes.
* chore(ui): simplify Pulsar icon to logo-only version
Remove text from Pulsar icon (127x30 -> 35x30), keeping only
the wave logo symbol for a cleaner, more consistent appearance
with other database icons.
* fix(mq): return removed pools from drain_connection_pools
---------
Co-authored-by: t8y2 <1156263951@qq.com >
2026-06-16 21:57:17 +08:00
t8y2
9b8aa4292d
feat(release): bump version to 0.5.33
2026-06-16 11:26:41 +08:00
t8y2
000c236619
feat(connection): add keepalive interval
2026-06-16 10:23:49 +08:00
t8y2
c57e18bf3e
fix: resolve clippy warnings and missing struct fields in tests
2026-06-16 00:55:32 +08:00
David Bottiau
921dff5ffe
feat: allow password protection to be disabled ( #1201 )
...
Thanks @Odonno!
2026-06-15 17:01:01 +08:00
t8y2
ab5bd1dd25
fix(redis): batch SCAN server-side to reduce fetch-all latency
2026-06-15 15:01:13 +08:00
t8y2
ef426a8218
feat(redis): add Pub/Sub publish and subscribe with WebSocket real-time push
2026-06-15 01:40:06 +08:00
t8y2
8932b0a308
fix(mongo): align collection loading state
2026-06-14 17:04:56 +08:00
t8y2
41e4498c7b
fix: add missing gbase_server field in ConnectionConfig tests
2026-06-14 12:09:35 +08:00
t8y2
30afcb8e69
fix(sidebar): page large table groups
2026-06-13 13:40:36 +08:00
t8y2
a7ba5b42ef
chore: remove duplicate imports and BOM from PR #1122
2026-06-12 19:58:32 +08:00
skyler
abacac3c07
feat(ai): agent loop Phase 2 — SQL execution tools, risk classification, and streaming tool calls
...
feat(ai): agent loop Phase 2 — SQL execution tools, risk classification, and streaming tool calls
2026-06-12 19:56:36 +08:00
t8y2
484658c6b7
feat(ai): streaming probe for connection test with latency measurement
2026-06-12 19:29:55 +08:00
runstone
40f0f98540
Merge branch 'main' of https://github.com/Abeautifulsnow/dbx into feat/ai-agent-loop-phase1
2026-06-12 18:52:05 +08:00
runstone
100124da3e
feat(ai): Phase 2 SQL 风险分类 + Agent 模式工具调用结果渲染
...
后端:
- 新增 sql_risk.rs:基于 sqlparser AST 的 SQL 风险分类(ReadOnly/Write/Ddl/Transaction)
- agent_tools.rs:新增 execute_query 和 get_sample_data 工具,写操作/DDL 被风险分类阻止
- agent_loop.rs:支持 is_agent_mode 参数,Agent 模式下暴露全部工具,Ask 模式仅暴露只读工具
- agent_loop/web/tauri:mode 参数全链路传递(前端→HTTP→Tauri→Rust)
前端:
- AiAgentStepItem 接口扩展:toolName/toolArgs/toolResult/isError 字段
- AiAssistant.vue:工具调用结果实时+最终渲染,SQL 查询结果/错误信息展示
- ai.ts/http.ts/tauri.ts:mode 参数透传到后端
2026-06-12 17:42:23 +08:00
polemp and Sam
ef5ed05ae7
feat(schema-diff): professional DDL diff view with deployment-aware colors and custom themes ( #1112 )
...
Co-authored-by: Sam <14344444@@qq.com>
2026-06-12 17:14:05 +08:00
Abeautifulsnow
082e3bb4eb
feat(ai): add agent tool calling loop
2026-06-12 13:18:36 +08:00
runstone
84a9fd6a0f
Merge branch 'main' of https://github.com/Abeautifulsnow/dbx into feat/ai-agent-loop-phase1
2026-06-12 12:52:03 +08:00
t8y2
b06f935050
chore(release): bump version to 0.5.32
2026-06-12 12:33:03 +08:00
runstone
453169ae45
Merge branch 'main' of https://github.com/Abeautifulsnow/dbx into feat/ai-agent-loop-phase1
2026-06-12 12:00:47 +08:00
t8y2
a4bd62005b
feat(redis): add all search mode
2026-06-12 11:32:56 +08:00
runstone
91f1206783
Merge branch 'main' of https://github.com/Abeautifulsnow/dbx into feat/ai-agent-loop-phase1
2026-06-12 08:48:50 +08:00
haipengno1
7de0de2313
实现 Redis 的查询功能
2026-06-12 00:20:17 +08:00
t8y2
70f7b464b7
feat(jdbc): install drivers from Maven bundles
2026-06-11 21:41:37 +08:00
t8y2
7923f4915e
fix(elasticsearch): apply document filters in browser
2026-06-11 18:56:38 +08:00
runstone
9ab41795d6
@
...
feat(ai): add agent loop with tool calling, fix connection routing and Gemini compatibility
## 背景说明
将 dbx AI 助手从单次 SQL 文本生成器升级为具备 tool calling 的数据库 Agent。
Phase 1 实现 Agent Loop 框架 + 只读工具(list_tables、get_columns)。
参考:Pi agent-core,.trellis/tasks/06-11-feat-ai-agent-loop-tool-calling-upgrade
## 修改内容
- 新增 agent_loop.rs:Agent Loop 核心,支持 OpenAI/Claude/Gemini Provider 的 tool calling,最大 10 轮,Ollama 自动降级为 text-only
- 新增 agent_tools.rs:read_only_tools (list_tables, get_columns) 的工具定义与执行器
- 新增 agent_events.rs:AgentEvent/ToolCall/ToolResult/ToolDefinition 类型定义
- 修改 ai.rs:AiMessage 新增 tool_call_id 字段
- 修改 lib.rs:注册 agent_events、agent_loop、agent_tools 模块
- 修改 routes/ai.rs & commands/ai.rs:新增 ai_agent_stream SSE 端点
- 修改 tauri.ts & http.ts:新增 AgentEvent 类型与 aiAgentStream 函数
- 修改 api.ts:注册 aiAgentStream 转发
- 修改 ai.ts:新增 runAgentStream,AiContext 增加 connectionId 字段
- 修改 AiAssistant.vue:接入 runAgentStream,解析 AgentEvent 渲染工具调用步骤
- 修改 en.ts / zh-CN.ts:新增 agentSteps 国际化文案
## 修复的问题
- [#I01] connectionName 误传为 connectionId → add connectionId to AiContext
- [#I02] agent loop 取消操作无效 → add cancel checks before each turn
- [#C01] TODO 缺少 issue 引用 → add PRD reference to TODO
- [#C02] stream_with_tools 命名不准确 → add clarifying doc comment
- [#C03] Gemini functionResponse.name 解析错误 → fix tool_call_id format and extraction
## 测试建议
- execute_get_columns:合法表名/空表名/SQL 注入字符拒绝
- call_openai_with_tools:空 choices/空 tool_calls/非 JSON arguments
- call_gemini_with_tools:空 candidates/parts 无 functionCall
- runAgentStream:有效 connectionId 正常调用
@
2026-06-11 18:27:24 +08:00
t8y2
d353d4673f
feat(redis): add configurable key namespace separator
2026-06-10 17:46:48 +08:00
t8y2
22928c51cc
chore(release): bump version to 0.5.31
2026-06-10 13:01:57 +08:00
t8y2
bfec556e9b
feat(readonly): add read-only mode for all database connections
...
- Add read_only field to ConnectionConfig with backward-compatible serde defaults
- SQL classifier with first-keyword + embedded keyword defense layers
- PRAGMA white-listing for safe read-only operations
- Guard all write entry points: SQL, Mongo, Redis, etcd, MCP Bridge
- 16 unit tests covering edge cases (CTE, case insensitivity, string masking)
- 7-language i18n support
- Fast-fail at command/route level before pool creation
Closes #889
2026-06-10 11:58:18 +08:00
runstone
a440415e86
feat(readonly): add read-only mode for all database connections
...
## Background
Add a read-only toggle for database connections that blocks all write
operations (INSERT, UPDATE, DELETE, DROP, etc.) when enabled, allowing
only read queries (SELECT, SHOW, EXPLAIN, etc.). Closes #889 .
## Changes
### Data Model
- Added `read_only: bool` field to ConnectionConfig (Rust struct, TS
interfaces, and ConnectionConfigData deserialization layer)
- Used `#[serde(default, skip_serializing_if = "is_false")]` for
backward/forward compatibility with existing configs
### Frontend UI
- Added "Read Only" checkbox in connection dialog
- 7-language i18n support (en/es/it/pt-BR/zh-CN/zh-TW)
### SQL Classification (query_execution_sql.rs)
- Added `is_write_sql()` with two-layer defense:
- Layer 1: First-keyword check (must start with known read keyword)
- Layer 2: Embedded dangerous keyword detection (catches CTE-wrapped
writes like `WITH ... AS (DELETE FROM ...)`)
- `FROM` keyword supported as DuckDB SELECT-less syntax indicator
- Added `check_read_only()` returning descriptive error with connection name
- Added 16 unit tests covering: pure reads/writes, CTE, case insensitivity,
string literal masking, comment stripping, stored procedure calls, edge cases
### SQL Execution Guards (query.rs / transfer.rs)
- Added `check_read_only_for_connection()` and `_multi()` helper functions
with lazy name clone (only allocates when read_only is true)
- 6 interception points: `do_execute`, MySQL batch, SQL Server batch,
DuckDB batch, transaction execution, transfer execution
### Non-SQL Write Guards — Tauri Commands
- Added `ensure_connection_writable()` helper (connection.rs)
- Mongo: 6 write entry points (insert/update/delete, single + batch)
- Redis: 15 write entry points (SET, DEL, HSET, HDEL, LPUSH, LSET, LREM,
SADD, SREM, ZADD, ZREM, EXPIRE, FLUSHDB, delete_keys, execute_command)
- execute_command uses RedisCommandSafety classification to allow
safe read commands through raw command interface
- etcd: 2 write entry points (put, delete)
- sql_file: SQL file execution guarded
- MCP Bridge: 4 write entry points (Insert/Update/Delete/SQL query)
### Non-SQL Write Guards — Web API
- Local `ensure_writable()` helper in each route module
- Redis: 12 write endpoints including classified execute_command
- Mongo: 6 write endpoints
- etcd: 2 write endpoints
- sql_file, table_import, transfer: early rejection
### Test Updates
- Updated ConnectionConfig construction in 7 test files with
`read_only: false` initialization
## Defense-in-Depth
- Layer 1: Command/Route-level early rejection (saves resources)
- Layer 2: Core SQL classifier (`is_write_sql` — first keyword + embedded scan)
- Layer 3: Core execution-time interception (do_execute/transfer/transaction)
2026-06-10 10:58:52 +08:00