Commit Graph
2169 Commits
Author SHA1 Message Date
t8y2 a0136c5bd7 fix(ai): parse ollama reasoning stream chunks 2026-06-17 17:13:48 +08:00
t8y2 b7e47863da feat(release): bump version to 0.5.34 2026-06-17 16:11:04 +08:00
t8y2 9a66bc4fa2 style: remove extra blank line in redis_driver 2026-06-17 15:59:21 +08:00
t8y2 b0cc3ed0d6 fix(sql): split current statement on blank lines 2026-06-17 15:54:57 +08:00
t8y2 4dbd1c7cc8 fix: convert source to editable form when opening view/procedure editor 2026-06-17 15:20:21 +08:00
dalew 4888e637c7 fix(redis): unify aggregated INFO output format in console
* fix(redis):format INFO output as plain text in cluster mode

* fix(redis): unify aggregated INFO output format in console
2026-06-17 14:54:51 +08:00
luoianun 021e1682c3 fix(mysql): avoid Aliyun ADB timeout for bounded text results 2026-06-17 14:53:13 +08:00
t8y2 66fa986a9b fix(sqlserver): include column comments in table DDL 2026-06-17 14:36:16 +08:00
dalew 8486d27cb2 fix(redis): unify INFO category command output in cluster mode
* fix(redis):format INFO output as plain text in cluster mode

* fix(redis): unify INFO category command output in cluster mode

In Redis cluster mode, the INFO command (with category parameters) returns aggregated results from multiple primaries. This fix formats the output as human-readable plain text, consistent with standalone mode, to improve readability.

Closes #1326
2026-06-17 11:20:07 +08:00
t8y2 66e6ca1211 fix(db): refresh stale native pools 2026-06-17 11:14:35 +08:00
t8y2 5a08d42258 feat: make sidebar table page size configurable in settings 2026-06-17 02:00:15 +08:00
t8y2 29e7267d31 fix(mongodb): set directConnection=true for single-host to bypass replica set discovery 2026-06-17 01:31:08 +08:00
t8y2 74d9bbd3e5 fix(sqlserver): replace OFFSET/FETCH with TOP/ROW_NUMBER for pre-2012 compatibility 2026-06-17 01:26:56 +08:00
t8y2 34b37006be fix(jdbc): don't quote identifiers or use table aliases for JDBC 2026-06-17 01:06:31 +08:00
t8y2 0411fd46b6 fix(jdbc): skip SQL-level row limiting for JDBC connections 2026-06-17 01:00:09 +08:00
t8y2 63bb6a21ca fix(mysql): parse geometry WKB to WKT for display and editing 2026-06-17 00:49:33 +08:00
dalew 0830e03f89 fix(redis): format INFO output as plain text in cluster mode 2026-06-17 00:21:00 +08:00
t8y2 1da30465ea fix(redis): preserve int64 precision in JSON string values for GET results 2026-06-16 22:17:59 +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
t8y2 95b03998d1 fix(tests): reorder imports for better readability in AI module tests 2026-06-16 19:23:31 +08:00
t8y2 c0b7fb5a28 fix(postgres): include sequences in list_objects 2026-06-16 19:20:08 +08:00
iiusky 57f1b6cedc fix(ai): avoid empty Claude system field rejected by Anthropic
Anthropic rejects requests whose system field is an empty string with
"system: text content blocks must be non-empty". The connection test
hardcoded an empty system, and regular completion/stream requests sent
an empty system_prompt when none was configured.

Add a claude_system_prompt() helper that substitutes a non-empty default
for empty or whitespace-only prompts, and apply it to all Claude request
sites. Covered by a unit test.
2026-06-16 18:52:02 +08:00
t8y2 3024339c91 fix: format bool as 0/1 for all BIT columns, not just MySQL 2026-06-16 18:41:54 +08:00
t8y2 9a68a4d7d2 fix(tests): remove redundant test for agent driver store entries 2026-06-16 18:28:59 +08:00
John Jin 6aca7c052f fix(transfer): solve automatic table creation statement
* fix(transfer): solve automatic table creation statement

* fix(transfer):  fix the case issue of tests
2026-06-16 18:03:37 +08:00
t8y2 b94f0e1590 fix(agent): discard timed out query pools 2026-06-16 16:20:04 +08:00
t8y2 64a35e4c4a fix(influxdb): hide from driver store, uses native Rust driver 2026-06-16 15:16:09 +08:00
t8y2 a1feda0c6d fix(mysql): enable cleartext plugin for Doris connections 2026-06-16 14:43:28 +08:00
t8y2 558b9301a2 feat(sqlite): create empty database file on connect if missing 2026-06-16 13:55:44 +08:00
t8y2 db7b730dd3 fix(agent): add cache buster to R2 downloads 2026-06-16 13:25:49 +08:00
t8y2 9b8aa4292d feat(release): bump version to 0.5.33 2026-06-16 11:26:41 +08:00
t8y2 9a2a21c09a fix(test): avoid iris alias formatting assertion 2026-06-16 10:54:28 +08:00
t8y2 47915c243d fix(connection): avoid blocking disconnect cleanup 2026-06-16 10:45:14 +08:00
t8y2 000c236619 feat(connection): add keepalive interval 2026-06-16 10:23:49 +08:00
t8y2 9b4e16500e fix(postgres): show connection failure details 2026-06-16 01:05:48 +08:00
t8y2 c57e18bf3e fix: resolve clippy warnings and missing struct fields in tests 2026-06-16 00:55:32 +08:00
t8y2 3574113feb fix(iris): qualify selected schema tables 2026-06-15 23:16:29 +08:00
t8y2 9c478d1437 fix(connection): respect agent connect timeout 2026-06-15 22:43:05 +08:00
t8y2 7926da7c0c fix(postgres): disconnect sessions before drop database 2026-06-15 22:02:52 +08:00
t8y2 048549ec0e fix(elasticsearch): encode index path segments 2026-06-15 21:28:25 +08:00
t8y2 a18b076057 fix(xugu): qualify schema-aware table selects 2026-06-15 21:06:21 +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 46ddcaba56 fix: normalize channel_binding=require to prefer for postgres 2026-06-15 17:44:00 +08:00
t8y2 3ee2514d07 fix(databend): enable editing and procedures 2026-06-15 17:43:44 +08:00
David Bottiau 921dff5ffe feat: allow password protection to be disabled (#1201)
Thanks @Odonno!
2026-06-15 17:01:01 +08:00
t8y2 e0d481cc2e fix(postgres): handle tsvector columns 2026-06-15 16:59:01 +08:00
t8y2 f2a0c65724 fix(ssh): support legacy kex algorithms 2026-06-15 16:15:44 +08:00
t8y2 026a0d2b12 fix(data): preserve unsafe int64 display 2026-06-15 15:14:38 +08:00
t8y2 ab5bd1dd25 fix(redis): batch SCAN server-side to reduce fetch-all latency 2026-06-15 15:01:13 +08:00