@libredb/studio 0.9.7 → 0.9.12
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/dist/chunk-34YQUUCM.mjs +319 -0
- package/dist/chunk-34YQUUCM.mjs.map +1 -0
- package/dist/chunk-4LVB3K53.mjs +37 -0
- package/dist/chunk-4LVB3K53.mjs.map +1 -0
- package/dist/chunk-6DRZXXNT.mjs +100 -0
- package/dist/chunk-6DRZXXNT.mjs.map +1 -0
- package/dist/chunk-CZVV3JJB.mjs +160 -0
- package/dist/chunk-CZVV3JJB.mjs.map +1 -0
- package/dist/chunk-D4WVWWWF.js +332 -0
- package/dist/chunk-D4WVWWWF.js.map +1 -0
- package/dist/chunk-DY3KXE44.mjs +3 -0
- package/dist/chunk-DY3KXE44.mjs.map +1 -0
- package/dist/chunk-DZ2UB3C6.mjs +6679 -0
- package/dist/chunk-DZ2UB3C6.mjs.map +1 -0
- package/dist/chunk-FYSE52VB.js +242 -0
- package/dist/chunk-FYSE52VB.js.map +1 -0
- package/dist/chunk-G4WYE6TI.js +4 -0
- package/dist/chunk-G4WYE6TI.js.map +1 -0
- package/dist/chunk-JOGLIOFO.js +1310 -0
- package/dist/chunk-JOGLIOFO.js.map +1 -0
- package/dist/chunk-JZO5KRZN.js +165 -0
- package/dist/chunk-JZO5KRZN.js.map +1 -0
- package/dist/chunk-KV356UXJ.js +253 -0
- package/dist/chunk-KV356UXJ.js.map +1 -0
- package/dist/chunk-PPODO6HX.mjs +237 -0
- package/dist/chunk-PPODO6HX.mjs.map +1 -0
- package/dist/chunk-PTIRB2JO.js +258 -0
- package/dist/chunk-PTIRB2JO.js.map +1 -0
- package/dist/chunk-Q6LRDBK7.js +42 -0
- package/dist/chunk-Q6LRDBK7.js.map +1 -0
- package/dist/chunk-QJP5FZRY.mjs +255 -0
- package/dist/chunk-QJP5FZRY.mjs.map +1 -0
- package/dist/chunk-R3POCJK6.mjs +248 -0
- package/dist/chunk-R3POCJK6.mjs.map +1 -0
- package/dist/chunk-RBVDMLFV.js +6747 -0
- package/dist/chunk-RBVDMLFV.js.map +1 -0
- package/dist/chunk-RCQB4FCE.js +186 -0
- package/dist/chunk-RCQB4FCE.js.map +1 -0
- package/dist/chunk-SR5DRGBX.mjs +174 -0
- package/dist/chunk-SR5DRGBX.mjs.map +1 -0
- package/dist/chunk-VLCRUZX7.js +102 -0
- package/dist/chunk-VLCRUZX7.js.map +1 -0
- package/dist/chunk-VWVRUCQO.mjs +1289 -0
- package/dist/chunk-VWVRUCQO.mjs.map +1 -0
- package/dist/components.d.mts +273 -0
- package/dist/components.d.ts +273 -0
- package/dist/components.js +59 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +6 -0
- package/dist/components.mjs.map +1 -0
- package/dist/custom-BNDOYC5P.js +134 -0
- package/dist/custom-BNDOYC5P.js.map +1 -0
- package/dist/custom-S2EKFMP3.mjs +132 -0
- package/dist/custom-S2EKFMP3.mjs.map +1 -0
- package/dist/gemini-4ASHNK4H.js +81 -0
- package/dist/gemini-4ASHNK4H.js.map +1 -0
- package/dist/gemini-C5RBLQEJ.mjs +79 -0
- package/dist/gemini-C5RBLQEJ.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mongodb-XMZEZA4A.mjs +748 -0
- package/dist/mongodb-XMZEZA4A.mjs.map +1 -0
- package/dist/mongodb-YQJJTLX3.js +750 -0
- package/dist/mongodb-YQJJTLX3.js.map +1 -0
- package/dist/mssql-PMOU4D36.js +916 -0
- package/dist/mssql-PMOU4D36.js.map +1 -0
- package/{src/lib/db/providers/sql/mssql.ts → dist/mssql-ZH5VP2C5.mjs} +268 -423
- package/dist/mssql-ZH5VP2C5.mjs.map +1 -0
- package/{src/lib/db/providers/sql/mysql.ts → dist/mysql-I3WJQXN2.mjs} +277 -428
- package/dist/mysql-I3WJQXN2.mjs.map +1 -0
- package/dist/mysql-Y3MSA5QY.js +833 -0
- package/dist/mysql-Y3MSA5QY.js.map +1 -0
- package/dist/ollama-26BYLVEV.mjs +115 -0
- package/dist/ollama-26BYLVEV.mjs.map +1 -0
- package/dist/ollama-HVWAGKQC.js +117 -0
- package/dist/ollama-HVWAGKQC.js.map +1 -0
- package/dist/openai-4U56KPG7.mjs +111 -0
- package/dist/openai-4U56KPG7.mjs.map +1 -0
- package/dist/openai-AK3R37BS.js +113 -0
- package/dist/openai-AK3R37BS.js.map +1 -0
- package/dist/oracle-L6VEAVXO.js +917 -0
- package/dist/oracle-L6VEAVXO.js.map +1 -0
- package/{src/lib/db/providers/sql/oracle.ts → dist/oracle-P2G7T4P4.mjs} +321 -454
- package/dist/oracle-P2G7T4P4.mjs.map +1 -0
- package/{src/lib/db/providers/sql/postgres.ts → dist/postgres-O5KOQUVP.mjs} +261 -471
- package/dist/postgres-O5KOQUVP.mjs.map +1 -0
- package/dist/postgres-RLCWNFFX.js +971 -0
- package/dist/postgres-RLCWNFFX.js.map +1 -0
- package/dist/providers.d.mts +149 -0
- package/dist/providers.d.ts +149 -0
- package/dist/providers.js +44 -0
- package/dist/providers.js.map +1 -0
- package/dist/providers.mjs +7 -0
- package/dist/providers.mjs.map +1 -0
- package/dist/redis-4WMQOVLX.mjs +435 -0
- package/dist/redis-4WMQOVLX.mjs.map +1 -0
- package/dist/redis-QVQ6YU62.js +441 -0
- package/dist/redis-QVQ6YU62.js.map +1 -0
- package/dist/sqlite-4I2P2OGQ.js +554 -0
- package/dist/sqlite-4I2P2OGQ.js.map +1 -0
- package/dist/sqlite-OA4YJX5S.mjs +531 -0
- package/dist/sqlite-OA4YJX5S.mjs.map +1 -0
- package/dist/types-BJvJfxSY.d.mts +141 -0
- package/dist/types-BJvJfxSY.d.ts +141 -0
- package/dist/types-ClAg_v5k.d.mts +343 -0
- package/dist/types-Der_X8E8.d.ts +343 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/dist/workspace.d.mts +80 -0
- package/dist/workspace.d.ts +80 -0
- package/dist/workspace.js +4182 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace.mjs +4155 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +60 -5
- package/.claude/settings.local.json +0 -127
- package/.cursorrules +0 -426
- package/.devin/wiki.json +0 -143
- package/.dockerignore +0 -80
- package/.env.example +0 -159
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -29
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -57
- package/.github/workflows/ci.yml +0 -185
- package/.github/workflows/codeql.yml +0 -57
- package/.github/workflows/docker-build-push.yml +0 -118
- package/.github/workflows/helm-release.yml +0 -113
- package/CLAUDE.md +0 -265
- package/CODE_OF_CONDUCT.md +0 -124
- package/CONTRIBUTING.md +0 -154
- package/Dockerfile +0 -73
- package/SECURITY.md +0 -107
- package/artifacthub-repo.yml +0 -4
- package/bun.lock +0 -1714
- package/bunfig.toml +0 -3
- package/charts/libredb-studio/.helmignore +0 -11
- package/charts/libredb-studio/Chart.lock +0 -6
- package/charts/libredb-studio/Chart.yaml +0 -50
- package/charts/libredb-studio/README.md +0 -206
- package/charts/libredb-studio/templates/NOTES.txt +0 -59
- package/charts/libredb-studio/templates/_helpers.tpl +0 -135
- package/charts/libredb-studio/templates/configmap.yaml +0 -37
- package/charts/libredb-studio/templates/deployment.yaml +0 -184
- package/charts/libredb-studio/templates/hpa.yaml +0 -32
- package/charts/libredb-studio/templates/ingress.yaml +0 -41
- package/charts/libredb-studio/templates/networkpolicy.yaml +0 -50
- package/charts/libredb-studio/templates/pdb.yaml +0 -18
- package/charts/libredb-studio/templates/pvc.yaml +0 -23
- package/charts/libredb-studio/templates/secret.yaml +0 -30
- package/charts/libredb-studio/templates/seed-configmap.yaml +0 -11
- package/charts/libredb-studio/templates/service.yaml +0 -22
- package/charts/libredb-studio/templates/serviceaccount.yaml +0 -13
- package/charts/libredb-studio/values.schema.json +0 -246
- package/charts/libredb-studio/values.yaml +0 -286
- package/components.json +0 -22
- package/conductor/code_styleguides/typescript.md +0 -43
- package/conductor/product-guidelines.md +0 -43
- package/conductor/product.md +0 -3
- package/conductor/setup_state.json +0 -1
- package/conductor/tech-stack.md +0 -39
- package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +0 -8
- package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +0 -44
- package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +0 -31
- package/conductor/tracks.md +0 -8
- package/conductor/workflow.md +0 -333
- package/database-compose.yml +0 -55
- package/docker/postgres-init/01-extensions.sql +0 -10
- package/docker/postgres-init/02-sample-data.sql +0 -585
- package/docker/postgres.yml +0 -68
- package/docker-compose.yml +0 -38
- package/docs/AI_PLAN.md +0 -74
- package/docs/API_DOCS.md +0 -875
- package/docs/ARCHITECTURE.md +0 -218
- package/docs/DATABASE_PROVIDERS.md +0 -358
- package/docs/FEATURES.md +0 -116
- package/docs/HELM_CHART.md +0 -252
- package/docs/LOGIN_PAGE.md +0 -178
- package/docs/MONACO_EDITOR_PERFORMANCE.md +0 -315
- package/docs/OIDC_ARCH.md +0 -681
- package/docs/OIDC_SETUP.md +0 -322
- package/docs/POSTGRES_METRICS.md +0 -516
- package/docs/QUERY_OPTIMIZATION.md +0 -370
- package/docs/SEED_CONNECTIONS.md +0 -468
- package/docs/SQL_ALIAS_COMPLETION.md +0 -190
- package/docs/STORAGE_ARCHITECTURE.md +0 -565
- package/docs/STORAGE_QUICK_SETUP.md +0 -419
- package/docs/TECHNICAL_PLAN.md +0 -36
- package/docs/THEMING.md +0 -345
- package/docs/adding-a-new-database-provider.md +0 -642
- package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +0 -360
- package/docs/backlogs/001-INLINE_DATA_EDITING.md +0 -118
- package/docs/backlogs/002-DATA_IMPORT.md +0 -215
- package/docs/backlogs/003-QUERY_TIME_MACHINE.md +0 -183
- package/docs/backlogs/004-AI_DATA_STORYTELLER.md +0 -292
- package/docs/backlogs/005-QUERY_PLAYGROUND.md +0 -352
- package/docs/backlogs/006-DATA_MASKING.md +0 -418
- package/docs/enterprise-features.md +0 -718
- package/docs/kubernetes-helm-chart-artifacthub-plan.md +0 -803
- package/docs/medium-koyeb-article-en.md +0 -215
- package/docs/plans/test-plans.md +0 -445
- package/docs/releases/RELEASE.V0.3.0.md +0 -22
- package/docs/releases/RELEASE.V0.4.0.md +0 -154
- package/docs/releases/RELEASE.V0.5.0.md +0 -252
- package/docs/releases/RELEASE_v0.5.6.md +0 -145
- package/docs/releases/RELEASE_v0.6.1.md +0 -303
- package/docs/releases/RELEASE_v0.6.7.md +0 -292
- package/docs/releases/RELEASE_v0.7.0.md +0 -332
- package/docs/releases/RELEASE_v0.8.0.md +0 -521
- package/docs/sampledb/titanic.sql +0 -1379
- package/docs/superpowers/plans/2026-03-25-seed-connections.md +0 -1362
- package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +0 -590
- package/e2e/admin-dashboard.spec.ts +0 -64
- package/e2e/connection-management.spec.ts +0 -58
- package/e2e/export.spec.ts +0 -34
- package/e2e/login.spec.ts +0 -85
- package/e2e/query-execution.spec.ts +0 -35
- package/e2e/tab-management.spec.ts +0 -64
- package/eslint.config.mjs +0 -28
- package/fly.toml +0 -43
- package/next.config.ts +0 -32
- package/playwright.config.ts +0 -34
- package/postcss.config.mjs +0 -7
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +0 -1
- package/public/globe.svg +0 -1
- package/public/logo.svg +0 -32
- package/public/next.svg +0 -1
- 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 +0 -1
- package/public/window.svg +0 -1
- package/render.yaml +0 -58
- package/scripts/merge-lcov.mjs +0 -239
- package/sonar-project.properties +0 -16
- package/src/app/admin/error.tsx +0 -46
- package/src/app/admin/page.tsx +0 -10
- package/src/app/api/admin/audit/route.ts +0 -52
- package/src/app/api/admin/fleet-health/route.ts +0 -81
- package/src/app/api/ai/autopilot/route.ts +0 -105
- package/src/app/api/ai/chat/route.ts +0 -132
- package/src/app/api/ai/describe-schema/route.ts +0 -52
- package/src/app/api/ai/explain/route.ts +0 -86
- package/src/app/api/ai/impact/route.ts +0 -97
- package/src/app/api/ai/index-advisor/route.ts +0 -98
- package/src/app/api/ai/nl2sql/route.ts +0 -87
- package/src/app/api/ai/query-safety/route.ts +0 -87
- package/src/app/api/auth/login/route.ts +0 -62
- package/src/app/api/auth/logout/route.ts +0 -25
- package/src/app/api/auth/me/route.ts +0 -10
- package/src/app/api/auth/oidc/callback/route.ts +0 -82
- package/src/app/api/auth/oidc/login/route.ts +0 -43
- package/src/app/api/connections/managed/route.ts +0 -35
- package/src/app/api/db/cancel/route.ts +0 -42
- package/src/app/api/db/disconnect/route.ts +0 -28
- package/src/app/api/db/health/route.ts +0 -49
- package/src/app/api/db/maintenance/route.ts +0 -72
- package/src/app/api/db/monitoring/route.ts +0 -62
- package/src/app/api/db/multi-query/route.ts +0 -116
- package/src/app/api/db/pool-stats/route.ts +0 -37
- package/src/app/api/db/profile/route.ts +0 -144
- package/src/app/api/db/provider-meta/route.ts +0 -49
- package/src/app/api/db/query/route.ts +0 -50
- package/src/app/api/db/schema/route.ts +0 -47
- package/src/app/api/db/schema-snapshot/route.ts +0 -42
- package/src/app/api/db/test-connection/route.ts +0 -55
- package/src/app/api/db/transaction/route.ts +0 -111
- package/src/app/api/storage/[collection]/route.ts +0 -67
- package/src/app/api/storage/config/route.ts +0 -17
- package/src/app/api/storage/migrate/route.ts +0 -45
- package/src/app/api/storage/route.ts +0 -32
- package/src/app/error.tsx +0 -49
- package/src/app/global-error.tsx +0 -55
- package/src/app/globals.css +0 -146
- package/src/app/icon.svg +0 -42
- package/src/app/layout.tsx +0 -34
- package/src/app/login/login-form.tsx +0 -301
- package/src/app/login/page.tsx +0 -11
- package/src/app/monitoring/page.tsx +0 -8
- package/src/app/not-found.tsx +0 -29
- package/src/app/page.tsx +0 -5
- package/src/components/AIAutopilotPanel.tsx +0 -238
- package/src/components/CodeGenerator.tsx +0 -271
- package/src/components/CommandPalette.tsx +0 -227
- package/src/components/ConnectionModal.tsx +0 -759
- package/src/components/CreateTableModal.tsx +0 -281
- package/src/components/DataCharts.tsx +0 -962
- package/src/components/DataImportModal.tsx +0 -582
- package/src/components/DataProfiler.tsx +0 -335
- package/src/components/DatabaseDocs.tsx +0 -251
- package/src/components/MaskingSettings.tsx +0 -414
- package/src/components/MobileNav.tsx +0 -50
- package/src/components/NL2SQLPanel.tsx +0 -281
- package/src/components/PivotTable.tsx +0 -257
- package/src/components/QueryEditor.tsx +0 -760
- package/src/components/QueryHistory.tsx +0 -344
- package/src/components/QuerySafetyDialog.tsx +0 -290
- package/src/components/ResultsGrid.tsx +0 -644
- package/src/components/SaveQueryModal.tsx +0 -104
- package/src/components/SavedQueries.tsx +0 -128
- package/src/components/SchemaDiagram.tsx +0 -473
- package/src/components/SchemaDiff.tsx +0 -473
- package/src/components/SnapshotTimeline.tsx +0 -116
- package/src/components/Studio.tsx +0 -639
- package/src/components/TestDataGenerator.tsx +0 -261
- package/src/components/VisualExplain.tsx +0 -820
- package/src/components/admin/AdminDashboard.tsx +0 -163
- package/src/components/admin/tabs/AuditTab.tsx +0 -531
- package/src/components/admin/tabs/MonitoringEmbed.tsx +0 -11
- package/src/components/admin/tabs/OperationsTab.tsx +0 -646
- package/src/components/admin/tabs/OverviewTab.tsx +0 -1328
- package/src/components/admin/tabs/SecurityTab.tsx +0 -284
- package/src/components/community-section.tsx +0 -92
- package/src/components/icons/db-icons.tsx +0 -84
- package/src/components/libredb-logo.tsx +0 -61
- package/src/components/monitoring/MonitoringDashboard.tsx +0 -345
- package/src/components/monitoring/tabs/MetricChart.tsx +0 -82
- package/src/components/monitoring/tabs/OverviewTab.tsx +0 -263
- package/src/components/monitoring/tabs/PerformanceTab.tsx +0 -254
- package/src/components/monitoring/tabs/PoolTab.tsx +0 -174
- package/src/components/monitoring/tabs/QueriesTab.tsx +0 -287
- package/src/components/monitoring/tabs/SessionsTab.tsx +0 -316
- package/src/components/monitoring/tabs/StorageTab.tsx +0 -335
- package/src/components/monitoring/tabs/TablesTab.tsx +0 -300
- package/src/components/results-grid/ResultCard.tsx +0 -111
- package/src/components/results-grid/RowDetailSheet.tsx +0 -178
- package/src/components/results-grid/StatsBar.tsx +0 -201
- package/src/components/results-grid/index.ts +0 -1
- package/src/components/results-grid/utils.ts +0 -23
- package/src/components/schema-explorer/ColumnList.tsx +0 -53
- package/src/components/schema-explorer/SchemaExplorer.tsx +0 -182
- package/src/components/schema-explorer/TableItem.tsx +0 -210
- package/src/components/schema-explorer/index.ts +0 -1
- package/src/components/sidebar/ConnectionItem.tsx +0 -105
- package/src/components/sidebar/ConnectionsList.tsx +0 -62
- package/src/components/sidebar/Sidebar.tsx +0 -130
- package/src/components/sidebar/index.ts +0 -2
- package/src/components/studio/BottomPanel.tsx +0 -286
- package/src/components/studio/QueryToolbar.tsx +0 -180
- package/src/components/studio/StudioDesktopHeader.tsx +0 -114
- package/src/components/studio/StudioMobileHeader.tsx +0 -340
- package/src/components/studio/StudioTabBar.tsx +0 -82
- package/src/components/studio/index.ts +0 -5
- package/src/components/ui/accordion.tsx +0 -66
- package/src/components/ui/alert-dialog.tsx +0 -157
- package/src/components/ui/alert.tsx +0 -66
- package/src/components/ui/aspect-ratio.tsx +0 -11
- package/src/components/ui/avatar.tsx +0 -53
- package/src/components/ui/badge.tsx +0 -46
- package/src/components/ui/breadcrumb.tsx +0 -109
- package/src/components/ui/button-group.tsx +0 -83
- package/src/components/ui/button.tsx +0 -60
- package/src/components/ui/calendar.tsx +0 -216
- package/src/components/ui/card.tsx +0 -92
- package/src/components/ui/carousel.tsx +0 -241
- package/src/components/ui/chart.tsx +0 -357
- package/src/components/ui/checkbox.tsx +0 -32
- package/src/components/ui/collapsible.tsx +0 -33
- package/src/components/ui/command.tsx +0 -184
- package/src/components/ui/context-menu.tsx +0 -252
- package/src/components/ui/dialog.tsx +0 -143
- package/src/components/ui/drawer.tsx +0 -135
- package/src/components/ui/dropdown-menu.tsx +0 -257
- package/src/components/ui/empty.tsx +0 -104
- package/src/components/ui/field.tsx +0 -248
- package/src/components/ui/form.tsx +0 -167
- package/src/components/ui/hover-card.tsx +0 -44
- package/src/components/ui/input-group.tsx +0 -170
- package/src/components/ui/input-otp.tsx +0 -77
- package/src/components/ui/input.tsx +0 -21
- package/src/components/ui/item.tsx +0 -193
- package/src/components/ui/kbd.tsx +0 -28
- package/src/components/ui/label.tsx +0 -24
- package/src/components/ui/menubar.tsx +0 -276
- package/src/components/ui/navigation-menu.tsx +0 -168
- package/src/components/ui/pagination.tsx +0 -127
- package/src/components/ui/popover.tsx +0 -48
- package/src/components/ui/progress.tsx +0 -31
- package/src/components/ui/radio-group.tsx +0 -45
- package/src/components/ui/resizable.tsx +0 -56
- package/src/components/ui/scroll-area.tsx +0 -58
- package/src/components/ui/select.tsx +0 -187
- package/src/components/ui/separator.tsx +0 -28
- package/src/components/ui/sheet.tsx +0 -139
- package/src/components/ui/sidebar.tsx +0 -726
- package/src/components/ui/skeleton.tsx +0 -13
- package/src/components/ui/slider.tsx +0 -63
- package/src/components/ui/sonner.tsx +0 -40
- package/src/components/ui/spinner.tsx +0 -16
- package/src/components/ui/switch.tsx +0 -31
- package/src/components/ui/table.tsx +0 -116
- package/src/components/ui/tabs.tsx +0 -66
- package/src/components/ui/textarea.tsx +0 -18
- package/src/components/ui/toggle-group.tsx +0 -83
- package/src/components/ui/toggle.tsx +0 -47
- package/src/components/ui/tooltip.tsx +0 -61
- package/src/exports/components.ts +0 -15
- package/src/exports/index.ts +0 -4
- package/src/exports/providers.ts +0 -4
- package/src/exports/types.ts +0 -26
- package/src/hooks/use-ai-chat.ts +0 -182
- package/src/hooks/use-all-connections.ts +0 -66
- package/src/hooks/use-api-call.ts +0 -71
- package/src/hooks/use-auth.ts +0 -51
- package/src/hooks/use-connection-form.ts +0 -349
- package/src/hooks/use-connection-manager.ts +0 -169
- package/src/hooks/use-connection-payload.ts +0 -15
- package/src/hooks/use-inline-editing.ts +0 -109
- package/src/hooks/use-mobile.ts +0 -20
- package/src/hooks/use-monitoring-data.ts +0 -270
- package/src/hooks/use-provider-metadata.ts +0 -62
- package/src/hooks/use-query-execution.ts +0 -478
- package/src/hooks/use-storage-sync.ts +0 -259
- package/src/hooks/use-tab-manager.ts +0 -231
- package/src/hooks/use-toast.ts +0 -20
- package/src/hooks/use-transaction-control.ts +0 -64
- package/src/lib/api/error-codes.ts +0 -30
- package/src/lib/api/errors.ts +0 -236
- package/src/lib/api/with-error-handler.ts +0 -41
- package/src/lib/audit.ts +0 -105
- package/src/lib/auth.ts +0 -87
- package/src/lib/connection-string-parser.ts +0 -172
- package/src/lib/data-masking.ts +0 -385
- package/src/lib/db/base-provider.ts +0 -325
- package/src/lib/db/errors.ts +0 -317
- package/src/lib/db/factory.ts +0 -324
- package/src/lib/db/index.ts +0 -123
- package/src/lib/db/providers/document/index.ts +0 -6
- package/src/lib/db/providers/document/mongodb.ts +0 -992
- package/src/lib/db/providers/keyvalue/redis.ts +0 -554
- package/src/lib/db/providers/sql/index.ts +0 -11
- package/src/lib/db/providers/sql/sql-base.ts +0 -174
- package/src/lib/db/providers/sql/sqlite.ts +0 -721
- package/src/lib/db/types.ts +0 -437
- package/src/lib/db/utils/pool-manager.ts +0 -287
- package/src/lib/db/utils/query-limiter.ts +0 -239
- package/src/lib/db-ui-config.ts +0 -86
- package/src/lib/editor/mongodb-completions.ts +0 -172
- package/src/lib/editor/sql-completions.ts +0 -280
- package/src/lib/llm/base-provider.ts +0 -117
- package/src/lib/llm/factory.ts +0 -102
- package/src/lib/llm/index.ts +0 -90
- package/src/lib/llm/providers/custom.ts +0 -181
- package/src/lib/llm/providers/gemini.ts +0 -126
- package/src/lib/llm/providers/ollama.ts +0 -154
- package/src/lib/llm/providers/openai.ts +0 -146
- package/src/lib/llm/types.ts +0 -173
- package/src/lib/llm/utils/config.ts +0 -187
- package/src/lib/llm/utils/retry.ts +0 -119
- package/src/lib/llm/utils/streaming.ts +0 -202
- package/src/lib/logger.ts +0 -127
- package/src/lib/monitoring-thresholds.ts +0 -44
- package/src/lib/oidc.ts +0 -262
- package/src/lib/query-generators.ts +0 -61
- package/src/lib/schema-diff/diff-engine.ts +0 -273
- package/src/lib/schema-diff/migration-generator.ts +0 -208
- package/src/lib/schema-diff/types.ts +0 -55
- package/src/lib/seed/config-loader.ts +0 -79
- package/src/lib/seed/connection-filter.ts +0 -49
- package/src/lib/seed/credential-resolver.ts +0 -62
- package/src/lib/seed/index.ts +0 -40
- package/src/lib/seed/resolve-connection.ts +0 -57
- package/src/lib/seed/types.ts +0 -69
- package/src/lib/sql/alias-extractor.ts +0 -267
- package/src/lib/sql/index.ts +0 -8
- package/src/lib/sql/statement-splitter.ts +0 -167
- package/src/lib/sql/types.ts +0 -40
- package/src/lib/ssh/tunnel.ts +0 -142
- package/src/lib/storage/factory.ts +0 -84
- package/src/lib/storage/index.ts +0 -14
- package/src/lib/storage/local-storage.ts +0 -99
- package/src/lib/storage/providers/postgres.ts +0 -225
- package/src/lib/storage/providers/sqlite.ts +0 -153
- package/src/lib/storage/storage-facade.ts +0 -272
- package/src/lib/storage/types.ts +0 -75
- package/src/lib/time-series-buffer.ts +0 -58
- package/src/lib/types.ts +0 -173
- package/src/lib/utils.ts +0 -6
- package/src/proxy.ts +0 -104
- package/src/types/db-drivers.d.ts +0 -23
- package/src/types/html2canvas.d.ts +0 -9
- package/tests/api/admin/audit.test.ts +0 -178
- package/tests/api/admin/fleet-health.test.ts +0 -183
- package/tests/api/ai/autopilot.test.ts +0 -174
- package/tests/api/ai/chat.test.ts +0 -250
- package/tests/api/ai/describe-schema.test.ts +0 -266
- package/tests/api/ai/explain.test.ts +0 -199
- package/tests/api/ai/impact.test.ts +0 -168
- package/tests/api/ai/index-advisor.test.ts +0 -171
- package/tests/api/ai/nl2sql.test.ts +0 -202
- package/tests/api/ai/query-safety.test.ts +0 -196
- package/tests/api/auth/login.test.ts +0 -170
- package/tests/api/auth/logout.test.ts +0 -140
- package/tests/api/auth/me.test.ts +0 -73
- package/tests/api/auth/oidc-callback.test.ts +0 -215
- package/tests/api/auth/oidc-login.test.ts +0 -127
- package/tests/api/db/cancel.test.ts +0 -198
- package/tests/api/db/disconnect.test.ts +0 -124
- package/tests/api/db/health.test.ts +0 -222
- package/tests/api/db/maintenance.test.ts +0 -263
- package/tests/api/db/monitoring.test.ts +0 -221
- package/tests/api/db/multi-query.test.ts +0 -316
- package/tests/api/db/pool-stats.test.ts +0 -135
- package/tests/api/db/profile.test.ts +0 -330
- package/tests/api/db/provider-meta.test.ts +0 -193
- package/tests/api/db/query.test.ts +0 -314
- package/tests/api/db/schema-snapshot.test.ts +0 -170
- package/tests/api/db/schema.test.ts +0 -191
- package/tests/api/db/test-connection.test.ts +0 -185
- package/tests/api/db/transaction.test.ts +0 -314
- package/tests/api/proxy.test.ts +0 -191
- package/tests/api/seed/managed-route.test.ts +0 -113
- package/tests/api/storage/config.test.ts +0 -42
- package/tests/api/storage/storage-routes.test.ts +0 -309
- package/tests/components/AIAutopilotPanel.test.tsx +0 -756
- package/tests/components/AdminPage.test.tsx +0 -33
- package/tests/components/CodeGenerator.test.tsx +0 -182
- package/tests/components/CommandPalette.test.tsx +0 -428
- package/tests/components/CommunitySection.test.tsx +0 -91
- package/tests/components/ConnectionModal.mobile.test.tsx +0 -284
- package/tests/components/ConnectionModal.test.tsx +0 -570
- package/tests/components/CreateTableModal.test.tsx +0 -383
- package/tests/components/DataCharts.test.tsx +0 -739
- package/tests/components/DataImportModal.test.tsx +0 -751
- package/tests/components/DataProfiler.test.tsx +0 -589
- package/tests/components/DatabaseDocs.test.tsx +0 -353
- package/tests/components/LoginPage.test.tsx +0 -163
- package/tests/components/LoginPageOIDC.test.tsx +0 -92
- package/tests/components/MaskingSettings.test.tsx +0 -498
- package/tests/components/MobileNav.test.tsx +0 -30
- package/tests/components/MonitoringPage.test.tsx +0 -32
- package/tests/components/NL2SQLPanel.test.tsx +0 -621
- package/tests/components/Page.test.tsx +0 -33
- package/tests/components/PivotTable.test.tsx +0 -350
- package/tests/components/QueryEditor.test.tsx +0 -1730
- package/tests/components/QueryHistory.test.tsx +0 -572
- package/tests/components/QuerySafetyDialog.test.tsx +0 -586
- package/tests/components/ResultsGrid.test.tsx +0 -804
- package/tests/components/RootLayout.test.tsx +0 -83
- package/tests/components/SaveQueryModal.test.tsx +0 -25
- package/tests/components/SavedQueries.test.tsx +0 -43
- package/tests/components/SchemaDiagram.test.tsx +0 -1034
- package/tests/components/SchemaDiff.test.tsx +0 -906
- package/tests/components/SnapshotTimeline.test.tsx +0 -174
- package/tests/components/Studio.test.tsx +0 -1030
- package/tests/components/TestDataGenerator.test.tsx +0 -291
- package/tests/components/VisualExplain.test.tsx +0 -704
- package/tests/components/admin/AdminDashboard.test.tsx +0 -205
- package/tests/components/admin/AuditTab.test.tsx +0 -220
- package/tests/components/admin/MonitoringEmbed.test.tsx +0 -58
- package/tests/components/admin/OperationsTab.test.tsx +0 -975
- package/tests/components/admin/OverviewTab.test.tsx +0 -254
- package/tests/components/admin/SecurityTab.test.tsx +0 -467
- package/tests/components/monitoring/MetricChart.test.tsx +0 -111
- package/tests/components/monitoring/MonitoringDashboard.test.tsx +0 -259
- package/tests/components/monitoring/OverviewTab.test.tsx +0 -78
- package/tests/components/monitoring/PerformanceTab.test.tsx +0 -87
- package/tests/components/monitoring/PoolTab.test.tsx +0 -42
- package/tests/components/monitoring/QueriesTab.test.tsx +0 -80
- package/tests/components/monitoring/SessionsTab.test.tsx +0 -154
- package/tests/components/monitoring/StorageTab.test.tsx +0 -127
- package/tests/components/monitoring/TablesTab.test.tsx +0 -153
- package/tests/components/results-grid/ResultCard.test.tsx +0 -105
- package/tests/components/results-grid/RowDetailSheet.test.tsx +0 -308
- package/tests/components/results-grid/StatsBar.test.tsx +0 -162
- package/tests/components/schema-explorer/ColumnList.test.tsx +0 -151
- package/tests/components/schema-explorer/SchemaExplorer.test.tsx +0 -461
- package/tests/components/schema-explorer/TableItem.test.tsx +0 -415
- package/tests/components/sidebar/ConnectionItem.test.tsx +0 -201
- package/tests/components/sidebar/ConnectionsList.test.tsx +0 -176
- package/tests/components/sidebar/Sidebar.test.tsx +0 -187
- package/tests/components/studio/BottomPanel.test.tsx +0 -383
- package/tests/components/studio/QueryToolbar.test.tsx +0 -321
- package/tests/components/studio/StudioDesktopHeader.test.tsx +0 -377
- package/tests/components/studio/StudioMobileHeader.test.tsx +0 -198
- package/tests/components/studio/StudioTabBar.test.tsx +0 -331
- package/tests/fixtures/connections.ts +0 -96
- package/tests/fixtures/masking-configs.ts +0 -86
- package/tests/fixtures/query-results.ts +0 -71
- package/tests/fixtures/schemas.ts +0 -64
- package/tests/fixtures/seed-connections/invalid-config.yaml +0 -7
- package/tests/fixtures/seed-connections/minimal-config.yaml +0 -8
- package/tests/fixtures/seed-connections/mixed-credentials.yaml +0 -23
- package/tests/fixtures/seed-connections/multi-role-config.yaml +0 -30
- package/tests/fixtures/seed-connections/valid-config.json +0 -15
- package/tests/fixtures/seed-connections/valid-config.yaml +0 -51
- package/tests/helpers/mock-fetch.ts +0 -59
- package/tests/helpers/mock-monaco.ts +0 -112
- package/tests/helpers/mock-navigation.ts +0 -28
- package/tests/helpers/mock-next.ts +0 -80
- package/tests/helpers/mock-provider.ts +0 -133
- package/tests/helpers/mock-sonner.ts +0 -29
- package/tests/helpers/render-with-providers.tsx +0 -19
- package/tests/hooks/use-ai-chat.test.ts +0 -600
- package/tests/hooks/use-auth.test.ts +0 -371
- package/tests/hooks/use-connection-form.test.ts +0 -743
- package/tests/hooks/use-connection-manager.test.ts +0 -466
- package/tests/hooks/use-inline-editing.test.ts +0 -321
- package/tests/hooks/use-mobile.test.ts +0 -177
- package/tests/hooks/use-monitoring-data.test.ts +0 -819
- package/tests/hooks/use-provider-metadata.test.ts +0 -228
- package/tests/hooks/use-query-execution.test.ts +0 -1212
- package/tests/hooks/use-tab-manager.test.ts +0 -756
- package/tests/hooks/use-toast.test.ts +0 -74
- package/tests/hooks/use-transaction-control.test.ts +0 -211
- package/tests/integration/db/mongodb-provider.test.ts +0 -698
- package/tests/integration/db/mssql-provider.test.ts +0 -840
- package/tests/integration/db/mysql-provider.test.ts +0 -872
- package/tests/integration/db/oracle-provider.test.ts +0 -843
- package/tests/integration/db/postgres-provider.test.ts +0 -1382
- package/tests/integration/db/redis-provider.test.ts +0 -526
- package/tests/integration/db/sqlite-provider.test.ts +0 -480
- package/tests/integration/seed/seed-pipeline.test.ts +0 -102
- package/tests/isolated/factory-singleton.test.ts +0 -150
- package/tests/isolated/use-storage-sync.test.ts +0 -389
- package/tests/run-components.sh +0 -196
- package/tests/setup-dom.ts +0 -58
- package/tests/setup.ts +0 -40
- package/tests/unit/api-errors.test.ts +0 -210
- package/tests/unit/code-generator-functions.test.ts +0 -271
- package/tests/unit/components/column-list.test.tsx +0 -190
- package/tests/unit/components/data-import-modal.test.tsx +0 -441
- package/tests/unit/components/studio-mobile-header.test.tsx +0 -327
- package/tests/unit/data-charts-functions.test.ts +0 -496
- package/tests/unit/data-import-functions.test.ts +0 -320
- package/tests/unit/data-import-utils.test.ts +0 -125
- package/tests/unit/db/base-provider.test.ts +0 -517
- package/tests/unit/db/errors.test.ts +0 -403
- package/tests/unit/db/factory.test.ts +0 -436
- package/tests/unit/db/pool-manager.test.ts +0 -440
- package/tests/unit/db/query-limiter.test.ts +0 -387
- package/tests/unit/db/sql-base.test.ts +0 -438
- package/tests/unit/lib/api/error-codes.test.ts +0 -39
- package/tests/unit/lib/audit.test.ts +0 -326
- package/tests/unit/lib/auth.test.ts +0 -146
- package/tests/unit/lib/connection-string-parser.test.ts +0 -424
- package/tests/unit/lib/data-masking.test.ts +0 -583
- package/tests/unit/lib/db-icons.test.tsx +0 -41
- package/tests/unit/lib/monitoring-thresholds.test.ts +0 -133
- package/tests/unit/lib/oidc.test.ts +0 -509
- package/tests/unit/lib/query-generators.test.ts +0 -127
- package/tests/unit/lib/storage/factory.test.ts +0 -71
- package/tests/unit/lib/storage/local-storage.test.ts +0 -114
- package/tests/unit/lib/storage/providers/postgres.test.ts +0 -312
- package/tests/unit/lib/storage/providers/sqlite.test.ts +0 -232
- package/tests/unit/lib/storage/storage-facade-extended.test.ts +0 -331
- package/tests/unit/lib/storage/storage-facade.test.ts +0 -184
- package/tests/unit/lib/storage.test.ts +0 -317
- package/tests/unit/lib/time-series-buffer.test.ts +0 -212
- package/tests/unit/lib/utils.test.ts +0 -24
- package/tests/unit/llm/base-provider.test.ts +0 -238
- package/tests/unit/llm/config.test.ts +0 -262
- package/tests/unit/llm/custom-provider.test.ts +0 -281
- package/tests/unit/llm/gemini-provider.test.ts +0 -248
- package/tests/unit/llm/llm-factory.test.ts +0 -155
- package/tests/unit/llm/ollama-provider.test.ts +0 -288
- package/tests/unit/llm/openai-provider.test.ts +0 -324
- package/tests/unit/llm/retry.test.ts +0 -180
- package/tests/unit/llm/streaming.test.ts +0 -355
- package/tests/unit/logger.test.ts +0 -198
- package/tests/unit/mongodb-completions.test.ts +0 -516
- package/tests/unit/pivot-table-functions.test.ts +0 -76
- package/tests/unit/query-cancelled-error.test.ts +0 -81
- package/tests/unit/schema-diff/diff-engine.test.ts +0 -367
- package/tests/unit/schema-diff/migration-generator.test.ts +0 -513
- package/tests/unit/seed/config-loader.test.ts +0 -73
- package/tests/unit/seed/connection-filter.test.ts +0 -91
- package/tests/unit/seed/credential-resolver.test.ts +0 -85
- package/tests/unit/seed/index.test.ts +0 -72
- package/tests/unit/seed/resolve-connection.test.ts +0 -74
- package/tests/unit/seed/types.test.ts +0 -129
- package/tests/unit/sql/alias-extractor.test.ts +0 -444
- package/tests/unit/sql/statement-splitter.test.ts +0 -348
- package/tests/unit/sql-completions.test.ts +0 -463
- package/tests/unit/ssh-tunnel.test.ts +0 -465
- package/tsconfig.json +0 -42
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libredb/studio",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.12",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -9,12 +9,64 @@
|
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "https://github.com/libredb/libredb-studio"
|
|
11
11
|
},
|
|
12
|
+
"main": "./dist/index.js",
|
|
13
|
+
"module": "./dist/index.mjs",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
12
15
|
"exports": {
|
|
13
|
-
".":
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
".": {
|
|
17
|
+
"import": {
|
|
18
|
+
"types": "./dist/index.d.mts",
|
|
19
|
+
"default": "./dist/index.mjs"
|
|
20
|
+
},
|
|
21
|
+
"require": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"./providers": {
|
|
27
|
+
"import": {
|
|
28
|
+
"types": "./dist/providers.d.mts",
|
|
29
|
+
"default": "./dist/providers.mjs"
|
|
30
|
+
},
|
|
31
|
+
"require": {
|
|
32
|
+
"types": "./dist/providers.d.ts",
|
|
33
|
+
"default": "./dist/providers.js"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"./types": {
|
|
37
|
+
"import": {
|
|
38
|
+
"types": "./dist/types.d.mts",
|
|
39
|
+
"default": "./dist/types.mjs"
|
|
40
|
+
},
|
|
41
|
+
"require": {
|
|
42
|
+
"types": "./dist/types.d.ts",
|
|
43
|
+
"default": "./dist/types.js"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"./components": {
|
|
47
|
+
"import": {
|
|
48
|
+
"types": "./dist/components.d.mts",
|
|
49
|
+
"default": "./dist/components.mjs"
|
|
50
|
+
},
|
|
51
|
+
"require": {
|
|
52
|
+
"types": "./dist/components.d.ts",
|
|
53
|
+
"default": "./dist/components.js"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"./workspace": {
|
|
57
|
+
"import": {
|
|
58
|
+
"types": "./dist/workspace.d.mts",
|
|
59
|
+
"default": "./dist/workspace.mjs"
|
|
60
|
+
},
|
|
61
|
+
"require": {
|
|
62
|
+
"types": "./dist/workspace.d.ts",
|
|
63
|
+
"default": "./dist/workspace.js"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
17
66
|
},
|
|
67
|
+
"files": [
|
|
68
|
+
"dist"
|
|
69
|
+
],
|
|
18
70
|
"peerDependencies": {
|
|
19
71
|
"react": "^19",
|
|
20
72
|
"react-dom": "^19"
|
|
@@ -22,6 +74,8 @@
|
|
|
22
74
|
"scripts": {
|
|
23
75
|
"dev": "next dev",
|
|
24
76
|
"build": "next build",
|
|
77
|
+
"build:lib": "tsup",
|
|
78
|
+
"prepublishOnly": "tsup",
|
|
25
79
|
"start": "next start",
|
|
26
80
|
"lint": "eslint .",
|
|
27
81
|
"typecheck": "tsc --noEmit",
|
|
@@ -124,6 +178,7 @@
|
|
|
124
178
|
"eslint-config-next": "^16.1.6",
|
|
125
179
|
"happy-dom": "^20.6.1",
|
|
126
180
|
"tailwindcss": "^4",
|
|
181
|
+
"tsup": "^8.5.1",
|
|
127
182
|
"tw-animate-css": "^1.4.0",
|
|
128
183
|
"typescript": "^5"
|
|
129
184
|
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(grep:*)",
|
|
5
|
-
"Bash(find:*)",
|
|
6
|
-
"Bash(xargs:*)",
|
|
7
|
-
"Bash(bun run lint:*)",
|
|
8
|
-
"Bash(npx tsc:*)",
|
|
9
|
-
"Bash(bun run build:*)",
|
|
10
|
-
"Bash(bun add:*)",
|
|
11
|
-
"Bash(bun create:*)",
|
|
12
|
-
"Bash(bun remove:*)",
|
|
13
|
-
"Bash(ls:*)",
|
|
14
|
-
"Bash(bun pm ls:*)",
|
|
15
|
-
"Bash(npm ls:*)",
|
|
16
|
-
"Bash(npm audit:*)",
|
|
17
|
-
"Bash(docker network:*)",
|
|
18
|
-
"Bash(docker ps:*)",
|
|
19
|
-
"Bash(docker build:*)",
|
|
20
|
-
"Bash(.)",
|
|
21
|
-
"Bash(docker rm:*)",
|
|
22
|
-
"Bash(docker run:*)",
|
|
23
|
-
"Bash(libredb-studio:test)",
|
|
24
|
-
"Bash(curl:*)",
|
|
25
|
-
"WebFetch(domain:ui.shadcn.com)",
|
|
26
|
-
"WebFetch(domain:www.shadcnblocks.com)",
|
|
27
|
-
"Bash(PGPASSWORD='npg_qMrKIcQ0X6hn' psql:*)",
|
|
28
|
-
"Bash(PGPASSWORD='readonly_secure_pass_2024' psql:*)",
|
|
29
|
-
"Bash(docker logs:*)",
|
|
30
|
-
"Bash(docker stop:*)",
|
|
31
|
-
"Bash(libredb-test:*)",
|
|
32
|
-
"Bash(PGPASSWORD='npg_qMrKIcQ0X6hn' psql -h ep-falling-morning-ag8brons-pooler.c-2.eu-central-1.aws.neon.tech -U neondb_owner -d employees -c \"\nSELECT table_name\nFROM information_schema.tables\nWHERE table_schema = ''employees''\nORDER BY table_name;\n\")",
|
|
33
|
-
"mcp__ide__getDiagnostics",
|
|
34
|
-
"Bash(lsof:*)",
|
|
35
|
-
"WebFetch(domain:github.com)",
|
|
36
|
-
"Bash(claude mcp add:*)",
|
|
37
|
-
"mcp__playwright",
|
|
38
|
-
"WebSearch",
|
|
39
|
-
"Bash(wc:*)",
|
|
40
|
-
"Bash(fuser:*)",
|
|
41
|
-
"Bash(pkill:*)",
|
|
42
|
-
"Bash(npm run build:*)",
|
|
43
|
-
"Bash(source:*)",
|
|
44
|
-
"Bash(echo $ADMIN_PASSWORD)",
|
|
45
|
-
"Bash(echo $USER_PASSWORD)",
|
|
46
|
-
"Bash(mysql:*)",
|
|
47
|
-
"Bash(bun dev)",
|
|
48
|
-
"Bash(echo:*)",
|
|
49
|
-
"Bash(git -C /home/cevheri/projects/cevheribozoglan/libredb-studio status)",
|
|
50
|
-
"Bash(git -C /home/cevheri/projects/cevheribozoglan/libredb-studio diff --stat)",
|
|
51
|
-
"Bash(git -C /home/cevheri/projects/cevheribozoglan/libredb-studio log --oneline -5)",
|
|
52
|
-
"Bash(git -C /home/cevheri/projects/cevheribozoglan/libredb-studio diff src/components/Studio.tsx src/components/monitoring/MonitoringDashboard.tsx src/lib/db/providers/sql/mysql.ts src/lib/storage.ts)",
|
|
53
|
-
"Bash(docker exec:*)",
|
|
54
|
-
"Bash(docker compose:*)",
|
|
55
|
-
"Bash(PGPASSWORD=postgres psql:*)",
|
|
56
|
-
"Bash(bun --version:*)",
|
|
57
|
-
"Bash(bun test:*)",
|
|
58
|
-
"Bash(bun -e:*)",
|
|
59
|
-
"Bash(node:*)",
|
|
60
|
-
"Bash(while read f)",
|
|
61
|
-
"Bash(do)",
|
|
62
|
-
"Bash(if ! grep -q 'cleanup' \"$f\")",
|
|
63
|
-
"Bash(then)",
|
|
64
|
-
"Bash(fi)",
|
|
65
|
-
"Bash(done)",
|
|
66
|
-
"Bash(/home/cevheri/projects/cevheribozoglan/libredb-studio/tests/_debug-screen.test.tsx:*)",
|
|
67
|
-
"Bash(__NEW_LINE_b497933af27a2c60__ bun test tests/_debug-screen.test.tsx)",
|
|
68
|
-
"Bash(# Test::*)",
|
|
69
|
-
"Bash(git stash:*)",
|
|
70
|
-
"Bash(tests/_debug_tabs.test.tsx:*)",
|
|
71
|
-
"Bash(bun run test:*)",
|
|
72
|
-
"Bash(bun run:*)",
|
|
73
|
-
"Bash(bunx playwright install:*)",
|
|
74
|
-
"Bash(bunx playwright test:*)",
|
|
75
|
-
"Bash(npx eslint:*)",
|
|
76
|
-
"Bash(bunx eslint:*)",
|
|
77
|
-
"Bash(chmod:*)",
|
|
78
|
-
"Bash(bash tests/run-components.sh)",
|
|
79
|
-
"Bash(gh run list:*)",
|
|
80
|
-
"Bash(bash)",
|
|
81
|
-
"Bash(~/.bun/bin/bun:*)",
|
|
82
|
-
"Bash(tar:*)",
|
|
83
|
-
"Bash(/tmp/gh_2.65.0_linux_amd64/bin/gh:*)",
|
|
84
|
-
"Bash(cat:*)",
|
|
85
|
-
"Bash(for i in 1 2 3)",
|
|
86
|
-
"Bash(do echo \"=== Run $i ===\")",
|
|
87
|
-
"Bash(genhtml:*)",
|
|
88
|
-
"Bash(/tmp/debug-schema-diff.tsx:*)",
|
|
89
|
-
"Bash(python3:*)",
|
|
90
|
-
"Bash(/tmp/test-login-debug.tsx:*)",
|
|
91
|
-
"Bash(/home/cevheri/projects/cevheribozoglan/libredb-studio/tests/_debug_login.tsx:*)",
|
|
92
|
-
"Bash(/tmp/bad-test.test.ts:*)",
|
|
93
|
-
"Bash(bunx tsc:*)",
|
|
94
|
-
"WebFetch(domain:registry.npmjs.org)",
|
|
95
|
-
"WebFetch(domain:libredb.eu.auth0.com)",
|
|
96
|
-
"Bash(psql:*)",
|
|
97
|
-
"WebFetch(domain:railway.com)",
|
|
98
|
-
"WebFetch(domain:render.com)",
|
|
99
|
-
"WebFetch(domain:fly.io)",
|
|
100
|
-
"WebFetch(domain:coolify.io)",
|
|
101
|
-
"WebFetch(domain:northflank.com)",
|
|
102
|
-
"WebFetch(domain:www.koyeb.com)",
|
|
103
|
-
"WebFetch(domain:zeabur.com)",
|
|
104
|
-
"WebFetch(domain:www.porter.run)",
|
|
105
|
-
"WebFetch(domain:www.digitalocean.com)",
|
|
106
|
-
"WebFetch(domain:aws.amazon.com)",
|
|
107
|
-
"WebFetch(domain:sliplane.io)",
|
|
108
|
-
"WebFetch(domain:neon.com)",
|
|
109
|
-
"WebFetch(domain:supabase.com)",
|
|
110
|
-
"WebFetch(domain:xata.io)",
|
|
111
|
-
"WebFetch(domain:www.tembo.io)",
|
|
112
|
-
"WebFetch(domain:docs.digitalocean.com)",
|
|
113
|
-
"WebFetch(domain:planetscale.com)",
|
|
114
|
-
"WebFetch(domain:azure.microsoft.com)",
|
|
115
|
-
"WebFetch(domain:developers.cloudflare.com)",
|
|
116
|
-
"WebFetch(domain:www.analyticsvidhya.com)",
|
|
117
|
-
"Bash(unzip:*)",
|
|
118
|
-
"WebFetch(domain:helm.sh)",
|
|
119
|
-
"WebFetch(domain:artifacthub.io)",
|
|
120
|
-
"WebFetch(domain:libredb.org)"
|
|
121
|
-
]
|
|
122
|
-
},
|
|
123
|
-
"enableAllProjectMcpServers": true,
|
|
124
|
-
"enabledMcpjsonServers": [
|
|
125
|
-
"playwright"
|
|
126
|
-
]
|
|
127
|
-
}
|
package/.cursorrules
DELETED
|
@@ -1,426 +0,0 @@
|
|
|
1
|
-
# LibreDB Studio - Cursor Rules
|
|
2
|
-
|
|
3
|
-
This file provides comprehensive guidance for AI assistants and developers working on LibreDB Studio. Follow these rules to maintain code quality, consistency, and architectural integrity.
|
|
4
|
-
|
|
5
|
-
## Project Overview
|
|
6
|
-
|
|
7
|
-
LibreDB Studio is a modern, AI-powered, open-source SQL IDE for cloud-native teams. It provides a web-based interface for managing PostgreSQL, MySQL, SQLite, and MongoDB databases with features like AI-assisted query generation, visual schema exploration, and real-time monitoring.
|
|
8
|
-
|
|
9
|
-
**Key Characteristics:**
|
|
10
|
-
- Mobile-first, professional-always design philosophy
|
|
11
|
-
- Zero-install browser-based solution
|
|
12
|
-
- Multi-database support via Strategy Pattern
|
|
13
|
-
- AI-native with multi-model LLM support (Gemini, OpenAI, Ollama, Custom)
|
|
14
|
-
- Enterprise-grade with RBAC, query auditing, and health monitoring
|
|
15
|
-
|
|
16
|
-
## Tech Stack
|
|
17
|
-
|
|
18
|
-
### Core Framework
|
|
19
|
-
- **Next.js 15** (App Router) with React 19
|
|
20
|
-
- **TypeScript** (strict mode enabled)
|
|
21
|
-
- **Bun** (preferred runtime) or Node.js 20+
|
|
22
|
-
- **Tailwind CSS 4** with `@theme inline` theming
|
|
23
|
-
- **shadcn/ui** components (Radix UI primitives)
|
|
24
|
-
|
|
25
|
-
### Key Libraries
|
|
26
|
-
- **Monaco Editor** - SQL editor (VS Code engine)
|
|
27
|
-
- **TanStack Table & Virtual** - Virtualized data grids
|
|
28
|
-
- **Framer Motion** - Animations
|
|
29
|
-
- **Jose** - JWT authentication
|
|
30
|
-
- **Zod** - Runtime type validation
|
|
31
|
-
- **React Hook Form** - Form management
|
|
32
|
-
|
|
33
|
-
### Database Drivers
|
|
34
|
-
- PostgreSQL: `pg`
|
|
35
|
-
- MySQL: `mysql2`
|
|
36
|
-
- SQLite: `better-sqlite3` (via dynamic import)
|
|
37
|
-
- MongoDB: `mongodb`
|
|
38
|
-
|
|
39
|
-
## Code Style & Conventions
|
|
40
|
-
|
|
41
|
-
### TypeScript
|
|
42
|
-
|
|
43
|
-
- **Always use TypeScript** - No JavaScript files unless absolutely necessary
|
|
44
|
-
- **Strict mode** - TypeScript strict mode is enabled, respect it
|
|
45
|
-
- **Avoid `any`** - Use `unknown` or proper types instead. If `any` is unavoidable, add a comment explaining why
|
|
46
|
-
- **Explicit types** - Prefer explicit return types for functions, especially public APIs
|
|
47
|
-
- **Type imports** - Use `import type` for type-only imports
|
|
48
|
-
- **Interfaces over types** - Prefer `interface` for object shapes, use `type` for unions, intersections, and aliases
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
// ✅ Good
|
|
52
|
-
interface DatabaseConnection {
|
|
53
|
-
id: string;
|
|
54
|
-
name: string;
|
|
55
|
-
type: DatabaseType;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
type DatabaseType = 'postgres' | 'mysql' | 'sqlite' | 'mongodb' | 'redis' | 'oracle' | 'mssql';
|
|
59
|
-
|
|
60
|
-
// ❌ Bad
|
|
61
|
-
type DatabaseConnection = {
|
|
62
|
-
id: string;
|
|
63
|
-
name: string;
|
|
64
|
-
}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Naming Conventions
|
|
68
|
-
|
|
69
|
-
- **Files**: kebab-case for components (`query-editor.tsx`), PascalCase for components (`QueryEditor.tsx`)
|
|
70
|
-
- **Components**: PascalCase (`QueryEditor`, `Dashboard`)
|
|
71
|
-
- **Functions/Variables**: camelCase (`fetchUser`, `activeConnection`)
|
|
72
|
-
- **Constants**: UPPER_SNAKE_CASE (`DEFAULT_TIMEOUT`, `MAX_POOL_SIZE`)
|
|
73
|
-
- **Types/Interfaces**: PascalCase (`DatabaseConnection`, `QueryResult`)
|
|
74
|
-
- **Hooks**: camelCase starting with `use` (`useToast`, `useMonitoringData`)
|
|
75
|
-
- **API Routes**: kebab-case (`/api/db/query`, `/api/auth/login`)
|
|
76
|
-
|
|
77
|
-
### React Patterns
|
|
78
|
-
|
|
79
|
-
- **Functional components only** - No class components
|
|
80
|
-
- **Hooks over HOCs** - Prefer custom hooks for shared logic
|
|
81
|
-
- **Server Components by default** - Use `"use client"` only when necessary (interactivity, hooks, browser APIs)
|
|
82
|
-
- **Component organization**:
|
|
83
|
-
```typescript
|
|
84
|
-
// 1. Imports (external, then internal)
|
|
85
|
-
// 2. Types/Interfaces
|
|
86
|
-
// 3. Component
|
|
87
|
-
// 4. Exports
|
|
88
|
-
```
|
|
89
|
-
- **Props destructuring** - Destructure props in function signature
|
|
90
|
-
- **Memoization** - Use `useMemo`/`useCallback` sparingly, only for expensive computations or stable references
|
|
91
|
-
|
|
92
|
-
```typescript
|
|
93
|
-
// ✅ Good
|
|
94
|
-
export default function QueryEditor({ query, onChange }: QueryEditorProps) {
|
|
95
|
-
const handleChange = useCallback((value: string) => {
|
|
96
|
-
onChange(value);
|
|
97
|
-
}, [onChange]);
|
|
98
|
-
|
|
99
|
-
return <MonacoEditor value={query} onChange={handleChange} />;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// ❌ Bad
|
|
103
|
-
export default function QueryEditor(props: QueryEditorProps) {
|
|
104
|
-
return <MonacoEditor value={props.query} onChange={props.onChange} />;
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### File Organization
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
src/
|
|
112
|
-
├── app/ # Next.js App Router
|
|
113
|
-
│ ├── api/ # API routes (REST endpoints)
|
|
114
|
-
│ ├── (pages)/ # Page components
|
|
115
|
-
│ └── layout.tsx # Root layout
|
|
116
|
-
├── components/ # React components
|
|
117
|
-
│ ├── ui/ # shadcn/ui primitives
|
|
118
|
-
│ └── [Feature].tsx # Feature components
|
|
119
|
-
├── hooks/ # Custom React hooks
|
|
120
|
-
├── lib/ # Utilities and business logic
|
|
121
|
-
│ ├── db/ # Database providers (Strategy Pattern)
|
|
122
|
-
│ ├── llm/ # LLM providers (Strategy Pattern)
|
|
123
|
-
│ └── utils.ts # General utilities
|
|
124
|
-
└── types.ts # Shared TypeScript types
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Import Order
|
|
128
|
-
|
|
129
|
-
1. External dependencies (React, Next.js, third-party)
|
|
130
|
-
2. Internal absolute imports (`@/components`, `@/lib`)
|
|
131
|
-
3. Relative imports (`./types`, `../utils`)
|
|
132
|
-
4. Type-only imports last (if separate)
|
|
133
|
-
|
|
134
|
-
```typescript
|
|
135
|
-
// ✅ Good
|
|
136
|
-
import { useState } from 'react';
|
|
137
|
-
import { NextRequest, NextResponse } from 'next/server';
|
|
138
|
-
import { Button } from '@/components/ui/button';
|
|
139
|
-
import { cn } from '@/lib/utils';
|
|
140
|
-
import type { DatabaseConnection } from '@/lib/types';
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Architecture Patterns
|
|
144
|
-
|
|
145
|
-
### Strategy Pattern for Providers
|
|
146
|
-
|
|
147
|
-
Both database and LLM providers use the Strategy Pattern:
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
// Base interface
|
|
151
|
-
interface DatabaseProvider {
|
|
152
|
-
connect(): Promise<void>;
|
|
153
|
-
query(sql: string): Promise<QueryResult>;
|
|
154
|
-
disconnect(): Promise<void>;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Implementation
|
|
158
|
-
class PostgresProvider extends SQLBaseProvider implements DatabaseProvider {
|
|
159
|
-
// Implementation
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Factory
|
|
163
|
-
export async function createDatabaseProvider(
|
|
164
|
-
connection: DatabaseConnection
|
|
165
|
-
): Promise<DatabaseProvider> {
|
|
166
|
-
switch (connection.type) {
|
|
167
|
-
case 'postgres':
|
|
168
|
-
const { PostgresProvider } = await import('./providers/sql/postgres');
|
|
169
|
-
return new PostgresProvider(connection);
|
|
170
|
-
// ...
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
**Key Points:**
|
|
176
|
-
- Use dynamic imports for providers to reduce initial bundle size
|
|
177
|
-
- All providers implement the same interface
|
|
178
|
-
- Factory function handles provider creation
|
|
179
|
-
- Cache providers for connection reuse
|
|
180
|
-
|
|
181
|
-
### API Routes
|
|
182
|
-
|
|
183
|
-
- **Error handling** - Always use try-catch, return appropriate HTTP status codes
|
|
184
|
-
- **Type safety** - Validate request bodies with Zod when needed
|
|
185
|
-
- **Authentication** - Check JWT via middleware or `getUserFromRequest()`
|
|
186
|
-
- **Response format** - Consistent JSON structure: `{ data?, error?, code? }`
|
|
187
|
-
|
|
188
|
-
```typescript
|
|
189
|
-
// ✅ Good
|
|
190
|
-
export async function POST(req: NextRequest) {
|
|
191
|
-
try {
|
|
192
|
-
const { connection, sql } = await req.json();
|
|
193
|
-
|
|
194
|
-
if (!connection || !sql) {
|
|
195
|
-
return NextResponse.json(
|
|
196
|
-
{ error: 'Connection and SQL query are required' },
|
|
197
|
-
{ status: 400 }
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const provider = await getOrCreateProvider(connection);
|
|
202
|
-
const result = await provider.query(sql);
|
|
203
|
-
|
|
204
|
-
return NextResponse.json(result);
|
|
205
|
-
} catch (error) {
|
|
206
|
-
if (error instanceof QueryError) {
|
|
207
|
-
return NextResponse.json(
|
|
208
|
-
{ error: error.message, code: error.code },
|
|
209
|
-
{ status: 400 }
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
return NextResponse.json(
|
|
213
|
-
{ error: 'Internal server error' },
|
|
214
|
-
{ status: 500 }
|
|
215
|
-
);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### Error Handling
|
|
221
|
-
|
|
222
|
-
- **Custom error classes** - Use project-specific error types (`DatabaseError`, `QueryError`, `TimeoutError`)
|
|
223
|
-
- **Error boundaries** - Use React error boundaries for component-level errors
|
|
224
|
-
- **User-friendly messages** - Never expose internal errors to users
|
|
225
|
-
- **Logging** - Log errors with context: `console.error('[API:query] Error:', error)`
|
|
226
|
-
|
|
227
|
-
```typescript
|
|
228
|
-
// ✅ Good
|
|
229
|
-
try {
|
|
230
|
-
await provider.query(sql);
|
|
231
|
-
} catch (error) {
|
|
232
|
-
if (error instanceof QueryError) {
|
|
233
|
-
// Handle query-specific error
|
|
234
|
-
} else if (isDatabaseError(error)) {
|
|
235
|
-
// Handle database error
|
|
236
|
-
} else {
|
|
237
|
-
// Handle unknown error
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
## Component Guidelines
|
|
243
|
-
|
|
244
|
-
### shadcn/ui Components
|
|
245
|
-
|
|
246
|
-
- **Use existing components** - Check `src/components/ui/` before creating new ones
|
|
247
|
-
- **Composition over configuration** - Prefer component composition
|
|
248
|
-
- **Accessibility** - All components should be keyboard navigable and screen-reader friendly
|
|
249
|
-
- **Theming** - Use CSS variables for theming, defined in `globals.css`
|
|
250
|
-
|
|
251
|
-
### Custom Components
|
|
252
|
-
|
|
253
|
-
- **Single responsibility** - One component, one purpose
|
|
254
|
-
- **Props interface** - Always define explicit props interface
|
|
255
|
-
- **Default exports** - Use default export for main component, named exports for sub-components
|
|
256
|
-
- **Documentation** - Add JSDoc comments for complex components
|
|
257
|
-
|
|
258
|
-
```typescript
|
|
259
|
-
/**
|
|
260
|
-
* QueryEditor component - Monaco-based SQL editor
|
|
261
|
-
*
|
|
262
|
-
* @param query - Current SQL query text
|
|
263
|
-
* @param onChange - Callback when query changes
|
|
264
|
-
* @param onExecute - Callback when execute is triggered
|
|
265
|
-
*/
|
|
266
|
-
export interface QueryEditorProps {
|
|
267
|
-
query: string;
|
|
268
|
-
onChange: (query: string) => void;
|
|
269
|
-
onExecute?: () => void;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
export default function QueryEditor({ query, onChange, onExecute }: QueryEditorProps) {
|
|
273
|
-
// Implementation
|
|
274
|
-
}
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
## Database Provider Development
|
|
278
|
-
|
|
279
|
-
### Adding a New Database Provider
|
|
280
|
-
|
|
281
|
-
1. **Create provider class** in `src/lib/db/providers/[category]/[name].ts`
|
|
282
|
-
2. **Extend base class** - `SQLBaseProvider` for SQL databases, `BaseDatabaseProvider` for others
|
|
283
|
-
3. **Implement required methods** - `connect()`, `query()`, `disconnect()`, `getSchema()`
|
|
284
|
-
4. **Add to factory** - Update `src/lib/db/factory.ts` with new case
|
|
285
|
-
5. **Add types** - Update `DatabaseType` union in `src/lib/types.ts`
|
|
286
|
-
6. **Handle errors** - Use appropriate error classes from `src/lib/db/errors.ts`
|
|
287
|
-
|
|
288
|
-
### Connection Pooling
|
|
289
|
-
|
|
290
|
-
- **Use connection pools** - For SQL databases, always use connection pooling
|
|
291
|
-
- **Pool configuration** - Use `DEFAULT_POOL_CONFIG` or provide custom config
|
|
292
|
-
- **Cleanup** - Always disconnect and clear pools on errors or shutdown
|
|
293
|
-
|
|
294
|
-
## LLM Provider Development
|
|
295
|
-
|
|
296
|
-
### Adding a New LLM Provider
|
|
297
|
-
|
|
298
|
-
1. **Create provider class** in `src/lib/llm/providers/[name].ts`
|
|
299
|
-
2. **Extend `BaseLLMProvider`** - Implement `generate()` and `stream()` methods
|
|
300
|
-
3. **Add to factory** - Update `src/lib/llm/factory.ts`
|
|
301
|
-
4. **Add environment variables** - Document required env vars in README
|
|
302
|
-
5. **Handle rate limits** - Implement retry logic with exponential backoff
|
|
303
|
-
|
|
304
|
-
## Styling Guidelines
|
|
305
|
-
|
|
306
|
-
### Tailwind CSS 4
|
|
307
|
-
|
|
308
|
-
- **Use utility classes** - Prefer Tailwind utilities over custom CSS
|
|
309
|
-
- **Theme variables** - Use CSS variables for colors: `bg-background`, `text-foreground`
|
|
310
|
-
- **Responsive design** - Mobile-first approach: `md:`, `lg:`, `xl:` breakpoints
|
|
311
|
-
- **Dark mode** - All components must support dark mode via theme variables
|
|
312
|
-
- **Custom utilities** - Use `@apply` sparingly, prefer component composition
|
|
313
|
-
|
|
314
|
-
### Component Styling
|
|
315
|
-
|
|
316
|
-
```typescript
|
|
317
|
-
// ✅ Good - Tailwind utilities
|
|
318
|
-
<Button className="bg-primary text-primary-foreground hover:bg-primary/90">
|
|
319
|
-
Submit
|
|
320
|
-
</Button>
|
|
321
|
-
|
|
322
|
-
// ✅ Good - Conditional classes with cn()
|
|
323
|
-
<div className={cn(
|
|
324
|
-
"base-classes",
|
|
325
|
-
isActive && "active-classes",
|
|
326
|
-
variant === "primary" && "primary-classes"
|
|
327
|
-
)}>
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
## Testing & Quality
|
|
331
|
-
|
|
332
|
-
### Code Quality
|
|
333
|
-
|
|
334
|
-
- **ESLint** - Follow ESLint rules, run `bun lint` before committing
|
|
335
|
-
- **Type checking** - Ensure `tsc --noEmit` passes
|
|
336
|
-
- **No console.log in production** - Use `console.error` for errors, remove debug logs
|
|
337
|
-
|
|
338
|
-
### Performance
|
|
339
|
-
|
|
340
|
-
- **Code splitting** - Use dynamic imports for heavy dependencies
|
|
341
|
-
- **Virtualization** - Use TanStack Virtual for large lists
|
|
342
|
-
- **Memoization** - Memoize expensive computations
|
|
343
|
-
- **Image optimization** - Use Next.js Image component for images
|
|
344
|
-
|
|
345
|
-
## Git & Commit Messages
|
|
346
|
-
|
|
347
|
-
### Commit Message Format
|
|
348
|
-
|
|
349
|
-
Follow conventional commits:
|
|
350
|
-
|
|
351
|
-
```
|
|
352
|
-
type(scope): subject
|
|
353
|
-
|
|
354
|
-
body (optional)
|
|
355
|
-
|
|
356
|
-
footer (optional)
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
**Types:**
|
|
360
|
-
- `feat`: New feature
|
|
361
|
-
- `fix`: Bug fix
|
|
362
|
-
- `docs`: Documentation changes
|
|
363
|
-
- `style`: Code style changes (formatting, no logic change)
|
|
364
|
-
- `refactor`: Code refactoring
|
|
365
|
-
- `perf`: Performance improvements
|
|
366
|
-
- `test`: Adding or updating tests
|
|
367
|
-
- `chore`: Maintenance tasks
|
|
368
|
-
|
|
369
|
-
**Examples:**
|
|
370
|
-
```
|
|
371
|
-
feat(db): add SQLite provider support
|
|
372
|
-
fix(api): handle connection timeout errors
|
|
373
|
-
docs(readme): update installation instructions
|
|
374
|
-
refactor(components): extract query editor logic to hook
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
## Environment Variables
|
|
378
|
-
|
|
379
|
-
### Required
|
|
380
|
-
- `ADMIN_PASSWORD` - Admin user password
|
|
381
|
-
- `USER_PASSWORD` - Regular user password
|
|
382
|
-
- `JWT_SECRET` - JWT signing secret (min 32 characters)
|
|
383
|
-
|
|
384
|
-
### Optional
|
|
385
|
-
- `LLM_PROVIDER` - AI provider: `gemini`, `openai`, `ollama`, `custom`
|
|
386
|
-
- `LLM_API_KEY` - API key for LLM provider
|
|
387
|
-
- `LLM_MODEL` - Model name (e.g., `gemini-2.5-flash`)
|
|
388
|
-
- `LLM_API_URL` - Custom API URL (for local LLMs)
|
|
389
|
-
|
|
390
|
-
## Common Pitfalls to Avoid
|
|
391
|
-
|
|
392
|
-
1. **Don't use `any`** - Always type your code properly
|
|
393
|
-
2. **Don't ignore errors** - Always handle errors appropriately
|
|
394
|
-
3. **Don't commit secrets** - Never commit `.env.local` or API keys
|
|
395
|
-
4. **Don't break the Strategy Pattern** - Keep provider interfaces consistent
|
|
396
|
-
5. **Don't mix server and client code** - Be explicit about `"use client"`
|
|
397
|
-
6. **Don't forget accessibility** - All interactive elements must be keyboard accessible
|
|
398
|
-
7. **Don't skip error boundaries** - Protect the app from component errors
|
|
399
|
-
8. **Don't use inline styles** - Use Tailwind classes or CSS variables
|
|
400
|
-
|
|
401
|
-
## AI Assistant Guidelines
|
|
402
|
-
|
|
403
|
-
When working on this codebase:
|
|
404
|
-
|
|
405
|
-
1. **Understand the architecture** - Read `docs/ARCHITECTURE.md` before making changes
|
|
406
|
-
2. **Follow patterns** - Match existing code patterns and conventions
|
|
407
|
-
3. **Ask for clarification** - If unsure about approach, ask before implementing
|
|
408
|
-
4. **Test thoroughly** - Ensure changes work across different database types
|
|
409
|
-
5. **Update documentation** - Keep README and docs up to date
|
|
410
|
-
6. **Consider mobile** - All features must work on mobile browsers
|
|
411
|
-
7. **Respect RBAC** - Admin-only features must check user role
|
|
412
|
-
8. **Performance first** - Optimize for large datasets and slow connections
|
|
413
|
-
|
|
414
|
-
## Resources
|
|
415
|
-
|
|
416
|
-
- **Architecture**: `docs/ARCHITECTURE.md`
|
|
417
|
-
- **API Documentation**: `docs/API_DOCS.md`
|
|
418
|
-
- **Theming Guide**: `docs/THEMING.md`
|
|
419
|
-
- **Contributing**: `CONTRIBUTING.md`
|
|
420
|
-
- **Claude Guide**: `CLAUDE.md`
|
|
421
|
-
|
|
422
|
-
---
|
|
423
|
-
|
|
424
|
-
**Last Updated**: 2025-01-XX
|
|
425
|
-
**Project Version**: 0.6.1
|
|
426
|
-
|