@libredb/studio 0.9.7 → 0.9.13

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 (688) hide show
  1. package/dist/chunk-34YQUUCM.mjs +319 -0
  2. package/dist/chunk-34YQUUCM.mjs.map +1 -0
  3. package/dist/chunk-4LVB3K53.mjs +37 -0
  4. package/dist/chunk-4LVB3K53.mjs.map +1 -0
  5. package/dist/chunk-6DRZXXNT.mjs +100 -0
  6. package/dist/chunk-6DRZXXNT.mjs.map +1 -0
  7. package/dist/chunk-CPF7XWV5.mjs +1289 -0
  8. package/dist/chunk-CPF7XWV5.mjs.map +1 -0
  9. package/dist/chunk-CZVV3JJB.mjs +160 -0
  10. package/dist/chunk-CZVV3JJB.mjs.map +1 -0
  11. package/dist/chunk-D4WVWWWF.js +332 -0
  12. package/dist/chunk-D4WVWWWF.js.map +1 -0
  13. package/dist/chunk-DY3KXE44.mjs +3 -0
  14. package/dist/chunk-DY3KXE44.mjs.map +1 -0
  15. package/dist/chunk-FYSE52VB.js +242 -0
  16. package/dist/chunk-FYSE52VB.js.map +1 -0
  17. package/dist/chunk-G3S66G64.mjs +6673 -0
  18. package/dist/chunk-G3S66G64.mjs.map +1 -0
  19. package/dist/chunk-G4WYE6TI.js +4 -0
  20. package/dist/chunk-G4WYE6TI.js.map +1 -0
  21. package/dist/chunk-HGPD6PWV.js +1310 -0
  22. package/dist/chunk-HGPD6PWV.js.map +1 -0
  23. package/dist/chunk-JZO5KRZN.js +165 -0
  24. package/dist/chunk-JZO5KRZN.js.map +1 -0
  25. package/dist/chunk-KV356UXJ.js +253 -0
  26. package/dist/chunk-KV356UXJ.js.map +1 -0
  27. package/dist/chunk-PPODO6HX.mjs +237 -0
  28. package/dist/chunk-PPODO6HX.mjs.map +1 -0
  29. package/dist/chunk-PTIRB2JO.js +258 -0
  30. package/dist/chunk-PTIRB2JO.js.map +1 -0
  31. package/dist/chunk-Q6LRDBK7.js +42 -0
  32. package/dist/chunk-Q6LRDBK7.js.map +1 -0
  33. package/dist/chunk-QJP5FZRY.mjs +255 -0
  34. package/dist/chunk-QJP5FZRY.mjs.map +1 -0
  35. package/dist/chunk-R3POCJK6.mjs +248 -0
  36. package/dist/chunk-R3POCJK6.mjs.map +1 -0
  37. package/dist/chunk-RCQB4FCE.js +186 -0
  38. package/dist/chunk-RCQB4FCE.js.map +1 -0
  39. package/dist/chunk-SR5DRGBX.mjs +174 -0
  40. package/dist/chunk-SR5DRGBX.mjs.map +1 -0
  41. package/dist/chunk-VLCRUZX7.js +102 -0
  42. package/dist/chunk-VLCRUZX7.js.map +1 -0
  43. package/dist/chunk-Y52UIFEX.js +6741 -0
  44. package/dist/chunk-Y52UIFEX.js.map +1 -0
  45. package/dist/components.d.mts +273 -0
  46. package/dist/components.d.ts +273 -0
  47. package/dist/components.js +59 -0
  48. package/dist/components.js.map +1 -0
  49. package/dist/components.mjs +6 -0
  50. package/dist/components.mjs.map +1 -0
  51. package/dist/custom-BNDOYC5P.js +134 -0
  52. package/dist/custom-BNDOYC5P.js.map +1 -0
  53. package/dist/custom-S2EKFMP3.mjs +132 -0
  54. package/dist/custom-S2EKFMP3.mjs.map +1 -0
  55. package/dist/gemini-4ASHNK4H.js +81 -0
  56. package/dist/gemini-4ASHNK4H.js.map +1 -0
  57. package/dist/gemini-C5RBLQEJ.mjs +79 -0
  58. package/dist/gemini-C5RBLQEJ.mjs.map +1 -0
  59. package/dist/index.d.mts +6 -0
  60. package/dist/index.d.ts +6 -0
  61. package/dist/index.js +95 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/index.mjs +10 -0
  64. package/dist/index.mjs.map +1 -0
  65. package/dist/mongodb-XMZEZA4A.mjs +748 -0
  66. package/dist/mongodb-XMZEZA4A.mjs.map +1 -0
  67. package/dist/mongodb-YQJJTLX3.js +750 -0
  68. package/dist/mongodb-YQJJTLX3.js.map +1 -0
  69. package/dist/mssql-PMOU4D36.js +916 -0
  70. package/dist/mssql-PMOU4D36.js.map +1 -0
  71. package/{src/lib/db/providers/sql/mssql.ts → dist/mssql-ZH5VP2C5.mjs} +268 -423
  72. package/dist/mssql-ZH5VP2C5.mjs.map +1 -0
  73. package/{src/lib/db/providers/sql/mysql.ts → dist/mysql-I3WJQXN2.mjs} +277 -428
  74. package/dist/mysql-I3WJQXN2.mjs.map +1 -0
  75. package/dist/mysql-Y3MSA5QY.js +833 -0
  76. package/dist/mysql-Y3MSA5QY.js.map +1 -0
  77. package/dist/ollama-26BYLVEV.mjs +115 -0
  78. package/dist/ollama-26BYLVEV.mjs.map +1 -0
  79. package/dist/ollama-HVWAGKQC.js +117 -0
  80. package/dist/ollama-HVWAGKQC.js.map +1 -0
  81. package/dist/openai-4U56KPG7.mjs +111 -0
  82. package/dist/openai-4U56KPG7.mjs.map +1 -0
  83. package/dist/openai-AK3R37BS.js +113 -0
  84. package/dist/openai-AK3R37BS.js.map +1 -0
  85. package/dist/oracle-L6VEAVXO.js +917 -0
  86. package/dist/oracle-L6VEAVXO.js.map +1 -0
  87. package/{src/lib/db/providers/sql/oracle.ts → dist/oracle-P2G7T4P4.mjs} +321 -454
  88. package/dist/oracle-P2G7T4P4.mjs.map +1 -0
  89. package/{src/lib/db/providers/sql/postgres.ts → dist/postgres-O5KOQUVP.mjs} +261 -471
  90. package/dist/postgres-O5KOQUVP.mjs.map +1 -0
  91. package/dist/postgres-RLCWNFFX.js +971 -0
  92. package/dist/postgres-RLCWNFFX.js.map +1 -0
  93. package/dist/providers.d.mts +149 -0
  94. package/dist/providers.d.ts +149 -0
  95. package/dist/providers.js +44 -0
  96. package/dist/providers.js.map +1 -0
  97. package/dist/providers.mjs +7 -0
  98. package/dist/providers.mjs.map +1 -0
  99. package/dist/redis-4WMQOVLX.mjs +435 -0
  100. package/dist/redis-4WMQOVLX.mjs.map +1 -0
  101. package/dist/redis-QVQ6YU62.js +441 -0
  102. package/dist/redis-QVQ6YU62.js.map +1 -0
  103. package/dist/sqlite-4I2P2OGQ.js +554 -0
  104. package/dist/sqlite-4I2P2OGQ.js.map +1 -0
  105. package/dist/sqlite-OA4YJX5S.mjs +531 -0
  106. package/dist/sqlite-OA4YJX5S.mjs.map +1 -0
  107. package/dist/types-BJvJfxSY.d.mts +141 -0
  108. package/dist/types-BJvJfxSY.d.ts +141 -0
  109. package/dist/types-ClAg_v5k.d.mts +343 -0
  110. package/dist/types-Der_X8E8.d.ts +343 -0
  111. package/dist/types.d.mts +2 -0
  112. package/dist/types.d.ts +2 -0
  113. package/dist/types.js +6 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/types.mjs +3 -0
  116. package/dist/types.mjs.map +1 -0
  117. package/dist/workspace.d.mts +80 -0
  118. package/dist/workspace.d.ts +80 -0
  119. package/dist/workspace.js +4174 -0
  120. package/dist/workspace.js.map +1 -0
  121. package/dist/workspace.mjs +4147 -0
  122. package/dist/workspace.mjs.map +1 -0
  123. package/package.json +60 -5
  124. package/.claude/settings.local.json +0 -127
  125. package/.cursorrules +0 -426
  126. package/.devin/wiki.json +0 -143
  127. package/.dockerignore +0 -80
  128. package/.env.example +0 -159
  129. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
  130. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -29
  131. package/.github/PULL_REQUEST_TEMPLATE.md +0 -57
  132. package/.github/workflows/ci.yml +0 -185
  133. package/.github/workflows/codeql.yml +0 -57
  134. package/.github/workflows/docker-build-push.yml +0 -118
  135. package/.github/workflows/helm-release.yml +0 -113
  136. package/CLAUDE.md +0 -265
  137. package/CODE_OF_CONDUCT.md +0 -124
  138. package/CONTRIBUTING.md +0 -154
  139. package/Dockerfile +0 -73
  140. package/SECURITY.md +0 -107
  141. package/artifacthub-repo.yml +0 -4
  142. package/bun.lock +0 -1714
  143. package/bunfig.toml +0 -3
  144. package/charts/libredb-studio/.helmignore +0 -11
  145. package/charts/libredb-studio/Chart.lock +0 -6
  146. package/charts/libredb-studio/Chart.yaml +0 -50
  147. package/charts/libredb-studio/README.md +0 -206
  148. package/charts/libredb-studio/templates/NOTES.txt +0 -59
  149. package/charts/libredb-studio/templates/_helpers.tpl +0 -135
  150. package/charts/libredb-studio/templates/configmap.yaml +0 -37
  151. package/charts/libredb-studio/templates/deployment.yaml +0 -184
  152. package/charts/libredb-studio/templates/hpa.yaml +0 -32
  153. package/charts/libredb-studio/templates/ingress.yaml +0 -41
  154. package/charts/libredb-studio/templates/networkpolicy.yaml +0 -50
  155. package/charts/libredb-studio/templates/pdb.yaml +0 -18
  156. package/charts/libredb-studio/templates/pvc.yaml +0 -23
  157. package/charts/libredb-studio/templates/secret.yaml +0 -30
  158. package/charts/libredb-studio/templates/seed-configmap.yaml +0 -11
  159. package/charts/libredb-studio/templates/service.yaml +0 -22
  160. package/charts/libredb-studio/templates/serviceaccount.yaml +0 -13
  161. package/charts/libredb-studio/values.schema.json +0 -246
  162. package/charts/libredb-studio/values.yaml +0 -286
  163. package/components.json +0 -22
  164. package/conductor/code_styleguides/typescript.md +0 -43
  165. package/conductor/product-guidelines.md +0 -43
  166. package/conductor/product.md +0 -3
  167. package/conductor/setup_state.json +0 -1
  168. package/conductor/tech-stack.md +0 -39
  169. package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +0 -8
  170. package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +0 -44
  171. package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +0 -31
  172. package/conductor/tracks.md +0 -8
  173. package/conductor/workflow.md +0 -333
  174. package/database-compose.yml +0 -55
  175. package/docker/postgres-init/01-extensions.sql +0 -10
  176. package/docker/postgres-init/02-sample-data.sql +0 -585
  177. package/docker/postgres.yml +0 -68
  178. package/docker-compose.yml +0 -38
  179. package/docs/AI_PLAN.md +0 -74
  180. package/docs/API_DOCS.md +0 -875
  181. package/docs/ARCHITECTURE.md +0 -218
  182. package/docs/DATABASE_PROVIDERS.md +0 -358
  183. package/docs/FEATURES.md +0 -116
  184. package/docs/HELM_CHART.md +0 -252
  185. package/docs/LOGIN_PAGE.md +0 -178
  186. package/docs/MONACO_EDITOR_PERFORMANCE.md +0 -315
  187. package/docs/OIDC_ARCH.md +0 -681
  188. package/docs/OIDC_SETUP.md +0 -322
  189. package/docs/POSTGRES_METRICS.md +0 -516
  190. package/docs/QUERY_OPTIMIZATION.md +0 -370
  191. package/docs/SEED_CONNECTIONS.md +0 -468
  192. package/docs/SQL_ALIAS_COMPLETION.md +0 -190
  193. package/docs/STORAGE_ARCHITECTURE.md +0 -565
  194. package/docs/STORAGE_QUICK_SETUP.md +0 -419
  195. package/docs/TECHNICAL_PLAN.md +0 -36
  196. package/docs/THEMING.md +0 -345
  197. package/docs/adding-a-new-database-provider.md +0 -642
  198. package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +0 -360
  199. package/docs/backlogs/001-INLINE_DATA_EDITING.md +0 -118
  200. package/docs/backlogs/002-DATA_IMPORT.md +0 -215
  201. package/docs/backlogs/003-QUERY_TIME_MACHINE.md +0 -183
  202. package/docs/backlogs/004-AI_DATA_STORYTELLER.md +0 -292
  203. package/docs/backlogs/005-QUERY_PLAYGROUND.md +0 -352
  204. package/docs/backlogs/006-DATA_MASKING.md +0 -418
  205. package/docs/enterprise-features.md +0 -718
  206. package/docs/kubernetes-helm-chart-artifacthub-plan.md +0 -803
  207. package/docs/medium-koyeb-article-en.md +0 -215
  208. package/docs/plans/test-plans.md +0 -445
  209. package/docs/releases/RELEASE.V0.3.0.md +0 -22
  210. package/docs/releases/RELEASE.V0.4.0.md +0 -154
  211. package/docs/releases/RELEASE.V0.5.0.md +0 -252
  212. package/docs/releases/RELEASE_v0.5.6.md +0 -145
  213. package/docs/releases/RELEASE_v0.6.1.md +0 -303
  214. package/docs/releases/RELEASE_v0.6.7.md +0 -292
  215. package/docs/releases/RELEASE_v0.7.0.md +0 -332
  216. package/docs/releases/RELEASE_v0.8.0.md +0 -521
  217. package/docs/sampledb/titanic.sql +0 -1379
  218. package/docs/superpowers/plans/2026-03-25-seed-connections.md +0 -1362
  219. package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +0 -590
  220. package/e2e/admin-dashboard.spec.ts +0 -64
  221. package/e2e/connection-management.spec.ts +0 -58
  222. package/e2e/export.spec.ts +0 -34
  223. package/e2e/login.spec.ts +0 -85
  224. package/e2e/query-execution.spec.ts +0 -35
  225. package/e2e/tab-management.spec.ts +0 -64
  226. package/eslint.config.mjs +0 -28
  227. package/fly.toml +0 -43
  228. package/next.config.ts +0 -32
  229. package/playwright.config.ts +0 -34
  230. package/postcss.config.mjs +0 -7
  231. package/public/favicon-32x32.png +0 -0
  232. package/public/favicon.ico +0 -0
  233. package/public/file.svg +0 -1
  234. package/public/globe.svg +0 -1
  235. package/public/logo.svg +0 -32
  236. package/public/next.svg +0 -1
  237. package/public/screenshots/code-generator.png +0 -0
  238. package/public/screenshots/connection-modal.png +0 -0
  239. package/public/screenshots/data-profiler.png +0 -0
  240. package/public/screenshots/erd-diagram.png +0 -0
  241. package/public/screenshots/hero-editor.png +0 -0
  242. package/public/screenshots/nl2sql.png +0 -0
  243. package/public/vercel.svg +0 -1
  244. package/public/window.svg +0 -1
  245. package/render.yaml +0 -58
  246. package/scripts/merge-lcov.mjs +0 -239
  247. package/sonar-project.properties +0 -16
  248. package/src/app/admin/error.tsx +0 -46
  249. package/src/app/admin/page.tsx +0 -10
  250. package/src/app/api/admin/audit/route.ts +0 -52
  251. package/src/app/api/admin/fleet-health/route.ts +0 -81
  252. package/src/app/api/ai/autopilot/route.ts +0 -105
  253. package/src/app/api/ai/chat/route.ts +0 -132
  254. package/src/app/api/ai/describe-schema/route.ts +0 -52
  255. package/src/app/api/ai/explain/route.ts +0 -86
  256. package/src/app/api/ai/impact/route.ts +0 -97
  257. package/src/app/api/ai/index-advisor/route.ts +0 -98
  258. package/src/app/api/ai/nl2sql/route.ts +0 -87
  259. package/src/app/api/ai/query-safety/route.ts +0 -87
  260. package/src/app/api/auth/login/route.ts +0 -62
  261. package/src/app/api/auth/logout/route.ts +0 -25
  262. package/src/app/api/auth/me/route.ts +0 -10
  263. package/src/app/api/auth/oidc/callback/route.ts +0 -82
  264. package/src/app/api/auth/oidc/login/route.ts +0 -43
  265. package/src/app/api/connections/managed/route.ts +0 -35
  266. package/src/app/api/db/cancel/route.ts +0 -42
  267. package/src/app/api/db/disconnect/route.ts +0 -28
  268. package/src/app/api/db/health/route.ts +0 -49
  269. package/src/app/api/db/maintenance/route.ts +0 -72
  270. package/src/app/api/db/monitoring/route.ts +0 -62
  271. package/src/app/api/db/multi-query/route.ts +0 -116
  272. package/src/app/api/db/pool-stats/route.ts +0 -37
  273. package/src/app/api/db/profile/route.ts +0 -144
  274. package/src/app/api/db/provider-meta/route.ts +0 -49
  275. package/src/app/api/db/query/route.ts +0 -50
  276. package/src/app/api/db/schema/route.ts +0 -47
  277. package/src/app/api/db/schema-snapshot/route.ts +0 -42
  278. package/src/app/api/db/test-connection/route.ts +0 -55
  279. package/src/app/api/db/transaction/route.ts +0 -111
  280. package/src/app/api/storage/[collection]/route.ts +0 -67
  281. package/src/app/api/storage/config/route.ts +0 -17
  282. package/src/app/api/storage/migrate/route.ts +0 -45
  283. package/src/app/api/storage/route.ts +0 -32
  284. package/src/app/error.tsx +0 -49
  285. package/src/app/global-error.tsx +0 -55
  286. package/src/app/globals.css +0 -146
  287. package/src/app/icon.svg +0 -42
  288. package/src/app/layout.tsx +0 -34
  289. package/src/app/login/login-form.tsx +0 -301
  290. package/src/app/login/page.tsx +0 -11
  291. package/src/app/monitoring/page.tsx +0 -8
  292. package/src/app/not-found.tsx +0 -29
  293. package/src/app/page.tsx +0 -5
  294. package/src/components/AIAutopilotPanel.tsx +0 -238
  295. package/src/components/CodeGenerator.tsx +0 -271
  296. package/src/components/CommandPalette.tsx +0 -227
  297. package/src/components/ConnectionModal.tsx +0 -759
  298. package/src/components/CreateTableModal.tsx +0 -281
  299. package/src/components/DataCharts.tsx +0 -962
  300. package/src/components/DataImportModal.tsx +0 -582
  301. package/src/components/DataProfiler.tsx +0 -335
  302. package/src/components/DatabaseDocs.tsx +0 -251
  303. package/src/components/MaskingSettings.tsx +0 -414
  304. package/src/components/MobileNav.tsx +0 -50
  305. package/src/components/NL2SQLPanel.tsx +0 -281
  306. package/src/components/PivotTable.tsx +0 -257
  307. package/src/components/QueryEditor.tsx +0 -760
  308. package/src/components/QueryHistory.tsx +0 -344
  309. package/src/components/QuerySafetyDialog.tsx +0 -290
  310. package/src/components/ResultsGrid.tsx +0 -644
  311. package/src/components/SaveQueryModal.tsx +0 -104
  312. package/src/components/SavedQueries.tsx +0 -128
  313. package/src/components/SchemaDiagram.tsx +0 -473
  314. package/src/components/SchemaDiff.tsx +0 -473
  315. package/src/components/SnapshotTimeline.tsx +0 -116
  316. package/src/components/Studio.tsx +0 -639
  317. package/src/components/TestDataGenerator.tsx +0 -261
  318. package/src/components/VisualExplain.tsx +0 -820
  319. package/src/components/admin/AdminDashboard.tsx +0 -163
  320. package/src/components/admin/tabs/AuditTab.tsx +0 -531
  321. package/src/components/admin/tabs/MonitoringEmbed.tsx +0 -11
  322. package/src/components/admin/tabs/OperationsTab.tsx +0 -646
  323. package/src/components/admin/tabs/OverviewTab.tsx +0 -1328
  324. package/src/components/admin/tabs/SecurityTab.tsx +0 -284
  325. package/src/components/community-section.tsx +0 -92
  326. package/src/components/icons/db-icons.tsx +0 -84
  327. package/src/components/libredb-logo.tsx +0 -61
  328. package/src/components/monitoring/MonitoringDashboard.tsx +0 -345
  329. package/src/components/monitoring/tabs/MetricChart.tsx +0 -82
  330. package/src/components/monitoring/tabs/OverviewTab.tsx +0 -263
  331. package/src/components/monitoring/tabs/PerformanceTab.tsx +0 -254
  332. package/src/components/monitoring/tabs/PoolTab.tsx +0 -174
  333. package/src/components/monitoring/tabs/QueriesTab.tsx +0 -287
  334. package/src/components/monitoring/tabs/SessionsTab.tsx +0 -316
  335. package/src/components/monitoring/tabs/StorageTab.tsx +0 -335
  336. package/src/components/monitoring/tabs/TablesTab.tsx +0 -300
  337. package/src/components/results-grid/ResultCard.tsx +0 -111
  338. package/src/components/results-grid/RowDetailSheet.tsx +0 -178
  339. package/src/components/results-grid/StatsBar.tsx +0 -201
  340. package/src/components/results-grid/index.ts +0 -1
  341. package/src/components/results-grid/utils.ts +0 -23
  342. package/src/components/schema-explorer/ColumnList.tsx +0 -53
  343. package/src/components/schema-explorer/SchemaExplorer.tsx +0 -182
  344. package/src/components/schema-explorer/TableItem.tsx +0 -210
  345. package/src/components/schema-explorer/index.ts +0 -1
  346. package/src/components/sidebar/ConnectionItem.tsx +0 -105
  347. package/src/components/sidebar/ConnectionsList.tsx +0 -62
  348. package/src/components/sidebar/Sidebar.tsx +0 -130
  349. package/src/components/sidebar/index.ts +0 -2
  350. package/src/components/studio/BottomPanel.tsx +0 -286
  351. package/src/components/studio/QueryToolbar.tsx +0 -180
  352. package/src/components/studio/StudioDesktopHeader.tsx +0 -114
  353. package/src/components/studio/StudioMobileHeader.tsx +0 -340
  354. package/src/components/studio/StudioTabBar.tsx +0 -82
  355. package/src/components/studio/index.ts +0 -5
  356. package/src/components/ui/accordion.tsx +0 -66
  357. package/src/components/ui/alert-dialog.tsx +0 -157
  358. package/src/components/ui/alert.tsx +0 -66
  359. package/src/components/ui/aspect-ratio.tsx +0 -11
  360. package/src/components/ui/avatar.tsx +0 -53
  361. package/src/components/ui/badge.tsx +0 -46
  362. package/src/components/ui/breadcrumb.tsx +0 -109
  363. package/src/components/ui/button-group.tsx +0 -83
  364. package/src/components/ui/button.tsx +0 -60
  365. package/src/components/ui/calendar.tsx +0 -216
  366. package/src/components/ui/card.tsx +0 -92
  367. package/src/components/ui/carousel.tsx +0 -241
  368. package/src/components/ui/chart.tsx +0 -357
  369. package/src/components/ui/checkbox.tsx +0 -32
  370. package/src/components/ui/collapsible.tsx +0 -33
  371. package/src/components/ui/command.tsx +0 -184
  372. package/src/components/ui/context-menu.tsx +0 -252
  373. package/src/components/ui/dialog.tsx +0 -143
  374. package/src/components/ui/drawer.tsx +0 -135
  375. package/src/components/ui/dropdown-menu.tsx +0 -257
  376. package/src/components/ui/empty.tsx +0 -104
  377. package/src/components/ui/field.tsx +0 -248
  378. package/src/components/ui/form.tsx +0 -167
  379. package/src/components/ui/hover-card.tsx +0 -44
  380. package/src/components/ui/input-group.tsx +0 -170
  381. package/src/components/ui/input-otp.tsx +0 -77
  382. package/src/components/ui/input.tsx +0 -21
  383. package/src/components/ui/item.tsx +0 -193
  384. package/src/components/ui/kbd.tsx +0 -28
  385. package/src/components/ui/label.tsx +0 -24
  386. package/src/components/ui/menubar.tsx +0 -276
  387. package/src/components/ui/navigation-menu.tsx +0 -168
  388. package/src/components/ui/pagination.tsx +0 -127
  389. package/src/components/ui/popover.tsx +0 -48
  390. package/src/components/ui/progress.tsx +0 -31
  391. package/src/components/ui/radio-group.tsx +0 -45
  392. package/src/components/ui/resizable.tsx +0 -56
  393. package/src/components/ui/scroll-area.tsx +0 -58
  394. package/src/components/ui/select.tsx +0 -187
  395. package/src/components/ui/separator.tsx +0 -28
  396. package/src/components/ui/sheet.tsx +0 -139
  397. package/src/components/ui/sidebar.tsx +0 -726
  398. package/src/components/ui/skeleton.tsx +0 -13
  399. package/src/components/ui/slider.tsx +0 -63
  400. package/src/components/ui/sonner.tsx +0 -40
  401. package/src/components/ui/spinner.tsx +0 -16
  402. package/src/components/ui/switch.tsx +0 -31
  403. package/src/components/ui/table.tsx +0 -116
  404. package/src/components/ui/tabs.tsx +0 -66
  405. package/src/components/ui/textarea.tsx +0 -18
  406. package/src/components/ui/toggle-group.tsx +0 -83
  407. package/src/components/ui/toggle.tsx +0 -47
  408. package/src/components/ui/tooltip.tsx +0 -61
  409. package/src/exports/components.ts +0 -15
  410. package/src/exports/index.ts +0 -4
  411. package/src/exports/providers.ts +0 -4
  412. package/src/exports/types.ts +0 -26
  413. package/src/hooks/use-ai-chat.ts +0 -182
  414. package/src/hooks/use-all-connections.ts +0 -66
  415. package/src/hooks/use-api-call.ts +0 -71
  416. package/src/hooks/use-auth.ts +0 -51
  417. package/src/hooks/use-connection-form.ts +0 -349
  418. package/src/hooks/use-connection-manager.ts +0 -169
  419. package/src/hooks/use-connection-payload.ts +0 -15
  420. package/src/hooks/use-inline-editing.ts +0 -109
  421. package/src/hooks/use-mobile.ts +0 -20
  422. package/src/hooks/use-monitoring-data.ts +0 -270
  423. package/src/hooks/use-provider-metadata.ts +0 -62
  424. package/src/hooks/use-query-execution.ts +0 -478
  425. package/src/hooks/use-storage-sync.ts +0 -259
  426. package/src/hooks/use-tab-manager.ts +0 -231
  427. package/src/hooks/use-toast.ts +0 -20
  428. package/src/hooks/use-transaction-control.ts +0 -64
  429. package/src/lib/api/error-codes.ts +0 -30
  430. package/src/lib/api/errors.ts +0 -236
  431. package/src/lib/api/with-error-handler.ts +0 -41
  432. package/src/lib/audit.ts +0 -105
  433. package/src/lib/auth.ts +0 -87
  434. package/src/lib/connection-string-parser.ts +0 -172
  435. package/src/lib/data-masking.ts +0 -385
  436. package/src/lib/db/base-provider.ts +0 -325
  437. package/src/lib/db/errors.ts +0 -317
  438. package/src/lib/db/factory.ts +0 -324
  439. package/src/lib/db/index.ts +0 -123
  440. package/src/lib/db/providers/document/index.ts +0 -6
  441. package/src/lib/db/providers/document/mongodb.ts +0 -992
  442. package/src/lib/db/providers/keyvalue/redis.ts +0 -554
  443. package/src/lib/db/providers/sql/index.ts +0 -11
  444. package/src/lib/db/providers/sql/sql-base.ts +0 -174
  445. package/src/lib/db/providers/sql/sqlite.ts +0 -721
  446. package/src/lib/db/types.ts +0 -437
  447. package/src/lib/db/utils/pool-manager.ts +0 -287
  448. package/src/lib/db/utils/query-limiter.ts +0 -239
  449. package/src/lib/db-ui-config.ts +0 -86
  450. package/src/lib/editor/mongodb-completions.ts +0 -172
  451. package/src/lib/editor/sql-completions.ts +0 -280
  452. package/src/lib/llm/base-provider.ts +0 -117
  453. package/src/lib/llm/factory.ts +0 -102
  454. package/src/lib/llm/index.ts +0 -90
  455. package/src/lib/llm/providers/custom.ts +0 -181
  456. package/src/lib/llm/providers/gemini.ts +0 -126
  457. package/src/lib/llm/providers/ollama.ts +0 -154
  458. package/src/lib/llm/providers/openai.ts +0 -146
  459. package/src/lib/llm/types.ts +0 -173
  460. package/src/lib/llm/utils/config.ts +0 -187
  461. package/src/lib/llm/utils/retry.ts +0 -119
  462. package/src/lib/llm/utils/streaming.ts +0 -202
  463. package/src/lib/logger.ts +0 -127
  464. package/src/lib/monitoring-thresholds.ts +0 -44
  465. package/src/lib/oidc.ts +0 -262
  466. package/src/lib/query-generators.ts +0 -61
  467. package/src/lib/schema-diff/diff-engine.ts +0 -273
  468. package/src/lib/schema-diff/migration-generator.ts +0 -208
  469. package/src/lib/schema-diff/types.ts +0 -55
  470. package/src/lib/seed/config-loader.ts +0 -79
  471. package/src/lib/seed/connection-filter.ts +0 -49
  472. package/src/lib/seed/credential-resolver.ts +0 -62
  473. package/src/lib/seed/index.ts +0 -40
  474. package/src/lib/seed/resolve-connection.ts +0 -57
  475. package/src/lib/seed/types.ts +0 -69
  476. package/src/lib/sql/alias-extractor.ts +0 -267
  477. package/src/lib/sql/index.ts +0 -8
  478. package/src/lib/sql/statement-splitter.ts +0 -167
  479. package/src/lib/sql/types.ts +0 -40
  480. package/src/lib/ssh/tunnel.ts +0 -142
  481. package/src/lib/storage/factory.ts +0 -84
  482. package/src/lib/storage/index.ts +0 -14
  483. package/src/lib/storage/local-storage.ts +0 -99
  484. package/src/lib/storage/providers/postgres.ts +0 -225
  485. package/src/lib/storage/providers/sqlite.ts +0 -153
  486. package/src/lib/storage/storage-facade.ts +0 -272
  487. package/src/lib/storage/types.ts +0 -75
  488. package/src/lib/time-series-buffer.ts +0 -58
  489. package/src/lib/types.ts +0 -173
  490. package/src/lib/utils.ts +0 -6
  491. package/src/proxy.ts +0 -104
  492. package/src/types/db-drivers.d.ts +0 -23
  493. package/src/types/html2canvas.d.ts +0 -9
  494. package/tests/api/admin/audit.test.ts +0 -178
  495. package/tests/api/admin/fleet-health.test.ts +0 -183
  496. package/tests/api/ai/autopilot.test.ts +0 -174
  497. package/tests/api/ai/chat.test.ts +0 -250
  498. package/tests/api/ai/describe-schema.test.ts +0 -266
  499. package/tests/api/ai/explain.test.ts +0 -199
  500. package/tests/api/ai/impact.test.ts +0 -168
  501. package/tests/api/ai/index-advisor.test.ts +0 -171
  502. package/tests/api/ai/nl2sql.test.ts +0 -202
  503. package/tests/api/ai/query-safety.test.ts +0 -196
  504. package/tests/api/auth/login.test.ts +0 -170
  505. package/tests/api/auth/logout.test.ts +0 -140
  506. package/tests/api/auth/me.test.ts +0 -73
  507. package/tests/api/auth/oidc-callback.test.ts +0 -215
  508. package/tests/api/auth/oidc-login.test.ts +0 -127
  509. package/tests/api/db/cancel.test.ts +0 -198
  510. package/tests/api/db/disconnect.test.ts +0 -124
  511. package/tests/api/db/health.test.ts +0 -222
  512. package/tests/api/db/maintenance.test.ts +0 -263
  513. package/tests/api/db/monitoring.test.ts +0 -221
  514. package/tests/api/db/multi-query.test.ts +0 -316
  515. package/tests/api/db/pool-stats.test.ts +0 -135
  516. package/tests/api/db/profile.test.ts +0 -330
  517. package/tests/api/db/provider-meta.test.ts +0 -193
  518. package/tests/api/db/query.test.ts +0 -314
  519. package/tests/api/db/schema-snapshot.test.ts +0 -170
  520. package/tests/api/db/schema.test.ts +0 -191
  521. package/tests/api/db/test-connection.test.ts +0 -185
  522. package/tests/api/db/transaction.test.ts +0 -314
  523. package/tests/api/proxy.test.ts +0 -191
  524. package/tests/api/seed/managed-route.test.ts +0 -113
  525. package/tests/api/storage/config.test.ts +0 -42
  526. package/tests/api/storage/storage-routes.test.ts +0 -309
  527. package/tests/components/AIAutopilotPanel.test.tsx +0 -756
  528. package/tests/components/AdminPage.test.tsx +0 -33
  529. package/tests/components/CodeGenerator.test.tsx +0 -182
  530. package/tests/components/CommandPalette.test.tsx +0 -428
  531. package/tests/components/CommunitySection.test.tsx +0 -91
  532. package/tests/components/ConnectionModal.mobile.test.tsx +0 -284
  533. package/tests/components/ConnectionModal.test.tsx +0 -570
  534. package/tests/components/CreateTableModal.test.tsx +0 -383
  535. package/tests/components/DataCharts.test.tsx +0 -739
  536. package/tests/components/DataImportModal.test.tsx +0 -751
  537. package/tests/components/DataProfiler.test.tsx +0 -589
  538. package/tests/components/DatabaseDocs.test.tsx +0 -353
  539. package/tests/components/LoginPage.test.tsx +0 -163
  540. package/tests/components/LoginPageOIDC.test.tsx +0 -92
  541. package/tests/components/MaskingSettings.test.tsx +0 -498
  542. package/tests/components/MobileNav.test.tsx +0 -30
  543. package/tests/components/MonitoringPage.test.tsx +0 -32
  544. package/tests/components/NL2SQLPanel.test.tsx +0 -621
  545. package/tests/components/Page.test.tsx +0 -33
  546. package/tests/components/PivotTable.test.tsx +0 -350
  547. package/tests/components/QueryEditor.test.tsx +0 -1730
  548. package/tests/components/QueryHistory.test.tsx +0 -572
  549. package/tests/components/QuerySafetyDialog.test.tsx +0 -586
  550. package/tests/components/ResultsGrid.test.tsx +0 -804
  551. package/tests/components/RootLayout.test.tsx +0 -83
  552. package/tests/components/SaveQueryModal.test.tsx +0 -25
  553. package/tests/components/SavedQueries.test.tsx +0 -43
  554. package/tests/components/SchemaDiagram.test.tsx +0 -1034
  555. package/tests/components/SchemaDiff.test.tsx +0 -906
  556. package/tests/components/SnapshotTimeline.test.tsx +0 -174
  557. package/tests/components/Studio.test.tsx +0 -1030
  558. package/tests/components/TestDataGenerator.test.tsx +0 -291
  559. package/tests/components/VisualExplain.test.tsx +0 -704
  560. package/tests/components/admin/AdminDashboard.test.tsx +0 -205
  561. package/tests/components/admin/AuditTab.test.tsx +0 -220
  562. package/tests/components/admin/MonitoringEmbed.test.tsx +0 -58
  563. package/tests/components/admin/OperationsTab.test.tsx +0 -975
  564. package/tests/components/admin/OverviewTab.test.tsx +0 -254
  565. package/tests/components/admin/SecurityTab.test.tsx +0 -467
  566. package/tests/components/monitoring/MetricChart.test.tsx +0 -111
  567. package/tests/components/monitoring/MonitoringDashboard.test.tsx +0 -259
  568. package/tests/components/monitoring/OverviewTab.test.tsx +0 -78
  569. package/tests/components/monitoring/PerformanceTab.test.tsx +0 -87
  570. package/tests/components/monitoring/PoolTab.test.tsx +0 -42
  571. package/tests/components/monitoring/QueriesTab.test.tsx +0 -80
  572. package/tests/components/monitoring/SessionsTab.test.tsx +0 -154
  573. package/tests/components/monitoring/StorageTab.test.tsx +0 -127
  574. package/tests/components/monitoring/TablesTab.test.tsx +0 -153
  575. package/tests/components/results-grid/ResultCard.test.tsx +0 -105
  576. package/tests/components/results-grid/RowDetailSheet.test.tsx +0 -308
  577. package/tests/components/results-grid/StatsBar.test.tsx +0 -162
  578. package/tests/components/schema-explorer/ColumnList.test.tsx +0 -151
  579. package/tests/components/schema-explorer/SchemaExplorer.test.tsx +0 -461
  580. package/tests/components/schema-explorer/TableItem.test.tsx +0 -415
  581. package/tests/components/sidebar/ConnectionItem.test.tsx +0 -201
  582. package/tests/components/sidebar/ConnectionsList.test.tsx +0 -176
  583. package/tests/components/sidebar/Sidebar.test.tsx +0 -187
  584. package/tests/components/studio/BottomPanel.test.tsx +0 -383
  585. package/tests/components/studio/QueryToolbar.test.tsx +0 -321
  586. package/tests/components/studio/StudioDesktopHeader.test.tsx +0 -377
  587. package/tests/components/studio/StudioMobileHeader.test.tsx +0 -198
  588. package/tests/components/studio/StudioTabBar.test.tsx +0 -331
  589. package/tests/fixtures/connections.ts +0 -96
  590. package/tests/fixtures/masking-configs.ts +0 -86
  591. package/tests/fixtures/query-results.ts +0 -71
  592. package/tests/fixtures/schemas.ts +0 -64
  593. package/tests/fixtures/seed-connections/invalid-config.yaml +0 -7
  594. package/tests/fixtures/seed-connections/minimal-config.yaml +0 -8
  595. package/tests/fixtures/seed-connections/mixed-credentials.yaml +0 -23
  596. package/tests/fixtures/seed-connections/multi-role-config.yaml +0 -30
  597. package/tests/fixtures/seed-connections/valid-config.json +0 -15
  598. package/tests/fixtures/seed-connections/valid-config.yaml +0 -51
  599. package/tests/helpers/mock-fetch.ts +0 -59
  600. package/tests/helpers/mock-monaco.ts +0 -112
  601. package/tests/helpers/mock-navigation.ts +0 -28
  602. package/tests/helpers/mock-next.ts +0 -80
  603. package/tests/helpers/mock-provider.ts +0 -133
  604. package/tests/helpers/mock-sonner.ts +0 -29
  605. package/tests/helpers/render-with-providers.tsx +0 -19
  606. package/tests/hooks/use-ai-chat.test.ts +0 -600
  607. package/tests/hooks/use-auth.test.ts +0 -371
  608. package/tests/hooks/use-connection-form.test.ts +0 -743
  609. package/tests/hooks/use-connection-manager.test.ts +0 -466
  610. package/tests/hooks/use-inline-editing.test.ts +0 -321
  611. package/tests/hooks/use-mobile.test.ts +0 -177
  612. package/tests/hooks/use-monitoring-data.test.ts +0 -819
  613. package/tests/hooks/use-provider-metadata.test.ts +0 -228
  614. package/tests/hooks/use-query-execution.test.ts +0 -1212
  615. package/tests/hooks/use-tab-manager.test.ts +0 -756
  616. package/tests/hooks/use-toast.test.ts +0 -74
  617. package/tests/hooks/use-transaction-control.test.ts +0 -211
  618. package/tests/integration/db/mongodb-provider.test.ts +0 -698
  619. package/tests/integration/db/mssql-provider.test.ts +0 -840
  620. package/tests/integration/db/mysql-provider.test.ts +0 -872
  621. package/tests/integration/db/oracle-provider.test.ts +0 -843
  622. package/tests/integration/db/postgres-provider.test.ts +0 -1382
  623. package/tests/integration/db/redis-provider.test.ts +0 -526
  624. package/tests/integration/db/sqlite-provider.test.ts +0 -480
  625. package/tests/integration/seed/seed-pipeline.test.ts +0 -102
  626. package/tests/isolated/factory-singleton.test.ts +0 -150
  627. package/tests/isolated/use-storage-sync.test.ts +0 -389
  628. package/tests/run-components.sh +0 -196
  629. package/tests/setup-dom.ts +0 -58
  630. package/tests/setup.ts +0 -40
  631. package/tests/unit/api-errors.test.ts +0 -210
  632. package/tests/unit/code-generator-functions.test.ts +0 -271
  633. package/tests/unit/components/column-list.test.tsx +0 -190
  634. package/tests/unit/components/data-import-modal.test.tsx +0 -441
  635. package/tests/unit/components/studio-mobile-header.test.tsx +0 -327
  636. package/tests/unit/data-charts-functions.test.ts +0 -496
  637. package/tests/unit/data-import-functions.test.ts +0 -320
  638. package/tests/unit/data-import-utils.test.ts +0 -125
  639. package/tests/unit/db/base-provider.test.ts +0 -517
  640. package/tests/unit/db/errors.test.ts +0 -403
  641. package/tests/unit/db/factory.test.ts +0 -436
  642. package/tests/unit/db/pool-manager.test.ts +0 -440
  643. package/tests/unit/db/query-limiter.test.ts +0 -387
  644. package/tests/unit/db/sql-base.test.ts +0 -438
  645. package/tests/unit/lib/api/error-codes.test.ts +0 -39
  646. package/tests/unit/lib/audit.test.ts +0 -326
  647. package/tests/unit/lib/auth.test.ts +0 -146
  648. package/tests/unit/lib/connection-string-parser.test.ts +0 -424
  649. package/tests/unit/lib/data-masking.test.ts +0 -583
  650. package/tests/unit/lib/db-icons.test.tsx +0 -41
  651. package/tests/unit/lib/monitoring-thresholds.test.ts +0 -133
  652. package/tests/unit/lib/oidc.test.ts +0 -509
  653. package/tests/unit/lib/query-generators.test.ts +0 -127
  654. package/tests/unit/lib/storage/factory.test.ts +0 -71
  655. package/tests/unit/lib/storage/local-storage.test.ts +0 -114
  656. package/tests/unit/lib/storage/providers/postgres.test.ts +0 -312
  657. package/tests/unit/lib/storage/providers/sqlite.test.ts +0 -232
  658. package/tests/unit/lib/storage/storage-facade-extended.test.ts +0 -331
  659. package/tests/unit/lib/storage/storage-facade.test.ts +0 -184
  660. package/tests/unit/lib/storage.test.ts +0 -317
  661. package/tests/unit/lib/time-series-buffer.test.ts +0 -212
  662. package/tests/unit/lib/utils.test.ts +0 -24
  663. package/tests/unit/llm/base-provider.test.ts +0 -238
  664. package/tests/unit/llm/config.test.ts +0 -262
  665. package/tests/unit/llm/custom-provider.test.ts +0 -281
  666. package/tests/unit/llm/gemini-provider.test.ts +0 -248
  667. package/tests/unit/llm/llm-factory.test.ts +0 -155
  668. package/tests/unit/llm/ollama-provider.test.ts +0 -288
  669. package/tests/unit/llm/openai-provider.test.ts +0 -324
  670. package/tests/unit/llm/retry.test.ts +0 -180
  671. package/tests/unit/llm/streaming.test.ts +0 -355
  672. package/tests/unit/logger.test.ts +0 -198
  673. package/tests/unit/mongodb-completions.test.ts +0 -516
  674. package/tests/unit/pivot-table-functions.test.ts +0 -76
  675. package/tests/unit/query-cancelled-error.test.ts +0 -81
  676. package/tests/unit/schema-diff/diff-engine.test.ts +0 -367
  677. package/tests/unit/schema-diff/migration-generator.test.ts +0 -513
  678. package/tests/unit/seed/config-loader.test.ts +0 -73
  679. package/tests/unit/seed/connection-filter.test.ts +0 -91
  680. package/tests/unit/seed/credential-resolver.test.ts +0 -85
  681. package/tests/unit/seed/index.test.ts +0 -72
  682. package/tests/unit/seed/resolve-connection.test.ts +0 -74
  683. package/tests/unit/seed/types.test.ts +0 -129
  684. package/tests/unit/sql/alias-extractor.test.ts +0 -444
  685. package/tests/unit/sql/statement-splitter.test.ts +0 -348
  686. package/tests/unit/sql-completions.test.ts +0 -463
  687. package/tests/unit/ssh-tunnel.test.ts +0 -465
  688. package/tsconfig.json +0 -42
@@ -1,52 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { createLLMProvider } from '@/lib/llm';
3
- import { createErrorResponse } from '@/lib/api/errors';
4
-
5
- export async function POST(req: NextRequest) {
6
- try {
7
- const { schemaContext, databaseType, mode } = await req.json();
8
-
9
- if (!schemaContext) {
10
- return NextResponse.json({ error: 'Schema context required' }, { status: 400 });
11
- }
12
-
13
- const provider = await createLLMProvider();
14
-
15
- const systemPrompt = mode === 'table'
16
- ? `You are a database documentation expert. Given a table schema, generate clear, concise documentation.
17
-
18
- For each table, provide:
19
- 1. **Purpose**: What this table stores and its role in the system
20
- 2. **Key Columns**: Brief description of important columns
21
- 3. **Relationships**: Detected foreign keys and relationships
22
- 4. **Usage Notes**: Common query patterns or important constraints
23
-
24
- Format as markdown. Be concise but informative. Database type: ${databaseType || 'SQL'}.`
25
- : `You are a database documentation expert. Generate comprehensive database documentation.
26
-
27
- Given the full schema, provide:
28
- 1. **Database Overview**: High-level summary of the database's purpose
29
- 2. **Entity Relationship Summary**: How tables relate to each other
30
- 3. **Table Descriptions**: Brief purpose of each table (one line each)
31
- 4. **Data Flow**: How data typically flows through the system
32
- 5. **Key Observations**: Naming conventions, patterns, potential issues
33
-
34
- Format as clean markdown. Be concise. Database type: ${databaseType || 'SQL'}.`;
35
-
36
- const stream = await provider.stream({
37
- messages: [
38
- { role: 'system', content: systemPrompt },
39
- { role: 'user', content: `Generate documentation for:\n\n${schemaContext}` },
40
- ],
41
- });
42
-
43
- return new Response(stream as ReadableStream, {
44
- headers: {
45
- 'Content-Type': 'text/plain; charset=utf-8',
46
- 'Transfer-Encoding': 'chunked',
47
- },
48
- });
49
- } catch (error) {
50
- return createErrorResponse(error, { route: 'api/ai/describe-schema' });
51
- }
52
- }
@@ -1,86 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { createLLMProvider } from '@/lib/llm';
3
- import { createErrorResponse } from '@/lib/api/errors';
4
-
5
- function buildExplainSystemPrompt(databaseType: string, schemaContext: string): string {
6
- return `You are an Expert Database Performance Analyst specializing in query optimization for ${databaseType || 'PostgreSQL'}.
7
-
8
- ROLE: Analyze EXPLAIN plans and provide actionable, plain-language explanations.
9
-
10
- SCHEMA CONTEXT:
11
- ${schemaContext || 'No schema context available.'}
12
-
13
- OUTPUT FORMAT (always follow this structure):
14
-
15
- ## Plain Language Explanation
16
- Explain what the query does step-by-step in simple terms anyone can understand. Be specific about which tables, joins, and filters are involved.
17
-
18
- ## Performance Issues
19
- List any problems found (sequential scans on large tables, expensive sorts, nested loop issues, row estimate mismatches). For each issue:
20
- - What the problem is
21
- - Why it matters
22
- - How much impact it has
23
-
24
- ## Recommendations
25
- Numbered list of concrete, actionable suggestions. Each should include:
26
- - The specific action (e.g., "Create an index on orders.customer_id")
27
- - Expected improvement
28
- - The exact SQL command if applicable
29
-
30
- ## Optimized Query
31
- If the query can be rewritten for better performance, provide the optimized version in a SQL code block. If the query is already optimal, say so.
32
-
33
- GUIDELINES:
34
- - Be concise but thorough
35
- - Use plain language, avoid jargon where possible
36
- - Quantify impact when you can (e.g., "reduces from table scan of ~100K rows to index lookup")
37
- - If there are no issues, say the query looks good and explain why
38
- - Format SQL in code blocks with \`\`\`sql
39
- `;
40
- }
41
-
42
- export async function POST(req: NextRequest) {
43
- try {
44
- const { query, explainPlan, schemaContext, databaseType } = await req.json();
45
-
46
- if (!query) {
47
- return NextResponse.json(
48
- { error: 'Query is required' },
49
- { status: 400 }
50
- );
51
- }
52
-
53
- const provider = await createLLMProvider();
54
- const systemPrompt = buildExplainSystemPrompt(databaseType, schemaContext);
55
-
56
- const userMessage = `Analyze this SQL query and its EXPLAIN plan:
57
-
58
- **Original Query:**
59
- \`\`\`sql
60
- ${query}
61
- \`\`\`
62
-
63
- **EXPLAIN Plan:**
64
- \`\`\`json
65
- ${JSON.stringify(explainPlan, null, 2)}
66
- \`\`\`
67
-
68
- Provide a plain-language explanation, identify performance issues, give specific recommendations, and suggest an optimized query if possible.`;
69
-
70
- const stream = await provider.stream({
71
- messages: [
72
- { role: 'system', content: systemPrompt },
73
- { role: 'user', content: userMessage },
74
- ],
75
- });
76
-
77
- return new Response(stream, {
78
- headers: {
79
- 'Content-Type': 'text/plain; charset=utf-8',
80
- 'Transfer-Encoding': 'chunked',
81
- },
82
- });
83
- } catch (error) {
84
- return createErrorResponse(error, { route: 'api/ai/explain' });
85
- }
86
- }
@@ -1,97 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { createLLMProvider } from '@/lib/llm';
3
- import { createErrorResponse } from '@/lib/api/errors';
4
-
5
- function buildImpactSystemPrompt(databaseType: string, schemaContext: string): string {
6
- return `You are a Schema Change Impact Analyst for ${databaseType || 'PostgreSQL'}. You analyze DDL statements BEFORE they are executed and predict their impact.
7
-
8
- DATABASE TYPE: ${databaseType || 'PostgreSQL'}
9
-
10
- SCHEMA CONTEXT:
11
- ${schemaContext || 'No schema available.'}
12
-
13
- ANALYSIS SCOPE:
14
- 1. **Lock Impact**: Will this statement acquire table locks? For how long? What queries will be blocked?
15
- 2. **Data Impact**: Will data be lost? How many rows affected? Are there cascade effects?
16
- 3. **Dependent Objects**: Views, indexes, triggers, functions that depend on the modified object
17
- 4. **Performance Impact**: Will queries become slower after this change? Will indexes need rebuilding?
18
- 5. **Rollback Plan**: How to reverse this change if something goes wrong
19
-
20
- OUTPUT FORMAT (markdown):
21
-
22
- ## Impact Summary
23
- One-line: what this DDL does and its risk level (Low/Medium/High/Critical).
24
-
25
- ## Lock Analysis
26
- - Lock type acquired (ACCESS EXCLUSIVE, ROW EXCLUSIVE, etc.)
27
- - Estimated duration for the schema context
28
- - Affected concurrent queries
29
-
30
- ## Data Impact
31
- - Rows affected (estimate)
32
- - Data loss risk (none/potential/certain)
33
- - Cascade effects (FK constraints)
34
-
35
- ## Dependent Objects
36
- List views, indexes, triggers, stored procedures that reference the modified table/column.
37
-
38
- ## Validation Queries
39
- SQL queries the user can run BEFORE applying the change to verify safety:
40
- \`\`\`sql
41
- -- Check for NULL values before adding NOT NULL constraint
42
- SELECT COUNT(*) FROM table WHERE column IS NULL;
43
- \`\`\`
44
-
45
- ## Rollback Plan
46
- \`\`\`sql
47
- -- Exact SQL to reverse this change
48
- \`\`\`
49
-
50
- ## Recommendation
51
- Whether to proceed, modify, or avoid this change. Suggest safer alternatives if applicable.
52
-
53
- GUIDELINES:
54
- - Be specific about ${databaseType} lock behavior
55
- - For ALTER TABLE on large tables, warn about lock time
56
- - For DROP operations, list ALL dependent objects
57
- - For column type changes, check for data truncation risks
58
- - Always provide a rollback plan
59
- `;
60
- }
61
-
62
- export async function POST(req: NextRequest) {
63
- try {
64
- const { query, schemaContext, databaseType } = await req.json();
65
-
66
- if (!query) {
67
- return NextResponse.json({ error: 'Query is required' }, { status: 400 });
68
- }
69
-
70
- const provider = await createLLMProvider();
71
- const systemPrompt = buildImpactSystemPrompt(databaseType, schemaContext);
72
-
73
- const userMessage = `Analyze the impact of this schema change before I execute it:
74
-
75
- \`\`\`sql
76
- ${query}
77
- \`\`\`
78
-
79
- Provide a comprehensive impact analysis.`;
80
-
81
- const stream = await provider.stream({
82
- messages: [
83
- { role: 'system', content: systemPrompt },
84
- { role: 'user', content: userMessage },
85
- ],
86
- });
87
-
88
- return new Response(stream, {
89
- headers: {
90
- 'Content-Type': 'text/plain; charset=utf-8',
91
- 'Transfer-Encoding': 'chunked',
92
- },
93
- });
94
- } catch (error) {
95
- return createErrorResponse(error, { route: 'api/ai/impact' });
96
- }
97
- }
@@ -1,98 +0,0 @@
1
- import { NextRequest } from 'next/server';
2
- import { createLLMProvider } from '@/lib/llm';
3
- import { createErrorResponse } from '@/lib/api/errors';
4
-
5
- function buildIndexAdvisorPrompt(databaseType: string): string {
6
- return `You are a Database Index Optimization Expert for ${databaseType || 'PostgreSQL'}.
7
-
8
- You will be given:
9
- 1. Slow queries with execution statistics
10
- 2. Current index statistics (scans, usage ratio)
11
- 3. Table statistics (row counts, sizes)
12
- 4. Schema information
13
-
14
- Your job is to provide actionable index recommendations.
15
-
16
- OUTPUT FORMAT (use markdown):
17
-
18
- ## Index Analysis Summary
19
- Brief overview of the indexing health.
20
-
21
- ## Missing Indexes (Recommended to Create)
22
- For each recommendation:
23
- ### Index: \`index_name\`
24
- - **Table:** table_name
25
- - **Columns:** column(s) to index
26
- - **Reason:** Why this index is needed (reference the slow query)
27
- - **Expected Impact:** How much improvement
28
- - **SQL:**
29
- \`\`\`sql
30
- CREATE INDEX index_name ON table_name (columns);
31
- \`\`\`
32
-
33
- ## Unused Indexes (Consider Dropping)
34
- For each unused index:
35
- - **Index:** index_name on table_name
36
- - **Size:** index size
37
- - **Scans:** 0 (never used)
38
- - **Recommendation:** DROP or keep (with reason)
39
-
40
- ## Duplicate / Overlapping Indexes
41
- If any indexes cover the same columns.
42
-
43
- ## Quick Wins
44
- Top 3 most impactful changes, numbered.
45
-
46
- GUIDELINES:
47
- - Recommend composite indexes when queries filter on multiple columns
48
- - Consider partial indexes for filtered queries
49
- - For ${databaseType}, use appropriate index types (btree, hash, gin, gist)
50
- - Always name indexes descriptively: idx_tablename_columns
51
- - Note if ANALYZE/VACUUM should be run first
52
- `;
53
- }
54
-
55
- export async function POST(req: NextRequest) {
56
- try {
57
- const { slowQueries, indexStats, tableStats, schemaContext, databaseType } = await req.json();
58
-
59
- const provider = await createLLMProvider();
60
- const systemPrompt = buildIndexAdvisorPrompt(databaseType);
61
-
62
- const parts: string[] = [];
63
-
64
- if (slowQueries?.length) {
65
- parts.push('## Slow Queries\n' + JSON.stringify(slowQueries.slice(0, 20), null, 2));
66
- }
67
-
68
- if (indexStats?.length) {
69
- parts.push('## Current Indexes\n' + JSON.stringify(indexStats.slice(0, 50), null, 2));
70
- }
71
-
72
- if (tableStats?.length) {
73
- parts.push('## Table Statistics\n' + JSON.stringify(tableStats.slice(0, 30), null, 2));
74
- }
75
-
76
- if (schemaContext) {
77
- parts.push('## Schema\n' + schemaContext.substring(0, 4000));
78
- }
79
-
80
- const userMessage = `Analyze the following database statistics and provide index recommendations:\n\n${parts.join('\n\n')}`;
81
-
82
- const stream = await provider.stream({
83
- messages: [
84
- { role: 'system', content: systemPrompt },
85
- { role: 'user', content: userMessage },
86
- ],
87
- });
88
-
89
- return new Response(stream, {
90
- headers: {
91
- 'Content-Type': 'text/plain; charset=utf-8',
92
- 'Transfer-Encoding': 'chunked',
93
- },
94
- });
95
- } catch (error) {
96
- return createErrorResponse(error, { route: 'api/ai/index-advisor' });
97
- }
98
- }
@@ -1,87 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { createLLMProvider } from '@/lib/llm';
3
- import { createErrorResponse } from '@/lib/api/errors';
4
-
5
- function buildNL2SQLPrompt(databaseType: string, schemaContext: string, queryLanguage?: string): string {
6
- if (queryLanguage === 'json') {
7
- return `You are an NL-to-MongoDB translator. Convert natural language questions into MongoDB JSON queries for LibreDB Studio.
8
-
9
- DATABASE: MongoDB
10
-
11
- COLLECTIONS:
12
- ${schemaContext || 'No schema available.'}
13
-
14
- QUERY FORMAT:
15
- {
16
- "collection": "collection_name",
17
- "operation": "find|aggregate|count|distinct",
18
- "filter": {},
19
- "pipeline": [],
20
- "options": { "limit": 50, "sort": {} }
21
- }
22
-
23
- RULES:
24
- 1. Return ONLY a JSON code block with the query
25
- 2. Use exact collection and field names from the schema
26
- 3. Add reasonable limits (default 50)
27
- 4. For complex questions, prefer aggregate with pipeline
28
- 5. After the JSON block, add a brief one-line explanation starting with "-- "
29
- `;
30
- }
31
-
32
- return `You are an NL-to-SQL translator. Convert natural language questions into ${databaseType || 'PostgreSQL'} SQL queries.
33
-
34
- DATABASE TYPE: ${databaseType || 'PostgreSQL'}
35
-
36
- SCHEMA:
37
- ${schemaContext || 'No schema available.'}
38
-
39
- RULES:
40
- 1. Return ONLY a SQL code block with the query
41
- 2. Use exact table and column names from the schema
42
- 3. Add reasonable LIMIT (default 50) to prevent large result sets
43
- 4. Use JOINs when the question implies data from multiple tables
44
- 5. Handle aggregations (COUNT, SUM, AVG) when asked about totals or averages
45
- 6. After the SQL block, add a brief one-line explanation starting with "-- "
46
- 7. If the question is ambiguous, make your best guess and explain your interpretation
47
- 8. Use standard ${databaseType || 'PostgreSQL'} syntax
48
- `;
49
- }
50
-
51
- export async function POST(req: NextRequest) {
52
- try {
53
- const { question, schemaContext, databaseType, queryLanguage, conversationHistory } = await req.json();
54
-
55
- if (!question) {
56
- return NextResponse.json({ error: 'Question is required' }, { status: 400 });
57
- }
58
-
59
- const provider = await createLLMProvider();
60
- const systemPrompt = buildNL2SQLPrompt(databaseType, schemaContext, queryLanguage);
61
-
62
- // Build messages with optional conversation history for multi-turn
63
- const messages: { role: 'system' | 'user' | 'assistant'; content: string }[] = [
64
- { role: 'system', content: systemPrompt },
65
- ];
66
-
67
- // Add conversation history if provided
68
- if (conversationHistory?.length) {
69
- for (const msg of conversationHistory) {
70
- messages.push({ role: msg.role, content: msg.content });
71
- }
72
- }
73
-
74
- messages.push({ role: 'user', content: question });
75
-
76
- const stream = await provider.stream({ messages });
77
-
78
- return new Response(stream, {
79
- headers: {
80
- 'Content-Type': 'text/plain; charset=utf-8',
81
- 'Transfer-Encoding': 'chunked',
82
- },
83
- });
84
- } catch (error) {
85
- return createErrorResponse(error, { route: 'api/ai/nl2sql' });
86
- }
87
- }
@@ -1,87 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { createLLMProvider } from '@/lib/llm';
3
- import { createErrorResponse } from '@/lib/api/errors';
4
-
5
- function buildSafetySystemPrompt(databaseType: string, schemaContext: string): string {
6
- return `You are a Database Safety Analyst. Your job is to analyze SQL queries BEFORE they are executed and warn the user about potential dangers.
7
-
8
- DATABASE TYPE: ${databaseType || 'PostgreSQL'}
9
-
10
- SCHEMA CONTEXT:
11
- ${schemaContext || 'No schema available.'}
12
-
13
- ANALYSIS RULES:
14
- 1. Check for destructive operations: DROP, TRUNCATE, DELETE without WHERE, UPDATE without WHERE
15
- 2. Estimate affected row counts based on schema info
16
- 3. Check for cascade effects (FK constraints)
17
- 4. Detect risky patterns: Cartesian joins, unbounded deletes, mass updates
18
- 5. Check for schema modifications that could lock tables
19
-
20
- OUTPUT FORMAT (always use this JSON structure, wrapped in a code block):
21
- \`\`\`json
22
- {
23
- "riskLevel": "safe" | "low" | "medium" | "high" | "critical",
24
- "summary": "One-line summary of the risk",
25
- "warnings": [
26
- {
27
- "type": "destructive" | "performance" | "schema" | "data_loss" | "lock",
28
- "severity": "info" | "warning" | "critical",
29
- "message": "What the issue is",
30
- "detail": "Why it matters and estimated impact"
31
- }
32
- ],
33
- "affectedRows": "estimated number or range, e.g. '~12,000' or 'all rows'",
34
- "cascadeEffects": "Description of cascade effects or 'none'",
35
- "recommendation": "What the user should do instead or how to make it safer"
36
- }
37
- \`\`\`
38
-
39
- GUIDELINES:
40
- - Be conservative: when in doubt, flag it
41
- - For SELECT queries, riskLevel is always "safe"
42
- - For INSERT, riskLevel is typically "low" unless it's INSERT INTO ... SELECT without limits
43
- - DELETE without WHERE is ALWAYS "critical"
44
- - DROP TABLE is ALWAYS "critical"
45
- - UPDATE without WHERE is ALWAYS "high"
46
- - TRUNCATE is ALWAYS "high"
47
- - ALTER TABLE on large tables (>100K rows) is "medium" due to lock time
48
- - Always return valid JSON in the code block
49
- `;
50
- }
51
-
52
- export async function POST(req: NextRequest) {
53
- try {
54
- const { query, schemaContext, databaseType } = await req.json();
55
-
56
- if (!query) {
57
- return NextResponse.json({ error: 'Query is required' }, { status: 400 });
58
- }
59
-
60
- const provider = await createLLMProvider();
61
- const systemPrompt = buildSafetySystemPrompt(databaseType, schemaContext);
62
-
63
- const userMessage = `Analyze this query for safety before execution:
64
-
65
- \`\`\`sql
66
- ${query}
67
- \`\`\`
68
-
69
- Return your analysis as a JSON code block.`;
70
-
71
- const stream = await provider.stream({
72
- messages: [
73
- { role: 'system', content: systemPrompt },
74
- { role: 'user', content: userMessage },
75
- ],
76
- });
77
-
78
- return new Response(stream, {
79
- headers: {
80
- 'Content-Type': 'text/plain; charset=utf-8',
81
- 'Transfer-Encoding': 'chunked',
82
- },
83
- });
84
- } catch (error) {
85
- return createErrorResponse(error, { route: 'api/ai/query-safety' });
86
- }
87
- }
@@ -1,62 +0,0 @@
1
- import { login } from '@/lib/auth';
2
- import { NextRequest, NextResponse } from 'next/server';
3
- import { createErrorResponse } from '@/lib/api/errors';
4
- import { logger } from '@/lib/logger';
5
-
6
- interface AuthUser {
7
- email: string;
8
- password: string;
9
- role: 'admin' | 'user';
10
- }
11
-
12
- function getAuthUsers(): AuthUser[] {
13
- const adminEmail = process.env.ADMIN_EMAIL;
14
- const adminPassword = process.env.ADMIN_PASSWORD;
15
- const userEmail = process.env.USER_EMAIL;
16
- const userPassword = process.env.USER_PASSWORD;
17
-
18
- if (process.env.NODE_ENV === 'production') {
19
- if (!adminEmail || !adminPassword || !userEmail || !userPassword) {
20
- throw new Error(
21
- 'ADMIN_EMAIL, ADMIN_PASSWORD, USER_EMAIL, and USER_PASSWORD environment variables are required in production'
22
- );
23
- }
24
- }
25
-
26
- return [
27
- {
28
- email: adminEmail || 'admin@libredb.org',
29
- password: adminPassword || 'LibreDB.2026',
30
- role: 'admin',
31
- },
32
- {
33
- email: userEmail || 'user@libredb.org',
34
- password: userPassword || 'LibreDB.2026',
35
- role: 'user',
36
- },
37
- ];
38
- }
39
-
40
- export async function POST(request: NextRequest) {
41
- try {
42
- const { email, password } = await request.json();
43
- const users = getAuthUsers();
44
-
45
- const matched = users.find(
46
- (u) => u.email === email && u.password === password
47
- );
48
-
49
- if (matched) {
50
- await login(matched.role, matched.email);
51
- return NextResponse.json({ success: true, role: matched.role });
52
- }
53
-
54
- logger.warn('Failed login attempt', { route: 'POST /api/auth/login', email });
55
- return NextResponse.json(
56
- { success: false, message: 'Invalid email or password' },
57
- { status: 401 }
58
- );
59
- } catch (error) {
60
- return createErrorResponse(error, { route: 'POST /api/auth/login' });
61
- }
62
- }
@@ -1,25 +0,0 @@
1
- import { logout } from '@/lib/auth';
2
- import { buildLogoutUrl, getPublicOrigin } from '@/lib/oidc';
3
- import { NextRequest, NextResponse } from 'next/server';
4
- import { createErrorResponse } from '@/lib/api/errors';
5
-
6
- export async function POST(request: NextRequest) {
7
- try {
8
- await logout();
9
-
10
- const authProvider = process.env.NEXT_PUBLIC_AUTH_PROVIDER || 'local';
11
- if (authProvider === 'oidc') {
12
- const origin = getPublicOrigin(request);
13
- const returnTo = `${origin}/login`;
14
- const oidcLogoutUrl = buildLogoutUrl(returnTo);
15
-
16
- if (oidcLogoutUrl) {
17
- return NextResponse.json({ success: true, redirectUrl: oidcLogoutUrl });
18
- }
19
- }
20
-
21
- return NextResponse.json({ success: true });
22
- } catch (error) {
23
- return createErrorResponse(error, { route: 'POST /api/auth/logout' });
24
- }
25
- }
@@ -1,10 +0,0 @@
1
- import { getSession } from '@/lib/auth';
2
- import { NextResponse } from 'next/server';
3
-
4
- export async function GET() {
5
- const session = await getSession();
6
- if (!session) {
7
- return NextResponse.json({ authenticated: false }, { status: 401 });
8
- }
9
- return NextResponse.json({ authenticated: true, user: session });
10
- }
@@ -1,82 +0,0 @@
1
- import { NextResponse } from 'next/server';
2
- import { cookies } from 'next/headers';
3
- import { login } from '@/lib/auth';
4
- import {
5
- getOIDCConfig,
6
- discoverProvider,
7
- exchangeCode,
8
- decryptState,
9
- mapOIDCRole,
10
- getPublicOrigin,
11
- } from '@/lib/oidc';
12
- import { logger } from '@/lib/logger';
13
-
14
- export async function GET(request: Request) {
15
- const origin = getPublicOrigin(request);
16
-
17
- try {
18
- const cookieStore = await cookies();
19
- const stateCookie = cookieStore.get('oidc-state')?.value;
20
-
21
- if (!stateCookie) {
22
- return NextResponse.redirect(`${origin}/login?error=oidc_state_missing`);
23
- }
24
-
25
- // Decrypt and validate state
26
- let oidcState;
27
- try {
28
- oidcState = await decryptState(stateCookie);
29
- } catch (decryptError) {
30
- logger.warn('OIDC state decryption failed', { route: 'GET /api/auth/oidc/callback', error: decryptError instanceof Error ? decryptError.message : 'Unknown' });
31
- cookieStore.delete('oidc-state');
32
- return NextResponse.redirect(`${origin}/login?error=oidc_state_invalid`);
33
- }
34
-
35
- // Exchange code for tokens
36
- const oidcConfig = getOIDCConfig();
37
- const config = await discoverProvider(oidcConfig);
38
-
39
- // Reconstruct callback URL with public origin for token exchange
40
- const internalUrl = new URL(request.url);
41
- const callbackUrl = new URL(
42
- `${internalUrl.pathname}${internalUrl.search}`,
43
- origin
44
- );
45
-
46
- const claims = await exchangeCode(
47
- config,
48
- callbackUrl,
49
- oidcState.code_verifier,
50
- oidcState.state,
51
- oidcState.nonce
52
- );
53
-
54
- if (!claims) {
55
- logger.warn('OIDC callback: no claims returned from token exchange', { route: 'oidc/callback' });
56
- return NextResponse.redirect(`${origin}/login?error=oidc_no_claims`);
57
- }
58
-
59
- // Map role from claims
60
- const role = mapOIDCRole(
61
- claims as Record<string, unknown>,
62
- oidcConfig.roleClaim,
63
- oidcConfig.adminRoles
64
- );
65
-
66
- // Create local JWT session (same as password login)
67
- const username = claims.email || claims.preferred_username || claims.sub || role;
68
- await login(role, username);
69
-
70
- // Clean up state cookie
71
- cookieStore.delete('oidc-state');
72
-
73
- // Redirect based on role
74
- return NextResponse.redirect(
75
- `${origin}${role === 'admin' ? '/admin' : '/'}`
76
- );
77
- } catch (error) {
78
- logger.error('OIDC callback error', error, { route: 'GET /api/auth/oidc/callback' });
79
- const errorCode = error instanceof Error && error.message.includes('config') ? 'oidc_config' : 'oidc_failed';
80
- return NextResponse.redirect(`${origin}/login?error=${errorCode}`);
81
- }
82
- }