funnytime
d1fb9b8445
feat(history): add execution time range filter
2026-06-20 22:14:15 +08:00
林剑凛
88a4f89584
fix: prevent WebDAV password action overlap
2026-06-20 00:03:12 +08:00
林剑凛
39ced46282
feat: improve MongoDB query assistance
2026-06-19 23:59:34 +08:00
t8y2
3cbead1c20
feat(sync): support webdav sync on web
2026-06-19 13:22:19 +08:00
t8y2
c546ba531a
fix(settings): constrain settings dialog layout
2026-06-19 11:50:04 +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
93a6a65707
feat(editor): toggle SQL keyword case
2026-06-19 02:06:12 +08:00
林剑凛
0e1c2da1e8
fix: lazy load system fonts in editor settings
2026-06-18 20:24:40 +08:00
Abeautifulsnow
320336e84e
feat(ai): add inline model selector to AI assistant toolbar
2026-06-18 18:10:28 +08:00
t8y2
dc10f5720e
fix(editor): replace fold gutter icons with consistent SVG chevrons, fix queryStore tests
2026-06-18 16:29:23 +08:00
t8y2
5ffd0bad6c
fix(settings): persist sidebar page size
2026-06-18 14:57:54 +08:00
t8y2
03e5e27c79
fix(ai): prevent marked parse error from crashing chat during streaming
2026-06-18 10:30:28 +08:00
Libon
f1b8579994
style: improve UI interface
2026-06-18 02:01:00 +08:00
t8y2
6e7035823a
fix(editor): use editor snapshot for SQL execution
2026-06-17 15:30:31 +08:00
Spencer.Chang
598b5dfef8
feat: add query editor view data context action
2026-06-17 14:42:15 +08:00
t8y2
5a08d42258
feat: make sidebar table page size configurable in settings
2026-06-17 02:00:15 +08:00
t8y2
412bb2be87
fix: add word-wrap toggle to danger confirm dialog
2026-06-16 23:00:46 +08:00
haipengno1
f14973eaef
fix(redis): make completion menu follow typing
...
The result used filter:false + validFor, which CodeMirror treats as
mutually exclusive — validFor is ignored, so the list froze and the
selection did not move while typing. Build the result with the default
built-in filter so typing narrows the list and moves the selection.
2026-06-16 22:46:24 +08:00
haipengno1
1e96937455
feat(redis): add Redis command completion to query editor
...
- add completion module: command names, two-stage subcommands, and key names
- key-name completion is async with a per-db cache capped at 1000 entries, cleared on disconnect
- gate key completion by argument position: stop after a single-key command is filled, keep suggesting for variadic key-list commands
- reuse the diagnostics command table as the data source, showing group/arity/safety
2026-06-16 22:03:48 +08:00
Abeautifulsnow
ec28005f20
feat(agent): safety check display
...
* fix(i18n): add missing agent tool step translations for zh-TW, pt-BR, it, ja
* propagate explainData to agent step items for ExplainPlanViewer
* feat(ai): show safety check result for execute_query tool steps
2026-06-16 13:56:16 +08:00
haipengno1
80a390a4c0
feat(redis): add Redis syntax checking for query editor
...
- Built-in metadata for ~200 Redis commands (arity/group/safety), available offline
- Add diagnostic builder: unknown command name, arity errors, unclosed quotes, danger/write command highlighting
- Reuse existing diagnostic pipeline and integrate underlines + hover tips in QueryEditor
2026-06-16 10:31:09 +08:00
Abeautifulsnow
a1f15f6c45
fix(ai): propagate explainData and add missing agent i18n keys
...
Thanks @Abeautifulsnow!
2026-06-16 10:28:35 +08:00
t8y2
5f870be0d9
feat(editor): open table ddl panel from SQL
2026-06-16 00:51:34 +08:00
t8y2
cce7fcc600
fix(mysql): complete database-qualified columns
2026-06-15 23:35:11 +08:00
Libon
1991bf118b
feat(infinite-scroll): implement infinite scroll feature with customizable max rows
2026-06-15 23:05:35 +08:00
t8y2
59fa888149
fix(dialog): keep drop database confirmation loading
2026-06-15 22:02:59 +08:00
Abeautifulsnow
c300336281
feat(ai): context window management and token usage tracking
...
* @
feat(ai): add conversation context management and token usage tracking (Phase 4)
## Background
Phase 4 of AI agent loop upgrade: token usage extraction from LLM responses,
cost estimation display, and automatic context window management (summarization
when approaching limits).
## Changes
### Backend (Rust)
- New token_usage::TokenUsage — cross-turn token accumulation
- New agent_loop::maybe_compact — proactive context compaction: token estimation
→ cut-point selection → LLM summarization → fallback summary
→ tool-pair integrity protection → drain/insert
- New agent_loop::context_window_for_model — auto-detect context window by model
- New agent_loop::is_context_length_error — detect upstream context-length errors
- New agent_loop::compact_tool_result_for_context — JSON/text sampling for large results
- Modified agent_loop::run_agent_loop — pre-turn compaction check, retry on context error
- Modified agent_events::AgentEnd — split total_tokens into input_tokens/output_tokens
- New agent_events::ContextCompacted — compaction event with metrics
- New AiConfig.context_window — user-configurable context window size
- New AiChatMessage.kind — context summary message marker
- Modified stream_with_tools & 3 provider stream functions — extract TokenUsage
- Claude: message_start(input) + message_delta(output)
- OpenAI: stream_options { include_usage } → final usage chunk
- Gemini: usageMetadata per chunk, keep last
### Frontend (TypeScript/Vue)
- AiAssistant.vue: token + cost display row, estimateCost() with 7 model families,
contextCompacted UI step, pendingCompaction deferred apply,
messagesForAgentHistory post-compaction history reconstruction
- EditorSettingsDialog.vue: contextWindow input (min=1000, auto-detect)
- settingsStore.ts: AiConfig.contextWindow field
- tauri.ts: AgentEvent type updates, AiChatMessage.kind
- i18n: 6 new keys in en.ts and zh-CN.ts
## Fixed Issues
- messages[0] dropped from LLM context after compaction
- estimate_text_tokens hard threshold causing 2.8x estimate jump
- context_compacted event field semantics mismatch with frontend insert position
- validate_summary English-only keywords causing fallback on non-English LLMs
- Stale agentTokens after conversation switch
@
* remove cost computation logic
2026-06-15 18:55:22 +08:00
Abeautifulsnow
d845a318c6
feat(ai-agent): Phase 3 — explain_query tool, parallel/sequential execution, DB gating ( #1187 )
...
- Add explain_query tool with structured EXPLAIN result, gated on supports_explain_plan()
- Add supports_sql_query() to gate execute_query/get_sample_data for non-SQL DBs (Redis, ES, MongoDB, etc.)
- Split agent loop tool dispatch: execute_query runs sequentially, all others run in parallel via join_all
- Wire explain_query result button to ExplainPlanViewer in AiAssistant + App.vue
- Fix O(n²) agentSteps rebuild: incremental O(1) push per event during streaming
- finally block falls back to full rebuild only when streaming push did not occur
2026-06-15 13:14:59 +08:00
echocde and Echocde
7dc27f8f6d
fix(ui): fix appearance setting page display with text truncation tooltips
...
* chore: test main release token push
* fix(desktop): unify toolbar dropdown tooltips
* chore: test main release token push
* fix(desktop): unify toolbar dropdown tooltips
* fix(ui) Appearance setting page displayed incorrectly.
* fix(ui) Appearance setting page displayed incorrectly.
* fix(ui) Appearance setting page displayed incorrectly.
* Remove unused import
---------
Co-authored-by: Echocde <udixt@outlook.com >
2026-06-15 11:08:27 +08:00
t8y2
8af25343cc
feat(ui): add password visibility toggle to all password inputs
2026-06-15 02:34:19 +08:00
t8y2
6c57169162
feat(mcp): add one-click install/upgrade button
2026-06-13 20:05:46 +08:00
t8y2
6a87f31fdc
feat(ai): add resizable textarea with drag handle
2026-06-13 15:13:19 +08:00
dbin0123
2ef29c004a
fix(editor): keep cursor at end of inserted completion text ( #1136 )
...
Thanks @dbin0123!
2026-06-13 11:42:03 +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
t8y2
fa4dbb9104
feat(completion): cache foreign key metadata
2026-06-12 19:27:16 +08:00
runstone
094412d956
fix error
2026-06-12 19:00:27 +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
7df7fd9235
feat(ai): add tool result collapsible UI and fix agent mode prompt
...
AiAssistant.vue:
- Tool call steps now support click-to-expand/collapse for SQL args
and results (expandedSteps set); chevron rotates on open
- Remove fixed-open result display (was always visible, no toggle)
- Max result height raised to 48 (max-h-48) with scroll
ai.ts (buildModePromptLines agent branch):
- Replace vague "prioritize SQL" hint with explicit tool-use
instruction: must call execute_query, not just emit SQL text
- List available tools (list_tables, get_columns, execute_query,
get_sample_data) so LLM knows what it can call
- Clarify allowed statement types for execute_query
2026-06-12 18:27:28 +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
t8y2
2395727b6b
fix(ai): auto-add /v1 prefix for bare-origin OpenAI-compatible endpoints
2026-06-12 16:10:42 +08:00
Abeautifulsnow
082e3bb4eb
feat(ai): add agent tool calling loop
2026-06-12 13:18:36 +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
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
c9d655324d
fix(editor): preserve IME composition in comments
2026-06-11 22:55:16 +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
21fd98d0ee
feat: configurable toolbar visibility with settings UI
2026-06-11 13:32:39 +08:00
t8y2
4a264d638c
feat: reorganize toolbar with more dropdown and add theme to appearance settings
2026-06-11 13:13:23 +08:00