Skip to content

enhancement(marketplace): extend SDUI RPC protocol with getCapabilities, getServerStats, getObjectDDL, and cancelQuery #323

Description

@ZhuchkaTriplesix

Part of Epic #322

Описание задачи

В рамках приведения всех драйверов и плагинов к Единому UI-стандарту (Universal UI Standard) необходимо расширить JSON-RPC протокол взаимодействия хоста с внешними расширениями (database_driver).

Сейчас ExtensionDriverSession (lib/core/extensions/extension_driver_session.dart) поддерживает только базовые методы (db.connect, db.disconnect, db.query, db.getSchemaTree, db.expandTreeNode). Из-за этого расширения не могут отображать живую статистику сервера, отдавать DDL структуры таблиц/функций и прерывать зависшие запросы.

Зачем

  • Отображение вкладки Overview / Server Stats для внешних БД (ClickHouse, DuckDB, Snowflake).
  • Поддержка кнопок DDL / Structure во вьюере таблиц и открытие процедур в RoutineView.
  • Возможность отмены (Cancel / Stop) тяжёлых аналитических запросов из UI.
  • Определение транзакционных возможностей драйвера (чтобы показывать или скрывать кнопки Begin/Commit/Rollback).

Предлагаемые новые RPC-методы (Block D)

  1. db.getCapabilities → возвращает флаги возможностей движка:
    {
      "supportsTransactions": false,
      "supportsCancel": true,
      "supportsDDLInspection": true,
      "supportsPrivileges": false,
      "hasServerStats": true
    }
  2. db.getServerStats → возвращает стандартизированный набор метрик (версия, аптайм, активные сессии, метрики памяти/диска) для рендеринга в ExtensionStatsView.
  3. db.getObjectDDL (или db.getObjectMetadata) → принимает {"connectionId": 123, "nodeId": "...", "nodeType": "table"|"routine"|"view"} и возвращает DDL-скрипт (CREATE TABLE/VIEW/FUNCTION ...) и список колонок/параметров.
  4. db.cancelQuery → принимает {"connectionId": 123, "queryId": "..."} для немедленного прерывания выполняемого запроса (аналог PostgresService.interrupt).

Технические требования

  • Добавить методы обёртки в ExtensionDriverSession (getCapabilities, getServerStats, getObjectDDL, cancelQuery).
  • Описать модели данных/DTO для возвращаемых результатов в lib/core/extensions/models/.
  • Обеспечить безопасный fallback (если плагин старой версии и не реализует метод, возвращать дефолтные capabilities/ошибку без падения сессии).
  • Написать юнит-тесты с моком PluginRpcBridge для проверки вызовов новых методов.

Место в коде (ориентир)

  • lib/core/extensions/extension_driver_session.dart
  • lib/core/extensions/rpc/plugin_rpc_bridge.dart
  • Документация протокола: docs/architecture.md / obsidian/Querya/Querya/04 — Расширения/Блок D — External Plugin.md

Acceptance Criteria

  • ExtensionDriverSession корректно отправляет запросы db.getCapabilities, db.getServerStats, db.getObjectDDL, db.cancelQuery через PluginRpcBridge.
  • При отсутствии метода на стороне расширения возвращается понятный fallback без падения UI.
  • Покрыто юнит-тестами.

Scope

  • Scope: desktop / plugin
  • Component: Extensions / RPC Bridge / Marketplace
  • Kind: enhancement

Metadata

Metadata

Labels

coreCore library logic and servicesenhancementNew feature or requestmarketplaceExtensions marketplace, ExtensionManifest

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions