@libredb/studio 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +127 -0
- package/.cursorrules +426 -0
- package/.devin/wiki.json +143 -0
- package/.dockerignore +80 -0
- package/.env.example +159 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +49 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +57 -0
- package/.github/workflows/ci.yml +185 -0
- package/.github/workflows/codeql.yml +57 -0
- package/.github/workflows/docker-build-push.yml +118 -0
- package/.github/workflows/helm-release.yml +113 -0
- package/CLAUDE.md +265 -0
- package/CODE_OF_CONDUCT.md +124 -0
- package/CONTRIBUTING.md +154 -0
- package/Dockerfile +73 -0
- package/LICENSE +21 -0
- package/README.md +614 -0
- package/SECURITY.md +107 -0
- package/artifacthub-repo.yml +4 -0
- package/bun.lock +1714 -0
- package/bunfig.toml +3 -0
- package/charts/libredb-studio/.helmignore +11 -0
- package/charts/libredb-studio/Chart.lock +6 -0
- package/charts/libredb-studio/Chart.yaml +50 -0
- package/charts/libredb-studio/README.md +206 -0
- package/charts/libredb-studio/templates/NOTES.txt +59 -0
- package/charts/libredb-studio/templates/_helpers.tpl +135 -0
- package/charts/libredb-studio/templates/configmap.yaml +37 -0
- package/charts/libredb-studio/templates/deployment.yaml +184 -0
- package/charts/libredb-studio/templates/hpa.yaml +32 -0
- package/charts/libredb-studio/templates/ingress.yaml +41 -0
- package/charts/libredb-studio/templates/networkpolicy.yaml +50 -0
- package/charts/libredb-studio/templates/pdb.yaml +18 -0
- package/charts/libredb-studio/templates/pvc.yaml +23 -0
- package/charts/libredb-studio/templates/secret.yaml +30 -0
- package/charts/libredb-studio/templates/seed-configmap.yaml +11 -0
- package/charts/libredb-studio/templates/service.yaml +22 -0
- package/charts/libredb-studio/templates/serviceaccount.yaml +13 -0
- package/charts/libredb-studio/values.schema.json +246 -0
- package/charts/libredb-studio/values.yaml +286 -0
- package/components.json +22 -0
- package/conductor/code_styleguides/typescript.md +43 -0
- package/conductor/product-guidelines.md +43 -0
- package/conductor/product.md +3 -0
- package/conductor/setup_state.json +1 -0
- package/conductor/tech-stack.md +39 -0
- package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +8 -0
- package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +44 -0
- package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +31 -0
- package/conductor/tracks.md +8 -0
- package/conductor/workflow.md +333 -0
- package/database-compose.yml +55 -0
- package/docker/postgres-init/01-extensions.sql +10 -0
- package/docker/postgres-init/02-sample-data.sql +585 -0
- package/docker/postgres.yml +68 -0
- package/docker-compose.yml +38 -0
- package/docs/AI_PLAN.md +74 -0
- package/docs/API_DOCS.md +875 -0
- package/docs/ARCHITECTURE.md +218 -0
- package/docs/DATABASE_PROVIDERS.md +358 -0
- package/docs/FEATURES.md +116 -0
- package/docs/HELM_CHART.md +252 -0
- package/docs/LOGIN_PAGE.md +178 -0
- package/docs/MONACO_EDITOR_PERFORMANCE.md +315 -0
- package/docs/OIDC_ARCH.md +681 -0
- package/docs/OIDC_SETUP.md +322 -0
- package/docs/POSTGRES_METRICS.md +516 -0
- package/docs/QUERY_OPTIMIZATION.md +370 -0
- package/docs/SEED_CONNECTIONS.md +468 -0
- package/docs/SQL_ALIAS_COMPLETION.md +190 -0
- package/docs/STORAGE_ARCHITECTURE.md +565 -0
- package/docs/STORAGE_QUICK_SETUP.md +419 -0
- package/docs/TECHNICAL_PLAN.md +36 -0
- package/docs/THEMING.md +345 -0
- package/docs/adding-a-new-database-provider.md +642 -0
- package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +360 -0
- package/docs/backlogs/001-INLINE_DATA_EDITING.md +118 -0
- package/docs/backlogs/002-DATA_IMPORT.md +215 -0
- package/docs/backlogs/003-QUERY_TIME_MACHINE.md +183 -0
- package/docs/backlogs/004-AI_DATA_STORYTELLER.md +292 -0
- package/docs/backlogs/005-QUERY_PLAYGROUND.md +352 -0
- package/docs/backlogs/006-DATA_MASKING.md +418 -0
- package/docs/enterprise-features.md +718 -0
- package/docs/kubernetes-helm-chart-artifacthub-plan.md +803 -0
- package/docs/medium-koyeb-article-en.md +215 -0
- package/docs/plans/test-plans.md +445 -0
- package/docs/releases/RELEASE.V0.3.0.md +22 -0
- package/docs/releases/RELEASE.V0.4.0.md +154 -0
- package/docs/releases/RELEASE.V0.5.0.md +252 -0
- package/docs/releases/RELEASE_v0.5.6.md +145 -0
- package/docs/releases/RELEASE_v0.6.1.md +303 -0
- package/docs/releases/RELEASE_v0.6.7.md +292 -0
- package/docs/releases/RELEASE_v0.7.0.md +332 -0
- package/docs/releases/RELEASE_v0.8.0.md +521 -0
- package/docs/sampledb/titanic.sql +1379 -0
- package/docs/superpowers/plans/2026-03-25-seed-connections.md +1362 -0
- package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +590 -0
- package/e2e/admin-dashboard.spec.ts +64 -0
- package/e2e/connection-management.spec.ts +58 -0
- package/e2e/export.spec.ts +34 -0
- package/e2e/login.spec.ts +85 -0
- package/e2e/query-execution.spec.ts +35 -0
- package/e2e/tab-management.spec.ts +64 -0
- package/eslint.config.mjs +28 -0
- package/fly.toml +43 -0
- package/next.config.ts +32 -0
- package/package.json +130 -0
- package/playwright.config.ts +34 -0
- package/postcss.config.mjs +7 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/logo.svg +32 -0
- package/public/next.svg +1 -0
- package/public/screenshots/code-generator.png +0 -0
- package/public/screenshots/connection-modal.png +0 -0
- package/public/screenshots/data-profiler.png +0 -0
- package/public/screenshots/erd-diagram.png +0 -0
- package/public/screenshots/hero-editor.png +0 -0
- package/public/screenshots/nl2sql.png +0 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/render.yaml +58 -0
- package/scripts/merge-lcov.mjs +239 -0
- package/sonar-project.properties +16 -0
- package/src/app/admin/error.tsx +46 -0
- package/src/app/admin/page.tsx +10 -0
- package/src/app/api/admin/audit/route.ts +52 -0
- package/src/app/api/admin/fleet-health/route.ts +81 -0
- package/src/app/api/ai/autopilot/route.ts +105 -0
- package/src/app/api/ai/chat/route.ts +132 -0
- package/src/app/api/ai/describe-schema/route.ts +52 -0
- package/src/app/api/ai/explain/route.ts +86 -0
- package/src/app/api/ai/impact/route.ts +97 -0
- package/src/app/api/ai/index-advisor/route.ts +98 -0
- package/src/app/api/ai/nl2sql/route.ts +87 -0
- package/src/app/api/ai/query-safety/route.ts +87 -0
- package/src/app/api/auth/login/route.ts +62 -0
- package/src/app/api/auth/logout/route.ts +25 -0
- package/src/app/api/auth/me/route.ts +10 -0
- package/src/app/api/auth/oidc/callback/route.ts +82 -0
- package/src/app/api/auth/oidc/login/route.ts +43 -0
- package/src/app/api/connections/managed/route.ts +35 -0
- package/src/app/api/db/cancel/route.ts +42 -0
- package/src/app/api/db/disconnect/route.ts +28 -0
- package/src/app/api/db/health/route.ts +49 -0
- package/src/app/api/db/maintenance/route.ts +72 -0
- package/src/app/api/db/monitoring/route.ts +62 -0
- package/src/app/api/db/multi-query/route.ts +116 -0
- package/src/app/api/db/pool-stats/route.ts +37 -0
- package/src/app/api/db/profile/route.ts +144 -0
- package/src/app/api/db/provider-meta/route.ts +49 -0
- package/src/app/api/db/query/route.ts +50 -0
- package/src/app/api/db/schema/route.ts +47 -0
- package/src/app/api/db/schema-snapshot/route.ts +42 -0
- package/src/app/api/db/test-connection/route.ts +55 -0
- package/src/app/api/db/transaction/route.ts +111 -0
- package/src/app/api/storage/[collection]/route.ts +67 -0
- package/src/app/api/storage/config/route.ts +17 -0
- package/src/app/api/storage/migrate/route.ts +45 -0
- package/src/app/api/storage/route.ts +32 -0
- package/src/app/error.tsx +49 -0
- package/src/app/global-error.tsx +55 -0
- package/src/app/globals.css +146 -0
- package/src/app/icon.svg +42 -0
- package/src/app/layout.tsx +34 -0
- package/src/app/login/login-form.tsx +301 -0
- package/src/app/login/page.tsx +11 -0
- package/src/app/monitoring/page.tsx +8 -0
- package/src/app/not-found.tsx +29 -0
- package/src/app/page.tsx +5 -0
- package/src/components/AIAutopilotPanel.tsx +238 -0
- package/src/components/CodeGenerator.tsx +271 -0
- package/src/components/CommandPalette.tsx +227 -0
- package/src/components/ConnectionModal.tsx +759 -0
- package/src/components/CreateTableModal.tsx +281 -0
- package/src/components/DataCharts.tsx +962 -0
- package/src/components/DataImportModal.tsx +582 -0
- package/src/components/DataProfiler.tsx +335 -0
- package/src/components/DatabaseDocs.tsx +251 -0
- package/src/components/MaskingSettings.tsx +414 -0
- package/src/components/MobileNav.tsx +50 -0
- package/src/components/NL2SQLPanel.tsx +281 -0
- package/src/components/PivotTable.tsx +257 -0
- package/src/components/QueryEditor.tsx +760 -0
- package/src/components/QueryHistory.tsx +344 -0
- package/src/components/QuerySafetyDialog.tsx +290 -0
- package/src/components/ResultsGrid.tsx +644 -0
- package/src/components/SaveQueryModal.tsx +104 -0
- package/src/components/SavedQueries.tsx +128 -0
- package/src/components/SchemaDiagram.tsx +473 -0
- package/src/components/SchemaDiff.tsx +473 -0
- package/src/components/SnapshotTimeline.tsx +116 -0
- package/src/components/Studio.tsx +639 -0
- package/src/components/TestDataGenerator.tsx +261 -0
- package/src/components/VisualExplain.tsx +820 -0
- package/src/components/admin/AdminDashboard.tsx +163 -0
- package/src/components/admin/tabs/AuditTab.tsx +531 -0
- package/src/components/admin/tabs/MonitoringEmbed.tsx +11 -0
- package/src/components/admin/tabs/OperationsTab.tsx +646 -0
- package/src/components/admin/tabs/OverviewTab.tsx +1328 -0
- package/src/components/admin/tabs/SecurityTab.tsx +284 -0
- package/src/components/community-section.tsx +92 -0
- package/src/components/icons/db-icons.tsx +84 -0
- package/src/components/libredb-logo.tsx +61 -0
- package/src/components/monitoring/MonitoringDashboard.tsx +345 -0
- package/src/components/monitoring/tabs/MetricChart.tsx +82 -0
- package/src/components/monitoring/tabs/OverviewTab.tsx +263 -0
- package/src/components/monitoring/tabs/PerformanceTab.tsx +254 -0
- package/src/components/monitoring/tabs/PoolTab.tsx +174 -0
- package/src/components/monitoring/tabs/QueriesTab.tsx +287 -0
- package/src/components/monitoring/tabs/SessionsTab.tsx +316 -0
- package/src/components/monitoring/tabs/StorageTab.tsx +335 -0
- package/src/components/monitoring/tabs/TablesTab.tsx +300 -0
- package/src/components/results-grid/ResultCard.tsx +111 -0
- package/src/components/results-grid/RowDetailSheet.tsx +178 -0
- package/src/components/results-grid/StatsBar.tsx +201 -0
- package/src/components/results-grid/index.ts +1 -0
- package/src/components/results-grid/utils.ts +23 -0
- package/src/components/schema-explorer/ColumnList.tsx +53 -0
- package/src/components/schema-explorer/SchemaExplorer.tsx +182 -0
- package/src/components/schema-explorer/TableItem.tsx +210 -0
- package/src/components/schema-explorer/index.ts +1 -0
- package/src/components/sidebar/ConnectionItem.tsx +105 -0
- package/src/components/sidebar/ConnectionsList.tsx +62 -0
- package/src/components/sidebar/Sidebar.tsx +130 -0
- package/src/components/sidebar/index.ts +2 -0
- package/src/components/studio/BottomPanel.tsx +286 -0
- package/src/components/studio/QueryToolbar.tsx +180 -0
- package/src/components/studio/StudioDesktopHeader.tsx +114 -0
- package/src/components/studio/StudioMobileHeader.tsx +340 -0
- package/src/components/studio/StudioTabBar.tsx +82 -0
- package/src/components/studio/index.ts +5 -0
- package/src/components/ui/accordion.tsx +66 -0
- package/src/components/ui/alert-dialog.tsx +157 -0
- package/src/components/ui/alert.tsx +66 -0
- package/src/components/ui/aspect-ratio.tsx +11 -0
- package/src/components/ui/avatar.tsx +53 -0
- package/src/components/ui/badge.tsx +46 -0
- package/src/components/ui/breadcrumb.tsx +109 -0
- package/src/components/ui/button-group.tsx +83 -0
- package/src/components/ui/button.tsx +60 -0
- package/src/components/ui/calendar.tsx +216 -0
- package/src/components/ui/card.tsx +92 -0
- package/src/components/ui/carousel.tsx +241 -0
- package/src/components/ui/chart.tsx +357 -0
- package/src/components/ui/checkbox.tsx +32 -0
- package/src/components/ui/collapsible.tsx +33 -0
- package/src/components/ui/command.tsx +184 -0
- package/src/components/ui/context-menu.tsx +252 -0
- package/src/components/ui/dialog.tsx +143 -0
- package/src/components/ui/drawer.tsx +135 -0
- package/src/components/ui/dropdown-menu.tsx +257 -0
- package/src/components/ui/empty.tsx +104 -0
- package/src/components/ui/field.tsx +248 -0
- package/src/components/ui/form.tsx +167 -0
- package/src/components/ui/hover-card.tsx +44 -0
- package/src/components/ui/input-group.tsx +170 -0
- package/src/components/ui/input-otp.tsx +77 -0
- package/src/components/ui/input.tsx +21 -0
- package/src/components/ui/item.tsx +193 -0
- package/src/components/ui/kbd.tsx +28 -0
- package/src/components/ui/label.tsx +24 -0
- package/src/components/ui/menubar.tsx +276 -0
- package/src/components/ui/navigation-menu.tsx +168 -0
- package/src/components/ui/pagination.tsx +127 -0
- package/src/components/ui/popover.tsx +48 -0
- package/src/components/ui/progress.tsx +31 -0
- package/src/components/ui/radio-group.tsx +45 -0
- package/src/components/ui/resizable.tsx +56 -0
- package/src/components/ui/scroll-area.tsx +58 -0
- package/src/components/ui/select.tsx +187 -0
- package/src/components/ui/separator.tsx +28 -0
- package/src/components/ui/sheet.tsx +139 -0
- package/src/components/ui/sidebar.tsx +726 -0
- package/src/components/ui/skeleton.tsx +13 -0
- package/src/components/ui/slider.tsx +63 -0
- package/src/components/ui/sonner.tsx +40 -0
- package/src/components/ui/spinner.tsx +16 -0
- package/src/components/ui/switch.tsx +31 -0
- package/src/components/ui/table.tsx +116 -0
- package/src/components/ui/tabs.tsx +66 -0
- package/src/components/ui/textarea.tsx +18 -0
- package/src/components/ui/toggle-group.tsx +83 -0
- package/src/components/ui/toggle.tsx +47 -0
- package/src/components/ui/tooltip.tsx +61 -0
- package/src/exports/components.ts +15 -0
- package/src/exports/index.ts +4 -0
- package/src/exports/providers.ts +4 -0
- package/src/exports/types.ts +26 -0
- package/src/hooks/use-ai-chat.ts +182 -0
- package/src/hooks/use-all-connections.ts +66 -0
- package/src/hooks/use-api-call.ts +71 -0
- package/src/hooks/use-auth.ts +51 -0
- package/src/hooks/use-connection-form.ts +349 -0
- package/src/hooks/use-connection-manager.ts +169 -0
- package/src/hooks/use-connection-payload.ts +15 -0
- package/src/hooks/use-inline-editing.ts +109 -0
- package/src/hooks/use-mobile.ts +20 -0
- package/src/hooks/use-monitoring-data.ts +270 -0
- package/src/hooks/use-provider-metadata.ts +62 -0
- package/src/hooks/use-query-execution.ts +478 -0
- package/src/hooks/use-storage-sync.ts +259 -0
- package/src/hooks/use-tab-manager.ts +231 -0
- package/src/hooks/use-toast.ts +20 -0
- package/src/hooks/use-transaction-control.ts +64 -0
- package/src/lib/api/error-codes.ts +30 -0
- package/src/lib/api/errors.ts +236 -0
- package/src/lib/api/with-error-handler.ts +41 -0
- package/src/lib/audit.ts +105 -0
- package/src/lib/auth.ts +87 -0
- package/src/lib/connection-string-parser.ts +172 -0
- package/src/lib/data-masking.ts +385 -0
- package/src/lib/db/base-provider.ts +325 -0
- package/src/lib/db/errors.ts +317 -0
- package/src/lib/db/factory.ts +324 -0
- package/src/lib/db/index.ts +123 -0
- package/src/lib/db/providers/document/index.ts +6 -0
- package/src/lib/db/providers/document/mongodb.ts +992 -0
- package/src/lib/db/providers/keyvalue/redis.ts +554 -0
- package/src/lib/db/providers/sql/index.ts +11 -0
- package/src/lib/db/providers/sql/mssql.ts +1065 -0
- package/src/lib/db/providers/sql/mysql.ts +978 -0
- package/src/lib/db/providers/sql/oracle.ts +1044 -0
- package/src/lib/db/providers/sql/postgres.ts +1179 -0
- package/src/lib/db/providers/sql/sql-base.ts +174 -0
- package/src/lib/db/providers/sql/sqlite.ts +721 -0
- package/src/lib/db/types.ts +437 -0
- package/src/lib/db/utils/pool-manager.ts +287 -0
- package/src/lib/db/utils/query-limiter.ts +239 -0
- package/src/lib/db-ui-config.ts +86 -0
- package/src/lib/editor/mongodb-completions.ts +172 -0
- package/src/lib/editor/sql-completions.ts +280 -0
- package/src/lib/llm/base-provider.ts +117 -0
- package/src/lib/llm/factory.ts +102 -0
- package/src/lib/llm/index.ts +90 -0
- package/src/lib/llm/providers/custom.ts +181 -0
- package/src/lib/llm/providers/gemini.ts +126 -0
- package/src/lib/llm/providers/ollama.ts +154 -0
- package/src/lib/llm/providers/openai.ts +146 -0
- package/src/lib/llm/types.ts +173 -0
- package/src/lib/llm/utils/config.ts +187 -0
- package/src/lib/llm/utils/retry.ts +119 -0
- package/src/lib/llm/utils/streaming.ts +202 -0
- package/src/lib/logger.ts +127 -0
- package/src/lib/monitoring-thresholds.ts +44 -0
- package/src/lib/oidc.ts +262 -0
- package/src/lib/query-generators.ts +61 -0
- package/src/lib/schema-diff/diff-engine.ts +273 -0
- package/src/lib/schema-diff/migration-generator.ts +208 -0
- package/src/lib/schema-diff/types.ts +55 -0
- package/src/lib/seed/config-loader.ts +79 -0
- package/src/lib/seed/connection-filter.ts +49 -0
- package/src/lib/seed/credential-resolver.ts +62 -0
- package/src/lib/seed/index.ts +40 -0
- package/src/lib/seed/resolve-connection.ts +57 -0
- package/src/lib/seed/types.ts +69 -0
- package/src/lib/sql/alias-extractor.ts +267 -0
- package/src/lib/sql/index.ts +8 -0
- package/src/lib/sql/statement-splitter.ts +167 -0
- package/src/lib/sql/types.ts +40 -0
- package/src/lib/ssh/tunnel.ts +142 -0
- package/src/lib/storage/factory.ts +84 -0
- package/src/lib/storage/index.ts +14 -0
- package/src/lib/storage/local-storage.ts +99 -0
- package/src/lib/storage/providers/postgres.ts +225 -0
- package/src/lib/storage/providers/sqlite.ts +153 -0
- package/src/lib/storage/storage-facade.ts +272 -0
- package/src/lib/storage/types.ts +75 -0
- package/src/lib/time-series-buffer.ts +58 -0
- package/src/lib/types.ts +173 -0
- package/src/lib/utils.ts +6 -0
- package/src/proxy.ts +104 -0
- package/src/types/db-drivers.d.ts +23 -0
- package/src/types/html2canvas.d.ts +9 -0
- package/tests/api/admin/audit.test.ts +178 -0
- package/tests/api/admin/fleet-health.test.ts +183 -0
- package/tests/api/ai/autopilot.test.ts +174 -0
- package/tests/api/ai/chat.test.ts +250 -0
- package/tests/api/ai/describe-schema.test.ts +266 -0
- package/tests/api/ai/explain.test.ts +199 -0
- package/tests/api/ai/impact.test.ts +168 -0
- package/tests/api/ai/index-advisor.test.ts +171 -0
- package/tests/api/ai/nl2sql.test.ts +202 -0
- package/tests/api/ai/query-safety.test.ts +196 -0
- package/tests/api/auth/login.test.ts +170 -0
- package/tests/api/auth/logout.test.ts +140 -0
- package/tests/api/auth/me.test.ts +73 -0
- package/tests/api/auth/oidc-callback.test.ts +215 -0
- package/tests/api/auth/oidc-login.test.ts +127 -0
- package/tests/api/db/cancel.test.ts +198 -0
- package/tests/api/db/disconnect.test.ts +124 -0
- package/tests/api/db/health.test.ts +222 -0
- package/tests/api/db/maintenance.test.ts +263 -0
- package/tests/api/db/monitoring.test.ts +221 -0
- package/tests/api/db/multi-query.test.ts +316 -0
- package/tests/api/db/pool-stats.test.ts +135 -0
- package/tests/api/db/profile.test.ts +330 -0
- package/tests/api/db/provider-meta.test.ts +193 -0
- package/tests/api/db/query.test.ts +314 -0
- package/tests/api/db/schema-snapshot.test.ts +170 -0
- package/tests/api/db/schema.test.ts +191 -0
- package/tests/api/db/test-connection.test.ts +185 -0
- package/tests/api/db/transaction.test.ts +314 -0
- package/tests/api/proxy.test.ts +191 -0
- package/tests/api/seed/managed-route.test.ts +113 -0
- package/tests/api/storage/config.test.ts +42 -0
- package/tests/api/storage/storage-routes.test.ts +309 -0
- package/tests/components/AIAutopilotPanel.test.tsx +756 -0
- package/tests/components/AdminPage.test.tsx +33 -0
- package/tests/components/CodeGenerator.test.tsx +182 -0
- package/tests/components/CommandPalette.test.tsx +428 -0
- package/tests/components/CommunitySection.test.tsx +91 -0
- package/tests/components/ConnectionModal.mobile.test.tsx +284 -0
- package/tests/components/ConnectionModal.test.tsx +570 -0
- package/tests/components/CreateTableModal.test.tsx +383 -0
- package/tests/components/DataCharts.test.tsx +739 -0
- package/tests/components/DataImportModal.test.tsx +751 -0
- package/tests/components/DataProfiler.test.tsx +589 -0
- package/tests/components/DatabaseDocs.test.tsx +353 -0
- package/tests/components/LoginPage.test.tsx +163 -0
- package/tests/components/LoginPageOIDC.test.tsx +92 -0
- package/tests/components/MaskingSettings.test.tsx +498 -0
- package/tests/components/MobileNav.test.tsx +30 -0
- package/tests/components/MonitoringPage.test.tsx +32 -0
- package/tests/components/NL2SQLPanel.test.tsx +621 -0
- package/tests/components/Page.test.tsx +33 -0
- package/tests/components/PivotTable.test.tsx +350 -0
- package/tests/components/QueryEditor.test.tsx +1730 -0
- package/tests/components/QueryHistory.test.tsx +572 -0
- package/tests/components/QuerySafetyDialog.test.tsx +586 -0
- package/tests/components/ResultsGrid.test.tsx +804 -0
- package/tests/components/RootLayout.test.tsx +83 -0
- package/tests/components/SaveQueryModal.test.tsx +25 -0
- package/tests/components/SavedQueries.test.tsx +43 -0
- package/tests/components/SchemaDiagram.test.tsx +1034 -0
- package/tests/components/SchemaDiff.test.tsx +906 -0
- package/tests/components/SnapshotTimeline.test.tsx +174 -0
- package/tests/components/Studio.test.tsx +1030 -0
- package/tests/components/TestDataGenerator.test.tsx +291 -0
- package/tests/components/VisualExplain.test.tsx +704 -0
- package/tests/components/admin/AdminDashboard.test.tsx +205 -0
- package/tests/components/admin/AuditTab.test.tsx +220 -0
- package/tests/components/admin/MonitoringEmbed.test.tsx +58 -0
- package/tests/components/admin/OperationsTab.test.tsx +975 -0
- package/tests/components/admin/OverviewTab.test.tsx +254 -0
- package/tests/components/admin/SecurityTab.test.tsx +467 -0
- package/tests/components/monitoring/MetricChart.test.tsx +111 -0
- package/tests/components/monitoring/MonitoringDashboard.test.tsx +259 -0
- package/tests/components/monitoring/OverviewTab.test.tsx +78 -0
- package/tests/components/monitoring/PerformanceTab.test.tsx +87 -0
- package/tests/components/monitoring/PoolTab.test.tsx +42 -0
- package/tests/components/monitoring/QueriesTab.test.tsx +80 -0
- package/tests/components/monitoring/SessionsTab.test.tsx +154 -0
- package/tests/components/monitoring/StorageTab.test.tsx +127 -0
- package/tests/components/monitoring/TablesTab.test.tsx +153 -0
- package/tests/components/results-grid/ResultCard.test.tsx +105 -0
- package/tests/components/results-grid/RowDetailSheet.test.tsx +308 -0
- package/tests/components/results-grid/StatsBar.test.tsx +162 -0
- package/tests/components/schema-explorer/ColumnList.test.tsx +151 -0
- package/tests/components/schema-explorer/SchemaExplorer.test.tsx +461 -0
- package/tests/components/schema-explorer/TableItem.test.tsx +415 -0
- package/tests/components/sidebar/ConnectionItem.test.tsx +201 -0
- package/tests/components/sidebar/ConnectionsList.test.tsx +176 -0
- package/tests/components/sidebar/Sidebar.test.tsx +187 -0
- package/tests/components/studio/BottomPanel.test.tsx +383 -0
- package/tests/components/studio/QueryToolbar.test.tsx +321 -0
- package/tests/components/studio/StudioDesktopHeader.test.tsx +377 -0
- package/tests/components/studio/StudioMobileHeader.test.tsx +198 -0
- package/tests/components/studio/StudioTabBar.test.tsx +331 -0
- package/tests/fixtures/connections.ts +96 -0
- package/tests/fixtures/masking-configs.ts +86 -0
- package/tests/fixtures/query-results.ts +71 -0
- package/tests/fixtures/schemas.ts +64 -0
- package/tests/fixtures/seed-connections/invalid-config.yaml +7 -0
- package/tests/fixtures/seed-connections/minimal-config.yaml +8 -0
- package/tests/fixtures/seed-connections/mixed-credentials.yaml +23 -0
- package/tests/fixtures/seed-connections/multi-role-config.yaml +30 -0
- package/tests/fixtures/seed-connections/valid-config.json +15 -0
- package/tests/fixtures/seed-connections/valid-config.yaml +51 -0
- package/tests/helpers/mock-fetch.ts +59 -0
- package/tests/helpers/mock-monaco.ts +112 -0
- package/tests/helpers/mock-navigation.ts +28 -0
- package/tests/helpers/mock-next.ts +80 -0
- package/tests/helpers/mock-provider.ts +133 -0
- package/tests/helpers/mock-sonner.ts +29 -0
- package/tests/helpers/render-with-providers.tsx +19 -0
- package/tests/hooks/use-ai-chat.test.ts +600 -0
- package/tests/hooks/use-auth.test.ts +371 -0
- package/tests/hooks/use-connection-form.test.ts +743 -0
- package/tests/hooks/use-connection-manager.test.ts +466 -0
- package/tests/hooks/use-inline-editing.test.ts +321 -0
- package/tests/hooks/use-mobile.test.ts +177 -0
- package/tests/hooks/use-monitoring-data.test.ts +819 -0
- package/tests/hooks/use-provider-metadata.test.ts +228 -0
- package/tests/hooks/use-query-execution.test.ts +1212 -0
- package/tests/hooks/use-tab-manager.test.ts +756 -0
- package/tests/hooks/use-toast.test.ts +74 -0
- package/tests/hooks/use-transaction-control.test.ts +211 -0
- package/tests/integration/db/mongodb-provider.test.ts +698 -0
- package/tests/integration/db/mssql-provider.test.ts +840 -0
- package/tests/integration/db/mysql-provider.test.ts +872 -0
- package/tests/integration/db/oracle-provider.test.ts +843 -0
- package/tests/integration/db/postgres-provider.test.ts +1382 -0
- package/tests/integration/db/redis-provider.test.ts +526 -0
- package/tests/integration/db/sqlite-provider.test.ts +480 -0
- package/tests/integration/seed/seed-pipeline.test.ts +102 -0
- package/tests/isolated/factory-singleton.test.ts +150 -0
- package/tests/isolated/use-storage-sync.test.ts +389 -0
- package/tests/run-components.sh +196 -0
- package/tests/setup-dom.ts +58 -0
- package/tests/setup.ts +40 -0
- package/tests/unit/api-errors.test.ts +210 -0
- package/tests/unit/code-generator-functions.test.ts +271 -0
- package/tests/unit/components/column-list.test.tsx +190 -0
- package/tests/unit/components/data-import-modal.test.tsx +441 -0
- package/tests/unit/components/studio-mobile-header.test.tsx +327 -0
- package/tests/unit/data-charts-functions.test.ts +496 -0
- package/tests/unit/data-import-functions.test.ts +320 -0
- package/tests/unit/data-import-utils.test.ts +125 -0
- package/tests/unit/db/base-provider.test.ts +517 -0
- package/tests/unit/db/errors.test.ts +403 -0
- package/tests/unit/db/factory.test.ts +436 -0
- package/tests/unit/db/pool-manager.test.ts +440 -0
- package/tests/unit/db/query-limiter.test.ts +387 -0
- package/tests/unit/db/sql-base.test.ts +438 -0
- package/tests/unit/lib/api/error-codes.test.ts +39 -0
- package/tests/unit/lib/audit.test.ts +326 -0
- package/tests/unit/lib/auth.test.ts +146 -0
- package/tests/unit/lib/connection-string-parser.test.ts +424 -0
- package/tests/unit/lib/data-masking.test.ts +583 -0
- package/tests/unit/lib/db-icons.test.tsx +41 -0
- package/tests/unit/lib/monitoring-thresholds.test.ts +133 -0
- package/tests/unit/lib/oidc.test.ts +509 -0
- package/tests/unit/lib/query-generators.test.ts +127 -0
- package/tests/unit/lib/storage/factory.test.ts +71 -0
- package/tests/unit/lib/storage/local-storage.test.ts +114 -0
- package/tests/unit/lib/storage/providers/postgres.test.ts +312 -0
- package/tests/unit/lib/storage/providers/sqlite.test.ts +232 -0
- package/tests/unit/lib/storage/storage-facade-extended.test.ts +331 -0
- package/tests/unit/lib/storage/storage-facade.test.ts +184 -0
- package/tests/unit/lib/storage.test.ts +317 -0
- package/tests/unit/lib/time-series-buffer.test.ts +212 -0
- package/tests/unit/lib/utils.test.ts +24 -0
- package/tests/unit/llm/base-provider.test.ts +238 -0
- package/tests/unit/llm/config.test.ts +262 -0
- package/tests/unit/llm/custom-provider.test.ts +281 -0
- package/tests/unit/llm/gemini-provider.test.ts +248 -0
- package/tests/unit/llm/llm-factory.test.ts +155 -0
- package/tests/unit/llm/ollama-provider.test.ts +288 -0
- package/tests/unit/llm/openai-provider.test.ts +324 -0
- package/tests/unit/llm/retry.test.ts +180 -0
- package/tests/unit/llm/streaming.test.ts +355 -0
- package/tests/unit/logger.test.ts +198 -0
- package/tests/unit/mongodb-completions.test.ts +516 -0
- package/tests/unit/pivot-table-functions.test.ts +76 -0
- package/tests/unit/query-cancelled-error.test.ts +81 -0
- package/tests/unit/schema-diff/diff-engine.test.ts +367 -0
- package/tests/unit/schema-diff/migration-generator.test.ts +513 -0
- package/tests/unit/seed/config-loader.test.ts +73 -0
- package/tests/unit/seed/connection-filter.test.ts +91 -0
- package/tests/unit/seed/credential-resolver.test.ts +85 -0
- package/tests/unit/seed/index.test.ts +72 -0
- package/tests/unit/seed/resolve-connection.test.ts +74 -0
- package/tests/unit/seed/types.test.ts +129 -0
- package/tests/unit/sql/alias-extractor.test.ts +444 -0
- package/tests/unit/sql/statement-splitter.test.ts +348 -0
- package/tests/unit/sql-completions.test.ts +463 -0
- package/tests/unit/ssh-tunnel.test.ts +465 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# -- Number of replicas. Note: SQLite storage mode only supports 1 replica.
|
|
2
|
+
replicaCount: 1
|
|
3
|
+
|
|
4
|
+
image:
|
|
5
|
+
# -- Container image repository
|
|
6
|
+
repository: ghcr.io/libredb/libredb-studio
|
|
7
|
+
# -- Image pull policy
|
|
8
|
+
pullPolicy: IfNotPresent
|
|
9
|
+
# -- Overrides the image tag (default: Chart appVersion)
|
|
10
|
+
tag: ""
|
|
11
|
+
|
|
12
|
+
# -- Image pull secrets for private registries
|
|
13
|
+
imagePullSecrets: []
|
|
14
|
+
# -- Override the chart name
|
|
15
|
+
nameOverride: ""
|
|
16
|
+
# -- Override the full release name
|
|
17
|
+
fullnameOverride: ""
|
|
18
|
+
|
|
19
|
+
# =============================================================================
|
|
20
|
+
# Secrets — sensitive values stored in a Kubernetes Secret
|
|
21
|
+
# =============================================================================
|
|
22
|
+
secrets:
|
|
23
|
+
# -- Use an existing Secret instead of creating one.
|
|
24
|
+
# When set, all other secret values are ignored.
|
|
25
|
+
existingSecret: ""
|
|
26
|
+
# -- Key name mapping for existing secrets.
|
|
27
|
+
# Override if your existing secret uses different key names.
|
|
28
|
+
existingSecretKeys:
|
|
29
|
+
jwtSecret: jwt-secret
|
|
30
|
+
adminEmail: admin-email
|
|
31
|
+
adminPassword: admin-password
|
|
32
|
+
userEmail: user-email
|
|
33
|
+
userPassword: user-password
|
|
34
|
+
llmApiKey: llm-api-key
|
|
35
|
+
oidcClientId: oidc-client-id
|
|
36
|
+
oidcClientSecret: oidc-client-secret
|
|
37
|
+
storagePostgresUrl: storage-postgres-url
|
|
38
|
+
# -- JWT signing secret (min 32 chars). Required.
|
|
39
|
+
jwtSecret: ""
|
|
40
|
+
# -- Admin account email
|
|
41
|
+
adminEmail: "admin@libredb.org"
|
|
42
|
+
# -- Admin account password. Required.
|
|
43
|
+
adminPassword: ""
|
|
44
|
+
# -- Regular user account email
|
|
45
|
+
userEmail: "user@libredb.org"
|
|
46
|
+
# -- Regular user account password. Required.
|
|
47
|
+
userPassword: ""
|
|
48
|
+
# -- LLM API key (optional, for AI features)
|
|
49
|
+
llmApiKey: ""
|
|
50
|
+
# -- OIDC client ID (required when authProvider=oidc)
|
|
51
|
+
oidcClientId: ""
|
|
52
|
+
# -- OIDC client secret (required when authProvider=oidc)
|
|
53
|
+
oidcClientSecret: ""
|
|
54
|
+
# -- PostgreSQL connection URL for storage (required when storageProvider=postgres and postgresql.enabled=false)
|
|
55
|
+
storagePostgresUrl: ""
|
|
56
|
+
|
|
57
|
+
# =============================================================================
|
|
58
|
+
# Config — non-sensitive values stored in a ConfigMap
|
|
59
|
+
# =============================================================================
|
|
60
|
+
|
|
61
|
+
# -- Authentication provider: "local" or "oidc"
|
|
62
|
+
authProvider: "local"
|
|
63
|
+
|
|
64
|
+
config:
|
|
65
|
+
# -- Log level
|
|
66
|
+
logLevel: "info"
|
|
67
|
+
# -- Storage provider: "local" (browser), "sqlite" (file), or "postgres" (database)
|
|
68
|
+
storageProvider: "local"
|
|
69
|
+
# -- SQLite database file path (when storageProvider=sqlite)
|
|
70
|
+
storageSqlitePath: "/app/data/libredb-storage.db"
|
|
71
|
+
# -- LLM provider: gemini, openai, ollama, custom (optional)
|
|
72
|
+
llmProvider: ""
|
|
73
|
+
# -- LLM model name (optional)
|
|
74
|
+
llmModel: ""
|
|
75
|
+
# -- LLM API URL for ollama/custom providers (optional)
|
|
76
|
+
llmApiUrl: ""
|
|
77
|
+
# -- OIDC issuer URL (required when authProvider=oidc)
|
|
78
|
+
oidcIssuer: ""
|
|
79
|
+
# -- OIDC scopes (space-separated)
|
|
80
|
+
oidcScope: "openid profile email"
|
|
81
|
+
# -- OIDC claim path for role extraction
|
|
82
|
+
oidcRoleClaim: ""
|
|
83
|
+
# -- OIDC admin role values (comma-separated)
|
|
84
|
+
oidcAdminRoles: "admin"
|
|
85
|
+
|
|
86
|
+
# =============================================================================
|
|
87
|
+
# Persistence — PVC for SQLite storage mode
|
|
88
|
+
# =============================================================================
|
|
89
|
+
persistence:
|
|
90
|
+
# -- Enable persistent storage. Auto-enabled when storageProvider=sqlite.
|
|
91
|
+
enabled: false
|
|
92
|
+
# -- Storage class name (leave empty for default)
|
|
93
|
+
storageClassName: ""
|
|
94
|
+
# -- Access modes
|
|
95
|
+
accessModes:
|
|
96
|
+
- ReadWriteOnce
|
|
97
|
+
# -- Storage size
|
|
98
|
+
size: 1Gi
|
|
99
|
+
# -- Use an existing PVC instead of creating one
|
|
100
|
+
existingClaim: ""
|
|
101
|
+
# -- Annotations for the PVC
|
|
102
|
+
annotations: {}
|
|
103
|
+
|
|
104
|
+
# =============================================================================
|
|
105
|
+
# Security
|
|
106
|
+
# =============================================================================
|
|
107
|
+
serviceAccount:
|
|
108
|
+
# -- Create a ServiceAccount
|
|
109
|
+
create: true
|
|
110
|
+
# -- Annotations (e.g., for IRSA or Workload Identity)
|
|
111
|
+
annotations: {}
|
|
112
|
+
# -- ServiceAccount name (auto-generated if empty)
|
|
113
|
+
name: ""
|
|
114
|
+
# -- Automount API credentials
|
|
115
|
+
automountServiceAccountToken: false
|
|
116
|
+
|
|
117
|
+
podSecurityContext:
|
|
118
|
+
runAsNonRoot: true
|
|
119
|
+
runAsUser: 1001
|
|
120
|
+
runAsGroup: 1001
|
|
121
|
+
fsGroup: 1001
|
|
122
|
+
seccompProfile:
|
|
123
|
+
type: RuntimeDefault
|
|
124
|
+
|
|
125
|
+
securityContext:
|
|
126
|
+
allowPrivilegeEscalation: false
|
|
127
|
+
readOnlyRootFilesystem: true
|
|
128
|
+
capabilities:
|
|
129
|
+
drop:
|
|
130
|
+
- ALL
|
|
131
|
+
|
|
132
|
+
# -- Pod annotations
|
|
133
|
+
podAnnotations: {}
|
|
134
|
+
# -- Pod labels
|
|
135
|
+
podLabels: {}
|
|
136
|
+
|
|
137
|
+
# =============================================================================
|
|
138
|
+
# Probes — uses /api/db/health endpoint
|
|
139
|
+
# =============================================================================
|
|
140
|
+
startupProbe:
|
|
141
|
+
httpGet:
|
|
142
|
+
path: /api/db/health
|
|
143
|
+
port: http
|
|
144
|
+
failureThreshold: 30
|
|
145
|
+
periodSeconds: 2
|
|
146
|
+
|
|
147
|
+
readinessProbe:
|
|
148
|
+
httpGet:
|
|
149
|
+
path: /api/db/health
|
|
150
|
+
port: http
|
|
151
|
+
initialDelaySeconds: 5
|
|
152
|
+
periodSeconds: 10
|
|
153
|
+
|
|
154
|
+
livenessProbe:
|
|
155
|
+
httpGet:
|
|
156
|
+
path: /api/db/health
|
|
157
|
+
port: http
|
|
158
|
+
initialDelaySeconds: 30
|
|
159
|
+
periodSeconds: 30
|
|
160
|
+
|
|
161
|
+
# =============================================================================
|
|
162
|
+
# Resources
|
|
163
|
+
# =============================================================================
|
|
164
|
+
resources:
|
|
165
|
+
requests:
|
|
166
|
+
cpu: 100m
|
|
167
|
+
memory: 256Mi
|
|
168
|
+
limits:
|
|
169
|
+
memory: 512Mi
|
|
170
|
+
|
|
171
|
+
# =============================================================================
|
|
172
|
+
# Networking
|
|
173
|
+
# =============================================================================
|
|
174
|
+
service:
|
|
175
|
+
# -- Service type: ClusterIP, NodePort, or LoadBalancer
|
|
176
|
+
type: ClusterIP
|
|
177
|
+
# -- Service port
|
|
178
|
+
port: 80
|
|
179
|
+
# -- Container target port
|
|
180
|
+
targetPort: 3000
|
|
181
|
+
# -- NodePort (only when type=NodePort)
|
|
182
|
+
nodePort: ""
|
|
183
|
+
# -- Service annotations
|
|
184
|
+
annotations: {}
|
|
185
|
+
|
|
186
|
+
ingress:
|
|
187
|
+
# -- Enable Ingress
|
|
188
|
+
enabled: false
|
|
189
|
+
# -- Ingress class name (e.g., nginx, traefik)
|
|
190
|
+
className: ""
|
|
191
|
+
# -- Ingress annotations
|
|
192
|
+
annotations: {}
|
|
193
|
+
# -- Ingress hosts
|
|
194
|
+
hosts:
|
|
195
|
+
- host: libredb.local
|
|
196
|
+
paths:
|
|
197
|
+
- path: /
|
|
198
|
+
pathType: Prefix
|
|
199
|
+
# -- TLS configuration
|
|
200
|
+
tls: []
|
|
201
|
+
# - secretName: libredb-tls
|
|
202
|
+
# hosts:
|
|
203
|
+
# - libredb.local
|
|
204
|
+
|
|
205
|
+
networkPolicy:
|
|
206
|
+
# -- Enable NetworkPolicy
|
|
207
|
+
enabled: false
|
|
208
|
+
# -- Additional ingress rules
|
|
209
|
+
additionalIngress: []
|
|
210
|
+
# -- Additional egress rules
|
|
211
|
+
additionalEgress: []
|
|
212
|
+
|
|
213
|
+
# =============================================================================
|
|
214
|
+
# Autoscaling & HA
|
|
215
|
+
# =============================================================================
|
|
216
|
+
autoscaling:
|
|
217
|
+
# -- Enable HorizontalPodAutoscaler
|
|
218
|
+
enabled: false
|
|
219
|
+
# -- Minimum replicas
|
|
220
|
+
minReplicas: 2
|
|
221
|
+
# -- Maximum replicas
|
|
222
|
+
maxReplicas: 10
|
|
223
|
+
# -- Target CPU utilization percentage
|
|
224
|
+
targetCPUUtilizationPercentage: 75
|
|
225
|
+
# -- Target memory utilization percentage
|
|
226
|
+
targetMemoryUtilizationPercentage: 80
|
|
227
|
+
|
|
228
|
+
podDisruptionBudget:
|
|
229
|
+
# -- Enable PodDisruptionBudget
|
|
230
|
+
enabled: false
|
|
231
|
+
# -- Minimum available pods (mutually exclusive with maxUnavailable)
|
|
232
|
+
minAvailable: 1
|
|
233
|
+
# -- Maximum unavailable pods
|
|
234
|
+
# maxUnavailable: 1
|
|
235
|
+
|
|
236
|
+
# =============================================================================
|
|
237
|
+
# PostgreSQL Subchart (Bitnami)
|
|
238
|
+
# =============================================================================
|
|
239
|
+
postgresql:
|
|
240
|
+
# -- Deploy a PostgreSQL instance for storage backend
|
|
241
|
+
enabled: false
|
|
242
|
+
auth:
|
|
243
|
+
# -- PostgreSQL username
|
|
244
|
+
username: "libredb"
|
|
245
|
+
# -- PostgreSQL password
|
|
246
|
+
password: ""
|
|
247
|
+
# -- PostgreSQL database name
|
|
248
|
+
database: "libredb_storage"
|
|
249
|
+
|
|
250
|
+
# =============================================================================
|
|
251
|
+
# Scheduling
|
|
252
|
+
# =============================================================================
|
|
253
|
+
# -- Node selector
|
|
254
|
+
nodeSelector: {}
|
|
255
|
+
# -- Tolerations
|
|
256
|
+
tolerations: []
|
|
257
|
+
# -- Affinity rules
|
|
258
|
+
affinity: {}
|
|
259
|
+
# -- Topology spread constraints
|
|
260
|
+
topologySpreadConstraints: []
|
|
261
|
+
|
|
262
|
+
# =============================================================================
|
|
263
|
+
# Extra configuration
|
|
264
|
+
# =============================================================================
|
|
265
|
+
# -- Additional environment variables
|
|
266
|
+
extraEnv: []
|
|
267
|
+
# - name: MY_VAR
|
|
268
|
+
# value: "my-value"
|
|
269
|
+
|
|
270
|
+
# -- Additional envFrom references
|
|
271
|
+
extraEnvFrom: []
|
|
272
|
+
# - configMapRef:
|
|
273
|
+
# name: my-config
|
|
274
|
+
|
|
275
|
+
# -- Seed connections: pre-configured database connections
|
|
276
|
+
seedConnections:
|
|
277
|
+
# -- Enable seed connections feature
|
|
278
|
+
enabled: false
|
|
279
|
+
# -- Inline config (rendered as YAML in ConfigMap)
|
|
280
|
+
config: {}
|
|
281
|
+
# -- Use an existing ConfigMap instead of inline config
|
|
282
|
+
existingConfigMap: ""
|
|
283
|
+
# -- Key within the ConfigMap containing the YAML config
|
|
284
|
+
configMapKey: "seed-connections.yaml"
|
|
285
|
+
# -- Cache TTL in milliseconds for config reloading
|
|
286
|
+
cacheTTL: 60000
|
package/components.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "new-york",
|
|
4
|
+
"rsc": true,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "src/app/globals.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"iconLibrary": "lucide",
|
|
14
|
+
"aliases": {
|
|
15
|
+
"components": "@/components",
|
|
16
|
+
"utils": "@/lib/utils",
|
|
17
|
+
"ui": "@/components/ui",
|
|
18
|
+
"lib": "@/lib",
|
|
19
|
+
"hooks": "@/hooks"
|
|
20
|
+
},
|
|
21
|
+
"registries": {}
|
|
22
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Google TypeScript Style Guide Summary
|
|
2
|
+
|
|
3
|
+
This document summarizes key rules and best practices from the Google TypeScript Style Guide, which is enforced by the `gts` tool.
|
|
4
|
+
|
|
5
|
+
## 1. Language Features
|
|
6
|
+
- **Variable Declarations:** Always use `const` or `let`. **`var` is forbidden.** Use `const` by default.
|
|
7
|
+
- **Modules:** Use ES6 modules (`import`/`export`). **Do not use `namespace`.**
|
|
8
|
+
- **Exports:** Use named exports (`export {MyClass};`). **Do not use default exports.**
|
|
9
|
+
- **Classes:**
|
|
10
|
+
- **Do not use `#private` fields.** Use TypeScript's `private` visibility modifier.
|
|
11
|
+
- Mark properties never reassigned outside the constructor with `readonly`.
|
|
12
|
+
- **Never use the `public` modifier** (it's the default). Restrict visibility with `private` or `protected` where possible.
|
|
13
|
+
- **Functions:** Prefer function declarations for named functions. Use arrow functions for anonymous functions/callbacks.
|
|
14
|
+
- **String Literals:** Use single quotes (`'`). Use template literals (`` ` ``) for interpolation and multi-line strings.
|
|
15
|
+
- **Equality Checks:** Always use triple equals (`===`) and not equals (`!==`).
|
|
16
|
+
- **Type Assertions:** **Avoid type assertions (`x as SomeType`) and non-nullability assertions (`y!`)**. If you must use them, provide a clear justification.
|
|
17
|
+
|
|
18
|
+
## 2. Disallowed Features
|
|
19
|
+
- **`any` Type:** **Avoid `any`**. Prefer `unknown` or a more specific type.
|
|
20
|
+
- **Wrapper Objects:** Do not instantiate `String`, `Boolean`, or `Number` wrapper classes.
|
|
21
|
+
- **Automatic Semicolon Insertion (ASI):** Do not rely on it. **Explicitly end all statements with a semicolon.**
|
|
22
|
+
- **`const enum`:** Do not use `const enum`. Use plain `enum` instead.
|
|
23
|
+
- **`eval()` and `Function(...string)`:** Forbidden.
|
|
24
|
+
|
|
25
|
+
## 3. Naming
|
|
26
|
+
- **`UpperCamelCase`:** For classes, interfaces, types, enums, and decorators.
|
|
27
|
+
- **`lowerCamelCase`:** For variables, parameters, functions, methods, and properties.
|
|
28
|
+
- **`CONSTANT_CASE`:** For global constant values, including enum values.
|
|
29
|
+
- **`_` Prefix/Suffix:** **Do not use `_` as a prefix or suffix** for identifiers, including for private properties.
|
|
30
|
+
|
|
31
|
+
## 4. Type System
|
|
32
|
+
- **Type Inference:** Rely on type inference for simple, obvious types. Be explicit for complex types.
|
|
33
|
+
- **`undefined` and `null`:** Both are supported. Be consistent within your project.
|
|
34
|
+
- **Optional vs. `|undefined`:** Prefer optional parameters and fields (`?`) over adding `|undefined` to the type.
|
|
35
|
+
- **`Array<T>` Type:** Use `T[]` for simple types. Use `Array<T>` for more complex union types (e.g., `Array<string | number>`).
|
|
36
|
+
- **`{}` Type:** **Do not use `{}`**. Prefer `unknown`, `Record<string, unknown>`, or `object`.
|
|
37
|
+
|
|
38
|
+
## 5. Comments and Documentation
|
|
39
|
+
- **JSDoc:** Use `/** JSDoc */` for documentation, `//` for implementation comments.
|
|
40
|
+
- **Redundancy:** **Do not declare types in `@param` or `@return` blocks** (e.g., `/** @param {string} user */`). This is redundant in TypeScript.
|
|
41
|
+
- **Add Information:** Comments must add information, not just restate the code.
|
|
42
|
+
|
|
43
|
+
*Source: [Google TypeScript Style Guide](https://google.github.io/styleguide/tsguide.html)*
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Product Guidelines
|
|
2
|
+
|
|
3
|
+
This document outlines the core principles that guide the development and identity of LibreDB Studio.
|
|
4
|
+
|
|
5
|
+
## Tone of Voice
|
|
6
|
+
|
|
7
|
+
Our communication style should reflect our position as a modern, reliable, and user-centric tool. The following hierarchy should be used when crafting any user-facing text:
|
|
8
|
+
|
|
9
|
+
1. **Innovative & Cutting-Edge:** We are a forward-thinking platform. Our language should be energetic and inspiring, highlighting advanced features and AI capabilities.
|
|
10
|
+
2. **Professional & Authoritative:** We are a serious tool for professionals. Our tone should be clear, precise, and instill confidence in our reliability and expertise.
|
|
11
|
+
3. **Friendly & Approachable:** We are here to help. Our communication should be welcoming, easy to understand, and supportive, especially during onboarding and for community interactions.
|
|
12
|
+
|
|
13
|
+
## Visual Design & User Experience
|
|
14
|
+
|
|
15
|
+
Our design philosophy is **Data-First & Utilitarian**. The interface must be optimized for power users who need to access and manipulate large amounts of information efficiently.
|
|
16
|
+
|
|
17
|
+
- **Information Density:** Prioritize a dense, information-rich interface.
|
|
18
|
+
- **Function over Form:** Practicality and speed take precedence over purely aesthetic choices.
|
|
19
|
+
- **Clarity and Readability:** Despite the density, typography, and layout must ensure that data is easy to read and interpret.
|
|
20
|
+
|
|
21
|
+
## Brand Messaging
|
|
22
|
+
|
|
23
|
+
Our brand messaging is centered around being **Open-Source & Community Driven**.
|
|
24
|
+
|
|
25
|
+
- **Transparency:** We are open about our development process, roadmap, and challenges.
|
|
26
|
+
- **Extensibility:** We encourage and support community contributions, from plugins to core features.
|
|
27
|
+
- **Collaboration:** We foster a strong community where users can share knowledge, best practices, and solutions.
|
|
28
|
+
|
|
29
|
+
## Documentation & Learning Resources
|
|
30
|
+
|
|
31
|
+
Our documentation is focused on providing **Comprehensive Technical References**.
|
|
32
|
+
|
|
33
|
+
- **Accuracy and Detail:** Documentation must be precise, thorough, and technically accurate.
|
|
34
|
+
- **Target Audience:** The primary audience is developers and DBAs who require deep technical knowledge.
|
|
35
|
+
- **Completeness:** We aim to provide exhaustive API documentation, schema explanations, and advanced configuration guides.
|
|
36
|
+
|
|
37
|
+
## New Feature Development
|
|
38
|
+
|
|
39
|
+
The guiding principle for new feature development is **Innovation & Experimentation**.
|
|
40
|
+
|
|
41
|
+
- **Rapid Prototyping:** We encourage the quick development and release of novel features.
|
|
42
|
+
- **Embrace Experimentation:** We are not afraid to introduce experimental features to push the boundaries of what a SQL IDE can do.
|
|
43
|
+
- **Fail Fast:** We learn from our experiments, iterating quickly based on user feedback and technical feasibility.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"last_successful_step": "3.3_initial_track_generated"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Technology Stack
|
|
2
|
+
|
|
3
|
+
This document outlines the core technologies and frameworks utilized in LibreDB Studio.
|
|
4
|
+
|
|
5
|
+
## Frontend
|
|
6
|
+
|
|
7
|
+
* **Framework:** Next.js 15 (App Router)
|
|
8
|
+
* **Library:** React 19
|
|
9
|
+
* **UI Frameworks:** Tailwind CSS 4, Radix UI, shadcn/ui
|
|
10
|
+
* **Editor Component:** Monaco Editor (VS Code Engine)
|
|
11
|
+
* **State/Data Grid Management:** TanStack Table & Virtual
|
|
12
|
+
* **Programming Language:** TypeScript
|
|
13
|
+
|
|
14
|
+
## Backend
|
|
15
|
+
|
|
16
|
+
* **Framework:** Next.js (API Routes)
|
|
17
|
+
* **Programming Language:** TypeScript
|
|
18
|
+
* **AI Integration:** Multi-Model (Gemini, OpenAI, Ollama, Custom)
|
|
19
|
+
|
|
20
|
+
## Supported Databases
|
|
21
|
+
|
|
22
|
+
LibreDB Studio is designed to support a variety of relational and non-relational databases:
|
|
23
|
+
|
|
24
|
+
* PostgreSQL
|
|
25
|
+
* MySQL
|
|
26
|
+
* SQLite
|
|
27
|
+
* MongoDB
|
|
28
|
+
|
|
29
|
+
## Deployment & Infrastructure
|
|
30
|
+
|
|
31
|
+
* **Containerization:** Docker
|
|
32
|
+
* **Orchestration:** Kubernetes (compatible)
|
|
33
|
+
|
|
34
|
+
## Other Tools & Libraries
|
|
35
|
+
|
|
36
|
+
* **Package Manager:** Bun (recommended)
|
|
37
|
+
* **Linting:** ESLint
|
|
38
|
+
* **Styling:** PostCSS
|
|
39
|
+
* **Type Checking:** TypeScript
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"track_id": "enhance_postgres_monitoring_20251227",
|
|
3
|
+
"type": "feature",
|
|
4
|
+
"status": "new",
|
|
5
|
+
"created_at": "2025-12-27T12:00:00Z",
|
|
6
|
+
"updated_at": "2025-12-27T12:00:00Z",
|
|
7
|
+
"description": "Enhance existing database provider for PostgreSQL to support advanced monitoring features."
|
|
8
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Plan: Enhance PostgreSQL Monitoring
|
|
2
|
+
|
|
3
|
+
**Track:** Enhance existing database provider for PostgreSQL to support advanced monitoring features.
|
|
4
|
+
|
|
5
|
+
This plan outlines the steps to enhance the PostgreSQL provider with advanced monitoring capabilities.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Phase 1: Foundational Metrics - `pg_stat_activity` and `pg_stat_statements`
|
|
10
|
+
|
|
11
|
+
### Tasks
|
|
12
|
+
|
|
13
|
+
- [~] **Task:** Write tests for `pg_stat_activity` data retrieval.
|
|
14
|
+
- [ ] **Task:** Implement `pg_stat_activity` data retrieval in the PostgreSQL provider.
|
|
15
|
+
- [ ] **Task:** Write tests for `pg_stat_statements` data retrieval.
|
|
16
|
+
- [ ] **Task:** Implement `pg_stat_statements` data retrieval in the PostgreSQL provider.
|
|
17
|
+
- [ ] **Task:** Create a new API endpoint `/api/db/monitoring/postgres/activity` to expose `pg_stat_activity` data.
|
|
18
|
+
- [ ] **Task:** Create a new API endpoint `/api/db/monitoring/postgres/statements` to expose `pg_stat_statements` data.
|
|
19
|
+
- [ ] **Task:** Conductor - User Manual Verification 'Phase 1: Foundational Metrics' (Protocol in workflow.md)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Phase 2: Index and Table Analysis
|
|
24
|
+
|
|
25
|
+
### Tasks
|
|
26
|
+
|
|
27
|
+
- [ ] **Task:** Write tests for index usage statistics retrieval.
|
|
28
|
+
- [ ] **Task:** Implement index usage statistics retrieval from `pg_stat_user_indexes` and `pg_stat_user_tables`.
|
|
29
|
+
- [ ] **Task:** Write tests for table and index bloat estimation.
|
|
30
|
+
- [ ] **Task:** Implement table and index bloat estimation queries.
|
|
31
|
+
- [ ] **Task:** Create a new API endpoint `/api/db/monitoring/postgres/indexes` to expose index usage and bloat data.
|
|
32
|
+
- [ ] **Task:** Conductor - User Manual Verification 'Phase 2: Index and Table Analysis' (Protocol in workflow.md)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Phase 3: Cache Performance and Finalization
|
|
37
|
+
|
|
38
|
+
### Tasks
|
|
39
|
+
|
|
40
|
+
- [ ] **Task:** Write tests for cache hit rate calculation.
|
|
41
|
+
- [ ] **Task:** Implement cache hit rate calculation for tables and indexes.
|
|
42
|
+
- [ ] **Task:** Create a new API endpoint `/api/db/monitoring/postgres/cache` to expose cache hit rate data.
|
|
43
|
+
- [ ] **Task:** Refactor the monitoring provider to ensure all new functions are cohesive and well-documented.
|
|
44
|
+
- [ ] **Task:** Conductor - User Manual Verification 'Phase 3: Cache Performance and Finalization' (Protocol in workflow.md)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Specification for Advanced PostgreSQL Monitoring
|
|
2
|
+
|
|
3
|
+
**Track:** Enhance existing database provider for PostgreSQL to support advanced monitoring features.
|
|
4
|
+
|
|
5
|
+
## 1. Overview
|
|
6
|
+
|
|
7
|
+
This document outlines the technical specifications for enhancing the existing PostgreSQL database provider to support advanced monitoring capabilities. The primary goal is to expose key performance and health metrics from a connected PostgreSQL instance directly within the LibreDB Studio interface.
|
|
8
|
+
|
|
9
|
+
## 2. Functional Requirements
|
|
10
|
+
|
|
11
|
+
- **FR1: Expose `pg_stat_statements` Data:** The provider must be able to query the `pg_stat_statements` view (if the extension is enabled on the target database) and return a structured representation of the data.
|
|
12
|
+
- **FR2: Expose `pg_stat_activity` Data:** The provider must query the `pg_stat_activity` view to provide real-time information about active connections, their states, and the queries they are executing.
|
|
13
|
+
- **FR3: Expose Index Usage Statistics:** The provider must query `pg_stat_user_indexes` and `pg_stat_user_tables` to provide insights into index usage, including the number of index scans vs. sequential scans.
|
|
14
|
+
- **FR4: Expose Table & Index Bloat:** The provider should include queries to estimate table and index bloat.
|
|
15
|
+
- **FR5: Expose Cache Hit Rate:** The provider must calculate and expose the cache hit rate for indexes and tables.
|
|
16
|
+
|
|
17
|
+
## 3. Non-Functional Requirements
|
|
18
|
+
|
|
19
|
+
- **NFR1: Performance:** All monitoring queries must be designed to have minimal performance impact on the target database. They should be efficient and not lock resources.
|
|
20
|
+
- **NFR2: Error Handling:** The provider must gracefully handle cases where the required extensions (`pg_stat_statements`) are not enabled or the user lacks the necessary permissions to view the statistics tables. It should return a clear message to the user in such cases.
|
|
21
|
+
- **NFR3: Security:** The queries should be read-only and not expose any sensitive data.
|
|
22
|
+
- **NFR4: Data Structure:** The data returned by the provider should be in a well-defined, easily consumable JSON format for the frontend.
|
|
23
|
+
|
|
24
|
+
## 4. API Endpoint Integration
|
|
25
|
+
|
|
26
|
+
The new monitoring functionalities will be exposed through a new API endpoint, likely under `/api/db/monitoring/postgres`. This endpoint will accept the connection details and return the collected monitoring data.
|
|
27
|
+
|
|
28
|
+
## 5. Out of Scope
|
|
29
|
+
|
|
30
|
+
- This track does not include the implementation of the frontend components to visualize the monitoring data. It is solely focused on the backend provider and API enhancements.
|
|
31
|
+
- This track will not include any write operations or any actions that modify the database state.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Project Tracks
|
|
2
|
+
|
|
3
|
+
This file tracks all major tracks for the project. Each track has its own detailed plan in its respective folder.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## [~] Track: Enhance existing database provider for PostgreSQL to support advanced monitoring features.
|
|
8
|
+
*Link: [./conductor/tracks/enhance_postgres_monitoring_20251227/](./conductor/tracks/enhance_postgres_monitoring_20251227/)*
|