Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
321 commits
Select commit Hold shift + click to select a range
d2ac449
Merge pull request #2771 from haizhi03/fix/dm-explain
Aias00 Aug 31, 2026
c7d2588
fix(import): harden CSV parsing options
Aias00 Aug 31, 2026
a3a007c
fix(import): batch mapped data file writes
Aias00 Aug 31, 2026
7e9b4b4
fix(mysql): bind active transactions to datasource
Aias00 Aug 31, 2026
b5df3ac
fix(mysql): preserve mixed index edits
Aias00 Aug 31, 2026
84e8abb
fix(mysql): handle nullable column metadata
Aias00 Aug 31, 2026
904ad57
feat(ai): add chat history navigation and renaming
openai0229 Aug 31, 2026
f1fd364
Merge pull request #2849 from OtterMind/feat/ai-chat-history-navigation
openai0229 Aug 31, 2026
1f9ed56
fix(result): search custom-rendered column names
openai0229 Aug 31, 2026
da06006
Merge pull request #2851 from OtterMind/fix/result-search-field-name
openai0229 Aug 31, 2026
7c1face
fix(redis): open details on row click
openai0229 Aug 31, 2026
609e995
fix(workspace): align datasource header
openai0229 Aug 31, 2026
b8b3e53
Merge pull request #2853 from OtterMind/fix/redis-row-click
openai0229 Aug 31, 2026
328042b
Merge branch 'main' into fix/workspace-header-alignment
openai0229 Aug 31, 2026
50ba27a
Merge pull request #2854 from OtterMind/fix/workspace-header-alignment
openai0229 Aug 31, 2026
f15b78e
feat(task): show progress in execution log
openai0229 Aug 31, 2026
7bc8060
Merge pull request #2857 from OtterMind/feat/task-log-progress
openai0229 Aug 31, 2026
fbca08b
fix(hive): expose databases through database metadata
openai0229 Aug 31, 2026
e60d300
fix(frontend): increase editor watermark density
openai0229 Sep 1, 2026
9a56777
fix(community): make file save lifecycle deterministic
openai0229 Sep 1, 2026
c839d78
fix(frontend): strengthen datasource identity color backgrounds (#2860)
openai0229 Sep 1, 2026
9ee5b3a
Merge pull request #2859 from OtterMind/fix/community-watermark-density
openai0229 Sep 1, 2026
7ee6f4f
Merge origin/main into feature/mysql-active-transaction-2595
Aias00 Sep 1, 2026
158f4e1
Merge origin/main into feature/mysql-csv-options-2601
Aias00 Sep 1, 2026
eb0dc01
Merge origin/main into feature/mysql-import-preview-2600
Aias00 Sep 1, 2026
05ec2be
fix(import): trust active metadata context
Aias00 Sep 1, 2026
1c46539
fix(import): resolve trusted preview metadata
Aias00 Sep 1, 2026
143caca
fix(frontend): keep file save state current
openai0229 Sep 1, 2026
5881399
Merge remote-tracking branch 'origin/main' into fix/community-local-f…
openai0229 Sep 1, 2026
c90ac12
Merge origin/main into feature/mysql-invisible-index-2574
Aias00 Sep 1, 2026
9d18354
Merge origin/main into feature/mysql-invisible-column-2571
Aias00 Sep 1, 2026
2f45f3a
fix(mysql): gate invisible indexes by server version
Aias00 Sep 1, 2026
4e53403
fix(mysql): gate invisible columns by server version
Aias00 Sep 1, 2026
2c9f7e0
fix(client): optimize long result cell rendering (#2863)
openai0229 Sep 1, 2026
27faf0e
fix(community): close local file save races
openai0229 Sep 1, 2026
55ba6cd
Merge remote-tracking branch 'origin/main' into fix/community-local-f…
openai0229 Sep 1, 2026
368aaee
fix(frontend): preserve live file metadata after save
openai0229 Sep 1, 2026
7ef605e
feat(mysql): complete active transaction diagnostics
Aias00 Sep 1, 2026
0866950
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Sep 1, 2026
f953719
fix(mysql): harden active transaction inspection
Aias00 Sep 1, 2026
b8fd371
feat(mysql): complete import task outcomes
Aias00 Sep 1, 2026
4a1b12f
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Sep 1, 2026
47e14ac
feat(mysql): complete CSV import export options
Aias00 Sep 1, 2026
4c6d6f6
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Sep 1, 2026
043bf4b
Merge pull request #2861 from OtterMind/fix/community-local-file-save…
openai0229 Sep 1, 2026
1b136e2
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Sep 1, 2026
42dade4
fix(i18n): localize dynamic datasource forms
openai0229 Sep 2, 2026
02868f0
fix(mysql): centralize index visibility values and guard unknown vers…
openai0229 Sep 2, 2026
1d780c2
Merge commit 'refs/codex/aias-review/upstream-main' into codex/sync-p…
openai0229 Sep 2, 2026
dade42f
fix(import): bind preview request body
Aias00 Sep 2, 2026
95bd4a5
Merge remote-tracking branch 'origin/main' into review/pr-2737-delivery
openai0229 Sep 2, 2026
ccb0f05
fix(terminal): make system shell fallback reliable
openai0229 Sep 2, 2026
48ba2c4
Merge pull request #2606 from Aias00/feature/mysql-invisible-index-2574
openai0229 Sep 2, 2026
4b62057
Merge pull request #2864 from OtterMind/codex/fix-i18n-dynamic-dataso…
openai0229 Sep 2, 2026
11527fe
fix(workspace): keep local files out of localStorage
openai0229 Sep 2, 2026
88f4e8a
fix(workspace): migrate legacy local file state
openai0229 Sep 2, 2026
2090156
Merge remote-tracking branch 'origin/main' into review/pr-2737-delivery
openai0229 Sep 2, 2026
a829708
Merge pull request #2866 from OtterMind/fix/local-file-workspace-stor…
openai0229 Sep 2, 2026
4e894c0
perf(mysql): avoid full parse for ordinary completion scripts
openai0229 Sep 2, 2026
e439f86
fix(mysql): format active transaction start time
Aias00 Sep 2, 2026
3bcd316
Merge pull request #2865 from OtterMind/fix/sql-completion-performance
openai0229 Sep 2, 2026
edc3222
Merge pull request #2737 from liushikuan63/main
openai0229 Sep 2, 2026
b062e1e
Merge main and fix MySQL invisible column management
openai0229 Sep 2, 2026
c4e8ad6
Merge remote-tracking branch 'origin/main' into codex/pr-2607-fix
openai0229 Sep 2, 2026
b2c27e6
refactor(client): centralize database capability checks
openai0229 Sep 2, 2026
3802df7
fix(client): keep MySQL visibility keywords literal
openai0229 Sep 2, 2026
85d2e0a
Merge pull request #2607 from Aias00/feature/mysql-invisible-column-2571
openai0229 Sep 2, 2026
961c6e5
fix(result): stabilize sorting and edit actions
openai0229 Sep 2, 2026
248d720
Merge pull request #2868 from OtterMind/fix/result-set-sort-edit-actions
openai0229 Sep 2, 2026
c30bfc6
Merge remote-tracking branch 'origin/main' into ci-fix/feature-mysql-…
Aias00 Sep 2, 2026
3091dc7
Merge remote-tracking branch 'origin/main' into goal/pr2653-completio…
Aias00 Sep 3, 2026
2c32d13
fix(import): stage CSV files for web preview
Aias00 Sep 3, 2026
88fb66a
Merge remote-tracking branch 'origin/main' into ci-fix/feature/mysql-…
Aias00 Sep 3, 2026
f232e5f
fix(mysql): refine active transaction inspection
openai0229 Sep 3, 2026
223f436
docs(mysql): align active transaction test steps
openai0229 Sep 3, 2026
b8aa245
fix(workspace): keep panel resizing responsive
openai0229 Sep 3, 2026
3ca2412
fix(tabs): restore theme accent fallback
openai0229 Sep 3, 2026
70ff3f8
refactor(mysql): centralize active transaction constants
openai0229 Sep 3, 2026
2036991
Merge pull request #2870 from OtterMind/fix/workspace-resize-theme-ac…
openai0229 Sep 3, 2026
5f64979
Merge origin/main into feature/mysql-active-transaction-2595
openai0229 Sep 3, 2026
cf39305
Merge pull request #2636 from Aias00/feature/mysql-active-transaction…
openai0229 Sep 3, 2026
b57a4c9
Merge remote-tracking branch 'origin/main' into codex/pr-2689-fix
openai0229 Sep 3, 2026
73eaead
fix(redis): enforce requested expiration state
openai0229 Sep 3, 2026
3d49f94
Merge pull request #2689 from HandSonic/fix/redis-persist-no-expiration
openai0229 Sep 3, 2026
6ef0461
fix(frontend): ignore stale account grants
HandSonic Aug 12, 2026
21b5ed7
fix(frontend): clear stale account grants while loading
openai0229 Sep 3, 2026
cc2235a
Merge original PR head into latest Community main
openai0229 Sep 3, 2026
144a04e
Merge pull request #2691 from HandSonic/fix/account-grants-latest-req…
openai0229 Sep 3, 2026
30eb49f
fix(dashboard): settle failed refresh requests
HandSonic Sep 3, 2026
0e5d2ac
fix(task): prevent artifact publication overwrite
HandSonic Aug 29, 2026
17f9893
fix(task): guard terminal state and stale pages
HandSonic Aug 29, 2026
bb449f5
fix(tree): decouple post-save refresh failures from save feedback
HandSonic Aug 23, 2026
7513a52
fix(tree): re-read hidden node ids on manual refresh
HandSonic Aug 23, 2026
c58a286
fix(spi): preserve connection fields in copies
HandSonic Aug 29, 2026
72f1567
fix(db2): drop statement terminators from JDBC query constants
HandSonic Aug 23, 2026
a11ada6
fix(task): recover staged artifact deletions on startup
HandSonic Aug 23, 2026
a26c89e
fix(history): add scoped operation log filtering
HandSonic Sep 3, 2026
3e1ce93
fix(sqlserver): detect top-level pagination ordering
HandSonic Aug 12, 2026
a1ca3a7
fix(clickhouse): preserve IPv6 URL when switching schema
HandSonic Aug 11, 2026
75dacdf
fix(clickhouse): encode schema in JDBC URL
HandSonic Aug 12, 2026
2ebd148
test(clickhouse): pin URL rewrite behavior for userinfo and at-sign p…
HandSonic Aug 23, 2026
dcfb069
fix(sqlserver): preserve index sort direction
HandSonic Aug 11, 2026
3265cec
fix(datasource): require POST to close connections
HandSonic Aug 11, 2026
31b6482
fix(tools): harden asynchronous JDBC downloads
HandSonic Aug 11, 2026
5ca6a7f
fix: constrain model test error modal content
haizhi03 Sep 4, 2026
2bed790
Merge main into feature/mysql-csv-options-2601
Aias00 Sep 4, 2026
682d5fb
Merge import preview safety and harden CSV workflow
Aias00 Sep 4, 2026
a2e550f
Merge main and verify bounded import preview
Aias00 Sep 4, 2026
757ffbb
Merge pull request #2686 from HandSonic/fix/sqlserver-index-direction
openai0229 Sep 7, 2026
9282184
Merge branch 'main' into fix/jdbc-download-daemon-threads
openai0229 Sep 7, 2026
321d615
fix(desktop): claim the instance before application startup
openai0229 Sep 7, 2026
7bd84f5
Merge pull request #2687 from HandSonic/fix/jdbc-download-daemon-threads
openai0229 Sep 7, 2026
6cd332c
fix(result-set): isolate table edits from query execution options
openai0229 Sep 7, 2026
f2cd217
fix(ui): enable horizontal scrolling in filter popovers
openai0229 Sep 7, 2026
ee5a918
Merge pull request #2877 from OtterMind/fix/result-edit-execution-iso…
openai0229 Sep 7, 2026
1cbbfb0
fix(kingbase): read table DDL columns from catalogs
openai0229 Sep 7, 2026
e5a266d
Merge remote-tracking branch 'origin/main' into fix/filter-popover-ho…
openai0229 Sep 7, 2026
1920af1
fix(table): confirm copy names and quote identifiers once
openai0229 Sep 7, 2026
0f059b1
Merge pull request #2878 from OtterMind/fix/filter-popover-horizontal…
openai0229 Sep 7, 2026
0fa715f
docs(table): clarify copy preparation contract
openai0229 Sep 7, 2026
7ca1c25
fix(desktop): preserve existing IPC and simplify instance lifecycle
openai0229 Sep 7, 2026
7339ec9
fix(kingbase): preserve MySQL auto increment and attached enums
openai0229 Sep 7, 2026
ae7a75c
Merge remote-tracking branch 'origin/main' into fix/kingbase-ddl-cata…
openai0229 Sep 7, 2026
36eff17
Merge pull request #2880 from OtterMind/fix/table-copy-confirmation-i…
openai0229 Sep 7, 2026
32cf6b2
Merge pull request #2879 from OtterMind/fix/kingbase-ddl-catalog-meta…
openai0229 Sep 7, 2026
4810b06
fix(import): generalize preview and column mapping
openai0229 Sep 7, 2026
5974a70
fix(desktop): detect IPC updates with matching timestamps
openai0229 Sep 7, 2026
50d823a
chore: keep the existing CI configuration
openai0229 Sep 7, 2026
163205a
fix(ui): align short filters and hide inactive scrollbars
openai0229 Sep 7, 2026
4c6321b
Merge pull request #2881 from OtterMind/fix/filter-scrollbar-alignment
openai0229 Sep 7, 2026
502b82b
refactor(desktop): keep instance admission at application entry
openai0229 Sep 7, 2026
9dcde42
Merge branch 'main' into fix/sqlserver-top-level-order-by
openai0229 Sep 7, 2026
b5d1f2d
fix(desktop): acknowledge independent launch requests
openai0229 Sep 7, 2026
75e8f0c
Merge pull request #2694 from HandSonic/fix/sqlserver-top-level-order-by
openai0229 Sep 7, 2026
fb3d3c6
fix(desktop): protect launch delivery through exit and bound IPC waits
openai0229 Sep 7, 2026
b97d38d
Merge branch 'main' into fix/connection-close-post-only
openai0229 Sep 7, 2026
1eea4f5
fix(import): validate duplicate column mappings
openai0229 Sep 7, 2026
bc18994
Merge remote-tracking branch 'origin/main' into fix/desktop-single-in…
openai0229 Sep 7, 2026
5668ab0
Merge pull request #2679 from HandSonic/fix/connection-close-post-only
openai0229 Sep 7, 2026
934aa21
Merge pull request #2875 from OtterMind/fix/desktop-single-instance-s…
openai0229 Sep 7, 2026
0027505
fix(result): lazy-load large text values (#2882)
openai0229 Sep 7, 2026
9c8a53a
fix(frontend): restore database utility actions
openai0229 Sep 7, 2026
fb8fdf5
Merge pull request #2883 from OtterMind/fix/copy-name-icon-driver-dow…
openai0229 Sep 7, 2026
9b80790
fix(import): simplify preview validation and execution
openai0229 Sep 8, 2026
124d44b
Merge remote-tracking branch 'origin/main' into codex/pr-2696-scope
openai0229 Sep 8, 2026
5eeebfc
fix(history): keep local operation logs execution-only
openai0229 Sep 8, 2026
4508cdb
fix(import): keep preview workflow focused
openai0229 Sep 8, 2026
01e68fc
fix(history): keep filters compact in narrow panels
openai0229 Sep 8, 2026
156bd17
fix(import): validate preview execution contract
openai0229 Sep 8, 2026
2cdbdd0
fix(import): resolve target tables from metadata
openai0229 Sep 8, 2026
3d185d4
fix(history): sync datasource filter options
openai0229 Sep 8, 2026
73e0c24
fix(import): hide development file path override
openai0229 Sep 8, 2026
9baf1bb
fix(import): remove stale preview refresh
openai0229 Sep 8, 2026
41ed434
refactor(history): keep filtering scope minimal
openai0229 Sep 8, 2026
ac15881
fix(import): support web JSON and SQL uploads
openai0229 Sep 8, 2026
5c8fb78
Merge origin/main into feature/mysql-import-preview-2600
openai0229 Sep 8, 2026
3200821
Merge pull request #2696 from HandSonic/fix/operation-log-filtering-2241
openai0229 Sep 8, 2026
9e16e97
refactor(import): clarify staging and service boundaries
openai0229 Sep 8, 2026
cdf461f
Merge latest origin/main into feature/mysql-import-preview-2600
openai0229 Sep 8, 2026
e49225a
Merge main into fix/dashboard-refresh-settles
openai0229 Sep 8, 2026
76f3340
Merge pull request #2652 from Aias00/feature/mysql-import-preview-2600
openai0229 Sep 8, 2026
0c48284
Merge pull request #2873 from haizhi03/fix/model-test-error-modal-ove…
openai0229 Sep 8, 2026
635497a
refactor(desktop): support hidden initial window
openai0229 Sep 8, 2026
771d432
refactor(dashboard): keep refresh settlement minimal
openai0229 Sep 8, 2026
2da56d2
Merge latest main into fix/dashboard-refresh-settles
openai0229 Sep 8, 2026
79bbcff
fix(import): enable preview in desktop runtimes
openai0229 Sep 8, 2026
207c931
Merge pull request #2886 from OtterMind/fix/hidden-update-trial-window
openai0229 Sep 8, 2026
e83b5a1
Merge pull request #2887 from OtterMind/fix/desktop-import-preview
openai0229 Sep 8, 2026
5b02d20
Merge latest main and preserve CSV import options
openai0229 Sep 8, 2026
f08c01d
refactor(import): reuse the file encoding selector
openai0229 Sep 8, 2026
6290703
refactor(import): clarify CSV parsing options
openai0229 Sep 9, 2026
63a6e09
fix(dashboard): consume handled refresh errors
openai0229 Sep 9, 2026
ae50c52
Merge remote-tracking branch 'origin/main' into review/pr-2688-minimal
openai0229 Sep 9, 2026
236a4c0
Merge pull request #2688 from HandSonic/fix/dashboard-refresh-settles
openai0229 Sep 9, 2026
df27cad
fix(import): align compact CSV option controls
openai0229 Sep 9, 2026
2cb03f6
Merge latest main into CSV options PR
openai0229 Sep 9, 2026
5371085
fix(import): expose CSV parse errors in packaged runtime
openai0229 Sep 9, 2026
2272cce
fix(jcef): create browser during hidden startup
openai0229 Sep 9, 2026
ac44e80
fix(frontend): prevent duplicate datasource mutations
openai0229 Sep 9, 2026
a37277b
Merge pull request #2890 from OtterMind/fix/hidden-update-trial-browser
openai0229 Sep 9, 2026
562c716
fix(frontend): report datasource tree refresh failures
openai0229 Sep 9, 2026
65c7217
fix(import): harden CSV streaming workflow
openai0229 Sep 9, 2026
3c7e2f0
Merge remote-tracking branch 'origin/main' into codex/pr-2653-sync
openai0229 Sep 9, 2026
0e7ced0
Merge branch 'main' into fix/clickhouse-schema-url-encoding
openai0229 Sep 9, 2026
5a17665
Merge pull request #2692 from HandSonic/fix/clickhouse-schema-url-enc…
openai0229 Sep 9, 2026
3867337
Merge remote-tracking branch 'origin/main' into codex/pr-2653-sync
openai0229 Sep 9, 2026
119985f
fix(import): clarify CSV preview errors
openai0229 Sep 9, 2026
324c39d
fix(jcef): stop editor cursor flicker
openai0229 Sep 9, 2026
7abcd24
Merge branch 'main' into fix/db2-routine-ddl-semicolon
openai0229 Sep 9, 2026
25667d6
Merge pull request #2738 from HandSonic/fix/db2-routine-ddl-semicolon
openai0229 Sep 9, 2026
b6a19f8
Merge remote-tracking branch 'origin/main' into fix/community-datasou…
openai0229 Sep 9, 2026
2a1ad5a
Merge remote-tracking branch 'origin/main' into fix/jcef-cursor-flicker
openai0229 Sep 9, 2026
6efca92
Merge remote-tracking branch 'origin/main' into codex/pr-2653-sync
openai0229 Sep 9, 2026
5cdeee4
Merge pull request #2891 from OtterMind/fix/community-datasource-tree…
openai0229 Sep 9, 2026
5655ffc
Merge remote-tracking branch 'origin/main' into fix/jcef-cursor-flicker
openai0229 Sep 9, 2026
deb5ee3
feat(import): support CSV row and value formats
openai0229 Sep 9, 2026
456a5e7
Merge remote-tracking branch 'origin/main' into codex/pr-2653-sync
openai0229 Sep 9, 2026
6594737
fix(import): map headerless CSV columns by position
openai0229 Sep 9, 2026
331349e
Merge pull request #2893 from OtterMind/fix/jcef-cursor-flicker
openai0229 Sep 9, 2026
0964a9b
refactor(import): simplify year delimiter selection
openai0229 Sep 9, 2026
a7433a6
fix(import): constrain CSV import layout
openai0229 Sep 9, 2026
83dfe73
fix(task): localize import execution logs
openai0229 Sep 9, 2026
6a98445
fix(ai): isolate context reference extensions
openai0229 Sep 8, 2026
b34e0a0
fix(ai): keep community mentions table-only
openai0229 Sep 9, 2026
0964f74
fix(task): preserve artifacts through deletion recovery
openai0229 Sep 10, 2026
1934594
fix(import): align encoding and task log localization
openai0229 Sep 10, 2026
c56d8c6
Merge pull request #2888 from OtterMind/fix/isolate-ai-context-refere…
openai0229 Sep 10, 2026
80ae002
revert(jcef): revert cursor flicker fix (#2893)
openai0229 Sep 10, 2026
9c5be81
Merge remote-tracking branch 'origin/main' into revert/pr-2893-cursor…
openai0229 Sep 10, 2026
6e8548e
refactor(import): extract character selector
openai0229 Sep 10, 2026
2d7b68e
fix(task): complete queued deletions with bounded retries
openai0229 Sep 10, 2026
0e0a9fd
refactor(task): extract deletion workflow helpers
openai0229 Sep 10, 2026
a600fe6
Merge pull request #2898 from OtterMind/revert/pr-2893-cursor-flicker
openai0229 Sep 10, 2026
82c5a0b
refactor(tools): extract JSON file utility
openai0229 Sep 10, 2026
cf33d33
refactor(task): separate deletion services behind domain interfaces
openai0229 Sep 10, 2026
2d40a24
test(task): cover deletion races and interrupted persistence
openai0229 Sep 10, 2026
80395a7
Merge pull request #2742 from HandSonic/fix/task-artifact-delete-reco…
openai0229 Sep 10, 2026
4df55d6
fix(table): preserve filters after query errors
openai0229 Sep 10, 2026
f3d2315
refactor(import): separate CSV import concerns
openai0229 Sep 10, 2026
8df3ad4
refactor(import): remove CSV export changes
openai0229 Sep 10, 2026
d1544a2
Merge remote-tracking branch 'origin/main' into codex/pr-2653-sync
openai0229 Sep 10, 2026
fbfc0b5
Merge pull request #2899 from OtterMind/fix/where-filter-error-recovery
openai0229 Sep 10, 2026
d34cbe6
refactor(import): separate preview parsing concerns
openai0229 Sep 10, 2026
7aca300
Merge remote-tracking branch 'origin/main' into codex/pr-2653-sync
openai0229 Sep 10, 2026
1db0a8b
Merge pull request #2653 from Aias00/feature/mysql-csv-options-2601
openai0229 Sep 10, 2026
4d3d3da
fix(tree): preserve hidden settings across refreshes
openai0229 Sep 10, 2026
c4ae42a
fix(tree): serialize hidden settings refresh and edits
openai0229 Sep 10, 2026
9725210
Merge main into tree refresh fix
openai0229 Sep 10, 2026
3464f65
Merge pull request #2743 from HandSonic/fix/tree-mutation-refresh-errors
openai0229 Sep 10, 2026
1ae8552
Merge branch 'main' into fix/sshinfo-tostring-redact-2470
openai0229 Sep 10, 2026
12ca40c
Merge pull request #2471 from Aias00/fix/sshinfo-tostring-redact-2470
openai0229 Sep 10, 2026
67708a1
chore(settings): remove unused API key page
openai0229 Sep 10, 2026
91506c4
fix(tree): expand namespace after datasource creation
openai0229 Sep 10, 2026
a5d8a58
Merge pull request #2901 from OtterMind/fix/expand-namespace-after-da…
openai0229 Sep 10, 2026
1007a76
Merge pull request #2900 from OtterMind/chore/remove-unused-api-key-page
openai0229 Sep 10, 2026
cb2e39b
Merge branch 'main' into fix/async-connect-info-copy
openai0229 Sep 11, 2026
dd95a60
Merge pull request #2793 from HandSonic/fix/async-connect-info-copy
openai0229 Sep 11, 2026
5f14d3b
Merge branch 'main' into fix/jdbcdriver-listfiles-null-guard-2505
openai0229 Sep 11, 2026
481ce09
Merge pull request #2506 from Aias00/fix/jdbcdriver-listfiles-null-gu…
openai0229 Sep 11, 2026
4aac879
Merge branch 'main' into fix/localcookie-daemon-thread-2518
openai0229 Sep 11, 2026
bca9f30
Merge pull request #2522 from Aias00/fix/localcookie-daemon-thread-2518
openai0229 Sep 11, 2026
caa316b
Merge current main and preserve task paging during polling
openai0229 Sep 11, 2026
eb3283e
Merge branch 'main' into fix/pr-2546-stream-close
openai0229 Sep 11, 2026
0106129
style(ncx): simplify FileInputStream resource declaration
openai0229 Sep 11, 2026
45fb40c
Merge pull request #2546 from Aias00/fix/ncx-dbparse-inputstream-leak…
openai0229 Sep 11, 2026
c3e73f3
Merge pull request #2795 from HandSonic/fix/task-state-races
openai0229 Sep 11, 2026
9fda024
Merge branch 'main' into fix/pr-2548-ssh-errors
openai0229 Sep 11, 2026
77727f4
fix(connection): avoid duplicate SSH failure notifications
openai0229 Sep 11, 2026
36b15ad
Merge pull request #2548 from Aias00/fix/connection-testssh-catch-2539
openai0229 Sep 11, 2026
f369a17
fix(task): simplify export publication without overwriting files
openai0229 Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
34 changes: 23 additions & 11 deletions chat2db-community-client/package.json

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions chat2db-community-client/scripts/i18n-source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
"ai.ts": "e7a2fcbfb3ed647bd14f63aca4b6c35c8fb402c49a6a1f36bb04f76f4e8415af",
"chat.ts": "f6c6ab9cbc5c1c828c35c75d83c4adca347ade590b5177e10d64fdd18cc8aef5",
"common.ts": "24aa2228702754bc019f1e21dd7be9f6d1c6ff02ed9bd9227ab319f331248b11",
"connection.ts": "d70578a3444978b60ea41c670e8b180849eaab297e33325db56c891e1058e899",
"connection.ts": "24f987f3e4188c0076c1c17591b9fd5792b29c2c176b2069f50a3bdf5d661af9",
"dashboard.ts": "b99f5e6b81271573a8db1a585ac879724441b7163050899c3abaf9498217bd21",
"editTable.ts": "0f7a808f50053cd52b183d156bb4fd46bb125b8058f8774deb61c7f02894a350",
"editTable.ts": "6d1233d574dbd2e038ed112bc8677b12f61a0fc831f56f77d5ce024a96a319f6",
"editTableData.ts": "b6f40d2e1f612b716c0dbc2ade925069a039585a28ada997e004c33ce2fd0901",
"feedback.ts": "080fbb0b2e6578d10499d47e0f23b7161feffb769c8a574048c5a737c9624eea",
"login.ts": "df4c7c4b2020ef3e9a70277f364d078fc6a10ad81be31d3b648933f14c423f43",
Expand All @@ -17,19 +17,19 @@
"notification.ts": "500751da2f02391622f074448eb46611fd41da2e5530d6c7d65f17a1382bd236",
"plugin.ts": "01f15b6342cc5b29899ee4144d67b04bb4bc02c6bb10779806be322dc5e9a2bc",
"redis.ts": "cacf9cf685bf3bf6d019f18eead0f63713d4727be741a87d8dc1d22807ebd9ad",
"setting.ts": "14aea4aebdbe5cff2ae9ba4bf955aa42a95ac23d1950ea69291b22c29330d7cf",
"setting.ts": "cdc0698420cb89407b2e91ad31e45ddd7f8eb63ca3dd58196da5d6f8739a65b8",
"spaceSetting.ts": "defdf3138e5e1782f0282760bcef4ce1b8550cc80b03052fea468d97165cb980",
"sqlEditor.ts": "5c41e5f24d5ba78909795bcc681cabb8460cca075233b665dc4940afe82ce0c9",
"stream.ts": "8418dd25b0fd54b2ef2b15a2573edf0a4876efb4e69936ff82a157ea5cf42be4",
"workspace.ts": "ff3ba00ee05c5e04c6ccaef4083a83e4f01b5307eff17b9afc6480525a9ef141"
"stream.ts": "2e2fca0b1ba1ecd5a1501b767be8857cf0b72d800d69a4acf9cd62a61d5ceaf5",
"workspace.ts": "e23d0f03ed0c87023f92de7a3e01a40815c5135924902304a8b8e5c809afc609"
},
"ko-KR": {
"ai.ts": "e7a2fcbfb3ed647bd14f63aca4b6c35c8fb402c49a6a1f36bb04f76f4e8415af",
"chat.ts": "f6c6ab9cbc5c1c828c35c75d83c4adca347ade590b5177e10d64fdd18cc8aef5",
"common.ts": "24aa2228702754bc019f1e21dd7be9f6d1c6ff02ed9bd9227ab319f331248b11",
"connection.ts": "d70578a3444978b60ea41c670e8b180849eaab297e33325db56c891e1058e899",
"connection.ts": "24f987f3e4188c0076c1c17591b9fd5792b29c2c176b2069f50a3bdf5d661af9",
"dashboard.ts": "b99f5e6b81271573a8db1a585ac879724441b7163050899c3abaf9498217bd21",
"editTable.ts": "0f7a808f50053cd52b183d156bb4fd46bb125b8058f8774deb61c7f02894a350",
"editTable.ts": "6d1233d574dbd2e038ed112bc8677b12f61a0fc831f56f77d5ce024a96a319f6",
"editTableData.ts": "b6f40d2e1f612b716c0dbc2ade925069a039585a28ada997e004c33ce2fd0901",
"feedback.ts": "080fbb0b2e6578d10499d47e0f23b7161feffb769c8a574048c5a737c9624eea",
"login.ts": "df4c7c4b2020ef3e9a70277f364d078fc6a10ad81be31d3b648933f14c423f43",
Expand All @@ -38,11 +38,11 @@
"notification.ts": "500751da2f02391622f074448eb46611fd41da2e5530d6c7d65f17a1382bd236",
"plugin.ts": "01f15b6342cc5b29899ee4144d67b04bb4bc02c6bb10779806be322dc5e9a2bc",
"redis.ts": "cacf9cf685bf3bf6d019f18eead0f63713d4727be741a87d8dc1d22807ebd9ad",
"setting.ts": "14aea4aebdbe5cff2ae9ba4bf955aa42a95ac23d1950ea69291b22c29330d7cf",
"setting.ts": "cdc0698420cb89407b2e91ad31e45ddd7f8eb63ca3dd58196da5d6f8739a65b8",
"spaceSetting.ts": "defdf3138e5e1782f0282760bcef4ce1b8550cc80b03052fea468d97165cb980",
"sqlEditor.ts": "5c41e5f24d5ba78909795bcc681cabb8460cca075233b665dc4940afe82ce0c9",
"stream.ts": "8418dd25b0fd54b2ef2b15a2573edf0a4876efb4e69936ff82a157ea5cf42be4",
"workspace.ts": "ff3ba00ee05c5e04c6ccaef4083a83e4f01b5307eff17b9afc6480525a9ef141"
"stream.ts": "2e2fca0b1ba1ecd5a1501b767be8857cf0b72d800d69a4acf9cd62a61d5ceaf5",
"workspace.ts": "e23d0f03ed0c87023f92de7a3e01a40815c5135924902304a8b8e5c809afc609"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import React, { useMemo, useState } from 'react';
import { SuggestionItem } from './interface';
import { useEvent, useMergedState } from 'rc-util';
import { Cascader, CascaderProps, Spin } from 'antd';
import { Cascader, CascaderProps } from 'antd';
import useActive from './useActive';
import { useStyles } from './style';
import { IconfontSvg } from '@chat2db/ui';
import { BookOpenText } from 'lucide-react';

export interface RenderChildrenProps<T> {
/**
Expand All @@ -26,9 +25,6 @@ export interface AIAtMetionProps<T> {
open?: boolean;
onOpenChange?: (open: boolean) => void;
onSelect?: (item: SuggestionItem) => void;
hasMore?: boolean;
loadingMore?: boolean;
onLoadMore?: () => void;
children?: (props: RenderChildrenProps<T>) => React.ReactElement;
/**
* list of suggestions
Expand All @@ -45,9 +41,6 @@ function AIAtMetion<T>(props: AIAtMetionProps<T>) {
open,
onOpenChange,
onSelect,
hasMore,
loadingMore,
onLoadMore,
items,
children,
} = props;
Expand Down Expand Up @@ -95,42 +88,21 @@ function AIAtMetion<T>(props: AIAtMetionProps<T>) {
};

// =========================== Accessibility ===========================
const [activePath, onKeyDown, previewItem, setPreviewValue] = useActive(
itemList,
mergedOpen,
onInternalChange,
onClose,
);

const knowledgeTypeClassName = (item: SuggestionItem) => {
switch (item.knowledge?.type) {
case 'BUSINESS_LOGIC':
return styles.businessLogic;
case 'SQL_TEMPLATE':
return styles.sqlTemplate;
default:
return styles.knowledgeTerm;
}
};
const [activePath, onKeyDown] = useActive(itemList, mergedOpen, onInternalChange, onClose);

const optionRender: CascaderProps<SuggestionItem>['optionRender'] = (node) => {
return (
<div
className={styles.optionRow}
onMouseEnter={() => setPreviewValue(node.kind === 'knowledge' ? node.value : undefined)}
>
<div className={styles.optionRow}>
<div className={styles.optionTitle}>
{node.kind === 'knowledge' ? (
<BookOpenText size={15} className={knowledgeTypeClassName(node)} />
) : (
<IconfontSvg
size="md"
existDark={true}
appearance={appearance}
code={node.tableType === 'TABLE' ? 'icon-colourful-table' : 'icon-colourful-table-view'}
/>
)}
<span className={styles.optionLabel}>{node.label}</span>
<IconfontSvg
size="md"
existDark={true}
appearance={appearance}
code={node.tableType === 'TABLE' ? 'icon-colourful-table' : 'icon-colourful-table-view'}
/>
<span className={styles.optionLabel} title={node.label}>
{node.label}
</span>
</div>
<div className={styles.optionExtra}>{node.extra}</div>
</div>
Expand All @@ -154,50 +126,6 @@ function AIAtMetion<T>(props: AIAtMetionProps<T>) {
value={activePath}
optionRender={optionRender}
onChange={onInternalChange}
dropdownRender={(menus) =>
mergedOpen ? (
<div className={styles.dropdownLayout}>
<div
className={styles.menuPane}
onScrollCapture={(event) => {
const target = event.target as HTMLElement;
if (!target.classList.contains('ant-cascader-menu')) return;
if (
hasMore &&
!loadingMore &&
target.scrollHeight - target.scrollTop - target.clientHeight <= 24
) {
onLoadMore?.();
}
}}
>
{menus}
{loadingMore ? (
<div className={styles.loadingMore} aria-live="polite">
<Spin size="small" />
</div>
) : null}
</div>
{previewItem?.knowledge && (
<div className={styles.previewPane}>
<div className={styles.previewHeader}>
<span className={`${styles.previewType} ${knowledgeTypeClassName(previewItem)}`}>
{previewItem.extra}
</span>
<strong className={styles.previewTitle}>{previewItem.knowledge.key}</strong>
</div>
<div
className={`${styles.previewContent} ${
previewItem.knowledge.type === 'SQL_TEMPLATE' ? styles.previewSql : ''
}`}
>
{previewItem.knowledge.value || '暂无说明'}
</div>
</div>
)}
</div>
) : null
}
onDropdownVisibleChange={(nextOpen) => {
if (!nextOpen) {
onClose();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,9 @@ import React from 'react';
export interface SuggestionItem {
label: string;
value: string;
kind: 'table' | 'knowledge';
kind: 'table';
tableType?: string;
tableName?: string;
knowledge?: {
id: number;
type: 'KNOWLEDGE_TERM' | 'BUSINESS_LOGIC' | 'SQL_TEMPLATE';
key: string;
value: string;
};

icon?: React.ReactNode;
children?: SuggestionItem[];
extra?: React.ReactNode;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ export const useStyles = createStyles(({ css, token }) => {

.ant-cascader-menu {
min-width: 280px !important;
width: min(340px, calc(100vw - 32px)) !important;
max-width: min(340px, calc(100vw - 32px)) !important;
height: auto !important;
max-height: 280px !important;
overflow-y: auto;
Expand All @@ -25,35 +27,13 @@ export const useStyles = createStyles(({ css, token }) => {
padding: 6px 10px !important;
font-size: 13px;
}

.ant-cascader-menu-item-content {
width: 100%;
min-width: 0;
}
`,
content: css``,
dropdownLayout: css`
display: flex;
align-items: stretch;
max-width: min(680px, calc(100vw - 32px));
overflow: hidden;
`,
menuPane: css`
position: relative;
min-width: 280px;
max-width: 340px;
overflow: hidden;
`,
loadingMore: css`
position: absolute;
bottom: 8px;
left: 50%;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border: 1px solid ${token.colorBorderSecondary};
border-radius: 4px;
background: ${token.colorBgElevated};
transform: translateX(-50%);
`,
optionRow: css`
display: flex;
align-items: center;
Expand All @@ -65,8 +45,10 @@ export const useStyles = createStyles(({ css, token }) => {
optionTitle: css`
display: flex;
align-items: center;
flex: 1;
min-width: 0;
gap: 6px;
overflow: hidden;
color: ${token.colorText};
font-weight: 500;
`,
Expand All @@ -77,64 +59,9 @@ export const useStyles = createStyles(({ css, token }) => {
`,
optionExtra: css`
flex-shrink: 0;
width: 36px;
color: ${token.colorTextDescription};
font-size: 11px;
`,
previewPane: css`
width: 320px;
min-width: 260px;
max-height: 280px;
padding: 14px 16px;
overflow: auto;
border-inline-start: 1px solid ${token.colorBorderSecondary};
background: ${token.colorBgElevated};
`,
previewHeader: css`
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
margin-bottom: 10px;
`,
previewType: css`
display: inline-flex;
align-items: center;
min-height: 22px;
padding: 2px 7px;
border-radius: 4px;
font-size: 11px;
line-height: 18px;
background: ${token.colorFillTertiary};
`,
previewTitle: css`
color: ${token.colorText};
font-size: 14px;
line-height: 20px;
word-break: break-word;
`,
previewContent: css`
color: ${token.colorTextSecondary};
font-size: 13px;
line-height: 22px;
white-space: pre-wrap;
word-break: break-word;
`,
previewSql: css`
padding: 10px;
border-radius: 4px;
background: ${token.colorFillQuaternary};
color: ${token.colorText};
font-family: ${token.fontFamilyCode};
line-height: 20px;
`,
knowledgeTerm: css`
color: ${token.colorInfo};
`,
businessLogic: css`
color: ${token.colorSuccess};
`,
sqlTemplate: css`
color: ${token.colorWarning};
`,
};
});
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,14 @@ export default function useActive(
onCancel: () => void,
) {
const [activePaths, setActivePaths] = useState<string[]>([]);
const [previewValue, setPreviewValue] = useState<string>();

const activeValue = activePaths[0];
const activeItem = items.find((item) => item.value === activeValue);
const previewItem = items.find((item) => item.value === previewValue);

const offsetRow = (offset: number) => {
if (!items.length) return;
const currentRowIndex = items.findIndex((item) => item.value === activeValue);
const nextItem = items[(currentRowIndex + offset + items.length) % items.length];
setActivePaths([nextItem.value]);
if (previewValue) {
setPreviewValue(nextItem.kind === 'knowledge' ? nextItem.value : undefined);
}

// Add a delay to wait for the DOM to update before scrolling
setTimeout(() => {
Expand Down Expand Up @@ -55,23 +49,6 @@ export default function useActive(
e.preventDefault();
break;
}

case 'ArrowRight': {
if (activeItem?.kind === 'knowledge') {
setPreviewValue(activeItem.value);
e.preventDefault();
}
break;
}

case 'ArrowLeft': {
if (previewValue) {
setPreviewValue(undefined);
e.preventDefault();
}
break;
}

case 'Enter': {
if (activeValue) {
onSelect([activeValue]);
Expand All @@ -96,9 +73,8 @@ export default function useActive(
setActivePaths((previous) => (items.some((item) => item.value === previous[0]) ? previous : [items[0].value]));
} else if (!open) {
setActivePaths([]);
setPreviewValue(undefined);
}
}, [open, items]);

return [activePaths, onKeyDown, previewItem, setPreviewValue] as const;
return [activePaths, onKeyDown] as const;
}
Loading
Loading