Connector calls, semantic rules, and DuckDB memory keep long runs stable, and stream retry stops chats from stalling. Co-authored-by: Cursor <cursoragent@cursor.com>
72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
"""Resolve attached connector ids into MCP ids and public native instances."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import Any, Dict, List, Optional, Tuple
|
|
|
|
from kamidso.native_connectors.executor import default_row_loader
|
|
from kamidso.native_connectors.flags import native_connectors_v1_enabled
|
|
from kamidso.native_connectors.registry import get_registry
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def load_public_instance(connector_id: str) -> Optional[Dict[str, Any]]:
|
|
row = default_row_loader(connector_id)
|
|
if row is None:
|
|
return None
|
|
return {
|
|
"connector_id": row.get("connector_id"),
|
|
"connector_type": row.get("connector_type"),
|
|
"display_name": row.get("display_name") or "",
|
|
"status": row.get("status") or "",
|
|
"user_name": row.get("user_name"),
|
|
"sys_code": row.get("sys_code"),
|
|
}
|
|
|
|
|
|
def partition_connector_ids(
|
|
connector_ids: List[str],
|
|
) -> Tuple[List[str], List[Dict[str, Any]]]:
|
|
"""Split selected ids. Native ids never go to the MCP tool selector."""
|
|
if not connector_ids:
|
|
return [], []
|
|
if not native_connectors_v1_enabled():
|
|
return list(connector_ids), []
|
|
registry = get_registry()
|
|
mcp_ids: List[str] = []
|
|
native: List[Dict[str, Any]] = []
|
|
for connector_id in connector_ids:
|
|
row = load_public_instance(connector_id)
|
|
if row is None or not registry.contains(str(row.get("connector_type") or "")):
|
|
mcp_ids.append(connector_id)
|
|
continue
|
|
if str(row.get("status") or "") != "active":
|
|
logger.warning(
|
|
"Skipping inactive native connector '%s'", connector_id
|
|
)
|
|
continue
|
|
native.append(
|
|
{
|
|
"connector_id": row["connector_id"],
|
|
"connector_type": row["connector_type"],
|
|
"display_name": row["display_name"],
|
|
}
|
|
)
|
|
return mcp_ids, native
|
|
|
|
|
|
def install_native_connectors(
|
|
react_state: Dict[str, Any],
|
|
instances: List[Dict[str, Any]],
|
|
) -> None:
|
|
react_state["native_connectors"] = {
|
|
str(item["connector_id"]): {
|
|
"connector_id": item["connector_id"],
|
|
"connector_type": item["connector_type"],
|
|
"display_name": item.get("display_name") or item["connector_id"],
|
|
}
|
|
for item in instances
|
|
}
|