mcp-mesh 0.7.20__py3-none-any.whl → 0.7.21__py3-none-any.whl

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/__init__.py CHANGED
@@ -31,7 +31,7 @@ from .engine.decorator_registry import (
31
31
  get_decorator_stats,
32
32
  )
33
33
 
34
- __version__ = "0.7.20"
34
+ __version__ = "0.7.21"
35
35
 
36
36
  # Store reference to runtime processor if initialized
37
37
  _runtime_processor = None
@@ -73,7 +73,7 @@ class APIFastHeartbeatStep(PipelineStep):
73
73
 
74
74
  # Log status and action with API-specific messaging
75
75
  if status == FastHeartbeatStatus.NO_CHANGES:
76
- self.logger.info(
76
+ self.logger.trace(
77
77
  f"✅ API fast heartbeat: No changes detected for service '{service_id}'"
78
78
  )
79
79
  elif status == FastHeartbeatStatus.TOPOLOGY_CHANGED:
@@ -38,7 +38,7 @@ class APIHealthCheckStep(PipelineStep):
38
38
  Returns:
39
39
  PipelineResult with health_status in context
40
40
  """
41
- self.logger.info("🏥 [DEBUG] Checking FastAPI application health status")
41
+ self.logger.trace("🏥 Checking FastAPI application health status")
42
42
 
43
43
  try:
44
44
  # Get FastAPI app from context
@@ -66,7 +66,7 @@ class APIHealthCheckStep(PipelineStep):
66
66
  routes_with_mesh = self._count_mesh_routes(fastapi_app)
67
67
  total_routes = len(getattr(fastapi_app, "routes", []))
68
68
 
69
- self.logger.debug(
69
+ self.logger.trace(
70
70
  f"🔍 FastAPI app health: {app_title} v{app_version}, "
71
71
  f"{routes_with_mesh}/{total_routes} routes with mesh injection"
72
72
  )
@@ -91,7 +91,7 @@ class APIHealthCheckStep(PipelineStep):
91
91
  }
92
92
  }
93
93
 
94
- self.logger.info(
94
+ self.logger.trace(
95
95
  f"🏥 API health check passed: {app_title} v{app_version} "
96
96
  f"({routes_with_mesh} mesh routes)"
97
97
  )
@@ -58,19 +58,19 @@ class APIHeartbeatOrchestrator:
58
58
  self._log_api_heartbeat_request(heartbeat_context, self._heartbeat_count)
59
59
 
60
60
  # Execute API heartbeat pipeline with timeout protection
61
- self.logger.info(f"💓 Executing API heartbeat #{self._heartbeat_count} for service '{service_id}'")
61
+ self.logger.trace(f"💓 Executing API heartbeat #{self._heartbeat_count} for service '{service_id}'")
62
62
 
63
63
  # Add timeout to prevent hanging heartbeats (30 seconds max)
64
64
  import asyncio
65
65
 
66
66
  try:
67
- self.logger.debug("Starting API heartbeat pipeline execution")
67
+ self.logger.trace("Starting API heartbeat pipeline execution")
68
68
  result = await asyncio.wait_for(
69
69
  self.pipeline.execute_api_heartbeat_cycle(heartbeat_context),
70
70
  timeout=30.0,
71
71
  )
72
72
  if result.is_success():
73
- self.logger.debug("✅ API heartbeat pipeline completed successfully")
73
+ self.logger.trace("✅ API heartbeat pipeline completed successfully")
74
74
  else:
75
75
  self.logger.error(f"❌ API heartbeat pipeline failed: {result.message}")
76
76
  except TimeoutError:
@@ -120,10 +120,6 @@ class APIHeartbeatOrchestrator:
120
120
 
121
121
  # Get API service metadata from startup context
122
122
  api_service_metadata = startup_context.get("api_service_metadata", {})
123
- self.logger.debug(f"🔍 Startup context has api_service_metadata: {len(api_service_metadata) > 0}")
124
- if api_service_metadata:
125
- capabilities = api_service_metadata.get("capabilities", [])
126
- self.logger.debug(f"🔍 API service has {len(capabilities)} route capabilities")
127
123
 
128
124
  # Build heartbeat-specific context
129
125
  heartbeat_context = {
@@ -182,7 +178,7 @@ class APIHeartbeatOrchestrator:
182
178
  }
183
179
 
184
180
  # Log heartbeat details
185
- self.logger.debug(
181
+ self.logger.trace(
186
182
  f"🔍 API Heartbeat #{heartbeat_count} for '{service_id}': "
187
183
  f"app={app_info}, display={display_config}"
188
184
  )
@@ -197,29 +193,29 @@ class APIHeartbeatOrchestrator:
197
193
  heartbeat_response = result.context.get("heartbeat_response")
198
194
  heartbeat_success = result.context.get("heartbeat_success", False)
199
195
 
200
- self.logger.debug(f"API heartbeat result - success: {heartbeat_success}")
196
+ self.logger.trace(f"API heartbeat result - success: {heartbeat_success}")
201
197
 
202
198
  # Check if heartbeat was skipped due to optimization
203
199
  heartbeat_skipped = result.context.get("heartbeat_skipped", False)
204
200
  skip_reason = result.context.get("skip_reason")
205
201
 
206
202
  if heartbeat_success and heartbeat_response:
207
- # Log response details for debugging
203
+ # Log response details for tracing
208
204
  try:
209
205
  response_json = json.dumps(
210
206
  heartbeat_response, indent=2, default=str
211
207
  )
212
- self.logger.debug(
208
+ self.logger.trace(
213
209
  f"🔍 API heartbeat response #{heartbeat_count}:\n{response_json}"
214
210
  )
215
211
  except Exception as e:
216
- self.logger.debug(
212
+ self.logger.trace(
217
213
  f"🔍 API heartbeat response #{heartbeat_count}: {heartbeat_response} "
218
214
  f"(json serialization failed: {e})"
219
215
  )
220
216
 
221
- self.logger.info(
222
- f"💚 API heartbeat #{heartbeat_count} sent successfully for service '{service_id}'"
217
+ self.logger.debug(
218
+ f"🚀 API heartbeat #{heartbeat_count} sent for service '{service_id}'"
223
219
  )
224
220
  return True
225
221
  elif heartbeat_success and heartbeat_skipped:
@@ -208,7 +208,7 @@ class APIHeartbeatPipeline(MeshPipeline):
208
208
  # NO_CHANGES - skip for optimization
209
209
  should_execute_remaining = False
210
210
  reason = "optimization (no changes detected)"
211
- self.logger.info(
211
+ self.logger.trace(
212
212
  f"🚀 API heartbeat: Skipping remaining steps for optimization: {reason}"
213
213
  )
214
214
  elif FastHeartbeatStatusUtil.should_skip_for_resilience(
@@ -39,14 +39,14 @@ class APIRegistryConnectionStep(PipelineStep):
39
39
  Returns:
40
40
  PipelineResult with registry_wrapper in context
41
41
  """
42
- self.logger.info("🔗 [DEBUG] Preparing API registry connection for heartbeat")
42
+ self.logger.trace("🔗 Preparing API registry connection for heartbeat")
43
43
 
44
44
  try:
45
45
  # Check if registry_wrapper already exists in context
46
46
  registry_wrapper = context.get("registry_wrapper")
47
47
 
48
48
  if registry_wrapper is not None:
49
- self.logger.debug("✅ Registry wrapper already available in context")
49
+ self.logger.trace("✅ Registry wrapper already available in context")
50
50
  return PipelineResult(
51
51
  message="Registry connection already established",
52
52
  context={"registry_wrapper": registry_wrapper}
@@ -69,7 +69,7 @@ class APIRegistryConnectionStep(PipelineStep):
69
69
  rule=ValidationRule.URL_RULE,
70
70
  )
71
71
 
72
- self.logger.debug(f"🔍 Using registry URL: {registry_url}")
72
+ self.logger.trace(f"🔍 Using registry URL: {registry_url}")
73
73
 
74
74
  # Create registry client wrapper
75
75
  from ...generated.mcp_mesh_registry_client.api_client import ApiClient
@@ -80,7 +80,7 @@ class APIRegistryConnectionStep(PipelineStep):
80
80
  api_client = ApiClient(configuration=config)
81
81
  registry_wrapper = RegistryClientWrapper(api_client)
82
82
 
83
- self.logger.info(f"🔗 API registry connection prepared: {registry_url}")
83
+ self.logger.trace(f"🔗 API registry connection prepared: {registry_url}")
84
84
 
85
85
  return PipelineResult(
86
86
  message=f"Registry connection prepared for {registry_url}",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-mesh
3
- Version: 0.7.20
3
+ Version: 0.7.21
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
@@ -1,4 +1,4 @@
1
- _mcp_mesh/__init__.py,sha256=kAd7NUKrtS4Tde_mxKyg4PxRApo2NdkTLo_XJrfA6yc,2720
1
+ _mcp_mesh/__init__.py,sha256=4sv0w2W5E7Y8YqZrimL8ck05K7OrF2W6gqu9-DuQm40,2720
2
2
  _mcp_mesh/reload.py,sha256=IqZeS7lsFw7bwOzDPE0LJLPkY5nR68BKc8C4srSCX1o,6239
3
3
  _mcp_mesh/reload_runner.py,sha256=SgQKzzO2yHfSUBq8s3SpAnovWA0rveimVNaxeLCEo_0,1310
4
4
  _mcp_mesh/engine/__init__.py,sha256=U_6Kw3vA_3RiNK0Oln5c5C7WvA9lSONV22wWzfxYHNw,2975
@@ -81,13 +81,13 @@ _mcp_mesh/generated/mcp_mesh_registry_client/models/trace_event.py,sha256=zceJuF
81
81
  _mcp_mesh/pipeline/__init__.py,sha256=9Aplh4m1z-rYTQys0JQLYlq9wTPdI72eSOhUPqcnvpA,1557
82
82
  _mcp_mesh/pipeline/api_heartbeat/__init__.py,sha256=IXTLoQLAPqQEWZ8VMWc5W_cQJkDv95rlVGXyXoQDjHk,473
83
83
  _mcp_mesh/pipeline/api_heartbeat/api_dependency_resolution.py,sha256=LDeLvN2U2MgYK3HLEUIhG5FUC2FyrGUs7SueF7gcfAA,20027
84
- _mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py,sha256=vXiGTvBl5mwnVRwzFFNa7GvYWa7B-flCsHSX_ECv_JI,4822
85
- _mcp_mesh/pipeline/api_heartbeat/api_health_check.py,sha256=kDmFeOG_4tyqyJSBZjPcc7xTzGpP4vq6ObW_WBqXvzM,5130
86
- _mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py,sha256=uBswzWOBzU8p_C0AE2DF8UwIWG4rP2zecHfPqKzNuC0,10367
87
- _mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py,sha256=1bvQcO6lwZYTGILLAyWQuTOhyI5IY8mmhfSWAoJzMQU,13480
84
+ _mcp_mesh/pipeline/api_heartbeat/api_fast_heartbeat_check.py,sha256=XfMbqtZOdk7oAtbE6DI5EaqFpHZrwYm9re8ixobrrV0,4823
85
+ _mcp_mesh/pipeline/api_heartbeat/api_health_check.py,sha256=6mKK0RQK9rm4NgEa9EFC6TvXNSQJaK5pMsPI_byy66c,5124
86
+ _mcp_mesh/pipeline/api_heartbeat/api_heartbeat_orchestrator.py,sha256=aM55Pr915O056M-zeJIr4vcr74EikCplLj7qAcDTSyo,10046
87
+ _mcp_mesh/pipeline/api_heartbeat/api_heartbeat_pipeline.py,sha256=4xi9mxyk29T71QFX1bFQWCns1dVvqEtOC5A5fJsBZm4,13481
88
88
  _mcp_mesh/pipeline/api_heartbeat/api_heartbeat_send.py,sha256=vszesutlAFXv9B4XXFutEMEBBhN54hF8eztTtDudLaI,15785
89
89
  _mcp_mesh/pipeline/api_heartbeat/api_lifespan_integration.py,sha256=WBo2crcaGfxi8Q46TU-i5OMhAv0sQKz7Z9jps-GLkvM,5183
90
- _mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py,sha256=6N0JdXdnLkaXau4t8syt9DLgv9Y51SPfTXYK3DefBk8,3846
90
+ _mcp_mesh/pipeline/api_heartbeat/api_registry_connection.py,sha256=gX1y1DfCLjWu8uQ2X5KMxyuznjOTgZLGMM1jMh7g6w0,3840
91
91
  _mcp_mesh/pipeline/api_startup/__init__.py,sha256=eivolkSKot2bJTWP2BV8-RKRT1Zm7SGQYuEUiTxusOQ,577
92
92
  _mcp_mesh/pipeline/api_startup/api_pipeline.py,sha256=w4m7LP7qnpLxYYWy4moa_8inAWFT0jWy9i7G9WGWOCM,2546
93
93
  _mcp_mesh/pipeline/api_startup/api_server_setup.py,sha256=Qy0wbXyIWIQYA7CjiGVZwn0nWCKK85ZzFTRI2JDA9Aw,15099
@@ -146,7 +146,7 @@ mesh/__init__.py,sha256=Va5XRBWgejQurad7Maz3E-zPY7vu431B2_4sAdCu1zk,3868
146
146
  mesh/decorators.py,sha256=sFTLngsIo_2uBb-Fvuh9K1S8e2Kzq_70eWT4Z2FA83E,59730
147
147
  mesh/helpers.py,sha256=1Y7V6aQvpV8BKfEeeKfjwPJ5g9FjMCzSNifs3se1jkA,12935
148
148
  mesh/types.py,sha256=n0MxrBYZJ84xyQWGf_X2ZbVWSAaIcEBkRV7qaCmX6Ac,17008
149
- mcp_mesh-0.7.20.dist-info/METADATA,sha256=EgpC0PPEdFvse699KIX_B7A3JqWmXMOL6D6Dj6wHJ44,5006
150
- mcp_mesh-0.7.20.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
151
- mcp_mesh-0.7.20.dist-info/licenses/LICENSE,sha256=_EBQHRQThv9FPOLc5eFOUdeeRO0mYwChC7cx60dM1tM,1078
152
- mcp_mesh-0.7.20.dist-info/RECORD,,
149
+ mcp_mesh-0.7.21.dist-info/METADATA,sha256=PgipqbPXQnKN06fCXrMjGRgTEE9230P61DAXJbinX_4,5006
150
+ mcp_mesh-0.7.21.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
151
+ mcp_mesh-0.7.21.dist-info/licenses/LICENSE,sha256=_EBQHRQThv9FPOLc5eFOUdeeRO0mYwChC7cx60dM1tM,1078
152
+ mcp_mesh-0.7.21.dist-info/RECORD,,