Commit Graph
185 Commits
Author SHA1 Message Date
zipgandstaff 25bac0c67a 优化 AI 模型选择控件布局
Co-authored-by: staff <staff@qimaos-MacBook-Pro.local>
2026-06-23 19:56:02 +08:00
Abeautifulsnow bbd3ccf864 fix(ai): add inline proposal confirmation buttons
* fix(ai): add quick proposal confirmation buttons (all locales)

When the assistant proposes an action, render Yes/No buttons below the
message so the user does not need to type a short reply — fixing the
issue where short replies caused the LLM to re-ask instead of executing.

- aiProposalDetect.ts: pure detectors for proposal sentences/short replies
- AiAssistant.vue: inline Yes/No buttons on last assistant proposal message
- ai.ts: system-prompt rule to skip re-confirmation on short affirmatives
- i18n: 3 keys added to all 7 locales (en/zh-CN/zh-TW/ja/es/it/pt-BR)

Tests: 55/55. TypeCheck: passed.

* fix(ai): add i18n keys and UI changes for proposal confirmation
2026-06-23 18:25:57 +08:00
t8y2 37f7c48c3b feat(ui): add help tooltip 2026-06-23 18:19:50 +08:00
zipg 1c7ef0d235 feat(mysql): optimize table structure loading 2026-06-23 17:31:37 +08:00
t8y2 c32a95c477 fix(desktop): respect native clipboard regions 2026-06-23 16:12:35 +08:00
luoianun 8cc7a35c1a feat: add PrestoSQL connector 2026-06-23 01:27:08 +08:00
t8y2 988b2ab3da feat(sqlserver): recognize readonly keyword 2026-06-22 17:56:49 +08:00
74df246d7e feat(ai): improve model selection with searchable dropdown
* fix(ui): toast 消息支持换行显示

- 添加 max-w-3xl 限制最大宽度
- 使用 whitespace-pre-wrap 允许自动换行
- 添加 break-words 防止长单词溢出

* fix(ai): 优化模型选择下拉列表

---------

Co-authored-by: t8y2 <1156263951@qq.com>
Co-authored-by: staff <staff@qimaos-MacBook-Pro.local>
2026-06-22 17:22:17 +08:00
dac97b83a6 feat(editor): execute single SQL directly without picker
* fix(ui): toast 消息支持换行显示

- 添加 max-w-3xl 限制最大宽度
- 使用 whitespace-pre-wrap 允许自动换行
- 添加 break-words 防止长单词溢出

* feat(editor): 单条 SQL 直接执行

---------

Co-authored-by: t8y2 <1156263951@qq.com>
Co-authored-by: staff <staff@qimaos-MacBook-Pro.local>
2026-06-22 17:14:36 +08:00
t8y2 9418e37c04 feat(settings): add show execution target picker option and related UI elements 2026-06-22 12:05:47 +08:00
Abeautifulsnow 629c92bf7e feat: prompt input history navigation with ↑/↓ arrow keys in AI assistant 2026-06-22 10:50:18 +08:00
t8y2 bd671eb1a5 feat(settings): scope reset defaults to current tab 2026-06-21 13:19:12 +08:00
cherlinbest-pixelandcherlin 28a23de604 feat(desktop): add close behavior prompt with quit-on-close setting
Co-authored-by: cherlin <544026227@qq.com>
2026-06-21 00:04:52 +08:00
uicky 4d2afcad90 feat(editor): add SQL execution target picker with preview decoration
When the user triggers SQL execution via shortcut/toolbar/context-menu
without a manual selection, a floating picker now surfaces the available
execution targets:

- "Current SQL" — the statement at the cursor
- "All SQL"   — the entire editor content

Each candidate is highlighted as a preview decoration in the editor as
the user navigates the picker with arrow keys. Only a single entry is
shown when the cursor statement equals the full document.

前端 SQL 范围解析器 (sqlStatementRanges.ts) 按分号拆分语句,同时跳过
字符串、引号标识符、注释和美元引用体中的分隔符,与后端 dbx-core splitter
逻辑一致。选取器支持键盘导航、鼠标悬停高亮、Enter 确认、Esc/失焦取消。

Changes:
- sqlExecutionTarget.ts: add SqlExecutionCandidate, SqlExecutionOverride types
- sqlStatementRanges.ts: frontend SQL tokeniser (new, 848 lines)
- SqlExecutionTargetPicker.vue: accessible floating listbox (new, 109 lines)
- QueryEditor.vue: preview StateEffect/StateField; requestExecute() replaces
  executeCurrentSql() to route through picker
- ContentArea.vue: expose requestQueryEditorExecute() to parent
- App.vue: toolbar + global shortcut → requestActiveEditorExecute()
- i18n: editor.executionPicker keys for all locales
- tests: 26 new unit tests for sqlStatementRanges (all 1121 tests pass)
2026-06-20 22:28:02 +08:00
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
echocdeandEchocde 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