From 7e7c4944e9e4efe4a29a815eb8a32feba3cf9d04 Mon Sep 17 00:00:00 2001
From: t8y2 <1156263951@qq.com>
Date: Sat, 4 Jul 2026 13:53:52 +0800
Subject: [PATCH] refactor(desktop): organize lib modules by domain
---
apps/desktop/components.json | 2 +-
apps/desktop/src/App.vue | 56 +++++------
.../components/admin/DatabaseUserAdmin.vue | 4 +-
.../desktop/src/components/auth/LoginPage.vue | 2 +-
.../src/components/chart/QueryChart.vue | 2 +-
.../components/config/DriverStoreDialog.vue | 16 ++--
.../connection/ConnectionDialog.vue | 48 +++++-----
.../diagram/SchemaDiagramDialog.vue | 16 ++--
.../src/components/diff/DataCompareDialog.vue | 8 +-
.../components/diff/SchemaDiffConfigStep.vue | 4 +-
.../components/diff/SchemaDiffDdlPanel.vue | 4 +-
.../components/diff/SchemaDiffDeployStep.vue | 8 +-
.../src/components/diff/SchemaDiffDialog.vue | 10 +-
.../components/diff/SchemaDiffObjectTree.vue | 2 +-
.../components/document/DocumentBrowser.vue | 14 +--
.../src/components/document/JsonEditNode.vue | 2 +-
.../document/MongoBucketBrowser.vue | 6 +-
.../document/MongoGridFsBrowser.vue | 2 +-
.../src/components/editor/AiAssistant.vue | 40 ++++----
.../src/components/editor/ColumnInfoPanel.vue | 2 +-
.../editor/EditorSettingsDialog.vue | 42 ++++----
.../src/components/editor/QueryEditor.vue | 58 +++++------
.../src/components/editor/QueryHistory.vue | 14 +--
.../editor/SqlExecutionTargetPicker.vue | 2 +-
.../editor/SqlFormatterSettingsPanel.vue | 4 +-
.../components/editor/SqlParameterDialog.vue | 4 +-
.../src/components/editor/SqlPreviewPanel.vue | 4 +-
.../src/components/etcd/EtcdKeyBrowser.vue | 2 +-
.../explain/ExplainPlanNodeTree.vue | 2 +-
.../components/explain/ExplainPlanViewer.vue | 4 +-
.../export/DatabaseExportDialog.vue | 12 +--
.../generate/DataGenerateDialog.vue | 12 +--
.../components/generate/GeneratorSelect.vue | 2 +-
.../generate/params/AddressParams.vue | 2 +-
.../generate/params/BarcodeParams.vue | 2 +-
.../components/generate/params/CityParams.vue | 2 +-
.../generate/params/ColorParams.vue | 2 +-
.../generate/params/CommonOptions.vue | 2 +-
.../generate/params/CompanyNameParams.vue | 2 +-
.../generate/params/CreditCardDateParams.vue | 2 +-
.../params/CreditCardNumberParams.vue | 2 +-
.../generate/params/CreditCardTypeParams.vue | 2 +-
.../components/generate/params/DateParams.vue | 2 +-
.../generate/params/DateTimeParams.vue | 2 +-
.../generate/params/DepartmentParams.vue | 2 +-
.../generate/params/EmailParams.vue | 2 +-
.../components/generate/params/EnumParams.vue | 2 +-
.../generate/params/FileExtensionParams.vue | 2 +-
.../generate/params/FileNameParams.vue | 2 +-
.../generate/params/FilePathParams.vue | 2 +-
.../generate/params/ForeignKeyParams.vue | 4 +-
.../generate/params/FullNameParams.vue | 2 +-
.../generate/params/GenderParams.vue | 2 +-
.../generate/params/GeneratorParamsPanel.vue | 2 +-
.../generate/params/HostnameParams.vue | 2 +-
.../generate/params/IdNumberParams.vue | 2 +-
.../generate/params/ImageBinaryParams.vue | 2 +-
.../generate/params/IndustryParams.vue | 2 +-
.../generate/params/IpAddressParams.vue | 2 +-
.../generate/params/JobTitleParams.vue | 2 +-
.../generate/params/MacAddressParams.vue | 2 +-
.../generate/params/MaritalStatusParams.vue | 2 +-
.../generate/params/NumberParams.vue | 4 +-
.../generate/params/PaymentMethodParams.vue | 2 +-
.../generate/params/PhoneParams.vue | 2 +-
.../generate/params/ProductCategoryParams.vue | 2 +-
.../generate/params/ProductNameParams.vue | 2 +-
.../generate/params/RegexParams.vue | 2 +-
.../generate/params/RegionParams.vue | 2 +-
.../generate/params/SequenceParams.vue | 2 +-
.../components/generate/params/SizeParams.vue | 2 +-
.../components/generate/params/SkuParams.vue | 2 +-
.../generate/params/SocialIdParams.vue | 2 +-
.../components/generate/params/TextParams.vue | 2 +-
.../components/generate/params/TimeParams.vue | 2 +-
.../generate/params/TitleParams.vue | 2 +-
.../components/generate/params/UrlParams.vue | 2 +-
.../components/generate/params/UuidParams.vue | 2 +-
.../generate/params/WeightUnitParams.vue | 2 +-
apps/desktop/src/components/grid/DataGrid.vue | 96 +++++++++----------
.../components/grid/ImagePreviewDialog.vue | 2 +-
.../components/grid/TemporalCellEditor.vue | 2 +-
.../src/components/icons/AiProviderLogo.vue | 2 +-
.../src/components/icons/DatabaseIcon.vue | 2 +-
.../components/import/TableImportDialog.vue | 10 +-
.../src/components/kv/KvKeyBrowser.vue | 10 +-
.../src/components/layout/AppDialogs.vue | 2 +-
.../src/components/layout/AppTabBar.vue | 6 +-
.../src/components/layout/AppToolbar.vue | 2 +-
.../src/components/layout/ContentArea.vue | 32 +++----
.../src/components/layout/EditorToolbar.vue | 10 +-
.../src/components/layout/SqlLibraryPanel.vue | 8 +-
.../src/components/layout/UpdateDialog.vue | 4 +-
.../src/components/layout/WelcomeScreen.vue | 2 +-
.../components/lineage/FieldLineageDialog.vue | 6 +-
.../desktop/src/components/mq/BrokerPanel.vue | 4 +-
.../src/components/mq/MonitoringPanel.vue | 4 +-
.../src/components/mq/MqAdminConsole.vue | 6 +-
.../src/components/mq/NamespacesPanel.vue | 4 +-
.../src/components/mq/PermissionsPanel.vue | 6 +-
.../src/components/mq/PoliciesPanel.vue | 6 +-
.../components/mq/ProducerConsumerPanel.vue | 4 +-
.../desktop/src/components/mq/RawApiPanel.vue | 4 +-
.../src/components/mq/SendMessagePanel.vue | 4 +-
.../src/components/mq/SubscriptionsPanel.vue | 4 +-
.../src/components/mq/TenantsPanel.vue | 6 +-
.../desktop/src/components/mq/TopicsPanel.vue | 4 +-
.../components/nacos/NacosAdminConsole.vue | 14 +--
.../nacos/NacosConfigDiffDialog.vue | 2 +-
.../src/components/objects/DdlViewDialog.vue | 10 +-
.../src/components/objects/ObjectBrowser.vue | 40 ++++----
.../objects/ProcedureExecutionDialog.vue | 4 +-
.../src/components/redis/RedisDashboard.vue | 4 +-
.../src/components/redis/RedisKeyBrowser.vue | 24 ++---
.../src/components/redis/RedisPubSubPanel.vue | 2 +-
.../components/redis/RedisSlowlogPanel.vue | 4 +-
.../src/components/redis/RedisValueViewer.vue | 12 +--
.../search/DatabaseSearchDialog.vue | 8 +-
.../src/components/sidebar/ConnectionTree.vue | 22 ++---
.../src/components/sidebar/TreeItem.vue | 92 +++++++++---------
.../sidebar/VisibleDatabasesDialog.vue | 4 +-
.../sidebar/VisibleSchemasDialog.vue | 4 +-
.../sql-file/SqlFileExecutionDialog.vue | 12 +--
.../structure/TableStructureEditor.vue | 26 ++---
.../transfer/DataTransferDialog.vue | 8 +-
.../desktop/src/components/ui/ErrorBanner.vue | 2 +-
.../src/components/ui/LightDropdownMenu.vue | 2 +-
.../components/ui/TruncatedTextTooltip.vue | 2 +-
.../desktop/src/components/ui/badge/Badge.vue | 2 +-
.../src/components/ui/button/Button.vue | 2 +-
.../context-menu/ContextMenuCheckboxItem.vue | 4 +-
.../ui/context-menu/ContextMenuContent.vue | 2 +-
.../ui/context-menu/ContextMenuItem.vue | 4 +-
.../ui/context-menu/ContextMenuLabel.vue | 2 +-
.../ui/context-menu/ContextMenuRadioItem.vue | 4 +-
.../ui/context-menu/ContextMenuSeparator.vue | 2 +-
.../ui/context-menu/ContextMenuShortcut.vue | 2 +-
.../ui/context-menu/ContextMenuSubContent.vue | 2 +-
.../ui/context-menu/ContextMenuSubTrigger.vue | 2 +-
.../ui/context-menu/ContextMenuTrigger.vue | 2 +-
.../components/ui/dialog/DialogContent.vue | 2 +-
.../ui/dialog/DialogDescription.vue | 2 +-
.../src/components/ui/dialog/DialogFooter.vue | 2 +-
.../src/components/ui/dialog/DialogHeader.vue | 2 +-
.../components/ui/dialog/DialogOverlay.vue | 4 +-
.../ui/dialog/DialogScrollContent.vue | 2 +-
.../src/components/ui/dialog/DialogTitle.vue | 2 +-
.../DropdownMenuCheckboxItem.vue | 4 +-
.../ui/dropdown-menu/DropdownMenuContent.vue | 2 +-
.../ui/dropdown-menu/DropdownMenuItem.vue | 4 +-
.../ui/dropdown-menu/DropdownMenuLabel.vue | 2 +-
.../dropdown-menu/DropdownMenuRadioItem.vue | 4 +-
.../dropdown-menu/DropdownMenuSeparator.vue | 2 +-
.../ui/dropdown-menu/DropdownMenuShortcut.vue | 2 +-
.../dropdown-menu/DropdownMenuSubContent.vue | 2 +-
.../dropdown-menu/DropdownMenuSubTrigger.vue | 2 +-
.../desktop/src/components/ui/input/Input.vue | 2 +-
.../desktop/src/components/ui/label/Label.vue | 2 +-
.../components/ui/popover/PopoverContent.vue | 2 +-
.../ui/popover/PopoverDescription.vue | 2 +-
.../components/ui/popover/PopoverHeader.vue | 2 +-
.../components/ui/popover/PopoverTitle.vue | 2 +-
.../components/ui/scroll-area/ScrollArea.vue | 2 +-
.../components/ui/scroll-area/ScrollBar.vue | 2 +-
.../ui/searchable-select/SearchableSelect.vue | 4 +-
.../components/ui/select/SelectContent.vue | 2 +-
.../src/components/ui/select/SelectGroup.vue | 2 +-
.../src/components/ui/select/SelectItem.vue | 2 +-
.../src/components/ui/select/SelectLabel.vue | 2 +-
.../ui/select/SelectScrollDownButton.vue | 2 +-
.../ui/select/SelectScrollUpButton.vue | 2 +-
.../components/ui/select/SelectSeparator.vue | 2 +-
.../components/ui/select/SelectTrigger.vue | 2 +-
.../src/components/ui/separator/Separator.vue | 2 +-
.../src/components/ui/sheet/SheetContent.vue | 2 +-
.../components/ui/sheet/SheetDescription.vue | 2 +-
.../src/components/ui/sheet/SheetFooter.vue | 2 +-
.../src/components/ui/sheet/SheetHeader.vue | 2 +-
.../src/components/ui/sheet/SheetOverlay.vue | 2 +-
.../src/components/ui/sheet/SheetTitle.vue | 2 +-
.../src/components/ui/switch/Switch.vue | 2 +-
apps/desktop/src/components/ui/tabs/Tabs.vue | 2 +-
.../src/components/ui/tabs/TabsContent.vue | 2 +-
.../src/components/ui/tabs/TabsList.vue | 2 +-
.../src/components/ui/tabs/TabsTrigger.vue | 2 +-
.../components/ui/tooltip/TooltipContent.vue | 2 +-
.../src/components/vector/VectorBrowser.vue | 4 +-
.../zookeeper/ZooKeeperKeyBrowser.vue | 4 +-
apps/desktop/src/composables/useAppUpdater.ts | 6 +-
.../src/composables/useCellDetailEditor.ts | 12 +--
.../src/composables/useCloseActionPrompt.ts | 4 +-
.../src/composables/useDataGridActions.ts | 16 ++--
.../composables/useDataGridColumnResize.ts | 2 +-
.../src/composables/useDataGridEditor.ts | 16 ++--
.../src/composables/useDataGridExport.ts | 24 ++---
.../src/composables/useDataGridSelection.ts | 2 +-
.../src/composables/useDatabaseOptions.ts | 6 +-
.../composables/useEditorFontFamilyStyle.ts | 2 +-
.../src/composables/useExportTracker.ts | 2 +-
apps/desktop/src/composables/useFileDrop.ts | 8 +-
.../src/composables/useNavigationTargets.ts | 12 +--
.../desktop/src/composables/usePanelResize.ts | 2 +-
.../src/composables/useSchemaDiffConfig.ts | 2 +-
.../src/composables/useSchemaOptions.ts | 6 +-
.../src/composables/useSqlExecution.ts | 14 +--
.../src/composables/useSqlHighlighter.ts | 2 +-
apps/desktop/src/composables/useTheme.ts | 6 +-
.../src/composables/useVisibilityChange.ts | 2 +-
.../src/composables/useWebDavAutoUpload.ts | 6 +-
.../src/composables/useWindowControls.ts | 6 +-
apps/desktop/src/i18n/index.ts | 2 +-
apps/desktop/src/lib/README.md | 15 +++
.../src/lib/__tests__/{ => ai}/ai.spec.ts | 2 +-
.../lib/__tests__/{ => ai}/aiMarkdown.spec.ts | 2 +-
.../__tests__/{ => ai}/aiMessageEdit.spec.ts | 2 +-
.../{ => ai}/aiModelPresentation.spec.ts | 2 +-
.../{ => ai}/aiProposalDetect.spec.ts | 2 +-
.../{ => ai}/aiTableMentions.spec.ts | 2 +-
.../__tests__/{ => app}/pinnedItems.spec.ts | 4 +-
.../__tests__/{ => common}/ttlFormat.spec.ts | 2 +-
.../__tests__/{ => common}/webPath.spec.ts | 2 +-
.../connectionAttemptTimeout.spec.ts | 2 +-
.../connectionOpenTarget.spec.ts | 2 +-
.../connectionUrl.dremio.spec.ts | 2 +-
.../connectionUrl.zookeeper.spec.ts | 2 +-
.../{ => dataGrid}/chartData.spec.ts | 2 +-
...ataGridConditionSuggestionPosition.spec.ts | 2 +-
.../{ => dataGrid}/geometryPreview.spec.ts | 2 +-
.../{ => dataGrid}/gridSelection.spec.ts | 2 +-
.../createDatabaseCharsetOptions.spec.ts | 2 +-
.../databaseDriverManifest.spec.ts | 2 +-
.../databaseFeatureSupport.spec.ts | 2 +-
.../databaseObjectCapabilities.spec.ts | 2 +-
.../{ => database}/defaultDatabase.spec.ts | 2 +-
.../{ => database}/jdbcDialect.spec.ts | 2 +-
.../mysqlConnectionOptions.spec.ts | 2 +-
.../prestoSqlBuiltinDriver.spec.ts | 2 +-
.../{ => editor}/codemirrorSqlDialect.spec.ts | 2 +-
.../{ => editor}/shortcutRegistry.spec.ts | 2 +-
.../__tests__/{ => etcd}/etcdKeyTree.spec.ts | 2 +-
.../{ => imports}/navicatImport.spec.ts | 2 +-
.../lib/__tests__/{ => kv}/kvKeyTree.spec.ts | 2 +-
.../{ => kv}/kvRefreshSelection.spec.ts | 4 +-
.../{ => kv}/kvRootPresentation.spec.ts | 2 +-
.../__tests__/{ => kv}/kvValueDisplay.spec.ts | 4 +-
.../{ => mcp}/mcpConfigTemplates.spec.ts | 2 +-
.../completionMetadataPolicy.spec.ts | 2 +-
.../completionTreeIndex.spec.ts | 2 +-
.../__tests__/{ => mq}/mqListPanels.spec.ts | 2 +-
.../{ => mq}/mqPinnedVersionOptions.spec.ts | 2 +-
.../__tests__/{ => mq}/mqPolicyForms.spec.ts | 2 +-
.../__tests__/{ => mq}/mqTenantForm.spec.ts | 2 +-
.../__tests__/{ => mq}/mqTokenErrors.spec.ts | 2 +-
.../__tests__/{ => nacos}/nacosAdmin.spec.ts | 2 +-
.../{ => query}/queryResultError.spec.ts | 2 +-
.../savedSqlFolderCounts.spec.ts | 2 +-
.../schemaDiffMetadataLoad.spec.ts | 2 +-
.../sidebarConnectionSelection.spec.ts | 2 +-
.../{ => sidebar}/sidebarLabelTooltip.spec.ts | 2 +-
.../executableStatementRangeCache.spec.ts | 2 +-
.../semantic/completion.spec.ts} | 8 +-
.../semantic/dbeaver-references.md} | 0
.../semantic/model.spec.ts} | 6 +-
.../semantic/references.spec.ts} | 10 +-
.../semantic/tokens.spec.ts} | 2 +-
.../{ => sql}/sqlCompletion.context.spec.ts | 2 +-
.../{ => sql}/sqlCompletion.snippet.spec.ts | 2 +-
.../{ => sql}/sqlExecutionTarget.spec.ts | 2 +-
.../__tests__/{ => sql}/sqlFormatter.spec.ts | 2 +-
.../{ => sql}/sqlFormatterConfig.spec.ts | 2 +-
.../{ => sql}/sqlHighlighter.spec.ts | 2 +-
.../__tests__/{ => sql}/sqlNavigation.spec.ts | 2 +-
.../{ => sql}/sqlParameterHistory.spec.ts | 2 +-
.../__tests__/{ => sql}/sqlParameters.spec.ts | 2 +-
.../{ => sql}/sqlStatementRanges.spec.ts | 2 +-
.../{ => table}/tableDependencySort.spec.ts | 2 +-
.../{ => table}/tableEditing.spec.ts | 2 +-
.../tableStructureEditorState.spec.ts | 2 +-
.../zookeeperApiContract.spec.ts | 2 +-
.../zookeeperConnection.spec.ts | 2 +-
.../zookeeperLazyKeyTree.spec.ts | 2 +-
apps/desktop/src/lib/{ => ai}/ai.ts | 14 +--
apps/desktop/src/lib/{ => ai}/aiAgentPlan.ts | 4 +-
.../lib/{ => ai}/aiAgentStepPresentation.ts | 2 +-
.../src/lib/{ => ai}/aiCodeHighlighter.ts | 2 +-
apps/desktop/src/lib/{ => ai}/aiMarkdown.ts | 0
.../desktop/src/lib/{ => ai}/aiMessageEdit.ts | 0
.../src/lib/{ => ai}/aiMessageRender.ts | 0
.../src/lib/{ => ai}/aiModelPresentation.ts | 0
.../src/lib/{ => ai}/aiPromptKeyboard.ts | 0
.../src/lib/{ => ai}/aiProposalDetect.ts | 0
apps/desktop/src/lib/{ => ai}/aiSkills.ts | 2 +-
.../src/lib/{ => ai}/aiSqlExecutionPolicy.ts | 0
.../src/lib/{ => ai}/aiTableMentions.ts | 0
apps/desktop/src/lib/{ => app}/appFonts.ts | 0
apps/desktop/src/lib/{ => app}/appTheme.ts | 0
.../lib/{ => app}/documentStoreProvider.ts | 4 +-
.../src/lib/{ => app}/localeOptions.ts | 0
.../src/lib/{ => app}/openTabsPersistence.ts | 0
apps/desktop/src/lib/{ => app}/pinnedItems.ts | 0
.../src/lib/{ => app}/pinnedTreeNodeIds.ts | 0
.../lib/{ => app}/transferProgressState.ts | 0
apps/desktop/src/lib/{ => backend}/api.ts | 10 +-
.../src/lib/{ => backend}/configCrypto.ts | 4 +-
.../lib/{ => backend}/connectionTransport.ts | 0
.../desktop/src/lib/{ => backend}/debugLog.ts | 0
.../src/lib/{ => backend}/errorUtils.ts | 0
apps/desktop/src/lib/{ => backend}/http.ts | 54 +++++------
apps/desktop/src/lib/{ => backend}/mq-http.ts | 2 +-
.../desktop/src/lib/{ => backend}/mq-tauri.ts | 0
.../src/lib/{ => backend}/nacos-tauri.ts | 0
.../desktop/src/lib/{ => backend}/platform.ts | 0
.../src/lib/{ => backend}/safeStorage.ts | 0
apps/desktop/src/lib/{ => backend}/tauri.ts | 36 +++----
.../src/lib/{ => backend}/tauriRuntime.ts | 0
.../desktop/src/lib/{ => common}/clipboard.ts | 2 +-
apps/desktop/src/lib/{ => common}/color.ts | 0
.../src/lib/{ => common}/jsonCopyValue.ts | 0
.../src/lib/{ => common}/searchPattern.ts | 0
.../desktop/src/lib/{ => common}/ttlFormat.ts | 0
apps/desktop/src/lib/{ => common}/utils.ts | 0
apps/desktop/src/lib/{ => common}/webPath.ts | 0
.../lib/{ => connection}/actionActivation.ts | 0
.../agentDriverInstallHint.ts | 2 +-
.../agentDriverUpdateBadge.ts | 0
.../connectionAttemptTimeout.ts | 0
.../{ => connection}/connectionDeepLink.ts | 2 +-
.../lib/{ => connection}/connectionFile.ts | 2 +-
.../lib/{ => connection}/connectionHealth.ts | 0
.../connectionLevelDatabaseBootstrap.ts | 4 +-
.../{ => connection}/connectionOpenTarget.ts | 2 +-
.../connectionPresentation.ts | 0
.../src/lib/{ => connection}/connectionUrl.ts | 2 +-
.../connectionVisibleDatabases.ts | 2 +-
.../driverInstallProgressUi.ts | 0
.../driverRuntimePresentation.ts | 2 +-
.../lib/{ => dataGrid}/binaryCellDownload.ts | 4 +-
.../src/lib/{ => dataGrid}/binaryHexViewer.ts | 0
.../{ => dataGrid}/canvasDataGridRenderer.ts | 6 +-
.../{ => dataGrid}/cellDetailPresentation.ts | 0
.../src/lib/{ => dataGrid}/cellImageUrl.ts | 4 +-
.../src/lib/{ => dataGrid}/cellValue.ts | 0
.../src/lib/{ => dataGrid}/chartData.ts | 0
.../src/lib/{ => dataGrid}/columnFormatter.ts | 2 +-
.../src/lib/{ => dataGrid}/dataCompare.ts | 0
.../src/lib/{ => dataGrid}/dataGenerate.ts | 2 +-
.../{ => dataGrid}/dataGridCellCoercion.ts | 2 +-
.../{ => dataGrid}/dataGridColumnFilter.ts | 6 +-
.../dataGridColumnLayoutStorage.ts | 2 +-
.../lib/{ => dataGrid}/dataGridColumnOrder.ts | 0
.../lib/{ => dataGrid}/dataGridColumnType.ts | 0
.../dataGridColumnVisibility.ts | 0
.../lib/{ => dataGrid}/dataGridColumnWidth.ts | 0
.../dataGridConditionHistory.ts | 2 +-
.../dataGridConditionSuggestionPosition.ts | 0
.../src/lib/{ => dataGrid}/dataGridDetail.ts | 6 +-
.../lib/{ => dataGrid}/dataGridEnumEditor.ts | 0
.../{ => dataGrid}/dataGridInfiniteScroll.ts | 0
.../lib/{ => dataGrid}/dataGridPagination.ts | 0
.../lib/{ => dataGrid}/dataGridPaintTheme.ts | 0
.../src/lib/{ => dataGrid}/dataGridSaveUi.ts | 0
.../{ => dataGrid}/dataGridScrollGutter.ts | 0
.../lib/{ => dataGrid}/dataGridSearchSplit.ts | 0
.../src/lib/{ => dataGrid}/dataGridSort.ts | 0
.../src/lib/{ => dataGrid}/dataGridSql.ts | 2 +-
.../{ => dataGrid}/dataGridTemporalEditor.ts | 0
.../lib/{ => dataGrid}/dataGridTranspose.ts | 0
.../geometryMapPreview.ts | 4 +-
.../src/lib/{ => dataGrid}/geometryPreview.ts | 0
.../src/lib/{ => dataGrid}/gridRowStatus.ts | 0
.../src/lib/{ => dataGrid}/gridSelection.ts | 0
.../lib/{ => dataGrid}/imagePreviewViewer.ts | 0
.../lib/{ => dataGrid}/paginationPageSize.ts | 0
.../{ => dataGrid}/resultPreviewRegistry.ts | 0
.../createDatabaseCharsetOptions.ts | 0
.../lib/{ => database}/createDatabaseSql.ts | 2 +-
.../src/lib/database/databaseCapabilities.ts | 5 +
.../{ => database}/databaseCapabilitySets.ts | 0
.../{ => database}/databaseDriverManifest.ts | 2 +-
.../{ => database}/databaseFeatureSupport.ts | 6 +-
.../{ => database}/databaseFileDetection.ts | 2 +-
.../databaseObjectCapabilities.ts | 0
.../{ => database}/databaseOptionSearch.ts | 0
.../src/lib/{ => database}/databaseSearch.ts | 4 +-
.../databaseTableDataCapabilities.ts | 2 +-
.../src/lib/{ => database}/databaseTree.ts | 2 +-
.../lib/{ => database}/databaseUserAdmin.ts | 2 +-
.../src/lib/{ => database}/dbAdminSql.ts | 2 +-
.../src/lib/{ => database}/defaultDatabase.ts | 2 +-
.../src/lib/{ => database}/h2Connection.ts | 0
.../src/lib/{ => database}/jdbcDialect.ts | 2 +-
.../{ => database}/mysqlConnectionOptions.ts | 0
.../{ => database}/oceanbaseConnectionMode.ts | 0
.../{ => database}/prestoSqlBuiltinDriver.ts | 2 +-
.../{ => database}/sqlServerLinkedServers.ts | 0
.../src/lib/{ => database}/sqlServerTree.ts | 2 +-
.../lib/{ => database}/visibleDatabases.ts | 0
apps/desktop/src/lib/databaseCapabilities.ts | 5 -
.../src/lib/{ => diagram}/diagramZoom.ts | 0
.../lib/{ => diagram}/engineeringDiagram.ts | 2 +-
.../src/lib/{ => diagram}/erDiagram.ts | 2 +-
.../src/lib/{ => diagram}/explainPlan.ts | 4 +-
.../src/lib/{ => diagram}/fieldLineage.ts | 0
.../{ => document}/documentViewerFontStyle.ts | 2 +-
.../codemirrorSelectionMatches.ts | 0
.../lib/{ => editor}/codemirrorSqlDialect.ts | 0
.../codemirrorTrimmedSelectionLayer.ts | 0
.../src/lib/{ => editor}/editorThemes.ts | 2 +-
.../src/lib/{ => editor}/editorZoom.ts | 0
.../src/lib/{ => editor}/keyboardShortcuts.ts | 2 +-
.../lib/{ => editor}/queryEditorTableDrop.ts | 2 +-
.../src/lib/{ => editor}/shortcutRegistry.ts | 0
.../elasticsearchCompletion.ts | 0
.../desktop/src/lib/{ => etcd}/etcdKeyTree.ts | 4 +-
.../src/lib/{ => export}/databaseExport.ts | 8 +-
.../{ => export}/databaseExportSelection.ts | 0
.../desktop/src/lib/{ => export}/ddlExport.ts | 0
.../src/lib/{ => export}/diagramSvgExport.ts | 4 +-
.../src/lib/{ => export}/exportFormats.ts | 2 +-
.../src/lib/{ => export}/xlsxExport.ts | 0
.../src/lib/{ => history}/historyActions.ts | 0
.../lib/{ => history}/historyActivityKind.ts | 0
.../lib/{ => history}/historyAiAnalysis.ts | 0
.../src/lib/{ => history}/historyTimeRange.ts | 0
.../lib/{ => history}/historyVirtualList.ts | 0
.../src/lib/{ => imports}/datagripImport.ts | 2 +-
.../src/lib/{ => imports}/dbeaverImport.ts | 2 +-
.../src/lib/{ => imports}/navicatImport.ts | 2 +-
apps/desktop/src/lib/{ => kv}/kvKeyTree.ts | 2 +-
.../src/lib/{ => kv}/kvRefreshSelection.ts | 2 +-
.../src/lib/{ => kv}/kvRootPresentation.ts | 0
.../src/lib/{ => kv}/kvValueDisplay.ts | 2 +-
.../src/lib/{ => mcp}/mcpConfigTemplates.ts | 0
.../completionMetadataPolicy.ts | 0
.../lib/{ => metadata}/completionTreeIndex.ts | 2 +-
.../lib/{ => metadata}/metadataTaskLimiter.ts | 0
.../src/lib/{ => metadata}/schemaTreeCache.ts | 0
.../src/lib/{ => mongo}/mongoCompletion.ts | 0
.../lib/{ => mongo}/mongoConnectionOptions.ts | 0
.../lib/{ => mongo}/mongoDocumentValues.ts | 0
.../src/lib/{ => mongo}/mongoFormatter.ts | 2 +-
.../src/lib/{ => mongo}/mongoShellCommand.ts | 0
.../lib/{ => mq}/mqPinnedVersionOptions.ts | 0
.../desktop/src/lib/{ => mq}/mqPolicyForms.ts | 0
apps/desktop/src/lib/{ => mq}/mqTenantForm.ts | 0
.../desktop/src/lib/{ => mq}/mqTokenErrors.ts | 0
.../desktop/src/lib/{ => nacos}/nacosAdmin.ts | 0
.../src/lib/{ => query}/queryResultArchive.ts | 2 +-
.../lib/{ => query}/queryResultArchiveFile.ts | 2 +-
.../src/lib/{ => query}/queryResultError.ts | 0
.../src/lib/{ => redis}/redisCommandSafety.ts | 0
.../lib/{ => redis}/redisCommandSession.ts | 0
.../src/lib/{ => redis}/redisCommandTable.ts | 2 +-
.../src/lib/{ => redis}/redisCompletion.ts | 4 +-
.../lib/{ => redis}/redisJsonHighlighter.ts | 2 +-
.../src/lib/{ => redis}/redisKeyPattern.ts | 0
.../src/lib/{ => redis}/redisKeyTree.ts | 2 +-
.../src/lib/{ => redis}/redisQueryResult.ts | 2 +-
.../lib/{ => redis}/redisSyntaxDiagnostics.ts | 6 +-
.../lib/{ => redis}/redisValuePresentation.ts | 0
.../{ => savedSql}/savedSqlFolderCounts.ts | 0
.../src/lib/{ => savedSql}/savedSqlHistory.ts | 0
.../src/lib/{ => schema}/schemaDiff.ts | 0
.../{ => schema}/schemaDiffMetadataLoad.ts | 0
.../src/lib/{ => schema}/schemaDiffOptions.ts | 0
.../lib/{ => schema}/schemaDiffTableFilter.ts | 0
.../{ => sidebar}/sidebarActiveTabTarget.ts | 0
.../sidebarConnectionSelection.ts | 0
.../{ => sidebar}/sidebarDatabaseOpenState.ts | 0
.../lib/{ => sidebar}/sidebarLabelTooltip.ts | 0
.../src/lib/{ => sidebar}/sidebarLayout.ts | 2 +-
.../lib/{ => sidebar}/sidebarNodeOrdering.ts | 0
.../lib/{ => sidebar}/sidebarRenameFocus.ts | 0
.../src/lib/{ => sidebar}/sidebarSearch.ts | 2 +-
.../lib/{ => sidebar}/sidebarSearchTree.ts | 2 +-
.../{ => sidebar}/sidebarTableNameDisplay.ts | 0
.../lib/{ => sidebar}/sidebarTreeCollapse.ts | 0
.../lib/{ => sidebar}/sidebarTreeContext.ts | 0
.../{ => sidebar}/sidebarTreeItemLayout.ts | 0
.../lib/{ => sidebar}/sidebarTreeSelection.ts | 0
.../lib/{ => sidebar}/sidebarTypeSearch.ts | 0
.../src/lib/{ => sidebar}/treeNodeClick.ts | 2 +-
.../src/lib/{ => sidebar}/treeNodeContext.ts | 0
.../lib/{ => sidebar}/treeRefreshTarget.ts | 0
.../executableStatementRangeCache.ts | 2 +-
.../src/lib/{ => sql}/httpSqlFileProgress.ts | 4 +-
.../src/lib/{ => sql}/newQueryContext.ts | 2 +-
.../lib/{ => sql}/queryCursorTableTarget.ts | 6 +-
.../src/lib/{ => sql}/queryExecutionState.ts | 0
.../desktop/src/lib/{ => sql}/queryTimeout.ts | 2 +-
apps/desktop/src/lib/sql/semantic/README.md | 13 +++
.../semantic/completion.ts} | 6 +-
.../semantic/diagnostics.ts} | 6 +-
.../semantic/dialect.ts} | 0
.../semantic/fixtures.ts} | 4 +-
.../semantic/model.ts} | 6 +-
.../semantic/references.ts} | 4 +-
.../semantic/tokens.ts} | 2 +-
.../semantic/types.ts} | 0
apps/desktop/src/lib/{ => sql}/sqlAnalysis.ts | 0
.../src/lib/{ => sql}/sqlCompletion.ts | 2 +-
.../src/lib/{ => sql}/sqlDiagnostics.ts | 0
.../src/lib/{ => sql}/sqlExecutionTarget.ts | 2 +-
apps/desktop/src/lib/{ => sql}/sqlFileOpen.ts | 0
.../desktop/src/lib/{ => sql}/sqlFormatter.ts | 2 +-
.../src/lib/{ => sql}/sqlFormatterConfig.ts | 0
.../src/lib/{ => sql}/sqlHighlighter.ts | 2 +-
.../src/lib/{ => sql}/sqlMetadataRefresh.ts | 0
.../src/lib/{ => sql}/sqlNavigation.ts | 0
.../src/lib/{ => sql}/sqlParameterHistory.ts | 4 +-
.../src/lib/{ => sql}/sqlParameters.ts | 0
.../src/lib/{ => sql}/sqlQuoteCaret.ts | 0
.../lib/{ => sql}/sqlServerQueryWrapping.ts | 0
.../src/lib/{ => sql}/sqlStatementRanges.ts | 4 +-
.../src/lib/{ => table}/objectBrowserRows.ts | 4 +-
.../src/lib/{ => table}/objectRenameSql.ts | 2 +-
.../src/lib/{ => table}/objectSourceEditor.ts | 2 +-
.../lib/{ => table}/routineExecutionSql.ts | 4 +-
.../src/lib/{ => table}/routineParameters.ts | 4 +-
.../src/lib/{ => table}/tableClipboard.ts | 0
.../lib/{ => table}/tableColumnTemplates.ts | 6 +-
.../src/lib/{ => table}/tableDataExport.ts | 4 +-
.../src/lib/{ => table}/tableDataTabMeta.ts | 0
.../lib/{ => table}/tableDependencySort.ts | 0
.../src/lib/{ => table}/tableEditing.ts | 2 +-
.../src/lib/{ => table}/tableImport.ts | 0
.../{ => table}/tableMetadataCapabilities.ts | 0
.../src/lib/{ => table}/tableOpenPageLimit.ts | 2 +-
.../src/lib/{ => table}/tableSelectSql.ts | 8 +-
.../src/lib/{ => table}/tableSqlTemplates.ts | 2 +-
.../{ => table}/tableStructureCapabilities.ts | 0
.../{ => table}/tableStructureEditorSql.ts | 2 +-
.../{ => table}/tableStructureEditorState.ts | 4 +-
apps/desktop/src/lib/{ => table}/tableTree.ts | 2 +-
apps/desktop/src/lib/{ => table}/viewDdl.ts | 2 +-
.../src/lib/{ => tabs}/dataTabActivation.ts | 0
.../src/lib/{ => tabs}/tabCloseActions.ts | 0
.../src/lib/{ => tabs}/tabPresentation.ts | 0
.../src/lib/{ => tabs}/tabResultCache.ts | 4 +-
.../{ => webdav}/webdavAutoUploadConfig.ts | 4 +-
.../{ => zookeeper}/zookeeperConnection.ts | 0
.../{ => zookeeper}/zookeeperLazyKeyTree.ts | 2 +-
apps/desktop/src/main.ts | 2 +-
.../connectionStore.completion.spec.ts | 16 ++--
.../__tests__/connectionStore.mq.spec.ts | 16 ++--
.../__tests__/connectionStore.timeout.spec.ts | 12 +--
.../__tests__/queryStore.cancel.spec.ts | 4 +-
.../queryStore.database-open.spec.ts | 2 +-
apps/desktop/src/stores/connectionStore.ts | 72 +++++++-------
apps/desktop/src/stores/historyStore.ts | 6 +-
apps/desktop/src/stores/queryStore.ts | 48 +++++-----
apps/desktop/src/stores/savedSqlStore.ts | 6 +-
apps/desktop/src/stores/settingsStore.ts | 22 ++---
apps/desktop/src/types/database.ts | 10 +-
packages/app-tests/actionActivation.test.ts | 2 +-
.../app-tests/agentDriverInstallHint.test.ts | 2 +-
packages/app-tests/aiAgentPlan.test.ts | 4 +-
.../app-tests/aiAgentStepPresentation.test.ts | 4 +-
packages/app-tests/aiPrompt.test.ts | 4 +-
packages/app-tests/aiPromptEval.test.ts | 4 +-
packages/app-tests/aiPromptKeyboard.test.ts | 2 +-
packages/app-tests/aiSchemaComments.test.ts | 2 +-
packages/app-tests/aiSkills.test.ts | 4 +-
.../app-tests/aiSqlExecutionPolicy.test.ts | 2 +-
packages/app-tests/aiTableMentions.test.ts | 2 +-
packages/app-tests/appUpdater.test.ts | 2 +-
packages/app-tests/binaryCellDownload.test.ts | 2 +-
packages/app-tests/binaryHexViewer.test.ts | 2 +-
.../app-tests/canvasDataGridRenderer.test.ts | 2 +-
.../app-tests/cellDetailPresentation.test.ts | 2 +-
packages/app-tests/cellImageUrl.test.ts | 2 +-
packages/app-tests/cellValue.test.ts | 2 +-
packages/app-tests/clipboard.test.ts | 2 +-
.../app-tests/codemirrorSqlDialect.test.ts | 2 +-
.../codemirrorTrimmedSelectionLayer.test.ts | 2 +-
packages/app-tests/columnFormatter.test.ts | 2 +-
packages/app-tests/configCrypto.test.ts | 2 +-
packages/app-tests/connectionDeepLink.test.ts | 2 +-
.../connectionLevelDatabaseBootstrap.test.ts | 2 +-
.../app-tests/connectionPresentation.test.ts | 2 +-
packages/app-tests/connectionUrl.test.ts | 4 +-
.../connectionVisibleDatabases.test.ts | 4 +-
.../dataGridCellCoercion.mysql-json.test.ts | 2 +-
.../app-tests/dataGridCellCoercion.test.ts | 2 +-
.../app-tests/dataGridColumnFilter.test.ts | 2 +-
.../app-tests/dataGridColumnOrder.test.ts | 2 +-
packages/app-tests/dataGridColumnType.test.ts | 2 +-
.../dataGridColumnVisibility.test.ts | 2 +-
.../app-tests/dataGridColumnWidth.test.ts | 2 +-
.../dataGridConditionHistory.test.ts | 2 +-
packages/app-tests/dataGridDetail.test.ts | 4 +-
packages/app-tests/dataGridEditor.test.ts | 6 +-
packages/app-tests/dataGridEnumEditor.test.ts | 2 +-
packages/app-tests/dataGridExport.test.ts | 8 +-
.../app-tests/dataGridInfiniteScroll.test.ts | 2 +-
packages/app-tests/dataGridPagination.test.ts | 2 +-
packages/app-tests/dataGridSaveUi.test.ts | 2 +-
packages/app-tests/dataGridSort.test.ts | 2 +-
.../app-tests/dataGridTemporalEditor.test.ts | 2 +-
packages/app-tests/dataGridTranspose.test.ts | 2 +-
packages/app-tests/dataTabActivation.test.ts | 2 +-
.../app-tests/databaseCapabilities.test.ts | 2 +-
packages/app-tests/databaseExportPlan.test.ts | 2 +-
packages/app-tests/databaseSearch.test.ts | 2 +-
packages/app-tests/databaseTree.test.ts | 2 +-
packages/app-tests/databaseUserAdmin.test.ts | 2 +-
packages/app-tests/dbAdminSql.test.ts | 2 +-
packages/app-tests/ddlExport.test.ts | 2 +-
packages/app-tests/defaultDatabase.test.ts | 2 +-
packages/app-tests/diagramSvgExport.test.ts | 6 +-
.../app-tests/documentStoreProvider.test.ts | 2 +-
.../app-tests/documentViewerFontStyle.test.ts | 4 +-
.../app-tests/driverInstallProgressUi.test.ts | 2 +-
.../app-tests/elasticsearchCompletion.test.ts | 4 +-
packages/app-tests/engineeringDiagram.test.ts | 4 +-
packages/app-tests/erDiagram.test.ts | 2 +-
packages/app-tests/exportFormats.test.ts | 2 +-
packages/app-tests/fieldLineage.test.ts | 2 +-
packages/app-tests/gridRowStatus.test.ts | 2 +-
packages/app-tests/gridSelection.test.ts | 2 +-
.../app-tests/historyActivityKind.test.ts | 2 +-
packages/app-tests/historyAiAnalysis.test.ts | 2 +-
packages/app-tests/historyTimeRange.test.ts | 2 +-
packages/app-tests/imagePreviewViewer.test.ts | 2 +-
packages/app-tests/jdbcDialect.test.ts | 2 +-
packages/app-tests/jsonCopyValue.test.ts | 2 +-
packages/app-tests/keyboardShortcuts.test.ts | 4 +-
.../app-tests/metadataTaskLimiter.test.ts | 2 +-
packages/app-tests/mongoCompletion.test.ts | 2 +-
.../app-tests/mongoConnectionOptions.test.ts | 2 +-
.../app-tests/mongoDocumentValues.test.ts | 2 +-
packages/app-tests/mongoFormatter.test.ts | 2 +-
packages/app-tests/mongoShellCommand.test.ts | 4 +-
packages/app-tests/newQueryContext.test.ts | 2 +-
packages/app-tests/objectBrowserRows.test.ts | 2 +-
.../app-tests/oceanbaseConnectionMode.test.ts | 2 +-
.../app-tests/openTabsPersistence.test.ts | 2 +-
packages/app-tests/pinnedItems.test.ts | 2 +-
.../app-tests/queryCursorTableTarget.test.ts | 2 +-
.../app-tests/queryEditorTableDrop.test.ts | 2 +-
packages/app-tests/queryResultArchive.test.ts | 4 +-
packages/app-tests/queryStore.test.ts | 2 +-
packages/app-tests/queryTimeout.test.ts | 2 +-
.../app-tests/redisCommandSession.test.ts | 2 +-
packages/app-tests/redisCommandTable.test.ts | 2 +-
packages/app-tests/redisCompletion.test.ts | 2 +-
packages/app-tests/redisKeyTree.test.ts | 4 +-
.../app-tests/redisSyntaxDiagnostics.test.ts | 2 +-
.../app-tests/redisValuePresentation.test.ts | 2 +-
.../app-tests/routineExecutionSql.test.ts | 4 +-
packages/app-tests/savedSqlHistory.test.ts | 2 +-
packages/app-tests/savedSqlStore.test.ts | 2 +-
packages/app-tests/schemaDiff.test.ts | 2 +-
.../app-tests/schemaDiffTableFilter.test.ts | 2 +-
packages/app-tests/schemaTreeCache.test.ts | 2 +-
packages/app-tests/settingsStore.test.ts | 8 +-
.../app-tests/sidebarActiveTabTarget.test.ts | 2 +-
.../sidebarConnectionSelection.test.ts | 2 +-
.../sidebarDatabaseOpenState.test.ts | 2 +-
packages/app-tests/sidebarLayout.test.ts | 2 +-
.../app-tests/sidebarLayoutNested.test.ts | 2 +-
.../app-tests/sidebarNodeOrdering.test.ts | 2 +-
packages/app-tests/sidebarRenameFocus.test.ts | 2 +-
packages/app-tests/sidebarSearch.test.ts | 2 +-
packages/app-tests/sidebarSearchTree.test.ts | 2 +-
.../app-tests/sidebarTreeCollapse.test.ts | 2 +-
.../app-tests/sidebarTreeItemLayout.test.ts | 2 +-
.../app-tests/sidebarTreeSelection.test.ts | 2 +-
packages/app-tests/sidebarTypeSearch.test.ts | 2 +-
packages/app-tests/sqlAnalysis.test.ts | 2 +-
packages/app-tests/sqlCompletion.test.ts | 2 +-
.../sqlCompletionPerformance.test.ts | 6 +-
packages/app-tests/sqlExecutionTarget.test.ts | 4 +-
packages/app-tests/sqlFormatter.test.ts | 4 +-
packages/app-tests/sqlFormatterConfig.test.ts | 2 +-
packages/app-tests/sqlMetadataRefresh.test.ts | 2 +-
packages/app-tests/sqlQuoteCaret.test.ts | 2 +-
.../app-tests/sqlSemanticDiagnostics.test.ts | 2 +-
packages/app-tests/sqlServerTree.test.ts | 2 +-
.../sqlserverSemanticDiagnostics.test.ts | 2 +-
packages/app-tests/tabCloseActions.test.ts | 2 +-
packages/app-tests/tabPresentation.test.ts | 2 +-
packages/app-tests/tabResultCache.test.ts | 2 +-
packages/app-tests/tableClipboard.test.ts | 2 +-
.../app-tests/tableColumnTemplates.test.ts | 2 +-
packages/app-tests/tableDataExport.test.ts | 2 +-
packages/app-tests/tableDataTabMeta.test.ts | 2 +-
packages/app-tests/tableEditing.test.ts | 2 +-
packages/app-tests/tableImport.test.ts | 2 +-
packages/app-tests/tableSqlTemplates.test.ts | 2 +-
.../tableStructureEditorState.test.ts | 2 +-
packages/app-tests/tableTree.test.ts | 2 +-
.../app-tests/transferProgressState.test.ts | 2 +-
packages/app-tests/treeNodeClick.test.ts | 2 +-
packages/app-tests/treeNodeContext.test.ts | 2 +-
packages/app-tests/treeRefreshTarget.test.ts | 2 +-
packages/app-tests/useDataGridExport.test.ts | 6 +-
packages/app-tests/useExportTracker.test.ts | 2 +-
packages/app-tests/webdavAutoUpload.test.ts | 4 +-
packages/app-tests/xlsxExport.test.ts | 2 +-
700 files changed, 1292 insertions(+), 1264 deletions(-)
create mode 100644 apps/desktop/src/lib/README.md
rename apps/desktop/src/lib/__tests__/{ => ai}/ai.spec.ts (92%)
rename apps/desktop/src/lib/__tests__/{ => ai}/aiMarkdown.spec.ts (99%)
rename apps/desktop/src/lib/__tests__/{ => ai}/aiMessageEdit.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => ai}/aiModelPresentation.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => ai}/aiProposalDetect.spec.ts (99%)
rename apps/desktop/src/lib/__tests__/{ => ai}/aiTableMentions.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => app}/pinnedItems.spec.ts (92%)
rename apps/desktop/src/lib/__tests__/{ => common}/ttlFormat.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => common}/webPath.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => connection}/connectionAttemptTimeout.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => connection}/connectionOpenTarget.spec.ts (92%)
rename apps/desktop/src/lib/__tests__/{ => connection}/connectionUrl.dremio.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => connection}/connectionUrl.zookeeper.spec.ts (80%)
rename apps/desktop/src/lib/__tests__/{ => dataGrid}/chartData.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => dataGrid}/dataGridConditionSuggestionPosition.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => dataGrid}/geometryPreview.spec.ts (94%)
rename apps/desktop/src/lib/__tests__/{ => dataGrid}/gridSelection.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => database}/createDatabaseCharsetOptions.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => database}/databaseDriverManifest.spec.ts (93%)
rename apps/desktop/src/lib/__tests__/{ => database}/databaseFeatureSupport.spec.ts (93%)
rename apps/desktop/src/lib/__tests__/{ => database}/databaseObjectCapabilities.spec.ts (89%)
rename apps/desktop/src/lib/__tests__/{ => database}/defaultDatabase.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => database}/jdbcDialect.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => database}/mysqlConnectionOptions.spec.ts (94%)
rename apps/desktop/src/lib/__tests__/{ => database}/prestoSqlBuiltinDriver.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => editor}/codemirrorSqlDialect.spec.ts (89%)
rename apps/desktop/src/lib/__tests__/{ => editor}/shortcutRegistry.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => etcd}/etcdKeyTree.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => imports}/navicatImport.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => kv}/kvKeyTree.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => kv}/kvRefreshSelection.spec.ts (79%)
rename apps/desktop/src/lib/__tests__/{ => kv}/kvRootPresentation.spec.ts (81%)
rename apps/desktop/src/lib/__tests__/{ => kv}/kvValueDisplay.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => mcp}/mcpConfigTemplates.spec.ts (99%)
rename apps/desktop/src/lib/__tests__/{ => metadata}/completionMetadataPolicy.spec.ts (94%)
rename apps/desktop/src/lib/__tests__/{ => metadata}/completionTreeIndex.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => mq}/mqListPanels.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => mq}/mqPinnedVersionOptions.spec.ts (92%)
rename apps/desktop/src/lib/__tests__/{ => mq}/mqPolicyForms.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => mq}/mqTenantForm.spec.ts (96%)
rename apps/desktop/src/lib/__tests__/{ => mq}/mqTokenErrors.spec.ts (92%)
rename apps/desktop/src/lib/__tests__/{ => nacos}/nacosAdmin.spec.ts (99%)
rename apps/desktop/src/lib/__tests__/{ => query}/queryResultError.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => savedSql}/savedSqlFolderCounts.spec.ts (96%)
rename apps/desktop/src/lib/__tests__/{ => schema}/schemaDiffMetadataLoad.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => sidebar}/sidebarConnectionSelection.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => sidebar}/sidebarLabelTooltip.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => sql}/executableStatementRangeCache.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{sqlSemanticCompletion.spec.ts => sql/semantic/completion.spec.ts} (95%)
rename apps/desktop/src/lib/__tests__/{sqlSemanticDbeaverReferences.md => sql/semantic/dbeaver-references.md} (100%)
rename apps/desktop/src/lib/__tests__/{sqlSemanticModel.spec.ts => sql/semantic/model.spec.ts} (98%)
rename apps/desktop/src/lib/__tests__/{sqlSemanticReferences.spec.ts => sql/semantic/references.spec.ts} (89%)
rename apps/desktop/src/lib/__tests__/{sqlSemanticTokens.spec.ts => sql/semantic/tokens.spec.ts} (98%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlCompletion.context.spec.ts (99%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlCompletion.snippet.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlExecutionTarget.spec.ts (86%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlFormatter.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlFormatterConfig.spec.ts (92%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlHighlighter.spec.ts (91%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlNavigation.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlParameterHistory.spec.ts (96%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlParameters.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => sql}/sqlStatementRanges.spec.ts (99%)
rename apps/desktop/src/lib/__tests__/{ => table}/tableDependencySort.spec.ts (99%)
rename apps/desktop/src/lib/__tests__/{ => table}/tableEditing.spec.ts (98%)
rename apps/desktop/src/lib/__tests__/{ => table}/tableStructureEditorState.spec.ts (97%)
rename apps/desktop/src/lib/__tests__/{ => zookeeper}/zookeeperApiContract.spec.ts (96%)
rename apps/desktop/src/lib/__tests__/{ => zookeeper}/zookeeperConnection.spec.ts (95%)
rename apps/desktop/src/lib/__tests__/{ => zookeeper}/zookeeperLazyKeyTree.spec.ts (95%)
rename apps/desktop/src/lib/{ => ai}/ai.ts (98%)
rename apps/desktop/src/lib/{ => ai}/aiAgentPlan.ts (94%)
rename apps/desktop/src/lib/{ => ai}/aiAgentStepPresentation.ts (98%)
rename apps/desktop/src/lib/{ => ai}/aiCodeHighlighter.ts (98%)
rename apps/desktop/src/lib/{ => ai}/aiMarkdown.ts (100%)
rename apps/desktop/src/lib/{ => ai}/aiMessageEdit.ts (100%)
rename apps/desktop/src/lib/{ => ai}/aiMessageRender.ts (100%)
rename apps/desktop/src/lib/{ => ai}/aiModelPresentation.ts (100%)
rename apps/desktop/src/lib/{ => ai}/aiPromptKeyboard.ts (100%)
rename apps/desktop/src/lib/{ => ai}/aiProposalDetect.ts (100%)
rename apps/desktop/src/lib/{ => ai}/aiSkills.ts (99%)
rename apps/desktop/src/lib/{ => ai}/aiSqlExecutionPolicy.ts (100%)
rename apps/desktop/src/lib/{ => ai}/aiTableMentions.ts (100%)
rename apps/desktop/src/lib/{ => app}/appFonts.ts (100%)
rename apps/desktop/src/lib/{ => app}/appTheme.ts (100%)
rename apps/desktop/src/lib/{ => app}/documentStoreProvider.ts (98%)
rename apps/desktop/src/lib/{ => app}/localeOptions.ts (100%)
rename apps/desktop/src/lib/{ => app}/openTabsPersistence.ts (100%)
rename apps/desktop/src/lib/{ => app}/pinnedItems.ts (100%)
rename apps/desktop/src/lib/{ => app}/pinnedTreeNodeIds.ts (100%)
rename apps/desktop/src/lib/{ => app}/transferProgressState.ts (100%)
rename apps/desktop/src/lib/{ => backend}/api.ts (98%)
rename apps/desktop/src/lib/{ => backend}/configCrypto.ts (97%)
rename apps/desktop/src/lib/{ => backend}/connectionTransport.ts (100%)
rename apps/desktop/src/lib/{ => backend}/debugLog.ts (100%)
rename apps/desktop/src/lib/{ => backend}/errorUtils.ts (100%)
rename apps/desktop/src/lib/{ => backend}/http.ts (97%)
rename apps/desktop/src/lib/{ => backend}/mq-http.ts (99%)
rename apps/desktop/src/lib/{ => backend}/mq-tauri.ts (100%)
rename apps/desktop/src/lib/{ => backend}/nacos-tauri.ts (100%)
rename apps/desktop/src/lib/{ => backend}/platform.ts (100%)
rename apps/desktop/src/lib/{ => backend}/safeStorage.ts (100%)
rename apps/desktop/src/lib/{ => backend}/tauri.ts (98%)
rename apps/desktop/src/lib/{ => backend}/tauriRuntime.ts (100%)
rename apps/desktop/src/lib/{ => common}/clipboard.ts (98%)
rename apps/desktop/src/lib/{ => common}/color.ts (100%)
rename apps/desktop/src/lib/{ => common}/jsonCopyValue.ts (100%)
rename apps/desktop/src/lib/{ => common}/searchPattern.ts (100%)
rename apps/desktop/src/lib/{ => common}/ttlFormat.ts (100%)
rename apps/desktop/src/lib/{ => common}/utils.ts (100%)
rename apps/desktop/src/lib/{ => common}/webPath.ts (100%)
rename apps/desktop/src/lib/{ => connection}/actionActivation.ts (100%)
rename apps/desktop/src/lib/{ => connection}/agentDriverInstallHint.ts (95%)
rename apps/desktop/src/lib/{ => connection}/agentDriverUpdateBadge.ts (100%)
rename apps/desktop/src/lib/{ => connection}/connectionAttemptTimeout.ts (100%)
rename apps/desktop/src/lib/{ => connection}/connectionDeepLink.ts (99%)
rename apps/desktop/src/lib/{ => connection}/connectionFile.ts (97%)
rename apps/desktop/src/lib/{ => connection}/connectionHealth.ts (100%)
rename apps/desktop/src/lib/{ => connection}/connectionLevelDatabaseBootstrap.ts (97%)
rename apps/desktop/src/lib/{ => connection}/connectionOpenTarget.ts (89%)
rename apps/desktop/src/lib/{ => connection}/connectionPresentation.ts (100%)
rename apps/desktop/src/lib/{ => connection}/connectionUrl.ts (99%)
rename apps/desktop/src/lib/{ => connection}/connectionVisibleDatabases.ts (97%)
rename apps/desktop/src/lib/{ => connection}/driverInstallProgressUi.ts (100%)
rename apps/desktop/src/lib/{ => connection}/driverRuntimePresentation.ts (99%)
rename apps/desktop/src/lib/{ => dataGrid}/binaryCellDownload.ts (98%)
rename apps/desktop/src/lib/{ => dataGrid}/binaryHexViewer.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/canvasDataGridRenderer.ts (98%)
rename apps/desktop/src/lib/{ => dataGrid}/cellDetailPresentation.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/cellImageUrl.ts (97%)
rename apps/desktop/src/lib/{ => dataGrid}/cellValue.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/chartData.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/columnFormatter.ts (99%)
rename apps/desktop/src/lib/{ => dataGrid}/dataCompare.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGenerate.ts (99%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridCellCoercion.ts (99%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridColumnFilter.ts (95%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridColumnLayoutStorage.ts (97%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridColumnOrder.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridColumnType.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridColumnVisibility.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridColumnWidth.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridConditionHistory.ts (99%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridConditionSuggestionPosition.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridDetail.ts (97%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridEnumEditor.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridInfiniteScroll.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridPagination.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridPaintTheme.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridSaveUi.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridScrollGutter.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridSearchSplit.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridSort.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridSql.ts (99%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridTemporalEditor.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/dataGridTranspose.ts (100%)
rename apps/desktop/src/lib/{previewHandlers => dataGrid}/geometryMapPreview.ts (94%)
rename apps/desktop/src/lib/{ => dataGrid}/geometryPreview.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/gridRowStatus.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/gridSelection.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/imagePreviewViewer.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/paginationPageSize.ts (100%)
rename apps/desktop/src/lib/{ => dataGrid}/resultPreviewRegistry.ts (100%)
rename apps/desktop/src/lib/{ => database}/createDatabaseCharsetOptions.ts (100%)
rename apps/desktop/src/lib/{ => database}/createDatabaseSql.ts (97%)
create mode 100644 apps/desktop/src/lib/database/databaseCapabilities.ts
rename apps/desktop/src/lib/{ => database}/databaseCapabilitySets.ts (100%)
rename apps/desktop/src/lib/{ => database}/databaseDriverManifest.ts (97%)
rename apps/desktop/src/lib/{ => database}/databaseFeatureSupport.ts (94%)
rename apps/desktop/src/lib/{ => database}/databaseFileDetection.ts (94%)
rename apps/desktop/src/lib/{ => database}/databaseObjectCapabilities.ts (100%)
rename apps/desktop/src/lib/{ => database}/databaseOptionSearch.ts (100%)
rename apps/desktop/src/lib/{ => database}/databaseSearch.ts (96%)
rename apps/desktop/src/lib/{ => database}/databaseTableDataCapabilities.ts (98%)
rename apps/desktop/src/lib/{ => database}/databaseTree.ts (97%)
rename apps/desktop/src/lib/{ => database}/databaseUserAdmin.ts (99%)
rename apps/desktop/src/lib/{ => database}/dbAdminSql.ts (98%)
rename apps/desktop/src/lib/{ => database}/defaultDatabase.ts (95%)
rename apps/desktop/src/lib/{ => database}/h2Connection.ts (100%)
rename apps/desktop/src/lib/{ => database}/jdbcDialect.ts (98%)
rename apps/desktop/src/lib/{ => database}/mysqlConnectionOptions.ts (100%)
rename apps/desktop/src/lib/{ => database}/oceanbaseConnectionMode.ts (100%)
rename apps/desktop/src/lib/{ => database}/prestoSqlBuiltinDriver.ts (95%)
rename apps/desktop/src/lib/{ => database}/sqlServerLinkedServers.ts (100%)
rename apps/desktop/src/lib/{ => database}/sqlServerTree.ts (88%)
rename apps/desktop/src/lib/{ => database}/visibleDatabases.ts (100%)
delete mode 100644 apps/desktop/src/lib/databaseCapabilities.ts
rename apps/desktop/src/lib/{ => diagram}/diagramZoom.ts (100%)
rename apps/desktop/src/lib/{ => diagram}/engineeringDiagram.ts (99%)
rename apps/desktop/src/lib/{ => diagram}/erDiagram.ts (99%)
rename apps/desktop/src/lib/{ => diagram}/explainPlan.ts (99%)
rename apps/desktop/src/lib/{ => diagram}/fieldLineage.ts (100%)
rename apps/desktop/src/lib/{ => document}/documentViewerFontStyle.ts (93%)
rename apps/desktop/src/lib/{ => editor}/codemirrorSelectionMatches.ts (100%)
rename apps/desktop/src/lib/{ => editor}/codemirrorSqlDialect.ts (100%)
rename apps/desktop/src/lib/{ => editor}/codemirrorTrimmedSelectionLayer.ts (100%)
rename apps/desktop/src/lib/{ => editor}/editorThemes.ts (99%)
rename apps/desktop/src/lib/{ => editor}/editorZoom.ts (100%)
rename apps/desktop/src/lib/{ => editor}/keyboardShortcuts.ts (99%)
rename apps/desktop/src/lib/{ => editor}/queryEditorTableDrop.ts (99%)
rename apps/desktop/src/lib/{ => editor}/shortcutRegistry.ts (100%)
rename apps/desktop/src/lib/{ => elasticsearch}/elasticsearchCompletion.ts (100%)
rename apps/desktop/src/lib/{ => etcd}/etcdKeyTree.ts (75%)
rename apps/desktop/src/lib/{ => export}/databaseExport.ts (92%)
rename apps/desktop/src/lib/{ => export}/databaseExportSelection.ts (100%)
rename apps/desktop/src/lib/{ => export}/ddlExport.ts (100%)
rename apps/desktop/src/lib/{ => export}/diagramSvgExport.ts (99%)
rename apps/desktop/src/lib/{ => export}/exportFormats.ts (95%)
rename apps/desktop/src/lib/{ => export}/xlsxExport.ts (100%)
rename apps/desktop/src/lib/{ => history}/historyActions.ts (100%)
rename apps/desktop/src/lib/{ => history}/historyActivityKind.ts (100%)
rename apps/desktop/src/lib/{ => history}/historyAiAnalysis.ts (100%)
rename apps/desktop/src/lib/{ => history}/historyTimeRange.ts (100%)
rename apps/desktop/src/lib/{ => history}/historyVirtualList.ts (100%)
rename apps/desktop/src/lib/{ => imports}/datagripImport.ts (99%)
rename apps/desktop/src/lib/{ => imports}/dbeaverImport.ts (99%)
rename apps/desktop/src/lib/{ => imports}/navicatImport.ts (99%)
rename apps/desktop/src/lib/{ => kv}/kvKeyTree.ts (98%)
rename apps/desktop/src/lib/{ => kv}/kvRefreshSelection.ts (82%)
rename apps/desktop/src/lib/{ => kv}/kvRootPresentation.ts (100%)
rename apps/desktop/src/lib/{ => kv}/kvValueDisplay.ts (98%)
rename apps/desktop/src/lib/{ => mcp}/mcpConfigTemplates.ts (100%)
rename apps/desktop/src/lib/{ => metadata}/completionMetadataPolicy.ts (100%)
rename apps/desktop/src/lib/{ => metadata}/completionTreeIndex.ts (96%)
rename apps/desktop/src/lib/{ => metadata}/metadataTaskLimiter.ts (100%)
rename apps/desktop/src/lib/{ => metadata}/schemaTreeCache.ts (100%)
rename apps/desktop/src/lib/{ => mongo}/mongoCompletion.ts (100%)
rename apps/desktop/src/lib/{ => mongo}/mongoConnectionOptions.ts (100%)
rename apps/desktop/src/lib/{ => mongo}/mongoDocumentValues.ts (100%)
rename apps/desktop/src/lib/{ => mongo}/mongoFormatter.ts (99%)
rename apps/desktop/src/lib/{ => mongo}/mongoShellCommand.ts (100%)
rename apps/desktop/src/lib/{ => mq}/mqPinnedVersionOptions.ts (100%)
rename apps/desktop/src/lib/{ => mq}/mqPolicyForms.ts (100%)
rename apps/desktop/src/lib/{ => mq}/mqTenantForm.ts (100%)
rename apps/desktop/src/lib/{ => mq}/mqTokenErrors.ts (100%)
rename apps/desktop/src/lib/{ => nacos}/nacosAdmin.ts (100%)
rename apps/desktop/src/lib/{ => query}/queryResultArchive.ts (98%)
rename apps/desktop/src/lib/{ => query}/queryResultArchiveFile.ts (97%)
rename apps/desktop/src/lib/{ => query}/queryResultError.ts (100%)
rename apps/desktop/src/lib/{ => redis}/redisCommandSafety.ts (100%)
rename apps/desktop/src/lib/{ => redis}/redisCommandSession.ts (100%)
rename apps/desktop/src/lib/{ => redis}/redisCommandTable.ts (99%)
rename apps/desktop/src/lib/{ => redis}/redisCompletion.ts (98%)
rename apps/desktop/src/lib/{ => redis}/redisJsonHighlighter.ts (96%)
rename apps/desktop/src/lib/{ => redis}/redisKeyPattern.ts (100%)
rename apps/desktop/src/lib/{ => redis}/redisKeyTree.ts (99%)
rename apps/desktop/src/lib/{ => redis}/redisQueryResult.ts (96%)
rename apps/desktop/src/lib/{ => redis}/redisSyntaxDiagnostics.ts (96%)
rename apps/desktop/src/lib/{ => redis}/redisValuePresentation.ts (100%)
rename apps/desktop/src/lib/{ => savedSql}/savedSqlFolderCounts.ts (100%)
rename apps/desktop/src/lib/{ => savedSql}/savedSqlHistory.ts (100%)
rename apps/desktop/src/lib/{ => schema}/schemaDiff.ts (100%)
rename apps/desktop/src/lib/{ => schema}/schemaDiffMetadataLoad.ts (100%)
rename apps/desktop/src/lib/{ => schema}/schemaDiffOptions.ts (100%)
rename apps/desktop/src/lib/{ => schema}/schemaDiffTableFilter.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarActiveTabTarget.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarConnectionSelection.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarDatabaseOpenState.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarLabelTooltip.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarLayout.ts (99%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarNodeOrdering.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarRenameFocus.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarSearch.ts (96%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarSearchTree.ts (98%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarTableNameDisplay.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarTreeCollapse.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarTreeContext.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarTreeItemLayout.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarTreeSelection.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/sidebarTypeSearch.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/treeNodeClick.ts (97%)
rename apps/desktop/src/lib/{ => sidebar}/treeNodeContext.ts (100%)
rename apps/desktop/src/lib/{ => sidebar}/treeRefreshTarget.ts (100%)
rename apps/desktop/src/lib/{ => sql}/executableStatementRangeCache.ts (97%)
rename apps/desktop/src/lib/{ => sql}/httpSqlFileProgress.ts (82%)
rename apps/desktop/src/lib/{ => sql}/newQueryContext.ts (97%)
rename apps/desktop/src/lib/{ => sql}/queryCursorTableTarget.ts (95%)
rename apps/desktop/src/lib/{ => sql}/queryExecutionState.ts (100%)
rename apps/desktop/src/lib/{ => sql}/queryTimeout.ts (91%)
create mode 100644 apps/desktop/src/lib/sql/semantic/README.md
rename apps/desktop/src/lib/{sqlSemanticCompletion.ts => sql/semantic/completion.ts} (98%)
rename apps/desktop/src/lib/{sqlSemanticDiagnostics.ts => sql/semantic/diagnostics.ts} (99%)
rename apps/desktop/src/lib/{sqlSemanticDialect.ts => sql/semantic/dialect.ts} (100%)
rename apps/desktop/src/lib/{sqlSemanticFixtures.ts => sql/semantic/fixtures.ts} (97%)
rename apps/desktop/src/lib/{sqlSemanticModel.ts => sql/semantic/model.ts} (99%)
rename apps/desktop/src/lib/{sqlSemanticReferences.ts => sql/semantic/references.ts} (98%)
rename apps/desktop/src/lib/{sqlSemanticTokens.ts => sql/semantic/tokens.ts} (99%)
rename apps/desktop/src/lib/{sqlSemanticTypes.ts => sql/semantic/types.ts} (100%)
rename apps/desktop/src/lib/{ => sql}/sqlAnalysis.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlCompletion.ts (99%)
rename apps/desktop/src/lib/{ => sql}/sqlDiagnostics.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlExecutionTarget.ts (98%)
rename apps/desktop/src/lib/{ => sql}/sqlFileOpen.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlFormatter.ts (98%)
rename apps/desktop/src/lib/{ => sql}/sqlFormatterConfig.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlHighlighter.ts (97%)
rename apps/desktop/src/lib/{ => sql}/sqlMetadataRefresh.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlNavigation.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlParameterHistory.ts (96%)
rename apps/desktop/src/lib/{ => sql}/sqlParameters.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlQuoteCaret.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlServerQueryWrapping.ts (100%)
rename apps/desktop/src/lib/{ => sql}/sqlStatementRanges.ts (99%)
rename apps/desktop/src/lib/{ => table}/objectBrowserRows.ts (98%)
rename apps/desktop/src/lib/{ => table}/objectRenameSql.ts (97%)
rename apps/desktop/src/lib/{ => table}/objectSourceEditor.ts (97%)
rename apps/desktop/src/lib/{ => table}/routineExecutionSql.ts (97%)
rename apps/desktop/src/lib/{ => table}/routineParameters.ts (98%)
rename apps/desktop/src/lib/{ => table}/tableClipboard.ts (100%)
rename apps/desktop/src/lib/{ => table}/tableColumnTemplates.ts (95%)
rename apps/desktop/src/lib/{ => table}/tableDataExport.ts (91%)
rename apps/desktop/src/lib/{ => table}/tableDataTabMeta.ts (100%)
rename apps/desktop/src/lib/{ => table}/tableDependencySort.ts (100%)
rename apps/desktop/src/lib/{ => table}/tableEditing.ts (98%)
rename apps/desktop/src/lib/{ => table}/tableImport.ts (100%)
rename apps/desktop/src/lib/{ => table}/tableMetadataCapabilities.ts (100%)
rename apps/desktop/src/lib/{ => table}/tableOpenPageLimit.ts (90%)
rename apps/desktop/src/lib/{ => table}/tableSelectSql.ts (91%)
rename apps/desktop/src/lib/{ => table}/tableSqlTemplates.ts (99%)
rename apps/desktop/src/lib/{ => table}/tableStructureCapabilities.ts (100%)
rename apps/desktop/src/lib/{ => table}/tableStructureEditorSql.ts (97%)
rename apps/desktop/src/lib/{ => table}/tableStructureEditorState.ts (99%)
rename apps/desktop/src/lib/{ => table}/tableTree.ts (99%)
rename apps/desktop/src/lib/{ => table}/viewDdl.ts (87%)
rename apps/desktop/src/lib/{ => tabs}/dataTabActivation.ts (100%)
rename apps/desktop/src/lib/{ => tabs}/tabCloseActions.ts (100%)
rename apps/desktop/src/lib/{ => tabs}/tabPresentation.ts (100%)
rename apps/desktop/src/lib/{ => tabs}/tabResultCache.ts (99%)
rename apps/desktop/src/lib/{ => webdav}/webdavAutoUploadConfig.ts (96%)
rename apps/desktop/src/lib/{ => zookeeper}/zookeeperConnection.ts (100%)
rename apps/desktop/src/lib/{ => zookeeper}/zookeeperLazyKeyTree.ts (98%)
diff --git a/apps/desktop/components.json b/apps/desktop/components.json
index 2c03417c4..d2f03505b 100644
--- a/apps/desktop/components.json
+++ b/apps/desktop/components.json
@@ -14,7 +14,7 @@
"rtl": false,
"aliases": {
"components": "@/components",
- "utils": "@/lib/utils",
+ "utils": "@/lib/common/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"composables": "@/composables"
diff --git a/apps/desktop/src/App.vue b/apps/desktop/src/App.vue
index 4befc2418..5f3e60272 100644
--- a/apps/desktop/src/App.vue
+++ b/apps/desktop/src/App.vue
@@ -33,20 +33,20 @@ import { useVisibilityChange } from "@/composables/useVisibilityChange";
import { useWebDavAutoUpload } from "@/composables/useWebDavAutoUpload";
import "@/i18n";
import { translateBackendError } from "@/i18n/backend-errors";
-import * as api from "@/lib/api";
-import { connectionRedactedNameLabel } from "@/lib/connectionPresentation";
-import { quickConnectionOpenTarget } from "@/lib/connectionOpenTarget";
-import { resolveDefaultDatabase } from "@/lib/defaultDatabase";
-import { findTreeNodeById, resolveNewQueryTarget } from "@/lib/newQueryContext";
-import { buildExecutableObjectSourceStatements, objectSourceSaveExecutionMode } from "@/lib/objectSourceEditor";
-import { resolveExecutableSql, resolveExecutableSqlWithBackend, type SqlExecutionSnapshot } from "@/lib/sqlExecutionTarget";
-import { uuid } from "@/lib/utils";
-import { isMacOS } from "@/lib/platform";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
-import { openQueryResultArchiveFile } from "@/lib/queryResultArchiveFile";
-import { sqlFileTitleFromPath } from "@/lib/sqlFileOpen";
+import * as api from "@/lib/backend/api";
+import { connectionRedactedNameLabel } from "@/lib/connection/connectionPresentation";
+import { quickConnectionOpenTarget } from "@/lib/connection/connectionOpenTarget";
+import { resolveDefaultDatabase } from "@/lib/database/defaultDatabase";
+import { findTreeNodeById, resolveNewQueryTarget } from "@/lib/sql/newQueryContext";
+import { buildExecutableObjectSourceStatements, objectSourceSaveExecutionMode } from "@/lib/table/objectSourceEditor";
+import { resolveExecutableSql, resolveExecutableSqlWithBackend, type SqlExecutionSnapshot } from "@/lib/sql/sqlExecutionTarget";
+import { uuid } from "@/lib/common/utils";
+import { isMacOS } from "@/lib/backend/platform";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
+import { openQueryResultArchiveFile } from "@/lib/query/queryResultArchiveFile";
+import { sqlFileTitleFromPath } from "@/lib/sql/sqlFileOpen";
import type { ConnectionConfig, ObjectSourceKind, QueryTab } from "@/types/database";
-import { parseConnectionDeepLink, type ConnectionDeepLinkDraft } from "@/lib/connectionDeepLink";
+import { parseConnectionDeepLink, type ConnectionDeepLinkDraft } from "@/lib/connection/connectionDeepLink";
import {
isBrowserReloadShortcut,
isCloseTabShortcut,
@@ -66,25 +66,25 @@ import {
isZoomInShortcut,
isZoomOutShortcut,
switchToTabIndexFromShortcut,
-} from "@/lib/keyboardShortcuts";
-import { isPreviewTab } from "@/lib/tabPresentation";
-import { supportsSqlFileExecution } from "@/lib/databaseCapabilities";
-import { classifyAiSqlExecution } from "@/lib/aiSqlExecutionPolicy";
-import { buildHistoryAiAnalysisPrompt } from "@/lib/historyAiAnalysis";
-import { countAvailableAgentDriverUpdates, type AgentDriverUpdateBadgeState } from "@/lib/agentDriverUpdateBadge";
-import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/safeStorage";
-import { apiUrl, webPath } from "@/lib/webPath";
-import { APP_FONT_SANS_CSS_VAR, DEFAULT_UI_FONT_FAMILY } from "@/lib/appFonts";
-import { rankSavedSqlHistory } from "@/lib/savedSqlHistory";
-import { isSchemaAware, isSingleDatabase, usesTreeSchemaMode } from "@/lib/databaseFeatureSupport";
-import { codeMirrorSqlDialect, connectionUsesDatabaseObjectTreeMode, effectiveDatabaseTypeForConnection } from "@/lib/jdbcDialect";
-import { detectDatabaseFileType } from "@/lib/databaseFileDetection";
+} from "@/lib/editor/keyboardShortcuts";
+import { isPreviewTab } from "@/lib/tabs/tabPresentation";
+import { supportsSqlFileExecution } from "@/lib/database/databaseCapabilities";
+import { classifyAiSqlExecution } from "@/lib/ai/aiSqlExecutionPolicy";
+import { buildHistoryAiAnalysisPrompt } from "@/lib/history/historyAiAnalysis";
+import { countAvailableAgentDriverUpdates, type AgentDriverUpdateBadgeState } from "@/lib/connection/agentDriverUpdateBadge";
+import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/backend/safeStorage";
+import { apiUrl, webPath } from "@/lib/common/webPath";
+import { APP_FONT_SANS_CSS_VAR, DEFAULT_UI_FONT_FAMILY } from "@/lib/app/appFonts";
+import { rankSavedSqlHistory } from "@/lib/savedSql/savedSqlHistory";
+import { isSchemaAware, isSingleDatabase, usesTreeSchemaMode } from "@/lib/database/databaseFeatureSupport";
+import { codeMirrorSqlDialect, connectionUsesDatabaseObjectTreeMode, effectiveDatabaseTypeForConnection } from "@/lib/database/jdbcDialect";
+import { detectDatabaseFileType } from "@/lib/database/databaseFileDetection";
import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
-import type { HistoryEntry } from "@/lib/tauri";
-import type { AiAction } from "@/lib/ai";
+import type { HistoryEntry } from "@/lib/backend/tauri";
+import type { AiAction } from "@/lib/ai/ai";
const AiAssistant = defineAsyncComponent(() => import("@/components/editor/AiAssistant.vue"));
const QueryHistory = defineAsyncComponent(() => import("@/components/editor/QueryHistory.vue"));
diff --git a/apps/desktop/src/components/admin/DatabaseUserAdmin.vue b/apps/desktop/src/components/admin/DatabaseUserAdmin.vue
index ceb223898..ee0ebddf4 100644
--- a/apps/desktop/src/components/admin/DatabaseUserAdmin.vue
+++ b/apps/desktop/src/components/admin/DatabaseUserAdmin.vue
@@ -12,8 +12,8 @@ import { useConnectionStore } from "@/stores/connectionStore";
import { useToast } from "@/composables/useToast";
import { useSqlHighlighter } from "@/composables/useSqlHighlighter";
import type { ConnectionConfig } from "@/types/database";
-import * as api from "@/lib/api";
-import { grantsFromQueryResult, getDatabaseUserAdminProvider, supportsDatabaseUserAdmin, type DatabaseUserIdentity, type PrivilegeScope } from "@/lib/databaseUserAdmin";
+import * as api from "@/lib/backend/api";
+import { grantsFromQueryResult, getDatabaseUserAdminProvider, supportsDatabaseUserAdmin, type DatabaseUserIdentity, type PrivilegeScope } from "@/lib/database/databaseUserAdmin";
const props = defineProps<{
connection: ConnectionConfig;
diff --git a/apps/desktop/src/components/auth/LoginPage.vue b/apps/desktop/src/components/auth/LoginPage.vue
index 54e2850af..a081d71c0 100644
--- a/apps/desktop/src/components/auth/LoginPage.vue
+++ b/apps/desktop/src/components/auth/LoginPage.vue
@@ -5,7 +5,7 @@ import { Button } from "@/components/ui/button";
import PasswordInput from "@/components/ui/PasswordInput.vue";
import { Lock, Loader2, ShieldCheck } from "@lucide/vue";
import AppLogo from "@/components/icons/AppLogo.vue";
-import { apiUrl } from "@/lib/webPath";
+import { apiUrl } from "@/lib/common/webPath";
const props = withDefaults(
defineProps<{
diff --git a/apps/desktop/src/components/chart/QueryChart.vue b/apps/desktop/src/components/chart/QueryChart.vue
index c10d4c942..a31f9503d 100644
--- a/apps/desktop/src/components/chart/QueryChart.vue
+++ b/apps/desktop/src/components/chart/QueryChart.vue
@@ -12,7 +12,7 @@ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMe
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import type { QueryResult } from "@/types/database";
import { useTheme } from "@/composables/useTheme";
-import { axisColumnLabel, chartableColumnIndexes, toChartNumber } from "@/lib/chartData";
+import { axisColumnLabel, chartableColumnIndexes, toChartNumber } from "@/lib/dataGrid/chartData";
use([CanvasRenderer, LineChart, BarChart, PieChart, GridComponent, TooltipComponent, LegendComponent]);
diff --git a/apps/desktop/src/components/config/DriverStoreDialog.vue b/apps/desktop/src/components/config/DriverStoreDialog.vue
index d529fc1ca..8fd7b573b 100644
--- a/apps/desktop/src/components/config/DriverStoreDialog.vue
+++ b/apps/desktop/src/components/config/DriverStoreDialog.vue
@@ -12,14 +12,14 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import DriverInstallProgressCircle from "@/components/config/DriverInstallProgressCircle.vue";
import DatabaseIcon from "@/components/icons/DatabaseIcon.vue";
import { useToast } from "@/composables/useToast";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
-import { countAvailableDriverUpdates } from "@/lib/agentDriverUpdateBadge";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
+import { countAvailableDriverUpdates } from "@/lib/connection/agentDriverUpdateBadge";
import type { JdbcDriverInfo, JdbcMavenBundleInfo, JdbcPluginStatus } from "@/types/database";
-import * as api from "@/lib/api";
-import type { AgentDriverInfo, DriverRuntimeInfo, DriverRuntimeSummary, DriverStoreUsage, JavaRuntimeConfig } from "@/lib/api";
-import { formatRuntimeBytes, formatRuntimeCpu, formatRuntimeUptime, runtimeHealthClass, runtimeStatusClass, runtimeStatusDotClass } from "@/lib/driverRuntimePresentation";
-import { addDriverInstallQueue, driverInstallProgressPercent, isDriverInstallProgressTarget, removeDriverInstallQueue, takeNextDriverInstallQueue, type DriverInstallProgress } from "@/lib/driverInstallProgressUi";
-import { PRESTOSQL_DRIVER_DB_TYPE, prestoSqlBuiltinDriverRow, prestoSqlMavenBundle } from "@/lib/prestoSqlBuiltinDriver";
+import * as api from "@/lib/backend/api";
+import type { AgentDriverInfo, DriverRuntimeInfo, DriverRuntimeSummary, DriverStoreUsage, JavaRuntimeConfig } from "@/lib/backend/api";
+import { formatRuntimeBytes, formatRuntimeCpu, formatRuntimeUptime, runtimeHealthClass, runtimeStatusClass, runtimeStatusDotClass } from "@/lib/connection/driverRuntimePresentation";
+import { addDriverInstallQueue, driverInstallProgressPercent, isDriverInstallProgressTarget, removeDriverInstallQueue, takeNextDriverInstallQueue, type DriverInstallProgress } from "@/lib/connection/driverInstallProgressUi";
+import { PRESTOSQL_DRIVER_DB_TYPE, prestoSqlBuiltinDriverRow, prestoSqlMavenBundle } from "@/lib/database/prestoSqlBuiltinDriver";
const { t } = useI18n();
const { toast } = useToast();
@@ -43,7 +43,7 @@ const driverStoreTab = ref("agent");
// ──────────── Driver store path ────────────
import { useSettingsStore } from "@/stores/settingsStore";
-import type { DriverStorePathInfo } from "@/lib/api";
+import type { DriverStorePathInfo } from "@/lib/backend/api";
const settingsStore = useSettingsStore();
type DriverStoreDirKind = "plugin" | "agent";
diff --git a/apps/desktop/src/components/connection/ConnectionDialog.vue b/apps/desktop/src/components/connection/ConnectionDialog.vue
index 8b4f415b6..1c5fa6678 100644
--- a/apps/desktop/src/components/connection/ConnectionDialog.vue
+++ b/apps/desktop/src/components/connection/ConnectionDialog.vue
@@ -1,6 +1,6 @@
diff --git a/apps/desktop/src/components/ui/select/SelectScrollDownButton.vue b/apps/desktop/src/components/ui/select/SelectScrollDownButton.vue
index e0a140535..90073960c 100644
--- a/apps/desktop/src/components/ui/select/SelectScrollDownButton.vue
+++ b/apps/desktop/src/components/ui/select/SelectScrollDownButton.vue
@@ -5,7 +5,7 @@ import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { ChevronDownIcon } from "@lucide/vue";
import { SelectScrollDownButton, useForwardProps } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/select/SelectScrollUpButton.vue b/apps/desktop/src/components/ui/select/SelectScrollUpButton.vue
index 9ef499b72..924813ced 100644
--- a/apps/desktop/src/components/ui/select/SelectScrollUpButton.vue
+++ b/apps/desktop/src/components/ui/select/SelectScrollUpButton.vue
@@ -5,7 +5,7 @@ import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { ChevronUpIcon } from "@lucide/vue";
import { SelectScrollUpButton, useForwardProps } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/select/SelectSeparator.vue b/apps/desktop/src/components/ui/select/SelectSeparator.vue
index 314812266..bb9f086ed 100644
--- a/apps/desktop/src/components/ui/select/SelectSeparator.vue
+++ b/apps/desktop/src/components/ui/select/SelectSeparator.vue
@@ -3,7 +3,7 @@ import type { SelectSeparatorProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { SelectSeparator } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/select/SelectTrigger.vue b/apps/desktop/src/components/ui/select/SelectTrigger.vue
index 4324f8bd1..5922ad6ef 100644
--- a/apps/desktop/src/components/ui/select/SelectTrigger.vue
+++ b/apps/desktop/src/components/ui/select/SelectTrigger.vue
@@ -5,7 +5,7 @@ import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { ChevronDownIcon } from "@lucide/vue";
import { SelectIcon, SelectTrigger, useForwardProps } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = withDefaults(defineProps(), { size: "default" });
diff --git a/apps/desktop/src/components/ui/separator/Separator.vue b/apps/desktop/src/components/ui/separator/Separator.vue
index 1c61a3161..63ebc04d6 100644
--- a/apps/desktop/src/components/ui/separator/Separator.vue
+++ b/apps/desktop/src/components/ui/separator/Separator.vue
@@ -3,7 +3,7 @@ import type { SeparatorProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { Separator } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = withDefaults(defineProps(), {
orientation: "horizontal",
diff --git a/apps/desktop/src/components/ui/sheet/SheetContent.vue b/apps/desktop/src/components/ui/sheet/SheetContent.vue
index bbfe1777b..2488dbeea 100644
--- a/apps/desktop/src/components/ui/sheet/SheetContent.vue
+++ b/apps/desktop/src/components/ui/sheet/SheetContent.vue
@@ -5,7 +5,7 @@ import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { XIcon } from "@lucide/vue";
import { DialogClose, DialogContent, DialogPortal, useForwardPropsEmits } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
import { Button } from "@/components/ui/button";
import SheetOverlay from "./SheetOverlay.vue";
diff --git a/apps/desktop/src/components/ui/sheet/SheetDescription.vue b/apps/desktop/src/components/ui/sheet/SheetDescription.vue
index f19883a34..dc96cc1ea 100644
--- a/apps/desktop/src/components/ui/sheet/SheetDescription.vue
+++ b/apps/desktop/src/components/ui/sheet/SheetDescription.vue
@@ -3,7 +3,7 @@ import type { DialogDescriptionProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { DialogDescription } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/sheet/SheetFooter.vue b/apps/desktop/src/components/ui/sheet/SheetFooter.vue
index 7ac7948ab..1467f3c3c 100644
--- a/apps/desktop/src/components/ui/sheet/SheetFooter.vue
+++ b/apps/desktop/src/components/ui/sheet/SheetFooter.vue
@@ -1,6 +1,6 @@
diff --git a/apps/desktop/src/components/ui/sheet/SheetHeader.vue b/apps/desktop/src/components/ui/sheet/SheetHeader.vue
index bad371dd5..fd7868a94 100644
--- a/apps/desktop/src/components/ui/sheet/SheetHeader.vue
+++ b/apps/desktop/src/components/ui/sheet/SheetHeader.vue
@@ -1,6 +1,6 @@
diff --git a/apps/desktop/src/components/ui/sheet/SheetOverlay.vue b/apps/desktop/src/components/ui/sheet/SheetOverlay.vue
index 01b044b2c..272f8baa7 100644
--- a/apps/desktop/src/components/ui/sheet/SheetOverlay.vue
+++ b/apps/desktop/src/components/ui/sheet/SheetOverlay.vue
@@ -3,7 +3,7 @@ import type { DialogOverlayProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { DialogOverlay } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/sheet/SheetTitle.vue b/apps/desktop/src/components/ui/sheet/SheetTitle.vue
index 37e4d6a47..95863287b 100644
--- a/apps/desktop/src/components/ui/sheet/SheetTitle.vue
+++ b/apps/desktop/src/components/ui/sheet/SheetTitle.vue
@@ -3,7 +3,7 @@ import type { DialogTitleProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { DialogTitle } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/switch/Switch.vue b/apps/desktop/src/components/ui/switch/Switch.vue
index 7f7760dd9..050a4b9d6 100644
--- a/apps/desktop/src/components/ui/switch/Switch.vue
+++ b/apps/desktop/src/components/ui/switch/Switch.vue
@@ -3,7 +3,7 @@ import type { SwitchRootEmits, SwitchRootProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { SwitchRoot, SwitchThumb, useForwardPropsEmits } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = withDefaults(
defineProps<
diff --git a/apps/desktop/src/components/ui/tabs/Tabs.vue b/apps/desktop/src/components/ui/tabs/Tabs.vue
index 3814fc23f..85dbe7782 100644
--- a/apps/desktop/src/components/ui/tabs/Tabs.vue
+++ b/apps/desktop/src/components/ui/tabs/Tabs.vue
@@ -3,7 +3,7 @@ import type { TabsRootEmits, TabsRootProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { TabsRoot, useForwardPropsEmits } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
const emits = defineEmits();
diff --git a/apps/desktop/src/components/ui/tabs/TabsContent.vue b/apps/desktop/src/components/ui/tabs/TabsContent.vue
index 5b9e6b2cc..40910591c 100644
--- a/apps/desktop/src/components/ui/tabs/TabsContent.vue
+++ b/apps/desktop/src/components/ui/tabs/TabsContent.vue
@@ -3,7 +3,7 @@ import type { TabsContentProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { TabsContent } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/tabs/TabsList.vue b/apps/desktop/src/components/ui/tabs/TabsList.vue
index ceac23d35..0c122f7ca 100644
--- a/apps/desktop/src/components/ui/tabs/TabsList.vue
+++ b/apps/desktop/src/components/ui/tabs/TabsList.vue
@@ -4,7 +4,7 @@ import type { HTMLAttributes } from "vue";
import type { TabsListVariants } from ".";
import { reactiveOmit } from "@vueuse/core";
import { TabsList } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
import { tabsListVariants } from ".";
const props = withDefaults(
diff --git a/apps/desktop/src/components/ui/tabs/TabsTrigger.vue b/apps/desktop/src/components/ui/tabs/TabsTrigger.vue
index 3fc64444b..20d1f8a4a 100644
--- a/apps/desktop/src/components/ui/tabs/TabsTrigger.vue
+++ b/apps/desktop/src/components/ui/tabs/TabsTrigger.vue
@@ -3,7 +3,7 @@ import type { TabsTriggerProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { TabsTrigger, useForwardProps } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
const props = defineProps();
diff --git a/apps/desktop/src/components/ui/tooltip/TooltipContent.vue b/apps/desktop/src/components/ui/tooltip/TooltipContent.vue
index 167da296d..74725676f 100644
--- a/apps/desktop/src/components/ui/tooltip/TooltipContent.vue
+++ b/apps/desktop/src/components/ui/tooltip/TooltipContent.vue
@@ -3,7 +3,7 @@ import type { TooltipContentEmits, TooltipContentProps } from "reka-ui";
import type { HTMLAttributes } from "vue";
import { reactiveOmit } from "@vueuse/core";
import { TooltipArrow, TooltipContent, TooltipPortal, useForwardPropsEmits } from "reka-ui";
-import { cn } from "@/lib/utils";
+import { cn } from "@/lib/common/utils";
defineOptions({
inheritAttrs: false,
diff --git a/apps/desktop/src/components/vector/VectorBrowser.vue b/apps/desktop/src/components/vector/VectorBrowser.vue
index 5da498d91..c4c897ba1 100644
--- a/apps/desktop/src/components/vector/VectorBrowser.vue
+++ b/apps/desktop/src/components/vector/VectorBrowser.vue
@@ -5,8 +5,8 @@ import { useI18n } from "vue-i18n";
import { Button } from "@/components/ui/button";
import ErrorBanner from "@/components/ui/ErrorBanner.vue";
import QueryLoadingState from "@/components/common/QueryLoadingState.vue";
-import * as api from "@/lib/api";
-import { uuid } from "@/lib/utils";
+import * as api from "@/lib/backend/api";
+import { uuid } from "@/lib/common/utils";
import type { DatabaseType, QueryResult } from "@/types/database";
const DataGrid = defineAsyncComponent(() => import("@/components/grid/DataGrid.vue"));
diff --git a/apps/desktop/src/components/zookeeper/ZooKeeperKeyBrowser.vue b/apps/desktop/src/components/zookeeper/ZooKeeperKeyBrowser.vue
index a3a9d6468..0707b233b 100644
--- a/apps/desktop/src/components/zookeeper/ZooKeeperKeyBrowser.vue
+++ b/apps/desktop/src/components/zookeeper/ZooKeeperKeyBrowser.vue
@@ -2,8 +2,8 @@
import { computed, ref } from "vue";
import { useI18n } from "vue-i18n";
import KvKeyBrowser from "@/components/kv/KvKeyBrowser.vue";
-import * as api from "@/lib/api";
-import type { KvCreateMode } from "@/lib/api";
+import * as api from "@/lib/backend/api";
+import type { KvCreateMode } from "@/lib/backend/api";
const props = defineProps<{ connectionId: string }>();
diff --git a/apps/desktop/src/composables/useAppUpdater.ts b/apps/desktop/src/composables/useAppUpdater.ts
index 941d39c77..1e3a89193 100644
--- a/apps/desktop/src/composables/useAppUpdater.ts
+++ b/apps/desktop/src/composables/useAppUpdater.ts
@@ -1,11 +1,11 @@
import { computed, ref } from "vue";
import { useI18n } from "vue-i18n";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
import { useToast } from "@/composables/useToast";
-import * as api from "@/lib/api";
+import * as api from "@/lib/backend/api";
import { useSettingsStore } from "@/stores/settingsStore";
import type { UpdateDownloadSource as SettingsUpdateDownloadSource } from "@/stores/settingsStore";
-import type { UpdateDownloadProgress } from "@/lib/tauri";
+import type { UpdateDownloadProgress } from "@/lib/backend/tauri";
export function shouldOpenUpdateDialog(options: { silent?: boolean }) {
return options.silent !== true;
diff --git a/apps/desktop/src/composables/useCellDetailEditor.ts b/apps/desktop/src/composables/useCellDetailEditor.ts
index e3eb749b7..36357754e 100644
--- a/apps/desktop/src/composables/useCellDetailEditor.ts
+++ b/apps/desktop/src/composables/useCellDetailEditor.ts
@@ -5,16 +5,16 @@ import { json } from "@codemirror/lang-json";
import { search as cmSearch } from "@codemirror/search";
import { defaultKeymap, history, historyKeymap } from "@codemirror/commands";
import { bracketMatching } from "@codemirror/language";
-import { trimmedSelectionLayer } from "@/lib/codemirrorTrimmedSelectionLayer";
-import { EDITOR_FONT_FAMILY_CSS_VAR, EDITOR_FONT_SIZE_CSS_VAR, cellDetailActiveLineColor, loadEditorTheme, editorFontTheme } from "@/lib/editorThemes";
-import { shortcutToCodeMirrorKey } from "@/lib/shortcutRegistry";
+import { trimmedSelectionLayer } from "@/lib/editor/codemirrorTrimmedSelectionLayer";
+import { EDITOR_FONT_FAMILY_CSS_VAR, EDITOR_FONT_SIZE_CSS_VAR, cellDetailActiveLineColor, loadEditorTheme, editorFontTheme } from "@/lib/editor/editorThemes";
+import { shortcutToCodeMirrorKey } from "@/lib/editor/shortcutRegistry";
import { useSettingsStore } from "@/stores/settingsStore";
-import { CELL_DETAIL_JSON_FORMAT_MAX_LENGTH, isJsonColumnType } from "@/lib/cellDetailPresentation";
-import { clampEditorFontSize, createEditorZoomCommitScheduler, fontSizeFromGestureScale, fontSizeFromWheelDelta } from "@/lib/editorZoom";
+import { CELL_DETAIL_JSON_FORMAT_MAX_LENGTH, isJsonColumnType } from "@/lib/dataGrid/cellDetailPresentation";
+import { clampEditorFontSize, createEditorZoomCommitScheduler, fontSizeFromGestureScale, fontSizeFromWheelDelta } from "@/lib/editor/editorZoom";
import i18n from "@/i18n";
import EditorSearchPanel from "@/components/editor/EditorSearchPanel.vue";
import type { EditorTheme } from "@/stores/settingsStore";
-import type { AppThemeAppearance } from "@/lib/appTheme";
+import type { AppThemeAppearance } from "@/lib/app/appTheme";
export interface UseCellDetailEditorOptions {
onChange?: (value: string) => void;
diff --git a/apps/desktop/src/composables/useCloseActionPrompt.ts b/apps/desktop/src/composables/useCloseActionPrompt.ts
index f48389749..f128f7ce9 100644
--- a/apps/desktop/src/composables/useCloseActionPrompt.ts
+++ b/apps/desktop/src/composables/useCloseActionPrompt.ts
@@ -1,7 +1,7 @@
import { ref } from "vue";
import { useSettingsStore } from "@/stores/settingsStore";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
-import * as api from "@/lib/api";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
+import * as api from "@/lib/backend/api";
export type AppCloseAction = "quit" | "hide";
type AppCloseRequestTarget = "settings" | "quit";
diff --git a/apps/desktop/src/composables/useDataGridActions.ts b/apps/desktop/src/composables/useDataGridActions.ts
index 05b41af04..697d72850 100644
--- a/apps/desktop/src/composables/useDataGridActions.ts
+++ b/apps/desktop/src/composables/useDataGridActions.ts
@@ -3,16 +3,16 @@ import { useI18n } from "vue-i18n";
import { useConnectionStore } from "@/stores/connectionStore";
import { useQueryStore } from "@/stores/queryStore";
import { useSettingsStore } from "@/stores/settingsStore";
-import { buildTableSelectSql, quoteTableIdentifier } from "@/lib/tableSelectSql";
-import { editableRowIdentifierColumns, usesSyntheticRowIdKey } from "@/lib/tableEditing";
-import { tableMetaForDataTab } from "@/lib/tableDataTabMeta";
-import * as api from "@/lib/api";
+import { buildTableSelectSql, quoteTableIdentifier } from "@/lib/table/tableSelectSql";
+import { editableRowIdentifierColumns, usesSyntheticRowIdKey } from "@/lib/table/tableEditing";
+import { tableMetaForDataTab } from "@/lib/table/tableDataTabMeta";
+import * as api from "@/lib/backend/api";
import type { QueryTab } from "@/types/database";
import { useToast } from "@/composables/useToast";
-import { effectiveDatabaseTypeForConnection, metadataSchemaForConnection } from "@/lib/jdbcDialect";
-import { applyMongoFindSort } from "@/lib/mongoShellCommand";
-import { uuid } from "@/lib/utils";
-import type { DataGridSortMode } from "@/lib/dataGridSort";
+import { effectiveDatabaseTypeForConnection, metadataSchemaForConnection } from "@/lib/database/jdbcDialect";
+import { applyMongoFindSort } from "@/lib/mongo/mongoShellCommand";
+import { uuid } from "@/lib/common/utils";
+import type { DataGridSortMode } from "@/lib/dataGrid/dataGridSort";
const DATA_TAB_METADATA_TTL_MS = 30_000;
diff --git a/apps/desktop/src/composables/useDataGridColumnResize.ts b/apps/desktop/src/composables/useDataGridColumnResize.ts
index c6c151732..784db2ba6 100644
--- a/apps/desktop/src/composables/useDataGridColumnResize.ts
+++ b/apps/desktop/src/composables/useDataGridColumnResize.ts
@@ -1,6 +1,6 @@
import { ref, computed, watch, type ComputedRef, type Ref } from "vue";
import { useElementSize } from "@vueuse/core";
-import { calculateDataGridColumnWidth, DATA_GRID_AUTO_FIT_VALUE_TEXT_LIMIT, DATA_GRID_COL_AUTO_FIT_MAX_WIDTH, DATA_GRID_COL_MIN_WIDTH, DATA_GRID_SAMPLE_ROWS } from "@/lib/dataGridColumnWidth";
+import { calculateDataGridColumnWidth, DATA_GRID_AUTO_FIT_VALUE_TEXT_LIMIT, DATA_GRID_COL_AUTO_FIT_MAX_WIDTH, DATA_GRID_COL_MIN_WIDTH, DATA_GRID_SAMPLE_ROWS } from "@/lib/dataGrid/dataGridColumnWidth";
type CellValue = string | number | boolean | null;
diff --git a/apps/desktop/src/composables/useDataGridEditor.ts b/apps/desktop/src/composables/useDataGridEditor.ts
index edaf39df5..d85e03110 100644
--- a/apps/desktop/src/composables/useDataGridEditor.ts
+++ b/apps/desktop/src/composables/useDataGridEditor.ts
@@ -1,15 +1,15 @@
import { ref, computed, nextTick, watch, getCurrentInstance, onActivated, onBeforeUnmount, onDeactivated, onMounted, type ComputedRef, type Ref } from "vue";
-import * as api from "@/lib/api";
-import type { CellValue } from "@/lib/cellValue";
-import { coerceDataGridCellValue, dataGridCellEditorText } from "@/lib/dataGridCellCoercion";
-import { normalizeDataGridSaveError } from "@/lib/dataGridSql";
-import { rowStatusFilterAfterAddingRow, type RowStatusFilter } from "@/lib/gridRowStatus";
-import { supportsDataGridTransaction } from "@/lib/tableEditing";
+import * as api from "@/lib/backend/api";
+import type { CellValue } from "@/lib/dataGrid/cellValue";
+import { coerceDataGridCellValue, dataGridCellEditorText } from "@/lib/dataGrid/dataGridCellCoercion";
+import { normalizeDataGridSaveError } from "@/lib/dataGrid/dataGridSql";
+import { rowStatusFilterAfterAddingRow, type RowStatusFilter } from "@/lib/dataGrid/gridRowStatus";
+import { supportsDataGridTransaction } from "@/lib/table/tableEditing";
import { useConnectionStore } from "@/stores/connectionStore";
import { useHistoryStore } from "@/stores/historyStore";
import type { ColumnInfo, DatabaseType } from "@/types/database";
-import { DBX_NEO4J_ELEMENT_ID_COLUMN, DBX_ROWID_COLUMN } from "@/lib/tableEditing";
-import { effectiveDatabaseTypeForConnection } from "@/lib/jdbcDialect";
+import { DBX_NEO4J_ELEMENT_ID_COLUMN, DBX_ROWID_COLUMN } from "@/lib/table/tableEditing";
+import { effectiveDatabaseTypeForConnection } from "@/lib/database/jdbcDialect";
interface RowItem {
id: number;
diff --git a/apps/desktop/src/composables/useDataGridExport.ts b/apps/desktop/src/composables/useDataGridExport.ts
index 662284f55..a354c9fe8 100644
--- a/apps/desktop/src/composables/useDataGridExport.ts
+++ b/apps/desktop/src/composables/useDataGridExport.ts
@@ -1,20 +1,20 @@
import { computed, ref, type ComputedRef, type Ref } from "vue";
import { useI18n } from "vue-i18n";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
-import * as api from "@/lib/api";
-import { formatSelectionAsCsv, formatSelectionAsJson, formatSelectionAsSqlInList, formatSelectionAsTsv, type CellSelectionRange, type SelectionData } from "@/lib/gridSelection";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
+import * as api from "@/lib/backend/api";
+import { formatSelectionAsCsv, formatSelectionAsJson, formatSelectionAsSqlInList, formatSelectionAsTsv, type CellSelectionRange, type SelectionData } from "@/lib/dataGrid/gridSelection";
import { useToast } from "@/composables/useToast";
-import { displayCellValue, type CellValue } from "@/lib/cellValue";
-import { tryStartExclusiveActivation, type ActionActivationGuard } from "@/lib/actionActivation";
-import { copyToClipboard } from "@/lib/clipboard";
-import { buildDataGridCopyInsertStatement, buildDataGridCopyUpdateStatements, type DataGridTableMeta } from "@/lib/dataGridSql";
-import { formatSqlInsert } from "@/lib/exportFormats";
-import { uuid } from "@/lib/utils";
+import { displayCellValue, type CellValue } from "@/lib/dataGrid/cellValue";
+import { tryStartExclusiveActivation, type ActionActivationGuard } from "@/lib/connection/actionActivation";
+import { copyToClipboard } from "@/lib/common/clipboard";
+import { buildDataGridCopyInsertStatement, buildDataGridCopyUpdateStatements, type DataGridTableMeta } from "@/lib/dataGrid/dataGridSql";
+import { formatSqlInsert } from "@/lib/export/exportFormats";
+import { uuid } from "@/lib/common/utils";
import { useSettingsStore } from "@/stores/settingsStore";
-import { expandNestedJsonStringsForCopy } from "@/lib/jsonCopyValue";
-import { buildMongoCopyInsertDocument, formatMongoShellLiteral, type MongoInputValue } from "@/lib/mongoDocumentValues";
+import { expandNestedJsonStringsForCopy } from "@/lib/common/jsonCopyValue";
+import { buildMongoCopyInsertDocument, formatMongoShellLiteral, type MongoInputValue } from "@/lib/mongo/mongoDocumentValues";
import type { DatabaseType, QueryResult } from "@/types/database";
-import type { QueryResultExportRequest } from "@/lib/api";
+import type { QueryResultExportRequest } from "@/lib/backend/api";
interface RowItem {
id: number;
diff --git a/apps/desktop/src/composables/useDataGridSelection.ts b/apps/desktop/src/composables/useDataGridSelection.ts
index dc7ff8da3..7fac596dd 100644
--- a/apps/desktop/src/composables/useDataGridSelection.ts
+++ b/apps/desktop/src/composables/useDataGridSelection.ts
@@ -1,5 +1,5 @@
import { ref, computed, type ComputedRef, type Ref } from "vue";
-import { allCellsSelectionRange, extractColumnsSelection, extractSelection, isCellInSelection, normalizeSelectionRange, normalizeSelectedColumnIndexes, rowSelectionRange, type CellPosition, type CellSelectionRange, type SelectionData } from "@/lib/gridSelection";
+import { allCellsSelectionRange, extractColumnsSelection, extractSelection, isCellInSelection, normalizeSelectionRange, normalizeSelectedColumnIndexes, rowSelectionRange, type CellPosition, type CellSelectionRange, type SelectionData } from "@/lib/dataGrid/gridSelection";
type CellValue = string | number | boolean | null;
diff --git a/apps/desktop/src/composables/useDatabaseOptions.ts b/apps/desktop/src/composables/useDatabaseOptions.ts
index 1497bba44..409295a19 100644
--- a/apps/desktop/src/composables/useDatabaseOptions.ts
+++ b/apps/desktop/src/composables/useDatabaseOptions.ts
@@ -1,9 +1,9 @@
import { ref } from "vue";
import { useConnectionStore } from "@/stores/connectionStore";
-import { filterDatabaseNamesForConnection } from "@/lib/visibleDatabases";
-import { usesTreeSchemaMode } from "@/lib/databaseCapabilities";
+import { filterDatabaseNamesForConnection } from "@/lib/database/visibleDatabases";
+import { usesTreeSchemaMode } from "@/lib/database/databaseCapabilities";
import type { ConnectionConfig } from "@/types/database";
-import * as api from "@/lib/api";
+import * as api from "@/lib/backend/api";
export function databaseOptionsForConnection(databaseNames: string[], connection: Pick | undefined): string[] {
const names = filterDatabaseNamesForConnection(databaseNames, connection);
diff --git a/apps/desktop/src/composables/useEditorFontFamilyStyle.ts b/apps/desktop/src/composables/useEditorFontFamilyStyle.ts
index d455d4ef4..5be142359 100644
--- a/apps/desktop/src/composables/useEditorFontFamilyStyle.ts
+++ b/apps/desktop/src/composables/useEditorFontFamilyStyle.ts
@@ -1,5 +1,5 @@
import { computed } from "vue";
-import { EDITOR_FONT_FAMILY_CSS_VAR } from "@/lib/editorThemes";
+import { EDITOR_FONT_FAMILY_CSS_VAR } from "@/lib/editor/editorThemes";
import { useSettingsStore } from "@/stores/settingsStore";
export function useEditorFontFamilyStyle() {
diff --git a/apps/desktop/src/composables/useExportTracker.ts b/apps/desktop/src/composables/useExportTracker.ts
index 323f371b2..d41a91f69 100644
--- a/apps/desktop/src/composables/useExportTracker.ts
+++ b/apps/desktop/src/composables/useExportTracker.ts
@@ -1,5 +1,5 @@
import { reactive, computed } from "vue";
-import * as api from "@/lib/api";
+import * as api from "@/lib/backend/api";
export type BackgroundTaskKind = "table-export" | "database-export" | "sql-file" | "data-transfer";
export type BackgroundTaskStatus = "Running" | "Writing" | "Done" | "Error" | "Cancelled";
diff --git a/apps/desktop/src/composables/useFileDrop.ts b/apps/desktop/src/composables/useFileDrop.ts
index 564f4e44b..c3039a28d 100644
--- a/apps/desktop/src/composables/useFileDrop.ts
+++ b/apps/desktop/src/composables/useFileDrop.ts
@@ -1,12 +1,12 @@
import { useI18n } from "vue-i18n";
-import { uuid } from "@/lib/utils";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
+import { uuid } from "@/lib/common/utils";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
import { useConnectionStore } from "@/stores/connectionStore";
import { useQueryStore } from "@/stores/queryStore";
import { useToast } from "@/composables/useToast";
-import * as api from "@/lib/api";
+import * as api from "@/lib/backend/api";
import type { ConnectionConfig } from "@/types/database";
-import { detectDatabaseFileType } from "@/lib/databaseFileDetection";
+import { detectDatabaseFileType } from "@/lib/database/databaseFileDetection";
function isSqlFilePath(path: string): boolean {
return /\.sql$/i.test(path);
diff --git a/apps/desktop/src/composables/useNavigationTargets.ts b/apps/desktop/src/composables/useNavigationTargets.ts
index d75e4570d..52a1b0b92 100644
--- a/apps/desktop/src/composables/useNavigationTargets.ts
+++ b/apps/desktop/src/composables/useNavigationTargets.ts
@@ -1,9 +1,9 @@
-import * as api from "@/lib/api";
-import { effectiveDatabaseTypeForConnection, metadataSchemaForConnection } from "@/lib/jdbcDialect";
-import { isNoSnapshotErrorResult } from "@/lib/queryResultError";
-import { buildTableSelectSql } from "@/lib/tableSelectSql";
-import { editableRowIdentifierColumns, usesSyntheticRowIdKey } from "@/lib/tableEditing";
-import { tableOpenPageLimit } from "@/lib/tableOpenPageLimit";
+import * as api from "@/lib/backend/api";
+import { effectiveDatabaseTypeForConnection, metadataSchemaForConnection } from "@/lib/database/jdbcDialect";
+import { isNoSnapshotErrorResult } from "@/lib/query/queryResultError";
+import { buildTableSelectSql } from "@/lib/table/tableSelectSql";
+import { editableRowIdentifierColumns, usesSyntheticRowIdKey } from "@/lib/table/tableEditing";
+import { tableOpenPageLimit } from "@/lib/table/tableOpenPageLimit";
import { useConnectionStore } from "@/stores/connectionStore";
import { useQueryStore } from "@/stores/queryStore";
import { useSettingsStore } from "@/stores/settingsStore";
diff --git a/apps/desktop/src/composables/usePanelResize.ts b/apps/desktop/src/composables/usePanelResize.ts
index 15c5063a4..b9465b060 100644
--- a/apps/desktop/src/composables/usePanelResize.ts
+++ b/apps/desktop/src/composables/usePanelResize.ts
@@ -1,5 +1,5 @@
import { ref, type Ref } from "vue";
-import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/safeStorage";
+import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/backend/safeStorage";
export function usePanelResize() {
const sidebarWidth = ref(Number(safeLocalStorageGet("dbx-sidebar-width")) || 260);
diff --git a/apps/desktop/src/composables/useSchemaDiffConfig.ts b/apps/desktop/src/composables/useSchemaDiffConfig.ts
index 2a84eee83..23f27b61b 100644
--- a/apps/desktop/src/composables/useSchemaDiffConfig.ts
+++ b/apps/desktop/src/composables/useSchemaDiffConfig.ts
@@ -1,5 +1,5 @@
import { ref, computed, watch } from "vue";
-import { uuid } from "@/lib/utils";
+import { uuid } from "@/lib/common/utils";
import type { SchemaDiffConfig, SchemaDiffCompareOptions } from "@/types/schemaDiff";
import { createEmptyConfig, getDefaultOptionsForDbType } from "@/types/schemaDiff";
diff --git a/apps/desktop/src/composables/useSchemaOptions.ts b/apps/desktop/src/composables/useSchemaOptions.ts
index 394d7de8c..cc204ddfd 100644
--- a/apps/desktop/src/composables/useSchemaOptions.ts
+++ b/apps/desktop/src/composables/useSchemaOptions.ts
@@ -1,9 +1,9 @@
import { ref } from "vue";
import { useConnectionStore } from "@/stores/connectionStore";
-import { isSchemaAware as isSchemaAwareType, isSingleDatabase, usesTreeSchemaMode } from "@/lib/databaseCapabilities";
-import { filterSchemaNamesForConnection } from "@/lib/visibleDatabases";
+import { isSchemaAware as isSchemaAwareType, isSingleDatabase, usesTreeSchemaMode } from "@/lib/database/databaseCapabilities";
+import { filterSchemaNamesForConnection } from "@/lib/database/visibleDatabases";
import type { ConnectionConfig } from "@/types/database";
-import * as api from "@/lib/api";
+import * as api from "@/lib/backend/api";
export function hasSchemaOptionsCacheEntry(options: Record, key: string): boolean {
return Object.prototype.hasOwnProperty.call(options, key);
diff --git a/apps/desktop/src/composables/useSqlExecution.ts b/apps/desktop/src/composables/useSqlExecution.ts
index 1535e55cb..5bac5e381 100644
--- a/apps/desktop/src/composables/useSqlExecution.ts
+++ b/apps/desktop/src/composables/useSqlExecution.ts
@@ -5,13 +5,13 @@ import { useHistoryStore } from "@/stores/historyStore";
import { useConnectionStore } from "@/stores/connectionStore";
import { useSettingsStore } from "@/stores/settingsStore";
import { useToast } from "@/composables/useToast";
-import { isSingleDatabase } from "@/lib/databaseCapabilities";
-import { canExecuteWithoutSelectedDatabase } from "@/lib/connectionLevelDatabaseBootstrap";
-import { classifySqlActivityKind } from "@/lib/historyActivityKind";
-import { sqlMetadataRefreshTarget } from "@/lib/sqlMetadataRefresh";
-import { classifyRedisCommandSafety, firstRedisCommandToken } from "@/lib/redisCommandSafety";
-import { isSqlExecutionSnapshot, resolveExecutableSql, type SqlExecutionOverride, type SqlExecutionSnapshot } from "@/lib/sqlExecutionTarget";
-import { extractSqlParameters } from "@/lib/sqlParameters";
+import { isSingleDatabase } from "@/lib/database/databaseCapabilities";
+import { canExecuteWithoutSelectedDatabase } from "@/lib/connection/connectionLevelDatabaseBootstrap";
+import { classifySqlActivityKind } from "@/lib/history/historyActivityKind";
+import { sqlMetadataRefreshTarget } from "@/lib/sql/sqlMetadataRefresh";
+import { classifyRedisCommandSafety, firstRedisCommandToken } from "@/lib/redis/redisCommandSafety";
+import { isSqlExecutionSnapshot, resolveExecutableSql, type SqlExecutionOverride, type SqlExecutionSnapshot } from "@/lib/sql/sqlExecutionTarget";
+import { extractSqlParameters } from "@/lib/sql/sqlParameters";
import type { ConnectionConfig, QueryTab } from "@/types/database";
const DANGER_RE = /^\s*(DROP|DELETE|TRUNCATE|ALTER|UPDATE|MERGE|REPLACE)\b/i;
diff --git a/apps/desktop/src/composables/useSqlHighlighter.ts b/apps/desktop/src/composables/useSqlHighlighter.ts
index 7ad5b248f..454a8e84f 100644
--- a/apps/desktop/src/composables/useSqlHighlighter.ts
+++ b/apps/desktop/src/composables/useSqlHighlighter.ts
@@ -1,6 +1,6 @@
import { onMounted, ref } from "vue";
import { useTheme } from "@/composables/useTheme";
-import { type SqlHighlighter, createShikiSqlHighlighter } from "@/lib/sqlHighlighter";
+import { type SqlHighlighter, createShikiSqlHighlighter } from "@/lib/sql/sqlHighlighter";
export function useSqlHighlighter() {
const { isDark } = useTheme();
diff --git a/apps/desktop/src/composables/useTheme.ts b/apps/desktop/src/composables/useTheme.ts
index 903308a1c..ca973a01e 100644
--- a/apps/desktop/src/composables/useTheme.ts
+++ b/apps/desktop/src/composables/useTheme.ts
@@ -1,7 +1,7 @@
import { computed, ref } from "vue";
-import { APP_THEME_STORAGE_KEY, getTauriThemeForMode, normalizeAppThemeMode, resolveAppThemeAppearance, type AppThemeMode } from "@/lib/appTheme";
-import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/safeStorage";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
+import { APP_THEME_STORAGE_KEY, getTauriThemeForMode, normalizeAppThemeMode, resolveAppThemeAppearance, type AppThemeMode } from "@/lib/app/appTheme";
+import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/backend/safeStorage";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
const themeMode = ref(normalizeAppThemeMode(safeLocalStorageGet(APP_THEME_STORAGE_KEY)));
const systemPrefersDark = ref(readSystemPrefersDark());
diff --git a/apps/desktop/src/composables/useVisibilityChange.ts b/apps/desktop/src/composables/useVisibilityChange.ts
index 7bb8603d7..801aa790d 100644
--- a/apps/desktop/src/composables/useVisibilityChange.ts
+++ b/apps/desktop/src/composables/useVisibilityChange.ts
@@ -1,5 +1,5 @@
import { onMounted, onUnmounted } from "vue";
-import { refreshConnections } from "@/lib/api";
+import { refreshConnections } from "@/lib/backend/api";
import { useQueryStore } from "@/stores/queryStore";
let hiddenAt: number | null = null;
diff --git a/apps/desktop/src/composables/useWebDavAutoUpload.ts b/apps/desktop/src/composables/useWebDavAutoUpload.ts
index 2de8b1c56..b31893858 100644
--- a/apps/desktop/src/composables/useWebDavAutoUpload.ts
+++ b/apps/desktop/src/composables/useWebDavAutoUpload.ts
@@ -1,8 +1,8 @@
import { onMounted, onUnmounted } from "vue";
import { useSettingsStore } from "@/stores/settingsStore";
-import { appendDebugLog } from "@/lib/debugLog";
-import { webdavSyncUpload } from "@/lib/api";
-import { readWebDavAutoUploadConfig, WEB_DAV_AUTO_UPLOAD_STORAGE_KEYS } from "@/lib/webdavAutoUploadConfig";
+import { appendDebugLog } from "@/lib/backend/debugLog";
+import { webdavSyncUpload } from "@/lib/backend/api";
+import { readWebDavAutoUploadConfig, WEB_DAV_AUTO_UPLOAD_STORAGE_KEYS } from "@/lib/webdav/webdavAutoUploadConfig";
export function useWebDavAutoUpload() {
const settingsStore = useSettingsStore();
diff --git a/apps/desktop/src/composables/useWindowControls.ts b/apps/desktop/src/composables/useWindowControls.ts
index 447257815..0917d94d7 100644
--- a/apps/desktop/src/composables/useWindowControls.ts
+++ b/apps/desktop/src/composables/useWindowControls.ts
@@ -1,7 +1,7 @@
import { ref, onMounted, onUnmounted } from "vue";
-import { isTauriRuntime } from "@/lib/tauriRuntime";
-import { isMacOS } from "@/lib/platform";
-import * as api from "@/lib/api";
+import { isTauriRuntime } from "@/lib/backend/tauriRuntime";
+import { isMacOS } from "@/lib/backend/platform";
+import * as api from "@/lib/backend/api";
export function shouldReserveMacTrafficLightInset(isMac: boolean, isFullscreen: boolean, isDesktop = true): boolean {
return isDesktop && isMac && !isFullscreen;
diff --git a/apps/desktop/src/i18n/index.ts b/apps/desktop/src/i18n/index.ts
index 8471cb642..896cf78f4 100644
--- a/apps/desktop/src/i18n/index.ts
+++ b/apps/desktop/src/i18n/index.ts
@@ -1,6 +1,6 @@
import { createI18n } from "vue-i18n";
import en from "./locales/en";
-import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/safeStorage";
+import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/backend/safeStorage";
export type Locale = "en" | "es" | "it" | "ja" | "pt-BR" | "zh-CN" | "zh-TW";
type LocaleMessages = Record;
diff --git a/apps/desktop/src/lib/README.md b/apps/desktop/src/lib/README.md
new file mode 100644
index 000000000..2796f0d09
--- /dev/null
+++ b/apps/desktop/src/lib/README.md
@@ -0,0 +1,15 @@
+# Desktop Library Layout
+
+`src/lib` is organized by product/runtime domain. Keep implementation modules inside a domain folder instead of adding new files at the root.
+
+- `backend`: Tauri, HTTP, platform, storage, and transport bridges.
+- `common`: generic helpers with no DBX feature ownership.
+- `app`, `tabs`, `sidebar`, `connection`: shell, navigation, and connection UI state helpers.
+- `database`, `metadata`, `schema`, `table`: relational database metadata, capabilities, DDL, and table-object helpers.
+- `sql`, `sql/semantic`, `editor`, `query`, `history`, `savedSql`: SQL editing, execution, diagnostics, history, and saved SQL behavior.
+- `dataGrid`: result/grid rendering, editing, previews, pagination, and export helpers tied to the grid.
+- `ai`, `mcp`: AI assistant and MCP configuration helpers.
+- `redis`, `mongo`, `elasticsearch`, `etcd`, `kv`, `mq`, `nacos`, `zookeeper`, `webdav`: non-relational or service-specific helpers.
+- `diagram`, `document`, `export`, `imports`: feature-specific utilities that are shared by more than one component.
+
+Tests under `src/lib/__tests__` mirror the same domain folders. When moving a module, update both runtime imports and colocated tests so stale root-level aliases do not return.
diff --git a/apps/desktop/src/lib/__tests__/ai.spec.ts b/apps/desktop/src/lib/__tests__/ai/ai.spec.ts
similarity index 92%
rename from apps/desktop/src/lib/__tests__/ai.spec.ts
rename to apps/desktop/src/lib/__tests__/ai/ai.spec.ts
index d91590a33..233552216 100644
--- a/apps/desktop/src/lib/__tests__/ai.spec.ts
+++ b/apps/desktop/src/lib/__tests__/ai/ai.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { buildSystemPrompt, type AiContext } from "@/lib/ai";
+import { buildSystemPrompt, type AiContext } from "@/lib/ai/ai";
function context(overrides: Partial = {}): AiContext {
return {
diff --git a/apps/desktop/src/lib/__tests__/aiMarkdown.spec.ts b/apps/desktop/src/lib/__tests__/ai/aiMarkdown.spec.ts
similarity index 99%
rename from apps/desktop/src/lib/__tests__/aiMarkdown.spec.ts
rename to apps/desktop/src/lib/__tests__/ai/aiMarkdown.spec.ts
index 2dc77a5c2..212cf10fe 100644
--- a/apps/desktop/src/lib/__tests__/aiMarkdown.spec.ts
+++ b/apps/desktop/src/lib/__tests__/ai/aiMarkdown.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { aiMarkdownLinkUrlFromClick, formatAiInlineMarkdown, handleAiMarkdownLinkClick, normalizeAiMarkdownLink } from "@/lib/aiMarkdown";
+import { aiMarkdownLinkUrlFromClick, formatAiInlineMarkdown, handleAiMarkdownLinkClick, normalizeAiMarkdownLink } from "@/lib/ai/aiMarkdown";
describe("formatAiInlineMarkdown", () => {
it("renders http links for external browser handling", () => {
diff --git a/apps/desktop/src/lib/__tests__/aiMessageEdit.spec.ts b/apps/desktop/src/lib/__tests__/ai/aiMessageEdit.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/aiMessageEdit.spec.ts
rename to apps/desktop/src/lib/__tests__/ai/aiMessageEdit.spec.ts
index 8f90553e3..859044e72 100644
--- a/apps/desktop/src/lib/__tests__/aiMessageEdit.spec.ts
+++ b/apps/desktop/src/lib/__tests__/ai/aiMessageEdit.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { visibleToActualIndex } from "@/lib/aiMessageEdit";
+import { visibleToActualIndex } from "@/lib/ai/aiMessageEdit";
describe("visibleToActualIndex", () => {
it("maps visible index 0 to first non-summary message", () => {
diff --git a/apps/desktop/src/lib/__tests__/aiModelPresentation.spec.ts b/apps/desktop/src/lib/__tests__/ai/aiModelPresentation.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/aiModelPresentation.spec.ts
rename to apps/desktop/src/lib/__tests__/ai/aiModelPresentation.spec.ts
index b0b337c93..9fd61744b 100644
--- a/apps/desktop/src/lib/__tests__/aiModelPresentation.spec.ts
+++ b/apps/desktop/src/lib/__tests__/ai/aiModelPresentation.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { formatAiModelOption, shouldShowAiModelSecondaryLabel } from "@/lib/aiModelPresentation";
+import { formatAiModelOption, shouldShowAiModelSecondaryLabel } from "@/lib/ai/aiModelPresentation";
describe("shouldShowAiModelSecondaryLabel", () => {
it("hides secondary text when display name only changes case", () => {
diff --git a/apps/desktop/src/lib/__tests__/aiProposalDetect.spec.ts b/apps/desktop/src/lib/__tests__/ai/aiProposalDetect.spec.ts
similarity index 99%
rename from apps/desktop/src/lib/__tests__/aiProposalDetect.spec.ts
rename to apps/desktop/src/lib/__tests__/ai/aiProposalDetect.spec.ts
index a9804b5eb..cfe5b021f 100644
--- a/apps/desktop/src/lib/__tests__/aiProposalDetect.spec.ts
+++ b/apps/desktop/src/lib/__tests__/ai/aiProposalDetect.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { containsChinese, isShortAffirmative, isShortNegative, looksLikeActionProposal } from "@/lib/aiProposalDetect";
+import { containsChinese, isShortAffirmative, isShortNegative, looksLikeActionProposal } from "@/lib/ai/aiProposalDetect";
describe("looksLikeActionProposal", () => {
// ---- zh-CN proposals ----
diff --git a/apps/desktop/src/lib/__tests__/aiTableMentions.spec.ts b/apps/desktop/src/lib/__tests__/ai/aiTableMentions.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/aiTableMentions.spec.ts
rename to apps/desktop/src/lib/__tests__/ai/aiTableMentions.spec.ts
index 173ce4c35..51da0a8f5 100644
--- a/apps/desktop/src/lib/__tests__/aiTableMentions.spec.ts
+++ b/apps/desktop/src/lib/__tests__/ai/aiTableMentions.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { AI_TABLE_MENTION_CANDIDATE_LIMIT, filterAiTableMentionCandidates, formatAiTableMention, parseAiTableMentions } from "@/lib/aiTableMentions";
+import { AI_TABLE_MENTION_CANDIDATE_LIMIT, filterAiTableMentionCandidates, formatAiTableMention, parseAiTableMentions } from "@/lib/ai/aiTableMentions";
describe("AI table mention parsing", () => {
it("parses plain and schema-qualified table mentions", () => {
diff --git a/apps/desktop/src/lib/__tests__/pinnedItems.spec.ts b/apps/desktop/src/lib/__tests__/app/pinnedItems.spec.ts
similarity index 92%
rename from apps/desktop/src/lib/__tests__/pinnedItems.spec.ts
rename to apps/desktop/src/lib/__tests__/app/pinnedItems.spec.ts
index 7ce3b5751..b7ba65ca2 100644
--- a/apps/desktop/src/lib/__tests__/pinnedItems.spec.ts
+++ b/apps/desktop/src/lib/__tests__/app/pinnedItems.spec.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
-import { updatePinnedTreeNodeInPlace } from "@/lib/pinnedItems";
-import { buildTreeNodesFromLayout } from "@/lib/sidebarLayout";
+import { updatePinnedTreeNodeInPlace } from "@/lib/app/pinnedItems";
+import { buildTreeNodesFromLayout } from "@/lib/sidebar/sidebarLayout";
import type { ConnectionConfig, SidebarLayout, TreeNode } from "@/types/database";
describe("sidebar pinned tree nodes", () => {
diff --git a/apps/desktop/src/lib/__tests__/ttlFormat.spec.ts b/apps/desktop/src/lib/__tests__/common/ttlFormat.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/ttlFormat.spec.ts
rename to apps/desktop/src/lib/__tests__/common/ttlFormat.spec.ts
index 7284accd7..25f2faee7 100644
--- a/apps/desktop/src/lib/__tests__/ttlFormat.spec.ts
+++ b/apps/desktop/src/lib/__tests__/common/ttlFormat.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { formatTtl } from "@/lib/ttlFormat";
+import { formatTtl } from "@/lib/common/ttlFormat";
// ---------------------------------------------------------------------------
// Mock `t()` helpers — only the day unit needs localization
diff --git a/apps/desktop/src/lib/__tests__/webPath.spec.ts b/apps/desktop/src/lib/__tests__/common/webPath.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/webPath.spec.ts
rename to apps/desktop/src/lib/__tests__/common/webPath.spec.ts
index 41854e6b5..e6ea717a5 100644
--- a/apps/desktop/src/lib/__tests__/webPath.spec.ts
+++ b/apps/desktop/src/lib/__tests__/common/webPath.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { apiUrl, apiWebSocketUrl, dbxWebBasePath, webPath } from "@/lib/webPath";
+import { apiUrl, apiWebSocketUrl, dbxWebBasePath, webPath } from "@/lib/common/webPath";
describe("webPath", () => {
it("keeps root deployments on root-relative API paths", () => {
diff --git a/apps/desktop/src/lib/__tests__/connectionAttemptTimeout.spec.ts b/apps/desktop/src/lib/__tests__/connection/connectionAttemptTimeout.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/connectionAttemptTimeout.spec.ts
rename to apps/desktop/src/lib/__tests__/connection/connectionAttemptTimeout.spec.ts
index 2cda2f5ee..a447b52b3 100644
--- a/apps/desktop/src/lib/__tests__/connectionAttemptTimeout.spec.ts
+++ b/apps/desktop/src/lib/__tests__/connection/connectionAttemptTimeout.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { ACCESS_AGENT_MIN_CONNECT_TIMEOUT_SECS, AGENT_DRIVER_MIN_CONNECT_TIMEOUT_SECS, connectionAttemptOriginalErrorMessage, connectionAttemptTimeoutMessage, connectionAttemptTimeoutMs, CONNECTION_ATTEMPT_TIMEOUT_BUFFER_MS } from "@/lib/connectionAttemptTimeout";
+import { ACCESS_AGENT_MIN_CONNECT_TIMEOUT_SECS, AGENT_DRIVER_MIN_CONNECT_TIMEOUT_SECS, connectionAttemptOriginalErrorMessage, connectionAttemptTimeoutMessage, connectionAttemptTimeoutMs, CONNECTION_ATTEMPT_TIMEOUT_BUFFER_MS } from "@/lib/connection/connectionAttemptTimeout";
describe("connectionAttemptTimeout", () => {
it("uses a 10s default for regular database connections", () => {
diff --git a/apps/desktop/src/lib/__tests__/connectionOpenTarget.spec.ts b/apps/desktop/src/lib/__tests__/connection/connectionOpenTarget.spec.ts
similarity index 92%
rename from apps/desktop/src/lib/__tests__/connectionOpenTarget.spec.ts
rename to apps/desktop/src/lib/__tests__/connection/connectionOpenTarget.spec.ts
index a9c9e0692..50ebcf6cb 100644
--- a/apps/desktop/src/lib/__tests__/connectionOpenTarget.spec.ts
+++ b/apps/desktop/src/lib/__tests__/connection/connectionOpenTarget.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { quickConnectionOpenTarget } from "@/lib/connectionOpenTarget";
+import { quickConnectionOpenTarget } from "@/lib/connection/connectionOpenTarget";
import type { ConnectionConfig } from "@/types/database";
function connection(dbType: ConnectionConfig["db_type"]): ConnectionConfig {
diff --git a/apps/desktop/src/lib/__tests__/connectionUrl.dremio.spec.ts b/apps/desktop/src/lib/__tests__/connection/connectionUrl.dremio.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/connectionUrl.dremio.spec.ts
rename to apps/desktop/src/lib/__tests__/connection/connectionUrl.dremio.spec.ts
index af5315e57..7cf7da37e 100644
--- a/apps/desktop/src/lib/__tests__/connectionUrl.dremio.spec.ts
+++ b/apps/desktop/src/lib/__tests__/connection/connectionUrl.dremio.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { parseConnectionUrl } from "../connectionUrl";
+import { parseConnectionUrl } from "@/lib/connection/connectionUrl";
describe("Dremio JDBC connection URLs", () => {
it("parses legacy direct JDBC URLs into a Dremio JDBC profile", () => {
diff --git a/apps/desktop/src/lib/__tests__/connectionUrl.zookeeper.spec.ts b/apps/desktop/src/lib/__tests__/connection/connectionUrl.zookeeper.spec.ts
similarity index 80%
rename from apps/desktop/src/lib/__tests__/connectionUrl.zookeeper.spec.ts
rename to apps/desktop/src/lib/__tests__/connection/connectionUrl.zookeeper.spec.ts
index 30231aa0e..efd1c0683 100644
--- a/apps/desktop/src/lib/__tests__/connectionUrl.zookeeper.spec.ts
+++ b/apps/desktop/src/lib/__tests__/connection/connectionUrl.zookeeper.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { parseConnectionUrl } from "../connectionUrl";
+import { parseConnectionUrl } from "@/lib/connection/connectionUrl";
describe("ZooKeeper connection URLs", () => {
it("preserves the host:port chroot path as a ZooKeeper connect string", () => {
diff --git a/apps/desktop/src/lib/__tests__/chartData.spec.ts b/apps/desktop/src/lib/__tests__/dataGrid/chartData.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/chartData.spec.ts
rename to apps/desktop/src/lib/__tests__/dataGrid/chartData.spec.ts
index a6b21cdd6..825e46274 100644
--- a/apps/desktop/src/lib/__tests__/chartData.spec.ts
+++ b/apps/desktop/src/lib/__tests__/dataGrid/chartData.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { axisColumnLabel, chartableColumnIndexes, toChartNumber } from "@/lib/chartData";
+import { axisColumnLabel, chartableColumnIndexes, toChartNumber } from "@/lib/dataGrid/chartData";
import type { QueryResult } from "@/types/database";
function result(columns: string[], rows: QueryResult["rows"]): QueryResult {
diff --git a/apps/desktop/src/lib/__tests__/dataGridConditionSuggestionPosition.spec.ts b/apps/desktop/src/lib/__tests__/dataGrid/dataGridConditionSuggestionPosition.spec.ts
similarity index 95%
rename from apps/desktop/src/lib/__tests__/dataGridConditionSuggestionPosition.spec.ts
rename to apps/desktop/src/lib/__tests__/dataGrid/dataGridConditionSuggestionPosition.spec.ts
index f4ebf3204..26b6f0b64 100644
--- a/apps/desktop/src/lib/__tests__/dataGridConditionSuggestionPosition.spec.ts
+++ b/apps/desktop/src/lib/__tests__/dataGrid/dataGridConditionSuggestionPosition.spec.ts
@@ -1,6 +1,6 @@
import { describe, expect, test } from "vitest";
-import { getDataGridConditionSuggestionPosition } from "@/lib/dataGridConditionSuggestionPosition";
+import { getDataGridConditionSuggestionPosition } from "@/lib/dataGrid/dataGridConditionSuggestionPosition";
describe("getDataGridConditionSuggestionPosition", () => {
test("anchors the dropdown to the input instead of the caret", () => {
diff --git a/apps/desktop/src/lib/__tests__/geometryPreview.spec.ts b/apps/desktop/src/lib/__tests__/dataGrid/geometryPreview.spec.ts
similarity index 94%
rename from apps/desktop/src/lib/__tests__/geometryPreview.spec.ts
rename to apps/desktop/src/lib/__tests__/dataGrid/geometryPreview.spec.ts
index 3fc45f471..974146979 100644
--- a/apps/desktop/src/lib/__tests__/geometryPreview.spec.ts
+++ b/apps/desktop/src/lib/__tests__/dataGrid/geometryPreview.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { wktToGeoJson } from "@/lib/geometryPreview";
+import { wktToGeoJson } from "@/lib/dataGrid/geometryPreview";
describe("wktToGeoJson", () => {
it("preserves polygon interior rings", () => {
diff --git a/apps/desktop/src/lib/__tests__/gridSelection.spec.ts b/apps/desktop/src/lib/__tests__/dataGrid/gridSelection.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/gridSelection.spec.ts
rename to apps/desktop/src/lib/__tests__/dataGrid/gridSelection.spec.ts
index 3b536c4fb..eafc1a0fa 100644
--- a/apps/desktop/src/lib/__tests__/gridSelection.spec.ts
+++ b/apps/desktop/src/lib/__tests__/dataGrid/gridSelection.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { formatSelectionAsTsv, summarizeSelection } from "@/lib/gridSelection";
+import { formatSelectionAsTsv, summarizeSelection } from "@/lib/dataGrid/gridSelection";
describe("gridSelection", () => {
it("formats TSV selections without headers by default", () => {
diff --git a/apps/desktop/src/lib/__tests__/createDatabaseCharsetOptions.spec.ts b/apps/desktop/src/lib/__tests__/database/createDatabaseCharsetOptions.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/createDatabaseCharsetOptions.spec.ts
rename to apps/desktop/src/lib/__tests__/database/createDatabaseCharsetOptions.spec.ts
index 27230c06f..932719695 100644
--- a/apps/desktop/src/lib/__tests__/createDatabaseCharsetOptions.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/createDatabaseCharsetOptions.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { CREATE_DATABASE_CHARSET_OPTIONS, createDatabaseCollationOptionsForCharset, defaultCreateDatabaseCollationForCharset, normalizeCreateDatabaseCharset, parseCreateDatabaseCharsetMetadata, nextCreateDatabaseCollation } from "@/lib/createDatabaseCharsetOptions";
+import { CREATE_DATABASE_CHARSET_OPTIONS, createDatabaseCollationOptionsForCharset, defaultCreateDatabaseCollationForCharset, normalizeCreateDatabaseCharset, parseCreateDatabaseCharsetMetadata, nextCreateDatabaseCollation } from "@/lib/database/createDatabaseCharsetOptions";
describe("createDatabaseCharsetOptions", () => {
it("offers common MySQL character sets with utf8mb4 first", () => {
diff --git a/apps/desktop/src/lib/__tests__/databaseDriverManifest.spec.ts b/apps/desktop/src/lib/__tests__/database/databaseDriverManifest.spec.ts
similarity index 93%
rename from apps/desktop/src/lib/__tests__/databaseDriverManifest.spec.ts
rename to apps/desktop/src/lib/__tests__/database/databaseDriverManifest.spec.ts
index 0b0df42d1..946e2628f 100644
--- a/apps/desktop/src/lib/__tests__/databaseDriverManifest.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/databaseDriverManifest.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { databaseRuntimeMode, usesAgentCursorForQuery } from "@/lib/databaseDriverManifest";
+import { databaseRuntimeMode, usesAgentCursorForQuery } from "@/lib/database/databaseDriverManifest";
describe("databaseDriverManifest", () => {
it("uses agent cursor only for agent or external runtimes", () => {
diff --git a/apps/desktop/src/lib/__tests__/databaseFeatureSupport.spec.ts b/apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts
similarity index 93%
rename from apps/desktop/src/lib/__tests__/databaseFeatureSupport.spec.ts
rename to apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts
index d60c20d37..72eb19741 100644
--- a/apps/desktop/src/lib/__tests__/databaseFeatureSupport.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { supportsTransaction } from "@/lib/databaseFeatureSupport";
+import { supportsTransaction } from "@/lib/database/databaseFeatureSupport";
describe("supportsTransaction", () => {
it("returns true for supported database types", () => {
diff --git a/apps/desktop/src/lib/__tests__/databaseObjectCapabilities.spec.ts b/apps/desktop/src/lib/__tests__/database/databaseObjectCapabilities.spec.ts
similarity index 89%
rename from apps/desktop/src/lib/__tests__/databaseObjectCapabilities.spec.ts
rename to apps/desktop/src/lib/__tests__/database/databaseObjectCapabilities.spec.ts
index 1c397dd93..097f767b2 100644
--- a/apps/desktop/src/lib/__tests__/databaseObjectCapabilities.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/databaseObjectCapabilities.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { normalizeSidebarObjectKind, sidebarObjectKindsForDatabase } from "@/lib/databaseObjectCapabilities";
+import { normalizeSidebarObjectKind, sidebarObjectKindsForDatabase } from "@/lib/database/databaseObjectCapabilities";
describe("databaseObjectCapabilities", () => {
it("exposes materialized views for Dameng", () => {
diff --git a/apps/desktop/src/lib/__tests__/defaultDatabase.spec.ts b/apps/desktop/src/lib/__tests__/database/defaultDatabase.spec.ts
similarity index 95%
rename from apps/desktop/src/lib/__tests__/defaultDatabase.spec.ts
rename to apps/desktop/src/lib/__tests__/database/defaultDatabase.spec.ts
index c0c1784cb..de584c582 100644
--- a/apps/desktop/src/lib/__tests__/defaultDatabase.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/defaultDatabase.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { decodeSelectableDatabaseValue, EMPTY_DATABASE_SELECT_VALUE, encodeSelectableDatabaseValue, TREE_SCHEMA_DEFAULT_DATABASE_SELECT_VALUE } from "@/lib/defaultDatabase";
+import { decodeSelectableDatabaseValue, EMPTY_DATABASE_SELECT_VALUE, encodeSelectableDatabaseValue, TREE_SCHEMA_DEFAULT_DATABASE_SELECT_VALUE } from "@/lib/database/defaultDatabase";
describe("defaultDatabase selectable values", () => {
it("encodes empty tree-schema databases with the default database sentinel", () => {
diff --git a/apps/desktop/src/lib/__tests__/jdbcDialect.spec.ts b/apps/desktop/src/lib/__tests__/database/jdbcDialect.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/jdbcDialect.spec.ts
rename to apps/desktop/src/lib/__tests__/database/jdbcDialect.spec.ts
index 8d3047e9f..2240ffc28 100644
--- a/apps/desktop/src/lib/__tests__/jdbcDialect.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/jdbcDialect.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { effectiveDatabaseTypeForConnection, inferJdbcDialect } from "@/lib/jdbcDialect";
+import { effectiveDatabaseTypeForConnection, inferJdbcDialect } from "@/lib/database/jdbcDialect";
describe("jdbc dialect inference", () => {
it("detects InterSystems IRIS and Caché JDBC connections", () => {
diff --git a/apps/desktop/src/lib/__tests__/mysqlConnectionOptions.spec.ts b/apps/desktop/src/lib/__tests__/database/mysqlConnectionOptions.spec.ts
similarity index 94%
rename from apps/desktop/src/lib/__tests__/mysqlConnectionOptions.spec.ts
rename to apps/desktop/src/lib/__tests__/database/mysqlConnectionOptions.spec.ts
index c6117d464..69b087db5 100644
--- a/apps/desktop/src/lib/__tests__/mysqlConnectionOptions.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/mysqlConnectionOptions.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { mysqlCleartextPasswordAuthEnabled, setMysqlCleartextPasswordAuthEnabled } from "../mysqlConnectionOptions";
+import { mysqlCleartextPasswordAuthEnabled, setMysqlCleartextPasswordAuthEnabled } from "@/lib/database/mysqlConnectionOptions";
describe("mysqlConnectionOptions", () => {
it("detects cleartext password auth aliases", () => {
diff --git a/apps/desktop/src/lib/__tests__/prestoSqlBuiltinDriver.spec.ts b/apps/desktop/src/lib/__tests__/database/prestoSqlBuiltinDriver.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/prestoSqlBuiltinDriver.spec.ts
rename to apps/desktop/src/lib/__tests__/database/prestoSqlBuiltinDriver.spec.ts
index 14f8b3234..e3dab8776 100644
--- a/apps/desktop/src/lib/__tests__/prestoSqlBuiltinDriver.spec.ts
+++ b/apps/desktop/src/lib/__tests__/database/prestoSqlBuiltinDriver.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { PRESTOSQL_JDBC_DRIVER_COORDINATE, prestoSqlBuiltinDriverPaths, prestoSqlBuiltinDriverRow, prestoSqlMavenBundle } from "@/lib/prestoSqlBuiltinDriver";
+import { PRESTOSQL_JDBC_DRIVER_COORDINATE, prestoSqlBuiltinDriverPaths, prestoSqlBuiltinDriverRow, prestoSqlMavenBundle } from "@/lib/database/prestoSqlBuiltinDriver";
import type { JdbcMavenBundleInfo } from "@/types/database";
function bundle(coordinate: string, version = "350"): JdbcMavenBundleInfo {
diff --git a/apps/desktop/src/lib/__tests__/codemirrorSqlDialect.spec.ts b/apps/desktop/src/lib/__tests__/editor/codemirrorSqlDialect.spec.ts
similarity index 89%
rename from apps/desktop/src/lib/__tests__/codemirrorSqlDialect.spec.ts
rename to apps/desktop/src/lib/__tests__/editor/codemirrorSqlDialect.spec.ts
index 36cef6652..f728d2d2d 100644
--- a/apps/desktop/src/lib/__tests__/codemirrorSqlDialect.spec.ts
+++ b/apps/desktop/src/lib/__tests__/editor/codemirrorSqlDialect.spec.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
import { PostgreSQL } from "@codemirror/lang-sql";
-import { postgresKeywordSyntaxTerms } from "@/lib/codemirrorSqlDialect";
+import { postgresKeywordSyntaxTerms } from "@/lib/editor/codemirrorSqlDialect";
describe("codemirrorSqlDialect", () => {
it("keeps common PostgreSQL identifier names out of keyword highlighting", () => {
diff --git a/apps/desktop/src/lib/__tests__/shortcutRegistry.spec.ts b/apps/desktop/src/lib/__tests__/editor/shortcutRegistry.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/shortcutRegistry.spec.ts
rename to apps/desktop/src/lib/__tests__/editor/shortcutRegistry.spec.ts
index efb84cdde..ac3bf544d 100644
--- a/apps/desktop/src/lib/__tests__/shortcutRegistry.spec.ts
+++ b/apps/desktop/src/lib/__tests__/editor/shortcutRegistry.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { DEFAULT_SHORTCUT_SETTINGS, SHORTCUT_DEFINITIONS, findShortcutConflict, normalizeShortcutSettings, type ShortcutActionId } from "@/lib/shortcutRegistry";
+import { DEFAULT_SHORTCUT_SETTINGS, SHORTCUT_DEFINITIONS, findShortcutConflict, normalizeShortcutSettings, type ShortcutActionId } from "@/lib/editor/shortcutRegistry";
describe("shortcutRegistry editor actions", () => {
const formatterEditorActionIds: ShortcutActionId[] = ["formatSql", "indentMore", "indentLess", "duplicateLine", "deleteLine", "moveLineUp", "moveLineDown", "copyLineUp", "copyLineDown", "undo", "redo", "selectAll"];
diff --git a/apps/desktop/src/lib/__tests__/etcdKeyTree.spec.ts b/apps/desktop/src/lib/__tests__/etcd/etcdKeyTree.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/etcdKeyTree.spec.ts
rename to apps/desktop/src/lib/__tests__/etcd/etcdKeyTree.spec.ts
index c6dd7232b..6abe025e9 100644
--- a/apps/desktop/src/lib/__tests__/etcdKeyTree.spec.ts
+++ b/apps/desktop/src/lib/__tests__/etcd/etcdKeyTree.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { buildEtcdKeyTree, flattenVisibleEtcdKeyTree } from "@/lib/etcdKeyTree";
+import { buildEtcdKeyTree, flattenVisibleEtcdKeyTree } from "@/lib/etcd/etcdKeyTree";
describe("etcd key tree", () => {
it("groups slash-delimited keys", () => {
diff --git a/apps/desktop/src/lib/__tests__/navicatImport.spec.ts b/apps/desktop/src/lib/__tests__/imports/navicatImport.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/navicatImport.spec.ts
rename to apps/desktop/src/lib/__tests__/imports/navicatImport.spec.ts
index 950003c70..64b04a6b5 100644
--- a/apps/desktop/src/lib/__tests__/navicatImport.spec.ts
+++ b/apps/desktop/src/lib/__tests__/imports/navicatImport.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { parseNavicatConnections } from "../navicatImport";
+import { parseNavicatConnections } from "@/lib/imports/navicatImport";
class TestElement {
readonly tagName: string;
diff --git a/apps/desktop/src/lib/__tests__/kvKeyTree.spec.ts b/apps/desktop/src/lib/__tests__/kv/kvKeyTree.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/kvKeyTree.spec.ts
rename to apps/desktop/src/lib/__tests__/kv/kvKeyTree.spec.ts
index 50bb6a1e2..c0e6b0897 100644
--- a/apps/desktop/src/lib/__tests__/kvKeyTree.spec.ts
+++ b/apps/desktop/src/lib/__tests__/kv/kvKeyTree.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { buildKvKeyTree, collectKvGroupIds, flattenVisibleKvKeyTree, preserveKvExpandedGroupIds } from "@/lib/kvKeyTree";
+import { buildKvKeyTree, collectKvGroupIds, flattenVisibleKvKeyTree, preserveKvExpandedGroupIds } from "@/lib/kv/kvKeyTree";
describe("kv key tree", () => {
it("keeps root keys as leaf nodes", () => {
diff --git a/apps/desktop/src/lib/__tests__/kvRefreshSelection.spec.ts b/apps/desktop/src/lib/__tests__/kv/kvRefreshSelection.spec.ts
similarity index 79%
rename from apps/desktop/src/lib/__tests__/kvRefreshSelection.spec.ts
rename to apps/desktop/src/lib/__tests__/kv/kvRefreshSelection.spec.ts
index 8e116bd8c..7945512de 100644
--- a/apps/desktop/src/lib/__tests__/kvRefreshSelection.spec.ts
+++ b/apps/desktop/src/lib/__tests__/kv/kvRefreshSelection.spec.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
-import { refreshedKvSelectionKey } from "@/lib/kvRefreshSelection";
-import type { KvKeySummary } from "@/lib/api";
+import { refreshedKvSelectionKey } from "@/lib/kv/kvRefreshSelection";
+import type { KvKeySummary } from "@/lib/backend/api";
describe("kv refresh selection", () => {
const keys: KvKeySummary[] = [{ key: "/app/config" }, { key: "/app/feature" }];
diff --git a/apps/desktop/src/lib/__tests__/kvRootPresentation.spec.ts b/apps/desktop/src/lib/__tests__/kv/kvRootPresentation.spec.ts
similarity index 81%
rename from apps/desktop/src/lib/__tests__/kvRootPresentation.spec.ts
rename to apps/desktop/src/lib/__tests__/kv/kvRootPresentation.spec.ts
index 98697a7b0..6436a08f8 100644
--- a/apps/desktop/src/lib/__tests__/kvRootPresentation.spec.ts
+++ b/apps/desktop/src/lib/__tests__/kv/kvRootPresentation.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { kvRootNodeLabel } from "@/lib/kvRootPresentation";
+import { kvRootNodeLabel } from "@/lib/kv/kvRootPresentation";
describe("kv root presentation", () => {
it("keeps etcd under Keys but shows ZooKeeper as root path", () => {
diff --git a/apps/desktop/src/lib/__tests__/kvValueDisplay.spec.ts b/apps/desktop/src/lib/__tests__/kv/kvValueDisplay.spec.ts
similarity index 95%
rename from apps/desktop/src/lib/__tests__/kvValueDisplay.spec.ts
rename to apps/desktop/src/lib/__tests__/kv/kvValueDisplay.spec.ts
index 50f035b45..90b2e843a 100644
--- a/apps/desktop/src/lib/__tests__/kvValueDisplay.spec.ts
+++ b/apps/desktop/src/lib/__tests__/kv/kvValueDisplay.spec.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
-import { formatZooKeeperMetadataRows, formatZooKeeperSummaryBadges, prettyPrintJsonText } from "@/lib/kvValueDisplay";
-import type { KvKeyMetadata } from "@/lib/api";
+import { formatZooKeeperMetadataRows, formatZooKeeperSummaryBadges, prettyPrintJsonText } from "@/lib/kv/kvValueDisplay";
+import type { KvKeyMetadata } from "@/lib/backend/api";
describe("kv value display helpers", () => {
it("pretty prints valid JSON text", () => {
diff --git a/apps/desktop/src/lib/__tests__/mcpConfigTemplates.spec.ts b/apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts
similarity index 99%
rename from apps/desktop/src/lib/__tests__/mcpConfigTemplates.spec.ts
rename to apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts
index 36ad21f1b..d425280bb 100644
--- a/apps/desktop/src/lib/__tests__/mcpConfigTemplates.spec.ts
+++ b/apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { buildMcpCodexConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpVsCodeConfig, type McpEnvEntry } from "@/lib/mcpConfigTemplates";
+import { buildMcpCodexConfig, buildMcpJsonConfig, buildMcpOpenCodeConfig, buildMcpVsCodeConfig, type McpEnvEntry } from "@/lib/mcp/mcpConfigTemplates";
describe("MCP config templates", () => {
it("builds the standard mcpServers JSON used by Claude, Cursor, TRAE, and Windsurf", () => {
diff --git a/apps/desktop/src/lib/__tests__/completionMetadataPolicy.spec.ts b/apps/desktop/src/lib/__tests__/metadata/completionMetadataPolicy.spec.ts
similarity index 94%
rename from apps/desktop/src/lib/__tests__/completionMetadataPolicy.spec.ts
rename to apps/desktop/src/lib/__tests__/metadata/completionMetadataPolicy.spec.ts
index d9909c569..a6528ee45 100644
--- a/apps/desktop/src/lib/__tests__/completionMetadataPolicy.spec.ts
+++ b/apps/desktop/src/lib/__tests__/metadata/completionMetadataPolicy.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { usesLocalOnlyEditorCompletionMetadata, usesOnDemandOnlyEditorColumnMetadata } from "@/lib/completionMetadataPolicy";
+import { usesLocalOnlyEditorCompletionMetadata, usesOnDemandOnlyEditorColumnMetadata } from "@/lib/metadata/completionMetadataPolicy";
describe("completionMetadataPolicy", () => {
it("keeps Presto-like editor completion on local metadata", () => {
diff --git a/apps/desktop/src/lib/__tests__/completionTreeIndex.spec.ts b/apps/desktop/src/lib/__tests__/metadata/completionTreeIndex.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/completionTreeIndex.spec.ts
rename to apps/desktop/src/lib/__tests__/metadata/completionTreeIndex.spec.ts
index 5458eac9b..a006a4fd3 100644
--- a/apps/desktop/src/lib/__tests__/completionTreeIndex.spec.ts
+++ b/apps/desktop/src/lib/__tests__/metadata/completionTreeIndex.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { completionSchemasFromTree, completionTablesFromTree } from "@/lib/completionTreeIndex";
+import { completionSchemasFromTree, completionTablesFromTree } from "@/lib/metadata/completionTreeIndex";
import type { TreeNode } from "@/types/database";
describe("completionTreeIndex", () => {
diff --git a/apps/desktop/src/lib/__tests__/mqListPanels.spec.ts b/apps/desktop/src/lib/__tests__/mq/mqListPanels.spec.ts
similarity index 95%
rename from apps/desktop/src/lib/__tests__/mqListPanels.spec.ts
rename to apps/desktop/src/lib/__tests__/mq/mqListPanels.spec.ts
index 5f80520f4..4536bc6bf 100644
--- a/apps/desktop/src/lib/__tests__/mqListPanels.spec.ts
+++ b/apps/desktop/src/lib/__tests__/mq/mqListPanels.spec.ts
@@ -2,7 +2,7 @@ import { readFileSync } from "node:fs";
import { describe, expect, it } from "vitest";
function componentSource(name: string): string {
- return readFileSync(new URL(`../../components/mq/${name}`, import.meta.url), "utf8");
+ return readFileSync(new URL(`../../../components/mq/${name}`, import.meta.url), "utf8");
}
describe("MQ list panels", () => {
diff --git a/apps/desktop/src/lib/__tests__/mqPinnedVersionOptions.spec.ts b/apps/desktop/src/lib/__tests__/mq/mqPinnedVersionOptions.spec.ts
similarity index 92%
rename from apps/desktop/src/lib/__tests__/mqPinnedVersionOptions.spec.ts
rename to apps/desktop/src/lib/__tests__/mq/mqPinnedVersionOptions.spec.ts
index 7d9bf835e..c8c4e645b 100644
--- a/apps/desktop/src/lib/__tests__/mqPinnedVersionOptions.spec.ts
+++ b/apps/desktop/src/lib/__tests__/mq/mqPinnedVersionOptions.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { MQ_PINNED_VERSION_AUTO, MQ_PINNED_VERSION_OPTIONS, pinnedVersionToSelection, selectionToPinnedVersion } from "@/lib/mqPinnedVersionOptions";
+import { MQ_PINNED_VERSION_AUTO, MQ_PINNED_VERSION_OPTIONS, pinnedVersionToSelection, selectionToPinnedVersion } from "@/lib/mq/mqPinnedVersionOptions";
describe("mqPinnedVersionOptions", () => {
it("offers auto-detection and the supported Pulsar 3.x profile", () => {
diff --git a/apps/desktop/src/lib/__tests__/mqPolicyForms.spec.ts b/apps/desktop/src/lib/__tests__/mq/mqPolicyForms.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/mqPolicyForms.spec.ts
rename to apps/desktop/src/lib/__tests__/mq/mqPolicyForms.spec.ts
index c38c3b5e4..82a1c406f 100644
--- a/apps/desktop/src/lib/__tests__/mqPolicyForms.spec.ts
+++ b/apps/desktop/src/lib/__tests__/mq/mqPolicyForms.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { defaultMqPolicyForms, policyFormsFromEffectivePolicies } from "@/lib/mqPolicyForms";
+import { defaultMqPolicyForms, policyFormsFromEffectivePolicies } from "@/lib/mq/mqPolicyForms";
describe("mqPolicyForms", () => {
it("hydrates forms from topic effective policies", () => {
diff --git a/apps/desktop/src/lib/__tests__/mqTenantForm.spec.ts b/apps/desktop/src/lib/__tests__/mq/mqTenantForm.spec.ts
similarity index 96%
rename from apps/desktop/src/lib/__tests__/mqTenantForm.spec.ts
rename to apps/desktop/src/lib/__tests__/mq/mqTenantForm.spec.ts
index cb120d3d9..c8377ff1f 100644
--- a/apps/desktop/src/lib/__tests__/mqTenantForm.spec.ts
+++ b/apps/desktop/src/lib/__tests__/mq/mqTenantForm.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { defaultTenantConfig, mqClusterOptionsFromExtra, validateTenantForm } from "@/lib/mqTenantForm";
+import { defaultTenantConfig, mqClusterOptionsFromExtra, validateTenantForm } from "@/lib/mq/mqTenantForm";
describe("mqTenantForm", () => {
it("extracts selectable cluster names from Pulsar cluster info extras", () => {
diff --git a/apps/desktop/src/lib/__tests__/mqTokenErrors.spec.ts b/apps/desktop/src/lib/__tests__/mq/mqTokenErrors.spec.ts
similarity index 92%
rename from apps/desktop/src/lib/__tests__/mqTokenErrors.spec.ts
rename to apps/desktop/src/lib/__tests__/mq/mqTokenErrors.spec.ts
index 546eaafb2..25f9e6c82 100644
--- a/apps/desktop/src/lib/__tests__/mqTokenErrors.spec.ts
+++ b/apps/desktop/src/lib/__tests__/mq/mqTokenErrors.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { formatMqTokenIssueError } from "../mqTokenErrors";
+import { formatMqTokenIssueError } from "@/lib/mq/mqTokenErrors";
describe("MQ token errors", () => {
it("turns missing signing configuration backend errors into actionable Chinese copy", () => {
diff --git a/apps/desktop/src/lib/__tests__/nacosAdmin.spec.ts b/apps/desktop/src/lib/__tests__/nacos/nacosAdmin.spec.ts
similarity index 99%
rename from apps/desktop/src/lib/__tests__/nacosAdmin.spec.ts
rename to apps/desktop/src/lib/__tests__/nacos/nacosAdmin.spec.ts
index 36edee39d..ba9e922f4 100644
--- a/apps/desktop/src/lib/__tests__/nacosAdmin.spec.ts
+++ b/apps/desktop/src/lib/__tests__/nacos/nacosAdmin.spec.ts
@@ -13,7 +13,7 @@ import {
resolveNacosConfigCopyText,
sanitizeNacosConfigFileNameSegment,
summarizeNacosConfigDiff,
-} from "../nacosAdmin";
+} from "@/lib/nacos/nacosAdmin";
describe("nacosAdmin helpers", () => {
it("parses raw query and body text", () => {
diff --git a/apps/desktop/src/lib/__tests__/queryResultError.spec.ts b/apps/desktop/src/lib/__tests__/query/queryResultError.spec.ts
similarity index 95%
rename from apps/desktop/src/lib/__tests__/queryResultError.spec.ts
rename to apps/desktop/src/lib/__tests__/query/queryResultError.spec.ts
index 43263f479..de64be64a 100644
--- a/apps/desktop/src/lib/__tests__/queryResultError.spec.ts
+++ b/apps/desktop/src/lib/__tests__/query/queryResultError.spec.ts
@@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest";
import type { QueryResult } from "@/types/database";
-import { isNoSnapshotErrorResult } from "@/lib/queryResultError";
+import { isNoSnapshotErrorResult } from "@/lib/query/queryResultError";
function errorResult(message: string): QueryResult {
return { columns: ["Error"], rows: [[message]], affected_rows: 0, execution_time_ms: 0 };
diff --git a/apps/desktop/src/lib/__tests__/savedSqlFolderCounts.spec.ts b/apps/desktop/src/lib/__tests__/savedSql/savedSqlFolderCounts.spec.ts
similarity index 96%
rename from apps/desktop/src/lib/__tests__/savedSqlFolderCounts.spec.ts
rename to apps/desktop/src/lib/__tests__/savedSql/savedSqlFolderCounts.spec.ts
index 4c810abf4..ead33aca9 100644
--- a/apps/desktop/src/lib/__tests__/savedSqlFolderCounts.spec.ts
+++ b/apps/desktop/src/lib/__tests__/savedSql/savedSqlFolderCounts.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { savedSqlFolderBranchFileCount, type SavedSqlFolderCountNode } from "../savedSqlFolderCounts";
+import { savedSqlFolderBranchFileCount, type SavedSqlFolderCountNode } from "@/lib/savedSql/savedSqlFolderCounts";
describe("savedSqlFolderBranchFileCount", () => {
const folders: SavedSqlFolderCountNode[] = [{ id: "root" }, { id: "child", parentFolderId: "root" }, { id: "grandchild", parentFolderId: "child" }, { id: "sibling", parentFolderId: "root" }, { id: "other" }];
diff --git a/apps/desktop/src/lib/__tests__/schemaDiffMetadataLoad.spec.ts b/apps/desktop/src/lib/__tests__/schema/schemaDiffMetadataLoad.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/schemaDiffMetadataLoad.spec.ts
rename to apps/desktop/src/lib/__tests__/schema/schemaDiffMetadataLoad.spec.ts
index 7dcde6ae8..24e0a2447 100644
--- a/apps/desktop/src/lib/__tests__/schemaDiffMetadataLoad.spec.ts
+++ b/apps/desktop/src/lib/__tests__/schema/schemaDiffMetadataLoad.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { createConcurrencyLimiter, mapWithConcurrency, schemaDiffMetadataConcurrency } from "@/lib/schemaDiffMetadataLoad";
+import { createConcurrencyLimiter, mapWithConcurrency, schemaDiffMetadataConcurrency } from "@/lib/schema/schemaDiffMetadataLoad";
function wait(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
diff --git a/apps/desktop/src/lib/__tests__/sidebarConnectionSelection.spec.ts b/apps/desktop/src/lib/__tests__/sidebar/sidebarConnectionSelection.spec.ts
similarity index 95%
rename from apps/desktop/src/lib/__tests__/sidebarConnectionSelection.spec.ts
rename to apps/desktop/src/lib/__tests__/sidebar/sidebarConnectionSelection.spec.ts
index eb2aace8a..7c1068f00 100644
--- a/apps/desktop/src/lib/__tests__/sidebarConnectionSelection.spec.ts
+++ b/apps/desktop/src/lib/__tests__/sidebar/sidebarConnectionSelection.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { selectedConnectionDeleteTargets, selectedConnectionDuplicateTargets } from "@/lib/sidebarConnectionSelection";
+import { selectedConnectionDeleteTargets, selectedConnectionDuplicateTargets } from "@/lib/sidebar/sidebarConnectionSelection";
import type { TreeNode } from "@/types/database";
function node(id: string, type: TreeNode["type"] = "connection"): TreeNode {
diff --git a/apps/desktop/src/lib/__tests__/sidebarLabelTooltip.spec.ts b/apps/desktop/src/lib/__tests__/sidebar/sidebarLabelTooltip.spec.ts
similarity index 97%
rename from apps/desktop/src/lib/__tests__/sidebarLabelTooltip.spec.ts
rename to apps/desktop/src/lib/__tests__/sidebar/sidebarLabelTooltip.spec.ts
index 7857db51f..546e4da99 100644
--- a/apps/desktop/src/lib/__tests__/sidebarLabelTooltip.spec.ts
+++ b/apps/desktop/src/lib/__tests__/sidebar/sidebarLabelTooltip.spec.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from "vitest";
-import { shouldMeasureSidebarLabelOverflow } from "@/lib/sidebarLabelTooltip";
+import { shouldMeasureSidebarLabelOverflow } from "@/lib/sidebar/sidebarLabelTooltip";
describe("shouldMeasureSidebarLabelOverflow", () => {
it("measures only plain truncated-label tooltip candidates", () => {
diff --git a/apps/desktop/src/lib/__tests__/executableStatementRangeCache.spec.ts b/apps/desktop/src/lib/__tests__/sql/executableStatementRangeCache.spec.ts
similarity index 98%
rename from apps/desktop/src/lib/__tests__/executableStatementRangeCache.spec.ts
rename to apps/desktop/src/lib/__tests__/sql/executableStatementRangeCache.spec.ts
index 6eca9447e..c55be0d0d 100644
--- a/apps/desktop/src/lib/__tests__/executableStatementRangeCache.spec.ts
+++ b/apps/desktop/src/lib/__tests__/sql/executableStatementRangeCache.spec.ts
@@ -1,6 +1,6 @@
import { Text } from "@codemirror/state";
import { describe, expect, it, vi } from "vitest";
-import { executableStatementRangeCacheForDoc, executableStatementRangeStartingAt, type ExecutableStatementRangeParser } from "@/lib/executableStatementRangeCache";
+import { executableStatementRangeCacheForDoc, executableStatementRangeStartingAt, type ExecutableStatementRangeParser } from "@/lib/sql/executableStatementRangeCache";
describe("executableStatementRangeCacheForDoc", () => {
it("reuses parsed executable statement ranges for the same document and database type", () => {
diff --git a/apps/desktop/src/lib/__tests__/sqlSemanticCompletion.spec.ts b/apps/desktop/src/lib/__tests__/sql/semantic/completion.spec.ts
similarity index 95%
rename from apps/desktop/src/lib/__tests__/sqlSemanticCompletion.spec.ts
rename to apps/desktop/src/lib/__tests__/sql/semantic/completion.spec.ts
index 8b88c5415..63b1aa641 100644
--- a/apps/desktop/src/lib/__tests__/sqlSemanticCompletion.spec.ts
+++ b/apps/desktop/src/lib/__tests__/sql/semantic/completion.spec.ts
@@ -1,8 +1,8 @@
import { describe, expect, it } from "vitest";
-import { buildSqlCompletionItemsFromContext, getSqlCompletionContext, type SqlCompletionColumn, type SqlCompletionProviderInput } from "@/lib/sqlCompletion";
-import { sqlCompletionContextFromSemantic, sqlSemanticLocalColumnsByTable } from "@/lib/sqlSemanticCompletion";
-import { buildSqlSemanticModel } from "@/lib/sqlSemanticModel";
-import { sqlFixtureCursor } from "@/lib/sqlSemanticFixtures";
+import { buildSqlCompletionItemsFromContext, getSqlCompletionContext, type SqlCompletionColumn, type SqlCompletionProviderInput } from "@/lib/sql/sqlCompletion";
+import { sqlCompletionContextFromSemantic, sqlSemanticLocalColumnsByTable } from "@/lib/sql/semantic/completion";
+import { buildSqlSemanticModel } from "@/lib/sql/semantic/model";
+import { sqlFixtureCursor } from "@/lib/sql/semantic/fixtures";
import type { DatabaseType } from "@/types/database";
function mergeColumns(...maps: Array