@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
package/.devin/wiki.json
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repo_notes": [
|
|
3
|
+
{
|
|
4
|
+
"content": "LibreDB Studio is a modern, AI-powered, open-source SQL IDE for cloud-native teams. It provides a zero-install, browser-based interface for managing PostgreSQL, MySQL, SQLite, Oracle, SQL Server, MongoDB, Redis databases. Built with Next.js 15 (App Router), React 19, TypeScript strict mode, Tailwind CSS 4, shadcn/ui, and Monaco Editor. The project uses Bun as its preferred runtime.",
|
|
5
|
+
"author": "Maintainer"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"content": "The codebase follows a Strategy Pattern for both database providers (src/lib/db/) and LLM providers (src/lib/llm/). Database providers are categorized as SQL (postgres, mysql, sqlite, oracle, mssql), Document (mongodb), and Key-Value (redis). LLM providers support Gemini, OpenAI, Ollama, and Custom endpoints. All providers implement a common interface and are instantiated via factory functions with dynamic imports for code splitting.",
|
|
9
|
+
"author": "Maintainer"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"content": "Authentication uses JWT tokens stored in HTTP-only cookies (jose library) with RBAC (admin/user roles). OIDC/SSO support is available via the openid-client library (src/lib/oidc.ts). Middleware at src/middleware.ts protects routes and enforces role-based access. The admin dashboard is restricted to admin role only.",
|
|
13
|
+
"author": "Maintainer"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"content": "The frontend architecture centers around the Studio component (src/components/Studio.tsx) as the main application shell. Key sub-systems include: Monaco-based QueryEditor, virtualized ResultsGrid (TanStack Table + react-virtual), SchemaExplorer with tree view, SchemaDiff with migration SQL generation, SchemaDiagram with xyflow/React Flow, real-time MonitoringDashboard with Recharts, and AI-powered panels (NL2SQL, AIAutopilot, QuerySafety).",
|
|
17
|
+
"author": "Maintainer"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"content": "Testing is multi-layered: unit tests (tests/unit/), API route handler tests (tests/api/), integration tests with mocked database drivers (tests/integration/), React hook tests (tests/hooks/), component tests with happy-dom (tests/components/), and Playwright E2E tests (e2e/). Component tests use isolated execution groups via tests/run-components.sh to prevent mock.module() cross-contamination. CI pipeline runs lint, typecheck, test, and build.",
|
|
21
|
+
"author": "Maintainer"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"content": "The project supports Docker deployment with multi-stage Bun build, standalone Next.js output, and health checks. CI/CD is configured via GitHub Actions (.github/workflows/ci.yml and docker-build-push.yml). Additional DevOps: render.yaml for Render platform deployment, docker/postgres.yml for local PostgreSQL with sample data.",
|
|
25
|
+
"author": "Maintainer"
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"pages": [
|
|
29
|
+
{
|
|
30
|
+
"title": "Architecture Overview",
|
|
31
|
+
"purpose": "High-level system architecture including the tech stack (Next.js 15, React 19, TypeScript, Tailwind CSS 4, Monaco Editor, Bun), directory structure (src/app, src/components, src/lib, src/hooks), key architectural patterns (Strategy Pattern, App Router, Server/Client Components), and how the frontend, API layer, database providers, and AI services interact. Cover the mermaid architecture diagram from docs/ARCHITECTURE.md."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"title": "Database Provider System",
|
|
35
|
+
"purpose": "Document the database abstraction layer in src/lib/db/ using the Strategy Pattern. Cover BaseDatabaseProvider (src/lib/db/base-provider.ts), SQLBaseProvider (src/lib/db/providers/sql/sql-base.ts), the factory function (src/lib/db/factory.ts), types (src/lib/db/types.ts), and custom error classes (src/lib/db/errors.ts). Explain how new providers are added.",
|
|
36
|
+
"parent": "Architecture Overview"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"title": "SQL Database Providers",
|
|
40
|
+
"purpose": "Document the SQL database providers: PostgreSQL (src/lib/db/providers/sql/postgres.ts), MySQL (src/lib/db/providers/sql/mysql.ts), SQLite (src/lib/db/providers/sql/sqlite.ts), Oracle (src/lib/db/providers/sql/oracle.ts), and SQL Server/MSSQL (src/lib/db/providers/sql/mssql.ts). Cover connection handling, query execution, schema introspection, and provider-specific features. Each extends SQLBaseProvider.",
|
|
41
|
+
"parent": "Database Provider System"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"title": "NoSQL Database Providers",
|
|
45
|
+
"purpose": "Document the MongoDB provider (src/lib/db/providers/document/mongodb.ts) and Redis provider (src/lib/db/providers/keyvalue/redis.ts). Cover JSON-based query format for MongoDB (collection, operation, filter, options), Redis command execution, and how both extend BaseDatabaseProvider.",
|
|
46
|
+
"parent": "Database Provider System"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"title": "Connection Pool & Query Management",
|
|
50
|
+
"purpose": "Document the connection pool manager (src/lib/db/utils/pool-manager.ts) and query limiter (src/lib/db/utils/query-limiter.ts). Cover pool configuration, connection reuse, cleanup strategies, query timeout handling, and rate limiting. Also cover SSH tunneling support (src/lib/ssh/tunnel.ts) and connection string parsing (src/lib/connection-string-parser.ts).",
|
|
51
|
+
"parent": "Database Provider System"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"title": "AI & LLM System",
|
|
55
|
+
"purpose": "Document the LLM abstraction layer in src/lib/llm/ using the Strategy Pattern. Cover BaseLLMProvider (src/lib/llm/base-provider.ts), factory (src/lib/llm/factory.ts), types, and all four providers: Gemini (src/lib/llm/providers/gemini.ts), OpenAI (src/lib/llm/providers/openai.ts), Ollama (src/lib/llm/providers/ollama.ts), and Custom (src/lib/llm/providers/custom.ts). Include utility modules: config (src/lib/llm/utils/config.ts), streaming (src/lib/llm/utils/streaming.ts), and retry logic (src/lib/llm/utils/retry.ts).",
|
|
56
|
+
"parent": "Architecture Overview"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"title": "AI-Powered Features",
|
|
60
|
+
"purpose": "Document all AI API endpoints and their corresponding frontend panels. Cover: AI Chat (src/app/api/ai/chat/), Natural Language to SQL (src/app/api/ai/nl2sql/ + src/components/NL2SQLPanel.tsx), SQL Explain (src/app/api/ai/explain/ + src/components/VisualExplain.tsx), Query Safety analysis (src/app/api/ai/query-safety/ + src/components/QuerySafetyDialog.tsx), AI Autopilot (src/app/api/ai/autopilot/ + src/components/AIAutopilotPanel.tsx), Impact analysis (src/app/api/ai/impact/), Schema description (src/app/api/ai/describe-schema/), and Index advisor (src/app/api/ai/index-advisor/).",
|
|
61
|
+
"parent": "AI & LLM System"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"title": "Authentication & Security",
|
|
65
|
+
"purpose": "Document the authentication system: JWT-based auth (src/lib/auth.ts) using the jose library with HTTP-only cookies, login/logout/me API routes (src/app/api/auth/), OIDC/SSO integration (src/lib/oidc.ts, src/app/api/auth/oidc/), middleware route protection (src/middleware.ts), RBAC with admin/user roles, audit logging (src/lib/audit.ts), and data masking (src/lib/data-masking.ts + src/components/MaskingSettings.tsx). Cover environment variables: ADMIN_PASSWORD, USER_PASSWORD, JWT_SECRET, OIDC_* settings.",
|
|
66
|
+
"parent": "Architecture Overview"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"title": "API Layer",
|
|
70
|
+
"purpose": "Document the REST API architecture in src/app/api/. Cover all endpoint groups: auth (login, logout, me, OIDC), database operations (query, multi-query, schema, health, test-connection, transaction, maintenance, pool-stats, provider-meta, schema-snapshot, cancel, monitoring, profile), AI endpoints (chat, nl2sql, explain, query-safety, impact, autopilot, describe-schema, index-advisor), admin endpoints (fleet-health, audit). Explain request/response patterns, error handling, and authentication requirements.",
|
|
71
|
+
"parent": "Architecture Overview"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"title": "Studio Main Shell",
|
|
75
|
+
"purpose": "Document the main application shell component (src/components/Studio.tsx) which orchestrates the entire IDE experience. Cover the layout system with resizable panels (react-resizable-panels), tab management (src/components/studio/StudioTabBar.tsx), query toolbar (src/components/studio/QueryToolbar.tsx), bottom panel (src/components/studio/BottomPanel.tsx), desktop header (src/components/studio/StudioDesktopHeader.tsx), mobile header (src/components/studio/StudioMobileHeader.tsx), sidebar integration, and mobile navigation (src/components/MobileNav.tsx)."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"title": "SQL Editor",
|
|
79
|
+
"purpose": "Document the Monaco Editor integration for SQL editing: QueryEditor component (src/components/QueryEditor.tsx), SQL completions (src/lib/editor/sql-completions.ts), MongoDB completions (src/lib/editor/mongodb-completions.ts), SQL statement splitter (src/lib/sql/statement-splitter.ts), SQL alias extractor (src/lib/sql/alias-extractor.ts), and query generators (src/lib/query-generators.ts). Cover syntax highlighting, auto-completion, multi-statement execution, and sql-formatter integration.",
|
|
80
|
+
"parent": "Studio Main Shell"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"title": "Results Grid & Data Display",
|
|
84
|
+
"purpose": "Document the virtualized data grid system: ResultsGrid (src/components/ResultsGrid.tsx) using TanStack React Table + react-virtual for virtualization. Cover sub-components: ResultCard (src/components/results-grid/ResultCard.tsx), RowDetailSheet (src/components/results-grid/RowDetailSheet.tsx), StatsBar (src/components/results-grid/StatsBar.tsx). Also cover PivotTable (src/components/PivotTable.tsx), DataCharts (src/components/DataCharts.tsx), DataProfiler (src/components/DataProfiler.tsx), and inline editing hook (src/hooks/use-inline-editing.ts).",
|
|
85
|
+
"parent": "Studio Main Shell"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"title": "Sidebar & Connection Management",
|
|
89
|
+
"purpose": "Document the sidebar system: Sidebar (src/components/sidebar/Sidebar.tsx), ConnectionsList (src/components/sidebar/ConnectionsList.tsx), ConnectionItem (src/components/sidebar/ConnectionItem.tsx), ConnectionModal (src/components/ConnectionModal.tsx), and database icons (src/components/icons/db-icons.tsx). Cover connection management hooks: use-connection-manager (src/hooks/use-connection-manager.ts), use-connection-form (src/hooks/use-connection-form.ts). Include LocalStorage management (src/lib/storage.ts) and db-ui-config (src/lib/db-ui-config.ts).",
|
|
90
|
+
"parent": "Studio Main Shell"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"title": "Schema Tools",
|
|
94
|
+
"purpose": "Document schema-related features: SchemaExplorer (src/components/schema-explorer/) with tree view of tables/columns, SchemaDiff (src/components/SchemaDiff.tsx) with diff engine (src/lib/schema-diff/diff-engine.ts) and migration SQL generator (src/lib/schema-diff/migration-generator.ts), SchemaDiagram (src/components/SchemaDiagram.tsx) using @xyflow/react and elkjs for visual ER diagrams, SnapshotTimeline (src/components/SnapshotTimeline.tsx) for schema version tracking, and DatabaseDocs (src/components/DatabaseDocs.tsx) for auto-generated documentation."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"title": "Monitoring & Admin Dashboard",
|
|
98
|
+
"purpose": "Document the monitoring system: MonitoringDashboard (src/components/monitoring/MonitoringDashboard.tsx) with tabs for Overview, Pool, Queries, Tables, Performance, Storage, and Sessions (all in src/components/monitoring/tabs/). Cover MetricChart component, monitoring data hook (src/hooks/use-monitoring-data.ts), monitoring thresholds (src/lib/monitoring-thresholds.ts), time-series buffer (src/lib/time-series-buffer.ts), and the monitoring API endpoint (src/app/api/db/monitoring/). Also cover the Admin Dashboard (src/components/admin/AdminDashboard.tsx) with Overview, Operations, Security, Audit, and MonitoringEmbed tabs."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"title": "Data Management Features",
|
|
102
|
+
"purpose": "Document data management components: DataImportModal (src/components/DataImportModal.tsx) for CSV/JSON import, CreateTableModal (src/components/CreateTableModal.tsx) for visual table creation, TestDataGenerator (src/components/TestDataGenerator.tsx) for generating sample data, CodeGenerator (src/components/CodeGenerator.tsx) for generating code from queries, QueryHistory (src/components/QueryHistory.tsx), SavedQueries (src/components/SavedQueries.tsx), SaveQueryModal (src/components/SaveQueryModal.tsx), and CommandPalette (src/components/CommandPalette.tsx) for keyboard-driven navigation.",
|
|
103
|
+
"parent": "Studio Main Shell"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"title": "Custom React Hooks",
|
|
107
|
+
"purpose": "Document all custom hooks in src/hooks/: use-auth (authentication state), use-ai-chat (AI chat interaction), use-connection-manager (connection CRUD), use-connection-form (form state), use-inline-editing (cell editing), use-mobile (responsive detection), use-monitoring-data (real-time metrics), use-provider-metadata (database capabilities), use-query-execution (query runner), use-tab-manager (workspace tabs), use-toast (notifications), and use-transaction-control (BEGIN/COMMIT/ROLLBACK).",
|
|
108
|
+
"parent": "Architecture Overview"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"title": "Theming & UI System",
|
|
112
|
+
"purpose": "Document the UI system: Tailwind CSS 4 with @theme inline theming, CSS variables for dark/light mode (src/app/globals.css), shadcn/ui component library (src/components/ui/ with 50+ primitives), cn() utility (src/lib/utils.ts), Framer Motion animations, and the mobile-first responsive design philosophy. Reference docs/THEMING.md for the theming guide.",
|
|
113
|
+
"parent": "Architecture Overview"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"title": "Testing Strategy",
|
|
117
|
+
"purpose": "Document the comprehensive multi-layer testing strategy. Cover: test setup files (tests/setup.ts for env/localStorage mocks, tests/setup-dom.ts for happy-dom), test helpers (tests/helpers/ with mock-monaco, mock-next, mock-navigation, mock-provider, mock-fetch, mock-sonner, render-with-providers), test fixtures (tests/fixtures/ with connections, schemas, query-results, masking-configs), and the component test isolation script (tests/run-components.sh). Explain why component tests need isolation (bun:test mock.module cross-contamination)."
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"title": "Unit & API Tests",
|
|
121
|
+
"purpose": "Document unit tests (tests/unit/) covering: lib utilities (auth, audit, storage, utils, oidc), database layer (base-provider, factory, errors, pool-manager, query-limiter, sql-base), LLM providers (gemini, openai, ollama, custom, factory, config, retry, streaming), schema-diff (diff-engine, migration-generator), SQL tools (statement-splitter, alias-extractor), and editor completions. Also document API route tests (tests/api/) covering all endpoint handlers for auth, AI, database, and admin routes.",
|
|
122
|
+
"parent": "Testing Strategy"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"title": "Integration, Hook & Component Tests",
|
|
126
|
+
"purpose": "Document integration tests (tests/integration/db/) that test each database provider (postgres, mysql, sqlite, oracle, mssql, mongodb, redis) with mocked drivers. Document hook tests (tests/hooks/) that test all 12 custom React hooks. Document component tests (tests/components/) covering all major UI components including Studio, QueryEditor, ResultsGrid, ConnectionModal, admin tabs, monitoring tabs, sidebar, schema-explorer, and studio sub-components.",
|
|
127
|
+
"parent": "Testing Strategy"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"title": "E2E Tests",
|
|
131
|
+
"purpose": "Document Playwright E2E tests (e2e/) covering: login flow (login.spec.ts), connection management (connection-management.spec.ts), query execution (query-execution.spec.ts), tab management (tab-management.spec.ts), data export (export.spec.ts), and admin dashboard (admin-dashboard.spec.ts). Cover Playwright configuration (playwright.config.ts) and how E2E tests integrate with the CI pipeline.",
|
|
132
|
+
"parent": "Testing Strategy"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"title": "DevOps & Deployment",
|
|
136
|
+
"purpose": "Document the deployment infrastructure: Dockerfile with multi-stage Bun build and standalone Next.js output, docker/postgres.yml for local PostgreSQL with extensions and sample data (docker/postgres-init/), GitHub Actions CI pipeline (.github/workflows/ci.yml with lint, typecheck, test, build steps), Docker build and push workflow (.github/workflows/docker-build-push.yml), Render deployment config (render.yaml), environment variable configuration (.env.example), and health check endpoint (GET /api/db/health)."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"title": "Release History",
|
|
140
|
+
"purpose": "Document the project's release history from docs/releases/: v0.3.0, v0.4.0, v0.5.0, v0.5.6, v0.6.1, v0.6.7, and v0.7.0 (current). Summarize key features added in each release, the evolution from a simple PostgreSQL editor to a multi-database AI-powered IDE, and the current project version (0.7.0)."
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
package/.dockerignore
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Dependencies
|
|
2
|
+
node_modules
|
|
3
|
+
npm-debug.log*
|
|
4
|
+
yarn-debug.log*
|
|
5
|
+
yarn-error.log*
|
|
6
|
+
bun-debug.log*
|
|
7
|
+
.pnpm-debug.log*
|
|
8
|
+
|
|
9
|
+
# Build outputs
|
|
10
|
+
.next
|
|
11
|
+
out
|
|
12
|
+
build
|
|
13
|
+
dist
|
|
14
|
+
.turbo
|
|
15
|
+
.swc
|
|
16
|
+
*.tsbuildinfo
|
|
17
|
+
|
|
18
|
+
# Environment files
|
|
19
|
+
.env
|
|
20
|
+
.env*.local
|
|
21
|
+
.env.development.local
|
|
22
|
+
.env.test.local
|
|
23
|
+
.env.production.local
|
|
24
|
+
|
|
25
|
+
# Git
|
|
26
|
+
.git
|
|
27
|
+
.gitignore
|
|
28
|
+
.github
|
|
29
|
+
|
|
30
|
+
# Docker
|
|
31
|
+
.dockerignore
|
|
32
|
+
docker-compose.yml
|
|
33
|
+
|
|
34
|
+
# Documentation (not needed in production image)
|
|
35
|
+
docs
|
|
36
|
+
*.md
|
|
37
|
+
!README.md
|
|
38
|
+
!LICENSE
|
|
39
|
+
|
|
40
|
+
# Development files
|
|
41
|
+
.vscode
|
|
42
|
+
.idea
|
|
43
|
+
*.swp
|
|
44
|
+
*.swo
|
|
45
|
+
*~
|
|
46
|
+
|
|
47
|
+
# Testing
|
|
48
|
+
coverage
|
|
49
|
+
*.lcov
|
|
50
|
+
**/__tests__/**
|
|
51
|
+
**/*.test.ts
|
|
52
|
+
**/*.test.tsx
|
|
53
|
+
**/*.spec.ts
|
|
54
|
+
**/*.spec.tsx
|
|
55
|
+
|
|
56
|
+
# CI/CD
|
|
57
|
+
.github
|
|
58
|
+
|
|
59
|
+
# OS
|
|
60
|
+
.DS_Store
|
|
61
|
+
Thumbs.db
|
|
62
|
+
.AppleDouble
|
|
63
|
+
.LSOverride
|
|
64
|
+
|
|
65
|
+
# Temporary files
|
|
66
|
+
*.tmp
|
|
67
|
+
*.temp
|
|
68
|
+
.cache
|
|
69
|
+
.bun
|
|
70
|
+
|
|
71
|
+
# TypeScript
|
|
72
|
+
tsconfig.tsbuildinfo
|
|
73
|
+
next-env.d.ts
|
|
74
|
+
|
|
75
|
+
# Other
|
|
76
|
+
CLAUDE.md
|
|
77
|
+
CONTRIBUTING.md
|
|
78
|
+
CODE_OF_CONDUCT.md
|
|
79
|
+
SECURITY.md
|
|
80
|
+
render.yaml
|
package/.env.example
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# ============================================
|
|
2
|
+
# LibreDB Studio - Environment Configuration
|
|
3
|
+
# ============================================
|
|
4
|
+
#
|
|
5
|
+
# LOCAL DEVELOPMENT:
|
|
6
|
+
# Copy this file to .env.local and fill in your values
|
|
7
|
+
# cp .env.example .env.local
|
|
8
|
+
#
|
|
9
|
+
# DOCKER / RENDER DEPLOYMENT:
|
|
10
|
+
# Set these variables in your deployment environment
|
|
11
|
+
#
|
|
12
|
+
# ============================================
|
|
13
|
+
|
|
14
|
+
# ============================================
|
|
15
|
+
# AUTHENTICATION (Required)
|
|
16
|
+
# ============================================
|
|
17
|
+
# Admin credentials (full access + maintenance tools)
|
|
18
|
+
ADMIN_EMAIL=admin@libredb.org
|
|
19
|
+
ADMIN_PASSWORD=your_secure_admin_password
|
|
20
|
+
|
|
21
|
+
# User credentials (query execution only)
|
|
22
|
+
USER_EMAIL=user@libredb.org
|
|
23
|
+
USER_PASSWORD=your_secure_user_password
|
|
24
|
+
|
|
25
|
+
# JWT Secret for session management (min 32 characters)
|
|
26
|
+
# Generate with: openssl rand -base64 32
|
|
27
|
+
JWT_SECRET=your_32_character_random_string_here
|
|
28
|
+
|
|
29
|
+
# ============================================
|
|
30
|
+
# AUTHENTICATION PROVIDER
|
|
31
|
+
# ============================================
|
|
32
|
+
# "local" (default) = email/password login (ADMIN_EMAIL/ADMIN_PASSWORD, USER_EMAIL/USER_PASSWORD)
|
|
33
|
+
# "oidc" = OpenID Connect SSO (Auth0, Keycloak, Okta, Azure AD, Zitadel, etc.)
|
|
34
|
+
NEXT_PUBLIC_AUTH_PROVIDER=local
|
|
35
|
+
|
|
36
|
+
# ============================================
|
|
37
|
+
# OIDC Configuration (required when NEXT_PUBLIC_AUTH_PROVIDER=oidc)
|
|
38
|
+
# ============================================
|
|
39
|
+
# Issuer URL — must serve /.well-known/openid-configuration
|
|
40
|
+
# OIDC_ISSUER=https://dev-xxx.auth0.com
|
|
41
|
+
# OIDC_CLIENT_ID=your_client_id
|
|
42
|
+
# OIDC_CLIENT_SECRET=your_client_secret
|
|
43
|
+
|
|
44
|
+
# Scopes to request (default: openid profile email)
|
|
45
|
+
# OIDC_SCOPE=openid profile email
|
|
46
|
+
# if using Zitadel, add this scope: urn:zitadel:iam:org:project:roles
|
|
47
|
+
|
|
48
|
+
# Role mapping (optional) — claim path for determining admin vs user role
|
|
49
|
+
# Supports dot-notation for nested claims (e.g. "realm_access.roles")
|
|
50
|
+
# OIDC_ROLE_CLAIM=
|
|
51
|
+
|
|
52
|
+
# Comma-separated values that map to admin role (default: admin)
|
|
53
|
+
# OIDC_ADMIN_ROLES=admin
|
|
54
|
+
|
|
55
|
+
# --- Provider-specific role claim examples ---
|
|
56
|
+
# Auth0: OIDC_ROLE_CLAIM=https://myapp.com/roles (via Auth0 Actions)
|
|
57
|
+
# Keycloak: OIDC_ROLE_CLAIM=realm_access.roles
|
|
58
|
+
# Okta: OIDC_ROLE_CLAIM=groups
|
|
59
|
+
# Azure AD: OIDC_ROLE_CLAIM=roles
|
|
60
|
+
# Zitadel: OIDC_ROLE_CLAIM=urn:zitadel:iam:org:project:roles
|
|
61
|
+
|
|
62
|
+
# ============================================
|
|
63
|
+
# STORAGE PROVIDER (Optional)
|
|
64
|
+
# ============================================
|
|
65
|
+
# Controls where application data is persisted.
|
|
66
|
+
# "local" (default) = browser localStorage only (zero config, great for dev)
|
|
67
|
+
# "sqlite" = SQLite file on server (persistent, single-node)
|
|
68
|
+
# "postgres" = PostgreSQL database (persistent, multi-node, enterprise)
|
|
69
|
+
#
|
|
70
|
+
# Note: NOT prefixed with NEXT_PUBLIC_ — server-side only, discovered at runtime
|
|
71
|
+
# via GET /api/storage/config endpoint.
|
|
72
|
+
STORAGE_PROVIDER=local
|
|
73
|
+
|
|
74
|
+
# SQLite storage path (required when STORAGE_PROVIDER=sqlite)
|
|
75
|
+
# STORAGE_SQLITE_PATH=./data/libredb-storage.db
|
|
76
|
+
|
|
77
|
+
# PostgreSQL connection URL (required when STORAGE_PROVIDER=postgres)
|
|
78
|
+
# Local PostgreSQL without SSL:
|
|
79
|
+
# STORAGE_POSTGRES_URL=postgresql://user:pass@localhost:5432/libredb?sslmode=disable
|
|
80
|
+
# Cloud PostgreSQL with SSL:
|
|
81
|
+
# STORAGE_POSTGRES_URL=postgresql://user:pass@host:5432/libredb?sslmode=require
|
|
82
|
+
|
|
83
|
+
# ===========================================
|
|
84
|
+
# LLM Configuration (Strategy Pattern)
|
|
85
|
+
# ===========================================
|
|
86
|
+
# Provider options: gemini, openai, ollama, custom
|
|
87
|
+
# The system uses Strategy Pattern to automatically select
|
|
88
|
+
# the appropriate provider based on this configuration.
|
|
89
|
+
LLM_PROVIDER=gemini
|
|
90
|
+
|
|
91
|
+
# API Key for the selected provider
|
|
92
|
+
# Required for: gemini, openai
|
|
93
|
+
# Optional for: ollama, custom (depends on endpoint)
|
|
94
|
+
#
|
|
95
|
+
# Get API keys from:
|
|
96
|
+
# - Gemini: https://aistudio.google.com/
|
|
97
|
+
# - OpenAI: https://platform.openai.com/
|
|
98
|
+
LLM_API_KEY=your_api_key_here
|
|
99
|
+
|
|
100
|
+
# Model name (optional - auto-defaults based on provider)
|
|
101
|
+
# Default models:
|
|
102
|
+
# - Gemini: gemini-2.5-flash
|
|
103
|
+
# - OpenAI: gpt-4o
|
|
104
|
+
# - Ollama: llama3.2
|
|
105
|
+
# - Custom: gpt-3.5-turbo
|
|
106
|
+
#
|
|
107
|
+
# Popular options:
|
|
108
|
+
# Gemini: gemini-2.5-flash, gemini-2.0-flash, gemini-1.5-flash, gemini-1.5-pro
|
|
109
|
+
# OpenAI: gpt-4o, gpt-4-turbo, gpt-3.5-turbo, gpt-4o-mini
|
|
110
|
+
# Ollama: llama3.2, mistral, codellama, deepseek-coder
|
|
111
|
+
LLM_MODEL=gemini-2.5-flash
|
|
112
|
+
|
|
113
|
+
# API URL (optional - only needed for ollama or custom providers)
|
|
114
|
+
# Default URLs:
|
|
115
|
+
# - Ollama: http://localhost:11434/v1
|
|
116
|
+
# - OpenAI: https://api.openai.com/v1
|
|
117
|
+
#
|
|
118
|
+
# Custom provider examples:
|
|
119
|
+
# - LiteLLM: http://localhost:4000/v1
|
|
120
|
+
# - LMStudio: http://localhost:1234/v1
|
|
121
|
+
# - vLLM: http://localhost:8000/v1
|
|
122
|
+
# - LocalAI: http://localhost:8080/v1
|
|
123
|
+
#LLM_API_URL=http://localhost:11434/v1
|
|
124
|
+
|
|
125
|
+
# ===========================================
|
|
126
|
+
# Provider Configuration Examples
|
|
127
|
+
# ===========================================
|
|
128
|
+
|
|
129
|
+
# --- Gemini (Default) ---
|
|
130
|
+
# LLM_PROVIDER=gemini
|
|
131
|
+
# LLM_API_KEY=AIzaSy...
|
|
132
|
+
# LLM_MODEL=gemini-2.5-flash
|
|
133
|
+
|
|
134
|
+
# --- OpenAI ---
|
|
135
|
+
# LLM_PROVIDER=openai
|
|
136
|
+
# LLM_API_KEY=sk-...
|
|
137
|
+
# LLM_MODEL=gpt-4o
|
|
138
|
+
|
|
139
|
+
# --- Ollama (Local) ---
|
|
140
|
+
# LLM_PROVIDER=ollama
|
|
141
|
+
# LLM_MODEL=llama3.2
|
|
142
|
+
# LLM_API_URL=http://localhost:11434/v1
|
|
143
|
+
|
|
144
|
+
# --- LiteLLM Proxy ---
|
|
145
|
+
# LLM_PROVIDER=custom
|
|
146
|
+
# LLM_API_KEY=your_litellm_key # optional
|
|
147
|
+
# LLM_MODEL=gpt-4o
|
|
148
|
+
# LLM_API_URL=http://localhost:4000/v1
|
|
149
|
+
|
|
150
|
+
# --- LMStudio (Local) ---
|
|
151
|
+
# LLM_PROVIDER=custom
|
|
152
|
+
# LLM_MODEL=local-model
|
|
153
|
+
# LLM_API_URL=http://localhost:1234/v1
|
|
154
|
+
|
|
155
|
+
# ─── Seed Connections (pre-configured databases) ─────────────────────────────
|
|
156
|
+
# SEED_CONFIG_PATH=/app/config/seed-connections.yaml # Path to seed config file
|
|
157
|
+
# SEED_CACHE_TTL_MS=60000 # Cache TTL in ms (default: 60s)
|
|
158
|
+
# Credential env vars referenced in seed config (e.g., ${MY_DB_PASSWORD}):
|
|
159
|
+
# MY_DB_PASSWORD=secret
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Create a report to help us improve
|
|
4
|
+
title: '[BUG] '
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Description
|
|
10
|
+
A clear and concise description of what the bug is.
|
|
11
|
+
|
|
12
|
+
## Steps to Reproduce
|
|
13
|
+
1. Go to '...'
|
|
14
|
+
2. Click on '....'
|
|
15
|
+
3. Scroll down to '....'
|
|
16
|
+
4. See error
|
|
17
|
+
|
|
18
|
+
## Expected Behavior
|
|
19
|
+
A clear and concise description of what you expected to happen.
|
|
20
|
+
|
|
21
|
+
## Actual Behavior
|
|
22
|
+
A clear and concise description of what actually happened.
|
|
23
|
+
|
|
24
|
+
## Screenshots
|
|
25
|
+
If applicable, add screenshots to help explain your problem.
|
|
26
|
+
|
|
27
|
+
## Environment
|
|
28
|
+
Please provide the following information:
|
|
29
|
+
|
|
30
|
+
- **LibreDB Studio Version**: (e.g., 0.5.4)
|
|
31
|
+
- **Browser**: (e.g., Chrome 120, Firefox 121, Safari 17)
|
|
32
|
+
- **OS**: (e.g., macOS 14, Windows 11, Ubuntu 22.04)
|
|
33
|
+
- **Node.js/Bun Version**: (e.g., Bun 1.0.0, Node.js 20.10.0)
|
|
34
|
+
- **Database Type**: (e.g., PostgreSQL 15, MySQL 8.0, SQLite 3.42, MongoDB 7.0)
|
|
35
|
+
- **Database Version**: (e.g., PostgreSQL 15.3)
|
|
36
|
+
|
|
37
|
+
## Additional Context
|
|
38
|
+
Add any other context about the problem here.
|
|
39
|
+
|
|
40
|
+
## Possible Solution
|
|
41
|
+
If you have ideas on how to fix this bug, please describe them here.
|
|
42
|
+
|
|
43
|
+
## Logs
|
|
44
|
+
If applicable, add relevant logs or error messages:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Paste logs here
|
|
48
|
+
```
|
|
49
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature Request
|
|
3
|
+
about: Suggest an idea for this project
|
|
4
|
+
title: '[FEATURE] '
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Is your feature request related to a problem?
|
|
10
|
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
11
|
+
|
|
12
|
+
## Describe the solution you'd like
|
|
13
|
+
A clear and concise description of what you want to happen.
|
|
14
|
+
|
|
15
|
+
## Describe alternatives you've considered
|
|
16
|
+
A clear and concise description of any alternative solutions or features you've considered.
|
|
17
|
+
|
|
18
|
+
## Use Case
|
|
19
|
+
Describe a specific use case or scenario where this feature would be helpful.
|
|
20
|
+
|
|
21
|
+
## Additional Context
|
|
22
|
+
Add any other context, mockups, or screenshots about the feature request here.
|
|
23
|
+
|
|
24
|
+
## Implementation Notes (Optional)
|
|
25
|
+
If you have ideas on how this could be implemented, please share them here.
|
|
26
|
+
|
|
27
|
+
## Related Issues
|
|
28
|
+
Link to any related issues or discussions.
|
|
29
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
<!-- Provide a brief description of the changes in this PR -->
|
|
3
|
+
|
|
4
|
+
## Type of Change
|
|
5
|
+
<!-- Mark the relevant option with an "x" -->
|
|
6
|
+
|
|
7
|
+
- [ ] Bug fix (non-breaking change which fixes an issue)
|
|
8
|
+
- [ ] New feature (non-breaking change which adds functionality)
|
|
9
|
+
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
|
10
|
+
- [ ] Documentation update
|
|
11
|
+
- [ ] Code refactoring
|
|
12
|
+
- [ ] Performance improvement
|
|
13
|
+
- [ ] Test addition or update
|
|
14
|
+
|
|
15
|
+
## Related Issue
|
|
16
|
+
<!-- Link to the related issue using #issue_number -->
|
|
17
|
+
Closes #
|
|
18
|
+
|
|
19
|
+
## Changes Made
|
|
20
|
+
<!-- Describe the changes in detail -->
|
|
21
|
+
|
|
22
|
+
-
|
|
23
|
+
-
|
|
24
|
+
-
|
|
25
|
+
|
|
26
|
+
## Testing
|
|
27
|
+
<!-- Describe the testing you've done -->
|
|
28
|
+
|
|
29
|
+
- [ ] I have tested this locally
|
|
30
|
+
- [ ] I have added/updated tests
|
|
31
|
+
- [ ] All existing tests pass
|
|
32
|
+
|
|
33
|
+
### Test Environment
|
|
34
|
+
- **LibreDB Studio Version**:
|
|
35
|
+
- **Browser**:
|
|
36
|
+
- **OS**:
|
|
37
|
+
- **Node.js/Bun Version**:
|
|
38
|
+
- **Database Type**:
|
|
39
|
+
|
|
40
|
+
## Screenshots (if applicable)
|
|
41
|
+
<!-- Add screenshots to help explain your changes -->
|
|
42
|
+
|
|
43
|
+
## Checklist
|
|
44
|
+
<!-- Mark completed items with an "x" -->
|
|
45
|
+
|
|
46
|
+
- [ ] My code follows the project's code style guidelines
|
|
47
|
+
- [ ] I have performed a self-review of my code
|
|
48
|
+
- [ ] I have commented my code, particularly in hard-to-understand areas
|
|
49
|
+
- [ ] I have updated the documentation accordingly
|
|
50
|
+
- [ ] My changes generate no new warnings
|
|
51
|
+
- [ ] I have added tests that prove my fix is effective or that my feature works
|
|
52
|
+
- [ ] New and existing unit tests pass locally with my changes
|
|
53
|
+
- [ ] Any dependent changes have been merged and published
|
|
54
|
+
|
|
55
|
+
## Additional Notes
|
|
56
|
+
<!-- Add any additional notes or context about the PR -->
|
|
57
|
+
|