@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.
Files changed (572) hide show
  1. package/.claude/settings.local.json +127 -0
  2. package/.cursorrules +426 -0
  3. package/.devin/wiki.json +143 -0
  4. package/.dockerignore +80 -0
  5. package/.env.example +159 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +49 -0
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
  8. package/.github/PULL_REQUEST_TEMPLATE.md +57 -0
  9. package/.github/workflows/ci.yml +185 -0
  10. package/.github/workflows/codeql.yml +57 -0
  11. package/.github/workflows/docker-build-push.yml +118 -0
  12. package/.github/workflows/helm-release.yml +113 -0
  13. package/CLAUDE.md +265 -0
  14. package/CODE_OF_CONDUCT.md +124 -0
  15. package/CONTRIBUTING.md +154 -0
  16. package/Dockerfile +73 -0
  17. package/LICENSE +21 -0
  18. package/README.md +614 -0
  19. package/SECURITY.md +107 -0
  20. package/artifacthub-repo.yml +4 -0
  21. package/bun.lock +1714 -0
  22. package/bunfig.toml +3 -0
  23. package/charts/libredb-studio/.helmignore +11 -0
  24. package/charts/libredb-studio/Chart.lock +6 -0
  25. package/charts/libredb-studio/Chart.yaml +50 -0
  26. package/charts/libredb-studio/README.md +206 -0
  27. package/charts/libredb-studio/templates/NOTES.txt +59 -0
  28. package/charts/libredb-studio/templates/_helpers.tpl +135 -0
  29. package/charts/libredb-studio/templates/configmap.yaml +37 -0
  30. package/charts/libredb-studio/templates/deployment.yaml +184 -0
  31. package/charts/libredb-studio/templates/hpa.yaml +32 -0
  32. package/charts/libredb-studio/templates/ingress.yaml +41 -0
  33. package/charts/libredb-studio/templates/networkpolicy.yaml +50 -0
  34. package/charts/libredb-studio/templates/pdb.yaml +18 -0
  35. package/charts/libredb-studio/templates/pvc.yaml +23 -0
  36. package/charts/libredb-studio/templates/secret.yaml +30 -0
  37. package/charts/libredb-studio/templates/seed-configmap.yaml +11 -0
  38. package/charts/libredb-studio/templates/service.yaml +22 -0
  39. package/charts/libredb-studio/templates/serviceaccount.yaml +13 -0
  40. package/charts/libredb-studio/values.schema.json +246 -0
  41. package/charts/libredb-studio/values.yaml +286 -0
  42. package/components.json +22 -0
  43. package/conductor/code_styleguides/typescript.md +43 -0
  44. package/conductor/product-guidelines.md +43 -0
  45. package/conductor/product.md +3 -0
  46. package/conductor/setup_state.json +1 -0
  47. package/conductor/tech-stack.md +39 -0
  48. package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +8 -0
  49. package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +44 -0
  50. package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +31 -0
  51. package/conductor/tracks.md +8 -0
  52. package/conductor/workflow.md +333 -0
  53. package/database-compose.yml +55 -0
  54. package/docker/postgres-init/01-extensions.sql +10 -0
  55. package/docker/postgres-init/02-sample-data.sql +585 -0
  56. package/docker/postgres.yml +68 -0
  57. package/docker-compose.yml +38 -0
  58. package/docs/AI_PLAN.md +74 -0
  59. package/docs/API_DOCS.md +875 -0
  60. package/docs/ARCHITECTURE.md +218 -0
  61. package/docs/DATABASE_PROVIDERS.md +358 -0
  62. package/docs/FEATURES.md +116 -0
  63. package/docs/HELM_CHART.md +252 -0
  64. package/docs/LOGIN_PAGE.md +178 -0
  65. package/docs/MONACO_EDITOR_PERFORMANCE.md +315 -0
  66. package/docs/OIDC_ARCH.md +681 -0
  67. package/docs/OIDC_SETUP.md +322 -0
  68. package/docs/POSTGRES_METRICS.md +516 -0
  69. package/docs/QUERY_OPTIMIZATION.md +370 -0
  70. package/docs/SEED_CONNECTIONS.md +468 -0
  71. package/docs/SQL_ALIAS_COMPLETION.md +190 -0
  72. package/docs/STORAGE_ARCHITECTURE.md +565 -0
  73. package/docs/STORAGE_QUICK_SETUP.md +419 -0
  74. package/docs/TECHNICAL_PLAN.md +36 -0
  75. package/docs/THEMING.md +345 -0
  76. package/docs/adding-a-new-database-provider.md +642 -0
  77. package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +360 -0
  78. package/docs/backlogs/001-INLINE_DATA_EDITING.md +118 -0
  79. package/docs/backlogs/002-DATA_IMPORT.md +215 -0
  80. package/docs/backlogs/003-QUERY_TIME_MACHINE.md +183 -0
  81. package/docs/backlogs/004-AI_DATA_STORYTELLER.md +292 -0
  82. package/docs/backlogs/005-QUERY_PLAYGROUND.md +352 -0
  83. package/docs/backlogs/006-DATA_MASKING.md +418 -0
  84. package/docs/enterprise-features.md +718 -0
  85. package/docs/kubernetes-helm-chart-artifacthub-plan.md +803 -0
  86. package/docs/medium-koyeb-article-en.md +215 -0
  87. package/docs/plans/test-plans.md +445 -0
  88. package/docs/releases/RELEASE.V0.3.0.md +22 -0
  89. package/docs/releases/RELEASE.V0.4.0.md +154 -0
  90. package/docs/releases/RELEASE.V0.5.0.md +252 -0
  91. package/docs/releases/RELEASE_v0.5.6.md +145 -0
  92. package/docs/releases/RELEASE_v0.6.1.md +303 -0
  93. package/docs/releases/RELEASE_v0.6.7.md +292 -0
  94. package/docs/releases/RELEASE_v0.7.0.md +332 -0
  95. package/docs/releases/RELEASE_v0.8.0.md +521 -0
  96. package/docs/sampledb/titanic.sql +1379 -0
  97. package/docs/superpowers/plans/2026-03-25-seed-connections.md +1362 -0
  98. package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +590 -0
  99. package/e2e/admin-dashboard.spec.ts +64 -0
  100. package/e2e/connection-management.spec.ts +58 -0
  101. package/e2e/export.spec.ts +34 -0
  102. package/e2e/login.spec.ts +85 -0
  103. package/e2e/query-execution.spec.ts +35 -0
  104. package/e2e/tab-management.spec.ts +64 -0
  105. package/eslint.config.mjs +28 -0
  106. package/fly.toml +43 -0
  107. package/next.config.ts +32 -0
  108. package/package.json +130 -0
  109. package/playwright.config.ts +34 -0
  110. package/postcss.config.mjs +7 -0
  111. package/public/favicon-32x32.png +0 -0
  112. package/public/favicon.ico +0 -0
  113. package/public/file.svg +1 -0
  114. package/public/globe.svg +1 -0
  115. package/public/logo.svg +32 -0
  116. package/public/next.svg +1 -0
  117. package/public/screenshots/code-generator.png +0 -0
  118. package/public/screenshots/connection-modal.png +0 -0
  119. package/public/screenshots/data-profiler.png +0 -0
  120. package/public/screenshots/erd-diagram.png +0 -0
  121. package/public/screenshots/hero-editor.png +0 -0
  122. package/public/screenshots/nl2sql.png +0 -0
  123. package/public/vercel.svg +1 -0
  124. package/public/window.svg +1 -0
  125. package/render.yaml +58 -0
  126. package/scripts/merge-lcov.mjs +239 -0
  127. package/sonar-project.properties +16 -0
  128. package/src/app/admin/error.tsx +46 -0
  129. package/src/app/admin/page.tsx +10 -0
  130. package/src/app/api/admin/audit/route.ts +52 -0
  131. package/src/app/api/admin/fleet-health/route.ts +81 -0
  132. package/src/app/api/ai/autopilot/route.ts +105 -0
  133. package/src/app/api/ai/chat/route.ts +132 -0
  134. package/src/app/api/ai/describe-schema/route.ts +52 -0
  135. package/src/app/api/ai/explain/route.ts +86 -0
  136. package/src/app/api/ai/impact/route.ts +97 -0
  137. package/src/app/api/ai/index-advisor/route.ts +98 -0
  138. package/src/app/api/ai/nl2sql/route.ts +87 -0
  139. package/src/app/api/ai/query-safety/route.ts +87 -0
  140. package/src/app/api/auth/login/route.ts +62 -0
  141. package/src/app/api/auth/logout/route.ts +25 -0
  142. package/src/app/api/auth/me/route.ts +10 -0
  143. package/src/app/api/auth/oidc/callback/route.ts +82 -0
  144. package/src/app/api/auth/oidc/login/route.ts +43 -0
  145. package/src/app/api/connections/managed/route.ts +35 -0
  146. package/src/app/api/db/cancel/route.ts +42 -0
  147. package/src/app/api/db/disconnect/route.ts +28 -0
  148. package/src/app/api/db/health/route.ts +49 -0
  149. package/src/app/api/db/maintenance/route.ts +72 -0
  150. package/src/app/api/db/monitoring/route.ts +62 -0
  151. package/src/app/api/db/multi-query/route.ts +116 -0
  152. package/src/app/api/db/pool-stats/route.ts +37 -0
  153. package/src/app/api/db/profile/route.ts +144 -0
  154. package/src/app/api/db/provider-meta/route.ts +49 -0
  155. package/src/app/api/db/query/route.ts +50 -0
  156. package/src/app/api/db/schema/route.ts +47 -0
  157. package/src/app/api/db/schema-snapshot/route.ts +42 -0
  158. package/src/app/api/db/test-connection/route.ts +55 -0
  159. package/src/app/api/db/transaction/route.ts +111 -0
  160. package/src/app/api/storage/[collection]/route.ts +67 -0
  161. package/src/app/api/storage/config/route.ts +17 -0
  162. package/src/app/api/storage/migrate/route.ts +45 -0
  163. package/src/app/api/storage/route.ts +32 -0
  164. package/src/app/error.tsx +49 -0
  165. package/src/app/global-error.tsx +55 -0
  166. package/src/app/globals.css +146 -0
  167. package/src/app/icon.svg +42 -0
  168. package/src/app/layout.tsx +34 -0
  169. package/src/app/login/login-form.tsx +301 -0
  170. package/src/app/login/page.tsx +11 -0
  171. package/src/app/monitoring/page.tsx +8 -0
  172. package/src/app/not-found.tsx +29 -0
  173. package/src/app/page.tsx +5 -0
  174. package/src/components/AIAutopilotPanel.tsx +238 -0
  175. package/src/components/CodeGenerator.tsx +271 -0
  176. package/src/components/CommandPalette.tsx +227 -0
  177. package/src/components/ConnectionModal.tsx +759 -0
  178. package/src/components/CreateTableModal.tsx +281 -0
  179. package/src/components/DataCharts.tsx +962 -0
  180. package/src/components/DataImportModal.tsx +582 -0
  181. package/src/components/DataProfiler.tsx +335 -0
  182. package/src/components/DatabaseDocs.tsx +251 -0
  183. package/src/components/MaskingSettings.tsx +414 -0
  184. package/src/components/MobileNav.tsx +50 -0
  185. package/src/components/NL2SQLPanel.tsx +281 -0
  186. package/src/components/PivotTable.tsx +257 -0
  187. package/src/components/QueryEditor.tsx +760 -0
  188. package/src/components/QueryHistory.tsx +344 -0
  189. package/src/components/QuerySafetyDialog.tsx +290 -0
  190. package/src/components/ResultsGrid.tsx +644 -0
  191. package/src/components/SaveQueryModal.tsx +104 -0
  192. package/src/components/SavedQueries.tsx +128 -0
  193. package/src/components/SchemaDiagram.tsx +473 -0
  194. package/src/components/SchemaDiff.tsx +473 -0
  195. package/src/components/SnapshotTimeline.tsx +116 -0
  196. package/src/components/Studio.tsx +639 -0
  197. package/src/components/TestDataGenerator.tsx +261 -0
  198. package/src/components/VisualExplain.tsx +820 -0
  199. package/src/components/admin/AdminDashboard.tsx +163 -0
  200. package/src/components/admin/tabs/AuditTab.tsx +531 -0
  201. package/src/components/admin/tabs/MonitoringEmbed.tsx +11 -0
  202. package/src/components/admin/tabs/OperationsTab.tsx +646 -0
  203. package/src/components/admin/tabs/OverviewTab.tsx +1328 -0
  204. package/src/components/admin/tabs/SecurityTab.tsx +284 -0
  205. package/src/components/community-section.tsx +92 -0
  206. package/src/components/icons/db-icons.tsx +84 -0
  207. package/src/components/libredb-logo.tsx +61 -0
  208. package/src/components/monitoring/MonitoringDashboard.tsx +345 -0
  209. package/src/components/monitoring/tabs/MetricChart.tsx +82 -0
  210. package/src/components/monitoring/tabs/OverviewTab.tsx +263 -0
  211. package/src/components/monitoring/tabs/PerformanceTab.tsx +254 -0
  212. package/src/components/monitoring/tabs/PoolTab.tsx +174 -0
  213. package/src/components/monitoring/tabs/QueriesTab.tsx +287 -0
  214. package/src/components/monitoring/tabs/SessionsTab.tsx +316 -0
  215. package/src/components/monitoring/tabs/StorageTab.tsx +335 -0
  216. package/src/components/monitoring/tabs/TablesTab.tsx +300 -0
  217. package/src/components/results-grid/ResultCard.tsx +111 -0
  218. package/src/components/results-grid/RowDetailSheet.tsx +178 -0
  219. package/src/components/results-grid/StatsBar.tsx +201 -0
  220. package/src/components/results-grid/index.ts +1 -0
  221. package/src/components/results-grid/utils.ts +23 -0
  222. package/src/components/schema-explorer/ColumnList.tsx +53 -0
  223. package/src/components/schema-explorer/SchemaExplorer.tsx +182 -0
  224. package/src/components/schema-explorer/TableItem.tsx +210 -0
  225. package/src/components/schema-explorer/index.ts +1 -0
  226. package/src/components/sidebar/ConnectionItem.tsx +105 -0
  227. package/src/components/sidebar/ConnectionsList.tsx +62 -0
  228. package/src/components/sidebar/Sidebar.tsx +130 -0
  229. package/src/components/sidebar/index.ts +2 -0
  230. package/src/components/studio/BottomPanel.tsx +286 -0
  231. package/src/components/studio/QueryToolbar.tsx +180 -0
  232. package/src/components/studio/StudioDesktopHeader.tsx +114 -0
  233. package/src/components/studio/StudioMobileHeader.tsx +340 -0
  234. package/src/components/studio/StudioTabBar.tsx +82 -0
  235. package/src/components/studio/index.ts +5 -0
  236. package/src/components/ui/accordion.tsx +66 -0
  237. package/src/components/ui/alert-dialog.tsx +157 -0
  238. package/src/components/ui/alert.tsx +66 -0
  239. package/src/components/ui/aspect-ratio.tsx +11 -0
  240. package/src/components/ui/avatar.tsx +53 -0
  241. package/src/components/ui/badge.tsx +46 -0
  242. package/src/components/ui/breadcrumb.tsx +109 -0
  243. package/src/components/ui/button-group.tsx +83 -0
  244. package/src/components/ui/button.tsx +60 -0
  245. package/src/components/ui/calendar.tsx +216 -0
  246. package/src/components/ui/card.tsx +92 -0
  247. package/src/components/ui/carousel.tsx +241 -0
  248. package/src/components/ui/chart.tsx +357 -0
  249. package/src/components/ui/checkbox.tsx +32 -0
  250. package/src/components/ui/collapsible.tsx +33 -0
  251. package/src/components/ui/command.tsx +184 -0
  252. package/src/components/ui/context-menu.tsx +252 -0
  253. package/src/components/ui/dialog.tsx +143 -0
  254. package/src/components/ui/drawer.tsx +135 -0
  255. package/src/components/ui/dropdown-menu.tsx +257 -0
  256. package/src/components/ui/empty.tsx +104 -0
  257. package/src/components/ui/field.tsx +248 -0
  258. package/src/components/ui/form.tsx +167 -0
  259. package/src/components/ui/hover-card.tsx +44 -0
  260. package/src/components/ui/input-group.tsx +170 -0
  261. package/src/components/ui/input-otp.tsx +77 -0
  262. package/src/components/ui/input.tsx +21 -0
  263. package/src/components/ui/item.tsx +193 -0
  264. package/src/components/ui/kbd.tsx +28 -0
  265. package/src/components/ui/label.tsx +24 -0
  266. package/src/components/ui/menubar.tsx +276 -0
  267. package/src/components/ui/navigation-menu.tsx +168 -0
  268. package/src/components/ui/pagination.tsx +127 -0
  269. package/src/components/ui/popover.tsx +48 -0
  270. package/src/components/ui/progress.tsx +31 -0
  271. package/src/components/ui/radio-group.tsx +45 -0
  272. package/src/components/ui/resizable.tsx +56 -0
  273. package/src/components/ui/scroll-area.tsx +58 -0
  274. package/src/components/ui/select.tsx +187 -0
  275. package/src/components/ui/separator.tsx +28 -0
  276. package/src/components/ui/sheet.tsx +139 -0
  277. package/src/components/ui/sidebar.tsx +726 -0
  278. package/src/components/ui/skeleton.tsx +13 -0
  279. package/src/components/ui/slider.tsx +63 -0
  280. package/src/components/ui/sonner.tsx +40 -0
  281. package/src/components/ui/spinner.tsx +16 -0
  282. package/src/components/ui/switch.tsx +31 -0
  283. package/src/components/ui/table.tsx +116 -0
  284. package/src/components/ui/tabs.tsx +66 -0
  285. package/src/components/ui/textarea.tsx +18 -0
  286. package/src/components/ui/toggle-group.tsx +83 -0
  287. package/src/components/ui/toggle.tsx +47 -0
  288. package/src/components/ui/tooltip.tsx +61 -0
  289. package/src/exports/components.ts +15 -0
  290. package/src/exports/index.ts +4 -0
  291. package/src/exports/providers.ts +4 -0
  292. package/src/exports/types.ts +26 -0
  293. package/src/hooks/use-ai-chat.ts +182 -0
  294. package/src/hooks/use-all-connections.ts +66 -0
  295. package/src/hooks/use-api-call.ts +71 -0
  296. package/src/hooks/use-auth.ts +51 -0
  297. package/src/hooks/use-connection-form.ts +349 -0
  298. package/src/hooks/use-connection-manager.ts +169 -0
  299. package/src/hooks/use-connection-payload.ts +15 -0
  300. package/src/hooks/use-inline-editing.ts +109 -0
  301. package/src/hooks/use-mobile.ts +20 -0
  302. package/src/hooks/use-monitoring-data.ts +270 -0
  303. package/src/hooks/use-provider-metadata.ts +62 -0
  304. package/src/hooks/use-query-execution.ts +478 -0
  305. package/src/hooks/use-storage-sync.ts +259 -0
  306. package/src/hooks/use-tab-manager.ts +231 -0
  307. package/src/hooks/use-toast.ts +20 -0
  308. package/src/hooks/use-transaction-control.ts +64 -0
  309. package/src/lib/api/error-codes.ts +30 -0
  310. package/src/lib/api/errors.ts +236 -0
  311. package/src/lib/api/with-error-handler.ts +41 -0
  312. package/src/lib/audit.ts +105 -0
  313. package/src/lib/auth.ts +87 -0
  314. package/src/lib/connection-string-parser.ts +172 -0
  315. package/src/lib/data-masking.ts +385 -0
  316. package/src/lib/db/base-provider.ts +325 -0
  317. package/src/lib/db/errors.ts +317 -0
  318. package/src/lib/db/factory.ts +324 -0
  319. package/src/lib/db/index.ts +123 -0
  320. package/src/lib/db/providers/document/index.ts +6 -0
  321. package/src/lib/db/providers/document/mongodb.ts +992 -0
  322. package/src/lib/db/providers/keyvalue/redis.ts +554 -0
  323. package/src/lib/db/providers/sql/index.ts +11 -0
  324. package/src/lib/db/providers/sql/mssql.ts +1065 -0
  325. package/src/lib/db/providers/sql/mysql.ts +978 -0
  326. package/src/lib/db/providers/sql/oracle.ts +1044 -0
  327. package/src/lib/db/providers/sql/postgres.ts +1179 -0
  328. package/src/lib/db/providers/sql/sql-base.ts +174 -0
  329. package/src/lib/db/providers/sql/sqlite.ts +721 -0
  330. package/src/lib/db/types.ts +437 -0
  331. package/src/lib/db/utils/pool-manager.ts +287 -0
  332. package/src/lib/db/utils/query-limiter.ts +239 -0
  333. package/src/lib/db-ui-config.ts +86 -0
  334. package/src/lib/editor/mongodb-completions.ts +172 -0
  335. package/src/lib/editor/sql-completions.ts +280 -0
  336. package/src/lib/llm/base-provider.ts +117 -0
  337. package/src/lib/llm/factory.ts +102 -0
  338. package/src/lib/llm/index.ts +90 -0
  339. package/src/lib/llm/providers/custom.ts +181 -0
  340. package/src/lib/llm/providers/gemini.ts +126 -0
  341. package/src/lib/llm/providers/ollama.ts +154 -0
  342. package/src/lib/llm/providers/openai.ts +146 -0
  343. package/src/lib/llm/types.ts +173 -0
  344. package/src/lib/llm/utils/config.ts +187 -0
  345. package/src/lib/llm/utils/retry.ts +119 -0
  346. package/src/lib/llm/utils/streaming.ts +202 -0
  347. package/src/lib/logger.ts +127 -0
  348. package/src/lib/monitoring-thresholds.ts +44 -0
  349. package/src/lib/oidc.ts +262 -0
  350. package/src/lib/query-generators.ts +61 -0
  351. package/src/lib/schema-diff/diff-engine.ts +273 -0
  352. package/src/lib/schema-diff/migration-generator.ts +208 -0
  353. package/src/lib/schema-diff/types.ts +55 -0
  354. package/src/lib/seed/config-loader.ts +79 -0
  355. package/src/lib/seed/connection-filter.ts +49 -0
  356. package/src/lib/seed/credential-resolver.ts +62 -0
  357. package/src/lib/seed/index.ts +40 -0
  358. package/src/lib/seed/resolve-connection.ts +57 -0
  359. package/src/lib/seed/types.ts +69 -0
  360. package/src/lib/sql/alias-extractor.ts +267 -0
  361. package/src/lib/sql/index.ts +8 -0
  362. package/src/lib/sql/statement-splitter.ts +167 -0
  363. package/src/lib/sql/types.ts +40 -0
  364. package/src/lib/ssh/tunnel.ts +142 -0
  365. package/src/lib/storage/factory.ts +84 -0
  366. package/src/lib/storage/index.ts +14 -0
  367. package/src/lib/storage/local-storage.ts +99 -0
  368. package/src/lib/storage/providers/postgres.ts +225 -0
  369. package/src/lib/storage/providers/sqlite.ts +153 -0
  370. package/src/lib/storage/storage-facade.ts +272 -0
  371. package/src/lib/storage/types.ts +75 -0
  372. package/src/lib/time-series-buffer.ts +58 -0
  373. package/src/lib/types.ts +173 -0
  374. package/src/lib/utils.ts +6 -0
  375. package/src/proxy.ts +104 -0
  376. package/src/types/db-drivers.d.ts +23 -0
  377. package/src/types/html2canvas.d.ts +9 -0
  378. package/tests/api/admin/audit.test.ts +178 -0
  379. package/tests/api/admin/fleet-health.test.ts +183 -0
  380. package/tests/api/ai/autopilot.test.ts +174 -0
  381. package/tests/api/ai/chat.test.ts +250 -0
  382. package/tests/api/ai/describe-schema.test.ts +266 -0
  383. package/tests/api/ai/explain.test.ts +199 -0
  384. package/tests/api/ai/impact.test.ts +168 -0
  385. package/tests/api/ai/index-advisor.test.ts +171 -0
  386. package/tests/api/ai/nl2sql.test.ts +202 -0
  387. package/tests/api/ai/query-safety.test.ts +196 -0
  388. package/tests/api/auth/login.test.ts +170 -0
  389. package/tests/api/auth/logout.test.ts +140 -0
  390. package/tests/api/auth/me.test.ts +73 -0
  391. package/tests/api/auth/oidc-callback.test.ts +215 -0
  392. package/tests/api/auth/oidc-login.test.ts +127 -0
  393. package/tests/api/db/cancel.test.ts +198 -0
  394. package/tests/api/db/disconnect.test.ts +124 -0
  395. package/tests/api/db/health.test.ts +222 -0
  396. package/tests/api/db/maintenance.test.ts +263 -0
  397. package/tests/api/db/monitoring.test.ts +221 -0
  398. package/tests/api/db/multi-query.test.ts +316 -0
  399. package/tests/api/db/pool-stats.test.ts +135 -0
  400. package/tests/api/db/profile.test.ts +330 -0
  401. package/tests/api/db/provider-meta.test.ts +193 -0
  402. package/tests/api/db/query.test.ts +314 -0
  403. package/tests/api/db/schema-snapshot.test.ts +170 -0
  404. package/tests/api/db/schema.test.ts +191 -0
  405. package/tests/api/db/test-connection.test.ts +185 -0
  406. package/tests/api/db/transaction.test.ts +314 -0
  407. package/tests/api/proxy.test.ts +191 -0
  408. package/tests/api/seed/managed-route.test.ts +113 -0
  409. package/tests/api/storage/config.test.ts +42 -0
  410. package/tests/api/storage/storage-routes.test.ts +309 -0
  411. package/tests/components/AIAutopilotPanel.test.tsx +756 -0
  412. package/tests/components/AdminPage.test.tsx +33 -0
  413. package/tests/components/CodeGenerator.test.tsx +182 -0
  414. package/tests/components/CommandPalette.test.tsx +428 -0
  415. package/tests/components/CommunitySection.test.tsx +91 -0
  416. package/tests/components/ConnectionModal.mobile.test.tsx +284 -0
  417. package/tests/components/ConnectionModal.test.tsx +570 -0
  418. package/tests/components/CreateTableModal.test.tsx +383 -0
  419. package/tests/components/DataCharts.test.tsx +739 -0
  420. package/tests/components/DataImportModal.test.tsx +751 -0
  421. package/tests/components/DataProfiler.test.tsx +589 -0
  422. package/tests/components/DatabaseDocs.test.tsx +353 -0
  423. package/tests/components/LoginPage.test.tsx +163 -0
  424. package/tests/components/LoginPageOIDC.test.tsx +92 -0
  425. package/tests/components/MaskingSettings.test.tsx +498 -0
  426. package/tests/components/MobileNav.test.tsx +30 -0
  427. package/tests/components/MonitoringPage.test.tsx +32 -0
  428. package/tests/components/NL2SQLPanel.test.tsx +621 -0
  429. package/tests/components/Page.test.tsx +33 -0
  430. package/tests/components/PivotTable.test.tsx +350 -0
  431. package/tests/components/QueryEditor.test.tsx +1730 -0
  432. package/tests/components/QueryHistory.test.tsx +572 -0
  433. package/tests/components/QuerySafetyDialog.test.tsx +586 -0
  434. package/tests/components/ResultsGrid.test.tsx +804 -0
  435. package/tests/components/RootLayout.test.tsx +83 -0
  436. package/tests/components/SaveQueryModal.test.tsx +25 -0
  437. package/tests/components/SavedQueries.test.tsx +43 -0
  438. package/tests/components/SchemaDiagram.test.tsx +1034 -0
  439. package/tests/components/SchemaDiff.test.tsx +906 -0
  440. package/tests/components/SnapshotTimeline.test.tsx +174 -0
  441. package/tests/components/Studio.test.tsx +1030 -0
  442. package/tests/components/TestDataGenerator.test.tsx +291 -0
  443. package/tests/components/VisualExplain.test.tsx +704 -0
  444. package/tests/components/admin/AdminDashboard.test.tsx +205 -0
  445. package/tests/components/admin/AuditTab.test.tsx +220 -0
  446. package/tests/components/admin/MonitoringEmbed.test.tsx +58 -0
  447. package/tests/components/admin/OperationsTab.test.tsx +975 -0
  448. package/tests/components/admin/OverviewTab.test.tsx +254 -0
  449. package/tests/components/admin/SecurityTab.test.tsx +467 -0
  450. package/tests/components/monitoring/MetricChart.test.tsx +111 -0
  451. package/tests/components/monitoring/MonitoringDashboard.test.tsx +259 -0
  452. package/tests/components/monitoring/OverviewTab.test.tsx +78 -0
  453. package/tests/components/monitoring/PerformanceTab.test.tsx +87 -0
  454. package/tests/components/monitoring/PoolTab.test.tsx +42 -0
  455. package/tests/components/monitoring/QueriesTab.test.tsx +80 -0
  456. package/tests/components/monitoring/SessionsTab.test.tsx +154 -0
  457. package/tests/components/monitoring/StorageTab.test.tsx +127 -0
  458. package/tests/components/monitoring/TablesTab.test.tsx +153 -0
  459. package/tests/components/results-grid/ResultCard.test.tsx +105 -0
  460. package/tests/components/results-grid/RowDetailSheet.test.tsx +308 -0
  461. package/tests/components/results-grid/StatsBar.test.tsx +162 -0
  462. package/tests/components/schema-explorer/ColumnList.test.tsx +151 -0
  463. package/tests/components/schema-explorer/SchemaExplorer.test.tsx +461 -0
  464. package/tests/components/schema-explorer/TableItem.test.tsx +415 -0
  465. package/tests/components/sidebar/ConnectionItem.test.tsx +201 -0
  466. package/tests/components/sidebar/ConnectionsList.test.tsx +176 -0
  467. package/tests/components/sidebar/Sidebar.test.tsx +187 -0
  468. package/tests/components/studio/BottomPanel.test.tsx +383 -0
  469. package/tests/components/studio/QueryToolbar.test.tsx +321 -0
  470. package/tests/components/studio/StudioDesktopHeader.test.tsx +377 -0
  471. package/tests/components/studio/StudioMobileHeader.test.tsx +198 -0
  472. package/tests/components/studio/StudioTabBar.test.tsx +331 -0
  473. package/tests/fixtures/connections.ts +96 -0
  474. package/tests/fixtures/masking-configs.ts +86 -0
  475. package/tests/fixtures/query-results.ts +71 -0
  476. package/tests/fixtures/schemas.ts +64 -0
  477. package/tests/fixtures/seed-connections/invalid-config.yaml +7 -0
  478. package/tests/fixtures/seed-connections/minimal-config.yaml +8 -0
  479. package/tests/fixtures/seed-connections/mixed-credentials.yaml +23 -0
  480. package/tests/fixtures/seed-connections/multi-role-config.yaml +30 -0
  481. package/tests/fixtures/seed-connections/valid-config.json +15 -0
  482. package/tests/fixtures/seed-connections/valid-config.yaml +51 -0
  483. package/tests/helpers/mock-fetch.ts +59 -0
  484. package/tests/helpers/mock-monaco.ts +112 -0
  485. package/tests/helpers/mock-navigation.ts +28 -0
  486. package/tests/helpers/mock-next.ts +80 -0
  487. package/tests/helpers/mock-provider.ts +133 -0
  488. package/tests/helpers/mock-sonner.ts +29 -0
  489. package/tests/helpers/render-with-providers.tsx +19 -0
  490. package/tests/hooks/use-ai-chat.test.ts +600 -0
  491. package/tests/hooks/use-auth.test.ts +371 -0
  492. package/tests/hooks/use-connection-form.test.ts +743 -0
  493. package/tests/hooks/use-connection-manager.test.ts +466 -0
  494. package/tests/hooks/use-inline-editing.test.ts +321 -0
  495. package/tests/hooks/use-mobile.test.ts +177 -0
  496. package/tests/hooks/use-monitoring-data.test.ts +819 -0
  497. package/tests/hooks/use-provider-metadata.test.ts +228 -0
  498. package/tests/hooks/use-query-execution.test.ts +1212 -0
  499. package/tests/hooks/use-tab-manager.test.ts +756 -0
  500. package/tests/hooks/use-toast.test.ts +74 -0
  501. package/tests/hooks/use-transaction-control.test.ts +211 -0
  502. package/tests/integration/db/mongodb-provider.test.ts +698 -0
  503. package/tests/integration/db/mssql-provider.test.ts +840 -0
  504. package/tests/integration/db/mysql-provider.test.ts +872 -0
  505. package/tests/integration/db/oracle-provider.test.ts +843 -0
  506. package/tests/integration/db/postgres-provider.test.ts +1382 -0
  507. package/tests/integration/db/redis-provider.test.ts +526 -0
  508. package/tests/integration/db/sqlite-provider.test.ts +480 -0
  509. package/tests/integration/seed/seed-pipeline.test.ts +102 -0
  510. package/tests/isolated/factory-singleton.test.ts +150 -0
  511. package/tests/isolated/use-storage-sync.test.ts +389 -0
  512. package/tests/run-components.sh +196 -0
  513. package/tests/setup-dom.ts +58 -0
  514. package/tests/setup.ts +40 -0
  515. package/tests/unit/api-errors.test.ts +210 -0
  516. package/tests/unit/code-generator-functions.test.ts +271 -0
  517. package/tests/unit/components/column-list.test.tsx +190 -0
  518. package/tests/unit/components/data-import-modal.test.tsx +441 -0
  519. package/tests/unit/components/studio-mobile-header.test.tsx +327 -0
  520. package/tests/unit/data-charts-functions.test.ts +496 -0
  521. package/tests/unit/data-import-functions.test.ts +320 -0
  522. package/tests/unit/data-import-utils.test.ts +125 -0
  523. package/tests/unit/db/base-provider.test.ts +517 -0
  524. package/tests/unit/db/errors.test.ts +403 -0
  525. package/tests/unit/db/factory.test.ts +436 -0
  526. package/tests/unit/db/pool-manager.test.ts +440 -0
  527. package/tests/unit/db/query-limiter.test.ts +387 -0
  528. package/tests/unit/db/sql-base.test.ts +438 -0
  529. package/tests/unit/lib/api/error-codes.test.ts +39 -0
  530. package/tests/unit/lib/audit.test.ts +326 -0
  531. package/tests/unit/lib/auth.test.ts +146 -0
  532. package/tests/unit/lib/connection-string-parser.test.ts +424 -0
  533. package/tests/unit/lib/data-masking.test.ts +583 -0
  534. package/tests/unit/lib/db-icons.test.tsx +41 -0
  535. package/tests/unit/lib/monitoring-thresholds.test.ts +133 -0
  536. package/tests/unit/lib/oidc.test.ts +509 -0
  537. package/tests/unit/lib/query-generators.test.ts +127 -0
  538. package/tests/unit/lib/storage/factory.test.ts +71 -0
  539. package/tests/unit/lib/storage/local-storage.test.ts +114 -0
  540. package/tests/unit/lib/storage/providers/postgres.test.ts +312 -0
  541. package/tests/unit/lib/storage/providers/sqlite.test.ts +232 -0
  542. package/tests/unit/lib/storage/storage-facade-extended.test.ts +331 -0
  543. package/tests/unit/lib/storage/storage-facade.test.ts +184 -0
  544. package/tests/unit/lib/storage.test.ts +317 -0
  545. package/tests/unit/lib/time-series-buffer.test.ts +212 -0
  546. package/tests/unit/lib/utils.test.ts +24 -0
  547. package/tests/unit/llm/base-provider.test.ts +238 -0
  548. package/tests/unit/llm/config.test.ts +262 -0
  549. package/tests/unit/llm/custom-provider.test.ts +281 -0
  550. package/tests/unit/llm/gemini-provider.test.ts +248 -0
  551. package/tests/unit/llm/llm-factory.test.ts +155 -0
  552. package/tests/unit/llm/ollama-provider.test.ts +288 -0
  553. package/tests/unit/llm/openai-provider.test.ts +324 -0
  554. package/tests/unit/llm/retry.test.ts +180 -0
  555. package/tests/unit/llm/streaming.test.ts +355 -0
  556. package/tests/unit/logger.test.ts +198 -0
  557. package/tests/unit/mongodb-completions.test.ts +516 -0
  558. package/tests/unit/pivot-table-functions.test.ts +76 -0
  559. package/tests/unit/query-cancelled-error.test.ts +81 -0
  560. package/tests/unit/schema-diff/diff-engine.test.ts +367 -0
  561. package/tests/unit/schema-diff/migration-generator.test.ts +513 -0
  562. package/tests/unit/seed/config-loader.test.ts +73 -0
  563. package/tests/unit/seed/connection-filter.test.ts +91 -0
  564. package/tests/unit/seed/credential-resolver.test.ts +85 -0
  565. package/tests/unit/seed/index.test.ts +72 -0
  566. package/tests/unit/seed/resolve-connection.test.ts +74 -0
  567. package/tests/unit/seed/types.test.ts +129 -0
  568. package/tests/unit/sql/alias-extractor.test.ts +444 -0
  569. package/tests/unit/sql/statement-splitter.test.ts +348 -0
  570. package/tests/unit/sql-completions.test.ts +463 -0
  571. package/tests/unit/ssh-tunnel.test.ts +465 -0
  572. package/tsconfig.json +42 -0
@@ -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
+