Commit Graph
580 Commits
Author SHA1 Message Date
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
SuLea-IT 89aa315a2d Merge pull request #1037
Thanks!
2026-06-11 11:12:05 +08:00
SuLea-IT 634e26e8e7 Merge PR #1024 2026-06-11 10:47:42 +08:00
t8y2 e3b4aac84c fix(desktop): tighten frontend transitions 2026-06-10 19:20:30 +08:00
t8y2 500d7c614b fix: resolve vue-tsc type errors in SqlPreviewPanel and DataGrid 2026-06-10 12:41:24 +08:00
t8y2 8df9484447 feat(ai): support auth methods 2026-06-10 12:14:36 +08:00
t8y2 8599ab8200 feat(data-grid): add SQL preview panel for pending data changes 2026-06-10 12:06:36 +08:00
t8y2 410e3bbfcb feat(completion): suggest database qualifiers 2026-06-10 11:08:13 +08:00
t8y2 3a52d961fc fix(completion): avoid table fallback for aliases 2026-06-10 10:51:41 +08:00
t8y2 51fe5de98b fix(shortcuts): allow clearing keyboard shortcuts in settings 2026-06-10 10:25:06 +08:00
t8y2 edba8214b5 feat: show username/password fields for Access database connections 2026-06-10 08:37:18 +08:00
t8y2 9ffa4c41d9 feat: add SQL library panel with folder/file management, rename, and sync support 2026-06-10 02:46:10 +08:00
t8y2 426b7911bc fix(editor): preserve sql tab cursor state 2026-06-09 18:18:18 +08:00
t8y2 80531c8765 fix(editor): restore sql viewport across activation 2026-06-09 18:07:10 +08:00
t8y2 e153d88091 fix(editor): preserve sql tab scroll position 2026-06-09 18:04:03 +08:00
t8y2 6a14b11efc fix(mongodb): skip SQL semantic diagnostics for MongoDB connections
MongoDB shell syntax like db.collection.find({}) was incorrectly
parsed as SQL, causing a "sql parser error" diagnostic in the editor.
Added MongoDB guards in shouldRunSqlSemanticDiagnostics and
refreshSemanticDiagnostics, matching existing Elasticsearch logic.

Also fix a pre-existing TiDB cloud URL param ordering test failure.
2026-06-09 16:20:50 +08:00
SuLea-IT 5138c1a702 Add configurable SQL formatter settings (#908)
Thanks!
2026-06-09 12:05:17 +08:00
t8y2 41c696ef22 perf(editor): optimize sql completion metadata lookup 2026-06-09 11:09:12 +08:00
t8y2 d4c87f5a4c fix(ui): increase shortcut pill width to prevent text clipping on Windows 2026-06-09 10:41:19 +08:00
t8y2 025a4fdcce fix: support tree-schema default DB selection in AI assistant 2026-06-09 00:44:04 +08:00
t8y2 03ade2ebba fix: allow custom theme editor to scroll 2026-06-09 00:25:11 +08:00
Yong Studt 2628fb8374 feat(elasticsearch): add SQL-model execution with mapping-aware completion
- Route SELECT * FROM <index> through /_search for simple browses; aggregates/projections stay on /_sql
- Drive completion columns from /_mapping (flattened dotted fields, multi-fields)
- Switch editor completion to SQL when the active statement starts with SELECT/WITH on ES
- Skip generic SQL semantic diagnostics for ES (hyphenated wildcard indices caused 500s)
- Wire ES into server-side pagination plan; derive completion context from line blocks
- Fix result-grid pagination exceeding in-memory result sets (allRowsLoaded)
2026-06-08 17:53:05 +08:00
t8y2 3fc6c0eaba fix(ai): use local provider icons 2026-06-08 17:11:12 +08:00
t8y2 b777cddde5 feat: add user-facing debug logs 2026-06-08 12:16:49 +08:00
54de28d583 feat(grid): show column data types in result header (#669) (#820)
The data grid header only showed column names, and column types were
available only via tableMeta (open-table view). Arbitrary query results
(e.g. `select * from pg_depend`) therefore showed no type at all, which
is exactly the case the reporter hit.

Backend: add `column_types` to QueryResult (serde-default, backward
compatible) and populate it for the native drivers where the type is
readily available — PostgreSQL, MySQL, SQL Server, ClickHouse. Other
drivers leave it empty for now (no behavior change); schemaless stores
(Mongo/Redis/ES) have no column types.

Frontend: render a type row under each column name in the grid header,
color-coded by type. The type is resolved from tableMeta first (richer,
includes precision) and falls back to the query result's column_types by
index. Add a `showColumnTypesInHeader` setting (default on) and keep the
msgpack tab-result cache compatible. The source-selection logic is
extracted to lib/dataGridColumnType.ts with unit tests.

Co-authored-by: vrustx <vrustx@vrustxdeMac-mini.local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 22:45:46 +08:00
t8y2 4a64240e8a feat: highlight selected SQL matches 2026-06-07 17:43:11 +08:00
t8y2 15b792a424 fix(editor): improve selection rendering 2026-06-07 14:23:18 +08:00
t8y2 27b5cc681b fix(settings): polish shortcut editing controls 2026-06-07 11:11:49 +08:00
t8y2 3eefe87380 feat(settings): allow disabling update reminders 2026-06-07 01:07:31 +08:00
polempandSam a067ee8d76 feat: custom theme system with PostgreSQL PL/pgSQL highlighting fix
- Fix PostgreSQL function highlighting by disabling doubleDollarQuotedStrings
  in extended PostgreSQL dialect, enabling PL/pgSQL syntax highlighting
  inside $ blocks
- Add complete custom editor theme system with multi-theme management
  (create, rename, duplicate, delete), visual color editor (12 colors),
  JSON import/export, real-time preview, and 12 preset color schemes
- Add background/foreground color customization with system theme defaults
- Optimize EditorSettingsDialog layout: 2-column grid with font selector
  taking available space and theme dropdown grouped with custom theme button
- Add i18n support for custom theme UI (en, zh-CN, zh-TW, es)
- Fix Tauri production build by adding custom-protocol feature
- Update .gitignore for temporary build artifacts

Closes t8y2#788

Co-authored-by: Sam <14344444@@qq.com>
2026-06-06 20:59:21 +08:00
t8y2 bcafb9bc93 Revert "feat: support multiple desktop windows"
This reverts commit 642fa39bb8.
2026-06-06 00:01:38 +08:00
t8y2 642fa39bb8 feat: support multiple desktop windows 2026-06-05 20:45:00 +08:00
t8y2 e780e66e41 fix(sql): improve kingbase metadata loading and dangerous sql confirmation 2026-06-05 12:48:29 +08:00
t8y2 9935f8e7fe fix: improve iris schema metadata completion 2026-06-04 15:09:56 +08:00
t8y2 13e2cdde6f feat: add "reuse data tab" setting to avoid opening too many tabs when clicking table names
Add a configurable option in Settings > Navigation to reuse an existing data
tab instead of creating a new one each time a table is clicked in the sidebar.
2026-06-04 13:44:52 +08:00
skyler ff2210e5a4 Merge pull request #702 from DengQingNian/optimize/export-pagination-orderby-batchsize
perf(ui): 优化数据导出的ui体验和性能
2026-06-03 21:42:38 +08:00
t8y2 085a2f3870 feat(completion): add database-specific suggestions 2026-06-03 20:47:17 +08:00
dqn 4a12a575ed perf(ui): 优化数据导出的ui体验和性能 2026-06-03 20:19:25 +08:00
t8y2 af40af603e feat(editor): add configurable tab handling on disconnect 2026-06-03 16:53:40 +08:00
t8y2 29118700b6 feat(mcp): improve setup defaults and config hints 2026-06-03 16:40:40 +08:00
t8y2 967b9df604 feat(editor): show column comments in SQL completions 2026-06-03 14:05:30 +08:00
t8y2 4690fd8b81 feat: add elasticsearch command completion 2026-06-03 14:00:52 +08:00