mcp-mesh 0.6.1__tar.gz → 0.6.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/.gitignore +1 -1
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/PKG-INFO +1 -1
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/__init__.py +1 -1
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/mesh_llm_agent_injector.py +53 -9
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_dependency_resolution.py +54 -21
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/dependency_resolution.py +43 -26
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/pyproject.toml +4 -4
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/LICENSE +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/README.md +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/async_mcp_client.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/base_injector.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/decorator_registry.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/dependency_injector.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/full_mcp_proxy.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/http_wrapper.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/llm_config.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/llm_errors.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/mcp_client_proxy.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/mesh_llm_agent.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/base_provider_handler.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/claude_handler.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/generic_handler.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/openai_handler.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/provider_handler_registry.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/response_parser.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/self_dependency_proxy.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/session_aware_client.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/session_manager.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/signature_analyzer.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/tool_executor.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/tool_schema_builder.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/unified_mcp_proxy.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/.openapi-generator/FILES +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/.openapi-generator/VERSION +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/.openapi-generator-ignore +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/agents_api.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/health_api.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/tracing_api.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api_client.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/configuration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/exceptions.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_info.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_metadata.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_metadata_dependencies_inner.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_metadata_dependencies_inner_one_of.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_registration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_registration_metadata.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agents_list_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/capability_info.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/decorator_agent_metadata.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/decorator_agent_request.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/decorator_info.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/dependency_info.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/dependency_resolution_info.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/error_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/health_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/heartbeat_request.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/heartbeat_request_metadata.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/heartbeat_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_provider.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_filter.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_filter_filter_inner.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_filter_filter_inner_one_of.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/llm_tool_info.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_agent_register_metadata.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_agent_registration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_registration_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_registration_response_dependencies_resolved_value_inner.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_tool_dependency_registration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_tool_register_metadata.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/mesh_tool_registration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/registration_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/resolved_llm_provider.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/rich_dependency.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/root_response.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/standardized_dependency.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/trace_event.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/py.typed +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/rest.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_health_check.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_send.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_lifespan_integration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/api_pipeline.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/api_server_setup.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/fastapi_discovery.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/middleware_integration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/route_collection.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_startup/route_integration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/fast_heartbeat_check.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/heartbeat_orchestrator.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/heartbeat_pipeline.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/heartbeat_send.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/lifespan_integration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/llm_tools_resolution.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/registry_connection.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/configuration.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/decorator_collection.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/fastapiserver_setup.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/fastmcpserver_discovery.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/heartbeat_loop.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/heartbeat_preparation.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/server_discovery.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/startup_orchestrator.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_startup/startup_pipeline.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/base_step.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/mesh_pipeline.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/pipeline_types.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/shared/registry_connection.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/config_resolver.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/content_extractor.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/defaults.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/fast_heartbeat_status.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/fastapi_middleware_manager.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/health_check_cache.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/host_resolver.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/logging_config.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/registry_client_wrapper.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/server_discovery.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/simple_shutdown.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/sse_parser.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/shared/support_types.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/agent_context_helper.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/context.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/execution_tracer.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/fastapi_tracing_middleware.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/redis_metadata_publisher.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/trace_context_helper.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/tracing/utils.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/utils/fastmcp_schema_extractor.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/__init__.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/decorators.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/helpers.py +0 -0
- {mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/mesh/types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-mesh
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Kubernetes-native platform for distributed MCP applications
|
|
5
5
|
Project-URL: Homepage, https://github.com/dhyansraj/mcp-mesh
|
|
6
6
|
Project-URL: Documentation, https://github.com/dhyansraj/mcp-mesh/tree/main/docs
|
|
@@ -19,6 +19,35 @@ from .unified_mcp_proxy import UnifiedMCPProxy
|
|
|
19
19
|
logger = logging.getLogger(__name__)
|
|
20
20
|
|
|
21
21
|
|
|
22
|
+
def extract_vendor_from_model(model: str) -> str | None:
|
|
23
|
+
"""
|
|
24
|
+
Extract vendor name from LiteLLM model string.
|
|
25
|
+
|
|
26
|
+
LiteLLM uses vendor/model format (e.g., "anthropic/claude-sonnet-4-5").
|
|
27
|
+
This extracts the vendor for provider handler selection.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
model: LiteLLM model string
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
Vendor name (e.g., "anthropic", "openai") or None if not extractable
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
36
|
+
"anthropic/claude-sonnet-4-5" -> "anthropic"
|
|
37
|
+
"openai/gpt-4o" -> "openai"
|
|
38
|
+
"gpt-4" -> None (no vendor prefix)
|
|
39
|
+
"""
|
|
40
|
+
if not model:
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
if "/" in model:
|
|
44
|
+
vendor = model.split("/")[0].lower().strip()
|
|
45
|
+
logger.debug(f"🔍 Extracted vendor '{vendor}' from model '{model}'")
|
|
46
|
+
return vendor
|
|
47
|
+
|
|
48
|
+
return None
|
|
49
|
+
|
|
50
|
+
|
|
22
51
|
class MeshLlmAgentInjector(BaseInjector):
|
|
23
52
|
"""
|
|
24
53
|
Manages dynamic injection of MeshLlmAgent proxies.
|
|
@@ -86,9 +115,7 @@ class MeshLlmAgentInjector(BaseInjector):
|
|
|
86
115
|
exc_info=True,
|
|
87
116
|
)
|
|
88
117
|
|
|
89
|
-
def process_llm_providers(
|
|
90
|
-
self, llm_providers: dict[str, dict[str, Any]]
|
|
91
|
-
) -> None:
|
|
118
|
+
def process_llm_providers(self, llm_providers: dict[str, dict[str, Any]]) -> None:
|
|
92
119
|
"""
|
|
93
120
|
Process llm_providers from registry response (v0.6.1 mesh delegation).
|
|
94
121
|
|
|
@@ -181,9 +208,7 @@ class MeshLlmAgentInjector(BaseInjector):
|
|
|
181
208
|
"""
|
|
182
209
|
function_name = provider_data.get("name")
|
|
183
210
|
if not function_name:
|
|
184
|
-
raise ValueError(
|
|
185
|
-
f"Provider missing required 'name' field: {provider_data}"
|
|
186
|
-
)
|
|
211
|
+
raise ValueError(f"Provider missing required 'name' field: {provider_data}")
|
|
187
212
|
|
|
188
213
|
endpoint = provider_data.get("endpoint")
|
|
189
214
|
if not endpoint:
|
|
@@ -493,6 +518,19 @@ class MeshLlmAgentInjector(BaseInjector):
|
|
|
493
518
|
is_template = config_dict.get("is_template", False)
|
|
494
519
|
template_path = config_dict.get("template_path")
|
|
495
520
|
|
|
521
|
+
# Determine vendor for provider handler selection
|
|
522
|
+
# Priority: 1) From registry (mesh delegation), 2) From model name, 3) None
|
|
523
|
+
vendor = llm_agent_data.get("vendor")
|
|
524
|
+
if not vendor:
|
|
525
|
+
# For direct LiteLLM calls, extract vendor from model name
|
|
526
|
+
# e.g., "anthropic/claude-sonnet-4-5" -> "anthropic"
|
|
527
|
+
model = config_dict.get("model", "")
|
|
528
|
+
vendor = extract_vendor_from_model(model)
|
|
529
|
+
if vendor:
|
|
530
|
+
logger.info(
|
|
531
|
+
f"🔍 Extracted vendor '{vendor}' from model '{model}' for handler selection"
|
|
532
|
+
)
|
|
533
|
+
|
|
496
534
|
# Create MeshLlmAgent with both metadata and proxies
|
|
497
535
|
llm_agent = MeshLlmAgent(
|
|
498
536
|
config=llm_config,
|
|
@@ -503,14 +541,20 @@ class MeshLlmAgentInjector(BaseInjector):
|
|
|
503
541
|
tool_proxies=llm_agent_data["tools_proxies"], # Proxies for execution
|
|
504
542
|
template_path=template_path if is_template else None,
|
|
505
543
|
context_value=context_value if is_template else None,
|
|
506
|
-
provider_proxy=llm_agent_data.get(
|
|
507
|
-
|
|
544
|
+
provider_proxy=llm_agent_data.get(
|
|
545
|
+
"provider_proxy"
|
|
546
|
+
), # Provider proxy for mesh delegation
|
|
547
|
+
vendor=vendor, # Vendor for provider handler selection (from registry or model name)
|
|
508
548
|
)
|
|
509
549
|
|
|
510
550
|
logger.debug(
|
|
511
551
|
f"🤖 Created MeshLlmAgent for {function_id} with {len(llm_agent_data['tools_metadata'])} tools"
|
|
512
552
|
+ (f", template={template_path}" if is_template else "")
|
|
513
|
-
+ (
|
|
553
|
+
+ (
|
|
554
|
+
f", provider_proxy={llm_agent_data.get('provider_proxy').function_name if llm_agent_data.get('provider_proxy') else 'None'}"
|
|
555
|
+
if isinstance(config_dict.get("provider"), dict)
|
|
556
|
+
else ""
|
|
557
|
+
)
|
|
514
558
|
)
|
|
515
559
|
|
|
516
560
|
return llm_agent
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_dependency_resolution.py
RENAMED
|
@@ -228,11 +228,10 @@ class APIDependencyResolutionStep(PipelineStep):
|
|
|
228
228
|
|
|
229
229
|
# Import here to avoid circular imports
|
|
230
230
|
from ...engine.dependency_injector import get_global_injector
|
|
231
|
-
from ...engine.full_mcp_proxy import EnhancedFullMCPProxy,
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
)
|
|
231
|
+
from ...engine.full_mcp_proxy import (EnhancedFullMCPProxy,
|
|
232
|
+
FullMCPProxy)
|
|
233
|
+
from ...engine.mcp_client_proxy import (EnhancedMCPClientProxy,
|
|
234
|
+
MCPClientProxy)
|
|
236
235
|
|
|
237
236
|
injector = get_global_injector()
|
|
238
237
|
|
|
@@ -289,13 +288,16 @@ class APIDependencyResolutionStep(PipelineStep):
|
|
|
289
288
|
# Import here to avoid circular imports
|
|
290
289
|
import os
|
|
291
290
|
|
|
292
|
-
from ...engine.self_dependency_proxy import
|
|
293
|
-
|
|
291
|
+
from ...engine.self_dependency_proxy import \
|
|
292
|
+
SelfDependencyProxy
|
|
293
|
+
from ...engine.unified_mcp_proxy import \
|
|
294
|
+
EnhancedUnifiedMCPProxy
|
|
294
295
|
|
|
295
296
|
# Get current agent ID for self-dependency detection
|
|
296
297
|
current_agent_id = None
|
|
297
298
|
try:
|
|
298
|
-
from ...engine.decorator_registry import
|
|
299
|
+
from ...engine.decorator_registry import \
|
|
300
|
+
DecoratorRegistry
|
|
299
301
|
|
|
300
302
|
config = DecoratorRegistry.get_resolved_agent_config()
|
|
301
303
|
current_agent_id = config["agent_id"]
|
|
@@ -328,18 +330,48 @@ class APIDependencyResolutionStep(PipelineStep):
|
|
|
328
330
|
)
|
|
329
331
|
|
|
330
332
|
if is_self_dependency:
|
|
331
|
-
#
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
333
|
+
# Create self-dependency proxy with WRAPPER function (not original)
|
|
334
|
+
# The wrapper has dependency injection logic, so calling it ensures
|
|
335
|
+
# the target function's dependencies are also injected properly.
|
|
336
|
+
wrapper_func = None
|
|
337
|
+
if dep_function_name in mesh_tools:
|
|
338
|
+
wrapper_func = mesh_tools[dep_function_name].function
|
|
339
|
+
self.logger.debug(
|
|
340
|
+
f"🔍 Found wrapper for '{dep_function_name}' in DecoratorRegistry"
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
if wrapper_func:
|
|
344
|
+
new_proxy = SelfDependencyProxy(
|
|
345
|
+
wrapper_func, dep_function_name
|
|
346
|
+
)
|
|
347
|
+
self.logger.info(
|
|
348
|
+
f"🔄 API SELF-DEPENDENCY: Using wrapper for '{capability}' "
|
|
349
|
+
f"(local call with full DI support)"
|
|
350
|
+
)
|
|
351
|
+
else:
|
|
352
|
+
# Fallback to original function if wrapper not found
|
|
353
|
+
original_func = injector.find_original_function(
|
|
354
|
+
dep_function_name
|
|
355
|
+
)
|
|
356
|
+
if original_func:
|
|
357
|
+
new_proxy = SelfDependencyProxy(
|
|
358
|
+
original_func, dep_function_name
|
|
359
|
+
)
|
|
360
|
+
self.logger.warning(
|
|
361
|
+
f"⚠️ API SELF-DEPENDENCY: Using original function for '{capability}' "
|
|
362
|
+
f"(wrapper not found, DI may not work for nested deps)"
|
|
363
|
+
)
|
|
364
|
+
else:
|
|
365
|
+
self.logger.warning(
|
|
366
|
+
f"⚠️ API SELF-DEPENDENCY: Cannot create SelfDependencyProxy for '{capability}', "
|
|
367
|
+
f"falling back to HTTP (may cause issues)"
|
|
368
|
+
)
|
|
369
|
+
# Fall back to unified proxy (same as cross-service)
|
|
370
|
+
new_proxy = EnhancedUnifiedMCPProxy(
|
|
371
|
+
endpoint,
|
|
372
|
+
dep_function_name,
|
|
373
|
+
kwargs_config=kwargs_config,
|
|
374
|
+
)
|
|
343
375
|
else:
|
|
344
376
|
# Create cross-service proxy using unified proxy (same as MCP pipeline)
|
|
345
377
|
new_proxy = EnhancedUnifiedMCPProxy(
|
|
@@ -450,7 +482,8 @@ class APIDependencyResolutionStep(PipelineStep):
|
|
|
450
482
|
Proxy instance
|
|
451
483
|
"""
|
|
452
484
|
from ...engine.full_mcp_proxy import EnhancedFullMCPProxy, FullMCPProxy
|
|
453
|
-
from ...engine.mcp_client_proxy import EnhancedMCPClientProxy,
|
|
485
|
+
from ...engine.mcp_client_proxy import (EnhancedMCPClientProxy,
|
|
486
|
+
MCPClientProxy)
|
|
454
487
|
|
|
455
488
|
if proxy_type == "FullMCPProxy":
|
|
456
489
|
# Use enhanced proxy if kwargs available
|
|
@@ -255,12 +255,14 @@ class DependencyResolutionStep(PipelineStep):
|
|
|
255
255
|
# Get current agent ID for self-dependency detection
|
|
256
256
|
import os
|
|
257
257
|
|
|
258
|
-
from ...engine.self_dependency_proxy import
|
|
258
|
+
from ...engine.self_dependency_proxy import \
|
|
259
|
+
SelfDependencyProxy
|
|
259
260
|
|
|
260
261
|
# Get current agent ID from DecoratorRegistry (single source of truth)
|
|
261
262
|
current_agent_id = None
|
|
262
263
|
try:
|
|
263
|
-
from ...engine.decorator_registry import
|
|
264
|
+
from ...engine.decorator_registry import \
|
|
265
|
+
DecoratorRegistry
|
|
264
266
|
|
|
265
267
|
config = DecoratorRegistry.get_resolved_agent_config()
|
|
266
268
|
current_agent_id = config["agent_id"]
|
|
@@ -293,36 +295,51 @@ class DependencyResolutionStep(PipelineStep):
|
|
|
293
295
|
)
|
|
294
296
|
|
|
295
297
|
if is_self_dependency:
|
|
296
|
-
# Create self-dependency proxy with
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
if
|
|
301
|
-
|
|
302
|
-
|
|
298
|
+
# Create self-dependency proxy with WRAPPER function (not original)
|
|
299
|
+
# The wrapper has dependency injection logic, so calling it ensures
|
|
300
|
+
# the target function's dependencies are also injected properly.
|
|
301
|
+
wrapper_func = None
|
|
302
|
+
if dep_function_name in mesh_tools:
|
|
303
|
+
wrapper_func = mesh_tools[dep_function_name].function
|
|
304
|
+
self.logger.debug(
|
|
305
|
+
f"🔍 Found wrapper for '{dep_function_name}' in DecoratorRegistry"
|
|
303
306
|
)
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
307
|
+
|
|
308
|
+
if wrapper_func:
|
|
309
|
+
new_proxy = SelfDependencyProxy(
|
|
310
|
+
wrapper_func, dep_function_name
|
|
308
311
|
)
|
|
309
312
|
self.logger.info(
|
|
310
|
-
f"🔄
|
|
313
|
+
f"🔄 SELF-DEPENDENCY: Using wrapper for '{capability}' "
|
|
314
|
+
f"(local call with full DI support)"
|
|
311
315
|
)
|
|
312
316
|
else:
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
)
|
|
317
|
-
# Use unified proxy for fallback
|
|
318
|
-
new_proxy = EnhancedUnifiedMCPProxy(
|
|
319
|
-
endpoint,
|
|
320
|
-
dep_function_name,
|
|
321
|
-
kwargs_config=kwargs_config,
|
|
322
|
-
)
|
|
323
|
-
self.logger.debug(
|
|
324
|
-
f"🔧 Created EnhancedUnifiedMCPProxy (fallback): {kwargs_config}"
|
|
317
|
+
# Fallback to original function if wrapper not found
|
|
318
|
+
original_func = injector.find_original_function(
|
|
319
|
+
dep_function_name
|
|
325
320
|
)
|
|
321
|
+
if original_func:
|
|
322
|
+
new_proxy = SelfDependencyProxy(
|
|
323
|
+
original_func, dep_function_name
|
|
324
|
+
)
|
|
325
|
+
self.logger.warning(
|
|
326
|
+
f"⚠️ SELF-DEPENDENCY: Using original function for '{capability}' "
|
|
327
|
+
f"(wrapper not found, DI may not work for nested deps)"
|
|
328
|
+
)
|
|
329
|
+
else:
|
|
330
|
+
self.logger.error(
|
|
331
|
+
f"❌ Cannot create SelfDependencyProxy for '{capability}': "
|
|
332
|
+
f"neither wrapper nor original function '{dep_function_name}' found, falling back to HTTP"
|
|
333
|
+
)
|
|
334
|
+
# Use unified proxy for fallback
|
|
335
|
+
new_proxy = EnhancedUnifiedMCPProxy(
|
|
336
|
+
endpoint,
|
|
337
|
+
dep_function_name,
|
|
338
|
+
kwargs_config=kwargs_config,
|
|
339
|
+
)
|
|
340
|
+
self.logger.debug(
|
|
341
|
+
f"🔧 Created EnhancedUnifiedMCPProxy (fallback): {kwargs_config}"
|
|
342
|
+
)
|
|
326
343
|
else:
|
|
327
344
|
# Create cross-service proxy using unified proxy
|
|
328
345
|
new_proxy = EnhancedUnifiedMCPProxy(
|
|
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "mcp-mesh"
|
|
9
|
-
version = "0.6.
|
|
9
|
+
version = "0.6.2"
|
|
10
10
|
description = "Kubernetes-native platform for distributed MCP applications"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
license = { text = "MIT" }
|
|
@@ -117,7 +117,7 @@ extend-exclude = '''
|
|
|
117
117
|
'''
|
|
118
118
|
|
|
119
119
|
[tool.ruff]
|
|
120
|
-
target-version = "0.6.
|
|
120
|
+
target-version = "0.6.2"
|
|
121
121
|
line-length = 88
|
|
122
122
|
|
|
123
123
|
[tool.ruff.lint]
|
|
@@ -154,7 +154,7 @@ ignore = [
|
|
|
154
154
|
"tests/**" = ["E712", "F841", "B007", "C401", "F401"] # Relax style requirements for test files
|
|
155
155
|
|
|
156
156
|
[tool.mypy]
|
|
157
|
-
python_version = "0.6.
|
|
157
|
+
python_version = "0.6.2"
|
|
158
158
|
check_untyped_defs = false # Temporarily relaxed
|
|
159
159
|
disallow_any_generics = false # Temporarily relaxed
|
|
160
160
|
disallow_incomplete_defs = false # Temporarily relaxed
|
|
@@ -166,7 +166,7 @@ warn_return_any = false # Temporarily relaxed
|
|
|
166
166
|
exclude = ["tests/", ".*agent_server_generated.*", ".*registry_client_generated.*"] # Skip type checking for test and generated files
|
|
167
167
|
|
|
168
168
|
[tool.pytest.ini_options]
|
|
169
|
-
minversion = "0.6.
|
|
169
|
+
minversion = "0.6.2"
|
|
170
170
|
addopts = "-ra -q --strict-markers --strict-config"
|
|
171
171
|
testpaths = [
|
|
172
172
|
"tests",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/base_provider_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/engine/provider_handlers/provider_handler_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/__init__.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/agents_api.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/health_api.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api/tracing_api.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api_client.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/api_response.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/configuration.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/exceptions.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/__init__.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/agent_info.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/generated/mcp_mesh_registry_client/models/trace_event.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py
RENAMED
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_lifespan_integration.py
RENAMED
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_mesh-0.6.1 → mcp_mesh-0.6.2}/_mcp_mesh/pipeline/mcp_heartbeat/heartbeat_orchestrator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|