feat: phase 2 databases via DBX (v0.3.0)

- dbx-mcp persistent stdio subprocess in Go backend (internal/dbx),
  lazy start + single retry, tool failures surface as 502
- core.db_connections registry: per-project connections, credentials
  server-side only, managed entries protected (409)
- platform-postgres + platform-dragonfly auto-register per project
- REST proxy: list/create/delete/test, databases, tables, describe,
  schema context, SQL query, redis command
- Databases page: connection list, schema/table browser, column
  inspector, SQL editor with result grid + row detail, redis console
- backend image moved to debian-slim for glibc; pinned dbx release
  with SHA256 verification

Authored By: TDvorak <[email protected]>
This commit is contained in:
Tomas Dvorak committed 2026-09-16 14:54:33 +02:00
1 parent 420502eec1
commit 627bd89d5e
71 files changed
+3685 -49

No files matched your search

+6 -2
View File
@@ -7,6 +7,7 @@ import {
IconMembers,
IconStorage,
IconCollections,
IconDatabases,
IconAudit,
IconAuth,
IconSettings,
@@ -24,6 +25,7 @@ export type ViewType =
| "members"
| "storage"
| "collections"
| "databases"
| "auth"
| "audit"
| "settings";
@@ -37,14 +39,15 @@ interface NavEntry {
const projectNav: NavEntry[] = [
{ id: "dashboard", label: "Overview", icon: IconOverview },
{ id: "databases", label: "Databases", shortLabel: "DBs", icon: IconDatabases },
{ id: "storage", label: "Storage", icon: IconStorage },
{ id: "collections", label: "Collections", icon: IconCollections },
{ id: "auth", label: "Authentication", shortLabel: "Auth", icon: IconAuth },
{ id: "audit", label: "Audit log", shortLabel: "Audit", icon: IconAudit },
];
// Instagram-style bottom bar caps at five slots — Audit stays reachable via Menu.
const bottomNav = projectNav.slice(0, 4);
// Instagram-style bottom bar caps at five slots — Collections and Audit stay reachable via Menu.
const bottomNav: NavEntry[] = projectNav.filter((e) => e.id !== "collections");
const workspaceNav: NavEntry[] = [
{ id: "projects", label: "Projects", icon: IconProjects },
@@ -80,6 +83,7 @@ const viewTitle: Record<ViewType, string> = {
members: "Members",
storage: "Storage",
collections: "Collections",
databases: "Databases",
auth: "Authentication",
audit: "Audit log",
settings: "Settings",