Skip to content

feat: CLI: Dynamic connector load - #407

Merged
ilyabo merged 15 commits into
mainfrom
dynamic-connector-load
Mar 22, 2026
Merged

ilyabo merged 15 commits into
mainfrom
dynamic-connector-load

Conversation

@ilyabo

@ilyabo ilyabo commented Feb 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Driver installation dialog added with copyable install/launch commands, status badges, and toast feedback.
    • UI spacing adjusted for action controls and dialog surfaced in data sources.
  • New Integrations

    • PostgreSQL and Snowflake connectors added with runtime dependency checks and install guidance.
  • Refactor

    • Database bridge reorganized into modular connectors, a registry, and a factory exposing runtime diagnostics.
  • Tests

    • Tests updated/added for diagnostics, duplicate IDs, and connector behaviors.
  • Documentation

    • CLI config doc updated to clarify default config path and override flags.

ilyabo added 2 commits March 1, 2026 00:12
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
@coderabbitai

coderabbitai Bot commented Feb 28, 2026 •

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a modular DB bridge package (types, registry, factory, base connector, Postgres & Snowflake connectors, utils), removes the old monolithic Python db_bridge module, surfaces per-connector diagnostics in the runtime config, wires diagnostics into the frontend store, and adds a ConnectorDriversDialog UI that shows missing drivers and install commands.

Changes

Cohort / File(s) Summary
Frontend: Connector UI
apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx, apps/sqlrooms-cli-ui/src/components/DataSourcesPanel.tsx, apps/sqlrooms-cli-ui/src/components/SheetsPanel.tsx
New ConnectorDriversDialog component renders runtime diagnostics, status badges, error messages, optional requiredPackages, and copyable install commands; integrated into DataSourcesPanel and layout tweaked in SheetsPanel.
Frontend: Runtime types & store
apps/sqlrooms-cli-ui/src/runtimeConfig.ts, apps/sqlrooms-cli-ui/src/store.ts
Adds dbBridge.diagnostics typing; seeds connectorDriverDiagnostics in RoomState from runtime config; updates getRuntimeBridgeConfig() return type; store setup skips registering bridge connections flagged unavailable.
Python: New modular db_bridge package (API + registry)
python/sqlrooms-cli/sqlrooms/web/db_bridge/types.py, .../registry.py, .../factory.py, .../__init__.py, .../launcher.py
Introduces DbBridgeConnector Protocol, DbBridgeRegistry with delegation and runtime_diagnostics(), build_cli_db_bridge_registry() factory, consolidated exports, and exposes diagnostics via launcher runtime config.
Python: Connectors & base
python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/base.py, .../connectors/postgres.py, .../connectors/snowflake.py, .../connectors/__init__.py
Adds BaseSqlBridgeConnector and concrete Postgres/Snowflake connectors with settings dataclasses, lazy dependency checks (dependency_diagnostics), _connect, and list_catalog implementations; provides install command guidance for missing deps.
Python: Utils & serialization
python/sqlrooms-cli/sqlrooms/web/db_bridge/utils.py
Adds helpers: cursor_columns, rows_to_json_rows, rows_to_arrow_bytes (PyArrow IPC), and quoted_ident.
Python: Remove monolith
python/sqlrooms-cli/sqlrooms/web/db_bridge.py (deleted)
Removes previous monolithic DB bridge module; functionality moved into modular package files.
Tests
python/sqlrooms-cli/tests/test_db_bridge.py, python/sqlrooms-cli/tests/test_launcher.py
Adds/updates tests for registry behaviors, runtime diagnostics, dependency diagnostics, stream_arrow_batches, duplicate connection-id rejection, and asserts diagnostics appear in launcher config responses.
CLI config simplification
python/sqlrooms-cli/sqlrooms/cli.py, python/sqlrooms-cli/tests/test_cli.py, python/sqlrooms-cli/README.md
Replaces multi-candidate config discovery with single default ~/.sqlrooms/config.toml and --config handling; updates tests and docs accordingly.
Docs / Guidance
AGENTS.md
Adds guidance to avoid returning derived arrays/objects/functions directly from Zustand selectors; prefer selecting raw state and deriving with React.useMemo.

Sequence Diagram(s)

sequenceDiagram
    participant Browser as Browser/UI
    participant UI as ConnectorDriversDialog
    participant API as Launcher/API
    participant Registry as DbBridgeRegistry
    participant Connector as BridgeConnector

    Browser->>API: GET /runtime-config
    API->>Registry: runtime_diagnostics()
    Registry->>Connector: dependency_diagnostics()
    Connector-->>Registry: { id, engineId, title, available, error?, requiredPackages?, installCommands? }
    Registry-->>API: diagnostics array
    API-->>Browser: runtime config (includes dbBridge.diagnostics)
    Browser->>UI: render diagnostics
    UI->>Browser: display install commands & copy actions
    Browser->>UI: click copy -> clipboard + toast
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

  • feat: Snowflake connector integration #401: Implements a DB bridge framework (registry, connector types, Postgres/Snowflake connectors, runtime diagnostics) that closely overlaps the modularization and diagnostics exposed here.

Poem

🐇 I sniffed the runtime, found a trace,

Drivers missing in a hidden space.
Copy the command, a tiny hop of glee,
Postgres and Snowflake now dance with me.
Pip, uvx — bridges set free.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 1.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: CLI: Dynamic connector load' accurately summarizes the main feature: enabling dynamic loading of database connectors in the CLI based on runtime diagnostics.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dynamic-connector-load

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

CodeRabbit can enforce grammar and style rules using `languagetool`.

Configure the reviews.tools.languagetool setting to enable/disable rules and categories. Refer to the LanguageTool Community to learn more.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx (1)

11-15: Use selector-based store access instead of direct runtimeConfig import.

At Line [11], this component reads config outside Zustand selector patterns, which can bypass reactive updates and guideline-required access patterns. Please source diagnostics via a selector/custom hook, then derive missingConnectors from that selected slice.

As per coding guidelines, **/*.{ts,tsx}: “Use Zustand selectors with memoization to avoid unnecessary re-renders …” and “Use custom Zustand selectors for accessing DuckDB store state … rather than direct connector access”.

Also applies to: 72-78

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx` around lines
11 - 15, This component directly imports runtimeConfig and computes
ConnectorDiagnostic/missingConnectors from it, bypassing Zustand selector
patterns; replace direct runtimeConfig usage by creating/using a Zustand
selector or custom hook (e.g., useRuntimeConfig or a selector like
selectDbDiagnostics) to read the diagnostics slice reactively, then compute
missingConnectors from that selected diagnostics value inside
ConnectorDriversDialog (also update the logic around the existing
missingConnectors usage at the section referenced around lines 72-78) so the
component uses memoized selector access and re-renders correctly; reference
runtimeConfig, ConnectorDiagnostic, and missingConnectors when locating the code
to change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/snowflake.py`:
- Around line 72-75: In dependency_diagnostics, guard the
importlib.util.find_spec call for "snowflake.connector" against parent-package
import errors by wrapping the lookup in a try/except ModuleNotFoundError (or
first checking find_spec("snowflake") and only then checking
"snowflake.connector"); on exception or missing spec return {"available": False,
"reason": "<exception message>"} (or similar) so dependency_diagnostics reports
availability instead of raising; update the dependency_diagnostics function to
catch ModuleNotFoundError and return a false/diagnostic dict referencing the
"snowflake.connector" lookup.

In `@python/sqlrooms-cli/sqlrooms/web/db_bridge/registry.py`:
- Around line 17-18: The register method on the registry currently overwrites an
existing connector silently (self._connectors[connector.connection_id] =
connector); change register (method register, type DbBridgeConnector and dict
_connectors) to detect duplicates and prevent silent overwrite by checking if
connector.connection_id already exists and raising a clear exception (e.g.,
ValueError) or returning an error, so callers must explicitly choose to replace
via a dedicated replace/update method if needed; update register to perform the
existence check and raise with a descriptive message referencing the duplicate
connection_id.

---

Nitpick comments:
In `@apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx`:
- Around line 11-15: This component directly imports runtimeConfig and computes
ConnectorDiagnostic/missingConnectors from it, bypassing Zustand selector
patterns; replace direct runtimeConfig usage by creating/using a Zustand
selector or custom hook (e.g., useRuntimeConfig or a selector like
selectDbDiagnostics) to read the diagnostics slice reactively, then compute
missingConnectors from that selected diagnostics value inside
ConnectorDriversDialog (also update the logic around the existing
missingConnectors usage at the section referenced around lines 72-78) so the
component uses memoized selector access and re-renders correctly; reference
runtimeConfig, ConnectorDiagnostic, and missingConnectors when locating the code
to change.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1ccbe61 and 642f688.

📒 Files selected for processing (16)
  • apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx
  • apps/sqlrooms-cli-ui/src/components/SheetsPanel.tsx
  • apps/sqlrooms-cli-ui/src/runtimeConfig.ts
  • apps/sqlrooms-cli-ui/src/store.ts
  • python/sqlrooms-cli/sqlrooms/web/db_bridge.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/__init__.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/__init__.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/postgres.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/snowflake.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/factory.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/registry.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/types.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/utils.py
  • python/sqlrooms-cli/sqlrooms/web/launcher.py
  • python/sqlrooms-cli/tests/test_db_bridge.py
  • python/sqlrooms-cli/tests/test_launcher.py
💤 Files with no reviewable changes (1)
  • python/sqlrooms-cli/sqlrooms/web/db_bridge.py

Comment thread python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/snowflake.py
Comment thread python/sqlrooms-cli/sqlrooms/web/db_bridge/registry.py
@ilyabo ilyabo changed the title feat: Dynamic connector load feat: CLI: Dynamic connector load Mar 1, 2026
ilyabo added 2 commits March 1, 2026 10:15
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/snowflake.py (1)

73-116: Consider extracting shared install commands to reduce duplication.

The installCommands dict is duplicated between the exception handler (lines 85-96) and the unavailable case (lines 104-115). Consider extracting this to a constant or helper.

♻️ Optional refactor to reduce duplication
+_SNOWFLAKE_UNAVAILABLE_DIAGNOSTICS = {
+    "available": False,
+    "error": "Missing Python dependency: snowflake-connector-python",
+    "requiredPackages": ["snowflake-connector-python>=4.3.0"],
+    "installCommands": {
+        "uvProject": "uv sync --extra snowflake",
+        "uvxRelaunch": (
+            'uvx --from "sqlrooms-cli[snowflake]" sqlrooms '
+            "--db-path :memory:"
+        ),
+        "uvxWith": (
+            'uvx --from sqlrooms-cli --with '
+            '"snowflake-connector-python>=4.3.0" '
+            "sqlrooms --db-path :memory:"
+        ),
+    },
+}
+
 def dependency_diagnostics(self) -> dict[str, Any]:
     try:
         available = importlib.util.find_spec("snowflake.connector") is not None
     except ModuleNotFoundError as exc:
-        return {
-            "available": False,
-            "reason": (
+        return {
+            **_SNOWFLAKE_UNAVAILABLE_DIAGNOSTICS,
+            "reason": (
                 f"Failed to inspect dependency via "
                 f"find_spec('snowflake.connector'): {exc}"
             ),
-            "error": "Missing Python dependency: snowflake-connector-python",
-            ...
         }
     if available:
         return {"available": True}
-    return {
-        "available": False,
-        ...
-    }
+    return dict(_SNOWFLAKE_UNAVAILABLE_DIAGNOSTICS)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/snowflake.py` around
lines 73 - 116, The duplicated installCommands dict in dependency_diagnostics
should be extracted to a single constant or helper (e.g.,
SNOWFLAKE_INSTALL_COMMANDS or get_snowflake_install_commands()) and reused in
both the ModuleNotFoundError return and the unavailable return; update
dependency_diagnostics to reference that constant/helper instead of inlining the
same dict twice and keep the other returned fields identical (available, error,
requiredPackages) while reusing the shared install commands.
apps/sqlrooms-cli-ui/src/store.ts (1)

150-155: Extract a shared diagnostics type to avoid schema drift.

Line [150] defines a second inline diagnostics shape that already exists (richer) at Line [80]. Keeping both inline increases maintenance risk.

♻️ Proposed refactor
+type ConnectorDriverDiagnostic = {
+  id: string;
+  engineId: string;
+  title: string;
+  available: boolean;
+  error?: string;
+  reason?: string;
+  requiredPackages?: string[];
+  installCommands?: {
+    uvProject?: string;
+    uvxRelaunch?: string;
+    uvxWith?: string;
+  };
+};

 export type RoomState = RoomShellSliceState &
   AiSliceState &
   SqlEditorSliceState &
   AiSettingsSliceState &
   CellsSliceState &
   NotebookSliceState &
   CanvasSliceState &
   WebContainerSliceState & {
-    connectorDriverDiagnostics: Array<{
-      id: string;
-      engineId: string;
-      title: string;
-      available: boolean;
-      error?: string;
-      reason?: string;
-      requiredPackages?: string[];
-      installCommands?: {
-        uvProject?: string;
-        uvxRelaunch?: string;
-        uvxWith?: string;
-      };
-    }>;
+    connectorDriverDiagnostics: ConnectorDriverDiagnostic[];
 ...
 function getRuntimeBridgeConfig():
   | {
       id: string;
       connections: Array<{
         id: string;
         engineId: string;
         title: string;
         runtimeSupport?: 'browser' | 'server' | 'both';
         requiresBridge?: boolean;
         bridgeId?: string;
         isCore?: boolean;
       }>;
-      diagnostics?: Array<{
-        id: string;
-        engineId: string;
-        title: string;
-        available: boolean;
-      }>;
+      diagnostics?: ConnectorDriverDiagnostic[];
     }
   | undefined {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/store.ts` around lines 150 - 155, Replace the
duplicated inline diagnostics shape with the shared diagnostics type already
declared earlier in this file: remove the inline definition under the
diagnostics? property and reference the existing richer Diagnostics type (or the
exact exported/interface name used above) so both places use the same type;
update the diagnostics?: Array<...> usage to diagnostics?: Diagnostics[] (or the
exact identifier) and remove the redundant inline shape to prevent schema drift.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/sqlrooms-cli-ui/src/store.ts`:
- Around line 277-290: The diagnostics map currently keys only by id which can
collide across engines; update construction of diagnosticsById (from
bridgeConfig.diagnostics) to use a composite key combining item.id and
item.engineId (e.g., `${item.id}:${item.engineId}`) and change the lookup when
iterating bridgeConfig.connections to use the same composite key built from
connection.id and connection.engineId so diagnostics lookup matches per-engine
availability; keep the rest of the logic (e.g., skip when diagnostics.available
=== false) unchanged and reference diagnosticsById, bridgeConfig.diagnostics,
bridgeConfig.connections, connection.id, and connection.engineId when making the
change.

In `@python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/postgres.py`:
- Around line 63-64: Wrap the call to cur.fetchone() used for "SELECT
current_database()" with a defensive check: assign result = cur.fetchone(),
verify result is not None before indexing, and if it is None either raise a
clear exception or set current_db to a safe fallback (e.g. None or an explicit
error message) so the subsequent current_db = result[0] cannot raise a
TypeError; update the code around cur.execute("SELECT current_database()") and
the current_db assignment to perform this check and handle the None case
gracefully.

---

Nitpick comments:
In `@apps/sqlrooms-cli-ui/src/store.ts`:
- Around line 150-155: Replace the duplicated inline diagnostics shape with the
shared diagnostics type already declared earlier in this file: remove the inline
definition under the diagnostics? property and reference the existing richer
Diagnostics type (or the exact exported/interface name used above) so both
places use the same type; update the diagnostics?: Array<...> usage to
diagnostics?: Diagnostics[] (or the exact identifier) and remove the redundant
inline shape to prevent schema drift.

In `@python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/snowflake.py`:
- Around line 73-116: The duplicated installCommands dict in
dependency_diagnostics should be extracted to a single constant or helper (e.g.,
SNOWFLAKE_INSTALL_COMMANDS or get_snowflake_install_commands()) and reused in
both the ModuleNotFoundError return and the unavailable return; update
dependency_diagnostics to reference that constant/helper instead of inlining the
same dict twice and keep the other returned fields identical (available, error,
requiredPackages) while reusing the shared install commands.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 642f688 and 070ec8f.

📒 Files selected for processing (8)
  • apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx
  • apps/sqlrooms-cli-ui/src/runtimeConfig.ts
  • apps/sqlrooms-cli-ui/src/store.ts
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/base.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/postgres.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/snowflake.py
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/registry.py
  • python/sqlrooms-cli/tests/test_db_bridge.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • apps/sqlrooms-cli-ui/src/runtimeConfig.ts
  • apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx
  • python/sqlrooms-cli/sqlrooms/web/db_bridge/registry.py

Comment thread apps/sqlrooms-cli-ui/src/store.ts
Comment thread python/sqlrooms-cli/sqlrooms/web/db_bridge/connectors/postgres.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx (1)

146-150: Consider pluralizing "Required package" when there are multiple packages.

The label says "Required package:" but requiredPackages is an array that could contain multiple items.

📝 Suggested fix
               {!diagnostic.available && diagnostic.requiredPackages?.length ? (
                 <div className="mt-2 text-xs">
-                  Required package:{' '}
+                  Required package{diagnostic.requiredPackages.length > 1 ? 's' : ''}:{' '}
                   <code>{diagnostic.requiredPackages.join(', ')}</code>
                 </div>
               ) : null}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx` around lines
146 - 150, The label "Required package:" should be pluralized when
diagnostic.requiredPackages contains more than one item; update the JSX in
ConnectorDriversDialog (the block rendering {!diagnostic.available &&
diagnostic.requiredPackages?.length}) to choose between "Required package:" and
"Required packages:" based on diagnostic.requiredPackages.length (e.g.,
conditional string or ternary) while keeping the existing
<code>{diagnostic.requiredPackages.join(', ')}</code> output.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx`:
- Around line 146-150: The label "Required package:" should be pluralized when
diagnostic.requiredPackages contains more than one item; update the JSX in
ConnectorDriversDialog (the block rendering {!diagnostic.available &&
diagnostic.requiredPackages?.length}) to choose between "Required package:" and
"Required packages:" based on diagnostic.requiredPackages.length (e.g.,
conditional string or ternary) while keeping the existing
<code>{diagnostic.requiredPackages.join(', ')}</code> output.

ℹ️ Review info

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 445230f and cf9a208.

📒 Files selected for processing (4)
  • AGENTS.md
  • apps/sqlrooms-cli-ui/src/components/ConnectorDriversDialog.tsx
  • apps/sqlrooms-cli-ui/src/components/DataSourcesPanel.tsx
  • apps/sqlrooms-cli-ui/src/components/SheetsPanel.tsx
✅ Files skipped from review due to trivial changes (1)
  • AGENTS.md

ilyabo added 7 commits March 21, 2026 22:42
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
Signed-off-by: Ilya Boyandin <[email protected]>
@ilyabo
ilyabo merged commit e167396 into main Mar 22, 2026
4 checks passed
@ilyabo
ilyabo deleted the dynamic-connector-load branch March 22, 2026 08:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant