t8y2
1d2d348dd8
fix(db): refresh stale native connection pools
2026-06-12 12:29:35 +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
runstone
61b5e907ce
fix(schema): default to public schema for PG and database for MySQL when schema is empty
...
When the LLM calls `list_tables` tool without a `schema` parameter, the
backend receives an empty string. This caused PostgreSQL and MySQL
metadata queries to return no results because:
- PostgreSQL: `WHERE n.nspname = ''` matches nothing
- MySQL: `WHERE TABLE_SCHEMA = ''` matches nothing
Fix by falling back to sensible defaults:
- PostgreSQL `list_tables`/`get_columns`: empty schema → "public"
- MySQL `list_tables`: empty schema → database name (MySQL schema == database)
2026-06-12 12:00:27 +08:00
t8y2
bb2768a62f
fix(db): update Oracle and OceanBase agent URLs
2026-06-12 11:52:38 +08:00
runstone
2d75667b9a
feat(ai): upgrade agent loop tool calling to true SSE streaming
...
Move tool calling from non-streaming (complete) API calls to real
streaming SSE, so text, reasoning, and tool call arguments all arrive
incrementally — users see the AI think and act in real time.
- Extract ~370 lines of non-streaming tool-call functions from
agent_loop.rs (call_with_tools, call_openai_with_tools,
call_claude_with_tools, call_gemini_with_tools) and replace with
a single ai::stream_with_tools() dispatch call.
- Add streaming-with-tools infrastructure to ai.rs (~550 lines):
- StreamToolEvent enum: Chunk, ToolCallStart, ToolCallDelta,
ToolCallComplete — provider-agnostic, feeds into the
StreamingToolCallAccumulator
- stream_claude_with_tools(): parse SSE content_block_start/delta/
stop events, incremental input_json_delta for tool arguments
- stream_openai_with_tools(): parse SSE delta.tool_calls with
incremental function.arguments
- stream_gemini_with_tools(): parse SSE functionCall (Gemini
sends complete objects, not deltas — emit as one chunk)
- Cancellation support via tokio::select! in every streaming loop
- Extended timeout for reasoning models (600s vs 120s)
- StreamingToolCallAccumulator: collect partial tool call fragments
from streaming deltas, then deserialize into complete ToolCall
objects in index order once the stream ends.
2026-06-12 11:43:09 +08:00
t8y2
a4bd62005b
feat(redis): add all search mode
2026-06-12 11:32:56 +08:00
sweetwisdom
ca3e3a2a56
fix: clamp canvas surface width to eliminate horizontal scrollbar flicker
...
Thanks for the fix!
2026-06-12 11:30:03 +08:00
t8y2
707f8b53dd
fix: allow empty snippet list in settings
2026-06-12 11:28:17 +08:00
t8y2
4fee45cf8d
fix(db): update redis auth and mongo document refresh
2026-06-12 11:11:16 +08:00
t8y2
9574c44d75
fix(sqlserver): skip TOP when SQL already has OFFSET FETCH NEXT
2026-06-12 10:59:24 +08:00
t8y2
4e0cb1d288
fix(grid): refresh table metadata before reload
2026-06-12 10:49:35 +08:00
t8y2
3bf243a4a6
fix(layout): constrain query result splitter
2026-06-12 10:37:41 +08:00
t8y2
a84ba4903e
fix(chart): improve query chart axis selection
2026-06-12 10:34:37 +08:00
runstone
9939e3191f
fix bug
2026-06-12 10:31:15 +08:00
runstone
ef1697d8a8
restore ssh_tunnel.rs file
2026-06-12 08:53:54 +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
t8y2
b18f837b50
fix(editor): improve completion popup overflow
2026-06-12 01:20:11 +08:00
t8y2
4f71bcbff8
fix(connection): extend agent connect timeout
2026-06-12 01:12:06 +08:00
t8y2
cded066fdf
feat: add select-filtered button for visible databases search
2026-06-12 01:10:53 +08:00
t8y2
19b5b70fb7
feat: confirm before closing unsaved SQL query tabs
2026-06-12 01:09:41 +08:00
t8y2
51e2ef0d1f
fix(postgres): support legacy routine metadata
2026-06-12 00:59:52 +08:00
t8y2
6081ba46f6
fix: prevent freeze when manually editing date cell and clicking away
2026-06-12 00:58:13 +08:00
t8y2
b542f89a0b
fix(sql): keep oracle plsql blocks together
2026-06-12 00:47:21 +08:00
t8y2
84aafc7a43
fix: pass jdbc_driver_paths and jdbc_driver_class to agent connect params
2026-06-12 00:46:26 +08:00
haipengno1
7de0de2313
实现 Redis 的查询功能
2026-06-12 00:20:17 +08:00
dbin0123
5aa5ed9cee
fix(core): 表结构编辑中字段无长度时扩展属性变更不生成 SQL
2026-06-12 00:20:16 +08:00
t8y2
3f7987aa59
fix(table-data): load metadata before initial query
2026-06-11 23:19:45 +08:00
t8y2
3640541222
fix(ci): update nested layout and grid tests
2026-06-11 22:55:24 +08:00
t8y2
c9d655324d
fix(editor): preserve IME composition in comments
2026-06-11 22:55:16 +08:00
t8y2
a017e04d4c
feat(structure): auto name new indexes
2026-06-11 22:40:10 +08:00
t8y2
57d03c2f08
feat(sidebar): support nested groups
2026-06-11 22:35:00 +08:00
t8y2
098d125bcb
fix(ui): soften overflow scrollbars
2026-06-11 22:20:34 +08:00
haipengno1
cee8cbb95a
feat(sidebar): add copy name to database, schema and connection-group context menu
2026-06-11 22:16:13 +08:00
t8y2
c7fb855000
fix(jdbc): simplify driver selection and table edits
2026-06-11 22:13:27 +08:00
t8y2
70f7b464b7
feat(jdbc): install drivers from Maven bundles
2026-06-11 21:41:37 +08:00
t8y2
f969db571c
fix(canvas): fallback to DOM scroller size when canvas viewport uninitialized
2026-06-11 20:58:52 +08:00
t8y2
514a01b3b1
feat: shared ErrorBanner component, CustomSaveHandler with preview, and cleanup
2026-06-11 20:24:56 +08:00
t8y2
9fbafa9a6d
fix(elasticsearch): strip metadata fields from writes
2026-06-11 19:44:58 +08:00
t8y2
bd3585f057
fix: draw selected cell left border for first visible column in canvas mode
2026-06-11 19:35:08 +08:00
t8y2
7923f4915e
fix(elasticsearch): apply document filters in browser
2026-06-11 18:56:38 +08:00
t8y2
3f25a69d23
feat(mysql): add unsigned integer types to column type options
2026-06-11 18:34:51 +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
edeee4f7d9
fix(mongo): preserve bson date fields
2026-06-11 18:09:41 +08:00
Doracoin
c7c71850d4
fix(windows-build): ssh-agent err when building on windows
2026-06-11 17:29:40 +08:00
t8y2
759cab9088
docs: add dbx-agents side-by-side workspace setup
2026-06-11 15:28:44 +08:00
t8y2
36e08d6741
fix(jdbc): format date values by column type
2026-06-11 15:20:27 +08:00
t8y2
a9882d5312
feat(sidebar): show table comments on hover
2026-06-11 15:09:56 +08:00
t8y2
c10d2d9586
refactor(mysql): extract temporal value serialization, fix DATE display
2026-06-11 14:12:05 +08:00
t8y2
a4768db69c
fix(docs): remove non-existent initials property in homepage
2026-06-11 14:11:57 +08:00
t8y2
97ccd56299
fix(docs): remove non-existent initials property in databases page
2026-06-11 14:01:02 +08:00