Commit Graph
448 Commits
Author SHA1 Message Date
t8y2 a052bcd2cd fix(jdbc): pass through JDBC identifiers unquoted in frontend 2026-06-17 01:40:06 +08:00
haipengno1 3695042c8e fix(redis): invalidate key completion cache after write commands
The Redis key-name completion cache was only cleared on connection
lifecycle events, so SET/DEL/EXPIRE/... left autocomplete showing
stale keys. Drop the cache for the db each write command ran on:
- add isRedisMutatingCommand() based on the command-table safety field
(confirm = write; destructive blocked cmds minus read-only/admin ones)
- invalidate after each mutating command in queryStore batch execution
and in RedisKeyBrowser.runRedisCommand
2026-06-17 00:24:47 +08:00
dbin0123andt8y2 bc91fbdfa1 fix(generate): 确保保存/加载配置覆盖所有生成器参数,并修复参数被意外清空的问题
* feat: highlight selected SQL matches

* fix(core): detect column extra changes (auto_increment, on_update) in table structure SQL generation

- Add has_column_extra_change check to build_column_sql skip condition
- Add is_column_extra_empty to handle None/Some(false)/empty ColumnExtra
- Fix false positives when extra is parsed but no effective change

* feat(generate): fix date range persistence, add i18n for data generation

* fix:Remove invalid references

* fix(generate): ensure config save/load covers all generator params

- Remove auto-reset watch in GeneratorParamsPanel that cleared params
  when loading a profile with different generatorKey
- Extend defaultGeneratorParams() to provide explicit defaults for all
  35+ generators (full_name, phone, email, barcode, url, file_path,
  foreign_key, image, regex, product_name, etc.) so profiles persist
  and restore correctly through JSON serialize/deserialize round-trip

---------

Co-authored-by: t8y2 <1156263951@qq.com>
2026-06-17 00:21:35 +08:00
t8y2 6efdd335ed fix(mongo): preserve int64 precision in document filter parsing 2026-06-16 22:38:37 +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
miracleandt8y2 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 8339d23df5 fix: distinguish materialized view from regular view 2026-06-16 21:23:42 +08:00
lexmin0412 11b6fc2d74 feat(ui): add View DDL for tables in sidebar and object browser 2026-06-16 18:07:59 +08:00
t8y2 b1f38fd974 fix(editor): trim line break selection highlight 2026-06-16 18:07:42 +08:00
t8y2 2649005efd feat: allow reordering draft columns in table structure editor 2026-06-16 17:39:03 +08:00
t8y2 24f92536e0 feat(navicat): detect OceanBase and GaussDB from NCX ServiceProvider 2026-06-16 17:25:52 +08:00
t8y2 c77948b3c0 feat(editor): drag columns into SQL editor 2026-06-16 17:12:37 +08:00
t8y2 8d4a08c3d5 fix(desktop): sort batch table drop by foreign key dependency 2026-06-16 15:01:21 +08:00
t8y2 90c46d5450 fix(sidebar): reorder pinned tree nodes 2026-06-16 11:13:15 +08:00
t8y2 48d2e41cb0 fix: use tabular variant first to prevent canvas edit jitter 2026-06-16 11:12:01 +08:00
t8y2 05a98f6f4f feat: use Geist Variable 12.5px for data grid tables 2026-06-16 11:10:05 +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
t8y2 000c236619 feat(connection): add keepalive interval 2026-06-16 10:23:49 +08:00
t8y2 cce7fcc600 fix(mysql): complete database-qualified columns 2026-06-15 23:35:11 +08:00
t8y2 9c478d1437 fix(connection): respect agent connect timeout 2026-06-15 22:43:05 +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
t8y2 3ee2514d07 fix(databend): enable editing and procedures 2026-06-15 17:43:44 +08:00
cwatanab 1debfef284 feat(i18n): add Japanese translation support (#1211) 2026-06-15 17:27:06 +08:00
t8y2 96a01a6050 fix(grid): align data grid editor fonts 2026-06-15 15:30:55 +08:00
t8y2 ab5bd1dd25 fix(redis): batch SCAN server-side to reduce fetch-all latency 2026-06-15 15:01:13 +08:00
t8y2 7bb869d398 fix(mongodb): support legacy driver fallback 2026-06-15 14:07:31 +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
t8y2 35f03a07b3 fix(ai): align aiAgentStream JSON field names with server camelCase expectation 2026-06-15 11:48:41 +08:00
t8y2 ff8fd49244 fix(sqlserver): add system functions and exclude NOW from common 2026-06-15 10:43:39 +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
John Jin 1afc271c18 feat: add QuestDB support
Thanks @ptma!
2026-06-14 22:58:05 +08:00
dbin0123 14e095215b feat(generate): fix date range persistence, add i18n for data generation
Thanks @dbin0123!
2026-06-14 22:54:11 +08:00
t8y2 8932b0a308 fix(mongo): align collection loading state 2026-06-14 17:04:56 +08:00
t8y2 7b2156446c fix(mongodb): use tls param for form connections 2026-06-14 16:06:37 +08:00
Vergil Lai f385386284 feat(manticore): add Manticore Search support
Add Manticore Search table data editing, structure editing, metadata handling, and SQL completion support.
2026-06-14 16:01:02 +08:00
SuLea-IT 97192297eb feat(query): add switchable query result runs and archives
* docs: design query result run tabs

* feat(query): add result run model helpers

* feat(query): persist result run metadata

* feat(query): record switchable result runs

* feat(query): sync active result run state

* feat(query): cache result run payloads

* feat(query): render result run tabs

* docs: design query result archives

* feat(query): add result archive codec

* feat(query): restore result archives

* feat(query): add result archive actions

* fix(query): toggle execution summary view

* fix(query): avoid archive compression backpressure

* feat(query): remove result runs

* chore: remove local spec docs from pr
2026-06-14 10:30:50 +08:00
t8y2 cbc7f9b0db fix(gbase): support 8a and 8s profiles 2026-06-14 10:16:24 +08:00
t8y2 e3b69679c8 fix: restore missing newlines at EOF 2026-06-13 20:45:06 +08:00
t8y2 0fa9964799 fix: add installMcpServer stub to http.ts 2026-06-13 20:34:28 +08:00
Vergil Lai 799d20a2cf 添加 Manticore Search 支持 (#1145)
* 添加 Manticore Search 支持

* 更新 Manticore Search 文档
2026-06-13 20:23:36 +08:00
t8y2 6c57169162 feat(mcp): add one-click install/upgrade button 2026-06-13 20:05:46 +08:00
LC 2d98b9fdd2 feat(sqlite): add database backup action
* feat(sqlite): add database backup action

* fix(sqlite): sanitize default backup file name
2026-06-13 18:39:12 +08:00
t8y2 0b9aef1ca8 feat(settings): split driver store paths 2026-06-13 17:27:58 +08:00
t8y2 d974ad5533 feat(settings): add custom driver store path with migration 2026-06-13 16:54:04 +08:00
t8y2 d091b0db85 feat(sidebar): reveal local db file in OS file manager 2026-06-13 16:00:47 +08:00
t8y2 30afcb8e69 fix(sidebar): page large table groups 2026-06-13 13:40:36 +08:00
t8y2 2ec8ed1523 feat(sidebar): locate query table from cursor 2026-06-13 12:45:00 +08:00
二丫讲梵 6f804266fc feat(sidebar): remap connection IDs in imported sidebar layouts
Thanks @eryajf for the contribution! Close #1121
2026-06-12 22:41:42 +08:00
t8y2 0d63fcd3a3 fix(oracle): avoid rowid for view data 2026-06-12 21:02: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