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

@@ -0,0 +1,8 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $ConnectionID = {
type: 'string',
format: 'uuid',
} as const;
@@ -0,0 +1,38 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $CreateDBConnectionRequest = {
properties: {
name: {
type: 'string',
isRequired: true,
},
db_type: {
type: 'Enum',
isRequired: true,
},
host: {
type: 'string',
isRequired: true,
},
port: {
type: 'number',
},
database: {
type: 'string',
},
username: {
type: 'string',
},
password: {
type: 'string',
},
ssl: {
type: 'boolean',
},
driver_profile: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,52 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBConnection = {
properties: {
id: {
type: 'string',
isRequired: true,
format: 'uuid',
},
project_id: {
type: 'string',
isRequired: true,
format: 'uuid',
},
name: {
type: 'string',
isRequired: true,
},
db_type: {
type: 'string',
isRequired: true,
},
host: {
type: 'string',
isRequired: true,
},
port: {
type: 'number',
isNullable: true,
},
database: {
type: 'string',
},
username: {
type: 'string',
},
ssl: {
type: 'boolean',
isNullable: true,
},
is_managed: {
type: 'boolean',
isRequired: true,
},
has_password: {
type: 'boolean',
isRequired: true,
},
},
} as const;
@@ -0,0 +1,15 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBConnectionListResponse = {
properties: {
items: {
type: 'array',
contains: {
type: 'DBConnection',
},
isRequired: true,
},
},
} as const;
@@ -0,0 +1,15 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBConnectionTestResult = {
properties: {
ok: {
type: 'boolean',
isRequired: true,
},
error: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,18 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBDatabaseListResponse = {
properties: {
databases: {
type: 'array',
contains: {
type: 'string',
},
isRequired: true,
},
raw: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,14 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBDescribeResponse = {
properties: {
table: {
type: 'DBMDTable',
},
raw: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,28 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBMDTable = {
properties: {
columns: {
type: 'array',
contains: {
type: 'string',
},
isRequired: true,
},
rows: {
type: 'array',
contains: {
type: 'array',
contains: {
type: 'string',
},
},
isRequired: true,
},
note: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,16 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBObject = {
properties: {
name: {
type: 'string',
isRequired: true,
},
kind: {
type: 'string',
isRequired: true,
},
},
} as const;
@@ -0,0 +1,15 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBQueryRequest = {
properties: {
sql: {
type: 'string',
isRequired: true,
},
database: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,14 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBQueryResponse = {
properties: {
table: {
type: 'DBMDTable',
},
raw: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,15 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBRedisRequest = {
properties: {
command: {
type: 'string',
isRequired: true,
},
db: {
type: 'number',
},
},
} as const;
@@ -0,0 +1,12 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBRedisResponse = {
properties: {
output: {
type: 'string',
isRequired: true,
},
},
} as const;
@@ -0,0 +1,12 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBSchemaContextResponse = {
properties: {
context: {
type: 'string',
isRequired: true,
},
},
} as const;
@@ -0,0 +1,20 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBTableListResponse = {
properties: {
tables: {
type: 'array',
contains: {
type: 'DBObject',
},
},
table: {
type: 'DBMDTable',
},
raw: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,21 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DBXStatus = {
properties: {
available: {
type: 'boolean',
isRequired: true,
},
command: {
type: 'string',
},
reason: {
type: 'string',
},
install: {
type: 'string',
},
},
} as const;
@@ -0,0 +1,7 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $DatabaseQuery = {
type: 'string',
} as const;
@@ -0,0 +1,7 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $SchemaQuery = {
type: 'string',
} as const;
@@ -0,0 +1,7 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export const $TableQuery = {
type: 'string',
} as const;