solace-agent-mesh 1.6.0__py3-none-any.whl → 1.6.2__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.

Potentially problematic release.


This version of solace-agent-mesh might be problematic. Click here for more details.

Files changed (127) hide show
  1. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  2. solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +1 -1
  3. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +135 -31
  4. solace_agent_mesh/agent/adk/models/lite_llm.py +5 -0
  5. solace_agent_mesh/agent/adk/runner.py +10 -12
  6. solace_agent_mesh/agent/adk/services.py +50 -14
  7. solace_agent_mesh/agent/adk/setup.py +66 -38
  8. solace_agent_mesh/agent/protocol/event_handlers.py +416 -152
  9. solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
  10. solace_agent_mesh/agent/proxies/base/app.py +3 -2
  11. solace_agent_mesh/agent/proxies/base/component.py +35 -4
  12. solace_agent_mesh/agent/sac/app.py +97 -9
  13. solace_agent_mesh/agent/sac/component.py +284 -145
  14. solace_agent_mesh/agent/sac/task_execution_context.py +79 -2
  15. solace_agent_mesh/agent/tools/tool_config_types.py +3 -0
  16. solace_agent_mesh/agent/utils/artifact_helpers.py +1 -1
  17. solace_agent_mesh/assets/docs/404.html +3 -3
  18. solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +1 -0
  19. solace_agent_mesh/assets/docs/assets/js/631738c7.7c4594c9.js +1 -0
  20. solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +1 -0
  21. solace_agent_mesh/assets/docs/assets/js/71da7b71.ddbdfbe2.js +1 -0
  22. solace_agent_mesh/assets/docs/assets/js/{e3d9abda.2b916f9e.js → e3d9abda.6b9493d0.js} +1 -1
  23. solace_agent_mesh/assets/docs/assets/js/e92d0134.4f395c6b.js +1 -0
  24. solace_agent_mesh/assets/docs/assets/js/f284c35a.720d2ef2.js +1 -0
  25. solace_agent_mesh/assets/docs/assets/js/main.d1643f0b.js +2 -0
  26. solace_agent_mesh/assets/docs/assets/js/runtime~main.97f920d4.js +1 -0
  27. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +3 -3
  28. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +3 -3
  29. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +3 -3
  30. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +3 -3
  31. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +3 -3
  32. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +3 -3
  33. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +3 -3
  34. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +3 -3
  35. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +3 -3
  36. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +3 -3
  37. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +3 -3
  38. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +3 -3
  39. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +4 -25
  40. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +4 -4
  41. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
  42. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +76 -0
  43. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +5 -4
  44. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +3 -3
  45. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +3 -3
  46. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +3 -3
  47. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +3 -3
  48. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +3 -3
  49. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +3 -3
  50. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +3 -3
  51. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +3 -3
  52. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +3 -3
  53. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +3 -3
  54. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +3 -3
  55. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +3 -3
  56. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +3 -3
  57. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +3 -3
  58. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +3 -3
  59. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +3 -3
  60. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +3 -3
  61. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +3 -3
  62. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +3 -3
  63. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +3 -3
  64. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +3 -3
  65. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +3 -3
  66. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
  67. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +3 -3
  68. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +3 -6
  69. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +3 -3
  70. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +3 -3
  71. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +3 -3
  72. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +3 -3
  73. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
  74. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +3 -3
  75. solace_agent_mesh/assets/docs/lunr-index-1761663789856.json +1 -0
  76. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  77. solace_agent_mesh/assets/docs/search-doc-1761663789856.json +1 -0
  78. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  79. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  80. solace_agent_mesh/cli/__init__.py +1 -1
  81. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-D4_RMYRh.js} +1 -1
  82. solace_agent_mesh/client/webui/frontend/static/assets/{client-CaY59VuC.js → client-UZ3qU6Bq.js} +1 -1
  83. solace_agent_mesh/client/webui/frontend/static/assets/main--3yJYl7S.css +1 -0
  84. solace_agent_mesh/client/webui/frontend/static/assets/main-DojKHS49.js +342 -0
  85. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BEmvJSYz.js → vendor-DSqhjwq_.js} +1 -1
  86. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  87. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  88. solace_agent_mesh/common/a2a/events.py +2 -1
  89. solace_agent_mesh/common/a2a/protocol.py +78 -0
  90. solace_agent_mesh/common/sac/sam_component_base.py +406 -21
  91. solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
  92. solace_agent_mesh/gateway/base/app.py +15 -0
  93. solace_agent_mesh/gateway/base/component.py +116 -46
  94. solace_agent_mesh/gateway/http_sse/app.py +7 -0
  95. solace_agent_mesh/gateway/http_sse/component.py +18 -10
  96. solace_agent_mesh/gateway/http_sse/dependencies.py +83 -59
  97. solace_agent_mesh/gateway/http_sse/main.py +5 -4
  98. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +1 -1
  99. solace_agent_mesh/gateway/http_sse/routers/auth.py +103 -6
  100. solace_agent_mesh/gateway/http_sse/routers/config.py +1 -1
  101. solace_agent_mesh/gateway/http_sse/routers/sessions.py +1 -1
  102. solace_agent_mesh/gateway/http_sse/routers/sse.py +15 -5
  103. solace_agent_mesh/gateway/http_sse/routers/tasks.py +3 -3
  104. solace_agent_mesh/gateway/http_sse/routers/users.py +47 -1
  105. solace_agent_mesh/gateway/http_sse/routers/visualization.py +90 -8
  106. solace_agent_mesh/gateway/http_sse/services/session_service.py +1 -1
  107. solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
  108. solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +16 -1
  109. solace_agent_mesh/gateway/http_sse/sse_manager.py +15 -6
  110. solace_agent_mesh/templates/logging_config_template.ini +2 -2
  111. {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/METADATA +2 -2
  112. {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/RECORD +116 -114
  113. solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
  114. solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
  115. solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
  116. solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
  117. solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
  118. solace_agent_mesh/assets/docs/assets/js/main.20feee82.js +0 -2
  119. solace_agent_mesh/assets/docs/assets/js/runtime~main.0d198646.js +0 -1
  120. solace_agent_mesh/assets/docs/lunr-index-1761165361160.json +0 -1
  121. solace_agent_mesh/assets/docs/search-doc-1761165361160.json +0 -1
  122. solace_agent_mesh/client/webui/frontend/static/assets/main-BGTaW0uv.js +0 -342
  123. solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
  124. /solace_agent_mesh/assets/docs/assets/js/{main.20feee82.js.LICENSE.txt → main.d1643f0b.js.LICENSE.txt} +0 -0
  125. {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/WHEEL +0 -0
  126. {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/entry_points.txt +0 -0
  127. {solace_agent_mesh-1.6.0.dist-info → solace_agent_mesh-1.6.2.dist-info}/licenses/LICENSE +0 -0
@@ -160,7 +160,7 @@ class BaseGatewayComponent(SamComponentBase):
160
160
  )
161
161
 
162
162
  log.info(
163
- "%s Base Gateway Component initialized successfully.", self.log_identifier
163
+ "%s Initialized Base Gateway Component.", self.log_identifier
164
164
  )
165
165
 
166
166
  async def authenticate_and_enrich_user(
@@ -208,6 +208,8 @@ class BaseGatewayComponent(SamComponentBase):
208
208
  user_identity: Any,
209
209
  is_streaming: bool = True,
210
210
  api_version: str = "v2",
211
+ task_id_override: str | None = None,
212
+ metadata: dict[str, Any] | None = None,
211
213
  ) -> str:
212
214
  log_id_prefix = f"{self.log_identifier}[SubmitA2ATask]"
213
215
  log.info(
@@ -241,7 +243,7 @@ class BaseGatewayComponent(SamComponentBase):
241
243
  user_config = await config_resolver.resolve_user_config(
242
244
  user_identity, gateway_context, {}
243
245
  )
244
- log.info(
246
+ log.debug(
245
247
  "%s Resolved user configuration for user_identity '%s': %s",
246
248
  log_id_prefix,
247
249
  user_identity.get("id"),
@@ -307,9 +309,15 @@ class BaseGatewayComponent(SamComponentBase):
307
309
  log_id_prefix,
308
310
  len(invoked_artifacts),
309
311
  )
312
+
313
+ if metadata:
314
+ a2a_metadata.update(metadata)
310
315
 
311
316
  # This correlation ID is used by the gateway to track the task
312
- task_id = f"gdk-task-{uuid.uuid4().hex}"
317
+ if task_id_override:
318
+ task_id = task_id_override
319
+ else:
320
+ task_id = f"gdk-task-{uuid.uuid4().hex}"
313
321
 
314
322
  prepared_a2a_parts = await self._prepare_parts_for_publishing(
315
323
  parts=a2a_parts,
@@ -343,6 +351,37 @@ class BaseGatewayComponent(SamComponentBase):
343
351
  if user_config:
344
352
  user_properties["a2aUserConfig"] = user_config
345
353
 
354
+ # Enterprise feature: Add signed user claims if trust manager available
355
+ if hasattr(self, "trust_manager") and self.trust_manager:
356
+ log.debug(
357
+ "%s Attempting to sign user claims for task %s",
358
+ log_id_prefix,
359
+ task_id,
360
+ )
361
+ try:
362
+ auth_token = self.trust_manager.sign_user_claims(
363
+ user_info=user_identity, task_id=task_id
364
+ )
365
+ user_properties["authToken"] = auth_token
366
+ log.debug(
367
+ "%s Successfully signed user claims for task %s",
368
+ log_id_prefix,
369
+ task_id,
370
+ )
371
+ except Exception as e:
372
+ log.error(
373
+ "%s Failed to sign user claims for task %s: %s",
374
+ log_id_prefix,
375
+ task_id,
376
+ e,
377
+ )
378
+ # Continue without token - enterprise feature is optional
379
+ else:
380
+ log.debug(
381
+ "%s Trust Manager not available, proceeding without authentication token",
382
+ log_id_prefix,
383
+ )
384
+
346
385
  user_properties["replyTo"] = a2a.get_gateway_response_topic(
347
386
  self.namespace, self.gateway_id, task_id
348
387
  )
@@ -366,49 +405,55 @@ class BaseGatewayComponent(SamComponentBase):
366
405
  )
367
406
  return task_id
368
407
 
369
- def process_event(self, event: Event):
370
- if event.event_type == EventType.MESSAGE:
371
- original_broker_message: Optional[SolaceMessage] = event.data
372
- if not original_broker_message:
373
- log.warning(
374
- "%s Received MESSAGE event with no data. Ignoring.",
375
- self.log_identifier,
376
- )
377
- return
408
+ def _handle_message(self, message: SolaceMessage, topic: str) -> None:
409
+ """
410
+ Override to use queue-based pattern instead of direct async.
378
411
 
379
- log.debug(
380
- "%s Received SolaceMessage on topic: %s. Bridging to internal queue.",
412
+ Gateway uses an internal queue for message processing to ensure
413
+ strict ordering and backpressure handling.
414
+
415
+ Args:
416
+ message: The Solace message
417
+ topic: The topic the message was received on
418
+ """
419
+ log.debug(
420
+ "%s Received SolaceMessage on topic: %s. Bridging to internal queue.",
421
+ self.log_identifier,
422
+ topic,
423
+ )
424
+
425
+ try:
426
+ msg_data_for_processor = {
427
+ "topic": topic,
428
+ "payload": message.get_payload(),
429
+ "user_properties": message.get_user_properties(),
430
+ "_original_broker_message": message,
431
+ }
432
+ self.internal_event_queue.put_nowait(msg_data_for_processor)
433
+ except queue.Full:
434
+ log.error(
435
+ "%s Internal event queue full. Cannot bridge message.",
381
436
  self.log_identifier,
382
- original_broker_message.get_topic(),
383
437
  )
384
- try:
385
- msg_data_for_processor = {
386
- "topic": original_broker_message.get_topic(),
387
- "payload": original_broker_message.get_payload(),
388
- "user_properties": original_broker_message.get_user_properties(),
389
- "_original_broker_message": original_broker_message,
390
- }
391
- self.internal_event_queue.put_nowait(msg_data_for_processor)
392
- except queue.Full:
393
- log.error(
394
- "%s Internal event queue full. Cannot bridge message. NACKing.",
395
- self.log_identifier,
396
- )
397
- original_broker_message.call_negative_acknowledgements()
398
- except Exception as e:
399
- log.exception(
400
- "%s Error bridging message to internal queue: %s. NACKing.",
401
- self.log_identifier,
402
- e,
403
- )
404
- original_broker_message.call_negative_acknowledgements()
405
- else:
406
- log.debug(
407
- "%s Received non-MESSAGE event type: %s. Passing to super.",
438
+ raise
439
+ except Exception as e:
440
+ log.exception(
441
+ "%s Error bridging message to internal queue: %s",
408
442
  self.log_identifier,
409
- event.event_type,
443
+ e,
410
444
  )
411
- super().process_event(event)
445
+ raise
446
+
447
+ async def _handle_message_async(self, message, topic: str) -> None:
448
+ """
449
+ Not used by gateway - we override _handle_message() instead.
450
+
451
+ This is here to satisfy the abstract method requirement, but the
452
+ gateway uses the queue-based pattern via _handle_message() override.
453
+ """
454
+ raise NotImplementedError(
455
+ "Gateway uses queue-based message handling via _handle_message() override"
456
+ )
412
457
 
413
458
  async def _handle_resolved_signals(
414
459
  self,
@@ -1120,20 +1165,30 @@ class BaseGatewayComponent(SamComponentBase):
1120
1165
 
1121
1166
  async def _async_setup_and_run(self) -> None:
1122
1167
  """Main async logic for the gateway component."""
1168
+ # Call base class to initialize Trust Manager
1169
+ await super()._async_setup_and_run()
1170
+
1123
1171
  log.info(
1124
1172
  "%s Starting _start_listener() to initiate external platform connection.",
1125
1173
  self.log_identifier,
1126
1174
  )
1127
1175
  self._start_listener()
1128
1176
 
1129
- log.info(
1130
- "%s Starting _message_processor_loop as an asyncio task.",
1131
- self.log_identifier,
1132
- )
1133
1177
  await self._message_processor_loop()
1134
1178
 
1135
1179
  def _pre_async_cleanup(self) -> None:
1136
1180
  """Pre-cleanup actions for the gateway component."""
1181
+ # Cleanup Trust Manager if present (ENTERPRISE FEATURE)
1182
+ if self.trust_manager:
1183
+ try:
1184
+ log.info("%s Cleaning up Trust Manager...", self.log_identifier)
1185
+ self.trust_manager.cleanup(self.cancel_timer)
1186
+ log.info("%s Trust Manager cleanup complete", self.log_identifier)
1187
+ except Exception as e:
1188
+ log.error(
1189
+ "%s Error during Trust Manager cleanup: %s", self.log_identifier, e
1190
+ )
1191
+
1137
1192
  log.info("%s Calling _stop_listener()...", self.log_identifier)
1138
1193
  self._stop_listener()
1139
1194
 
@@ -1146,7 +1201,7 @@ class BaseGatewayComponent(SamComponentBase):
1146
1201
  self.internal_event_queue.put(None)
1147
1202
 
1148
1203
  async def _message_processor_loop(self):
1149
- log.info("%s Starting message processor loop...", self.log_identifier)
1204
+ log.debug("%s Starting message processor loop as an asyncio task...", self.log_identifier)
1150
1205
  loop = self.get_async_loop()
1151
1206
 
1152
1207
  while not self.stop_signal.is_set():
@@ -1184,6 +1239,13 @@ class BaseGatewayComponent(SamComponentBase):
1184
1239
  processed_successfully = await self._handle_discovery_message(
1185
1240
  payload
1186
1241
  )
1242
+ elif (
1243
+ hasattr(self, "trust_manager")
1244
+ and self.trust_manager
1245
+ and self.trust_manager.is_trust_card_topic(topic)
1246
+ ):
1247
+ await self.trust_manager.handle_trust_card_message(payload, topic)
1248
+ processed_successfully = True
1187
1249
  elif a2a.topic_matches_subscription(
1188
1250
  topic,
1189
1251
  a2a.get_gateway_response_subscription_topic(
@@ -1328,6 +1390,14 @@ class BaseGatewayComponent(SamComponentBase):
1328
1390
  ) -> None:
1329
1391
  pass
1330
1392
 
1393
+ def _get_component_id(self) -> str:
1394
+ """Returns the gateway ID as the component identifier."""
1395
+ return self.gateway_id
1396
+
1397
+ def _get_component_type(self) -> str:
1398
+ """Returns 'gateway' as the component type."""
1399
+ return "gateway"
1400
+
1331
1401
  def invoke(self, message, data):
1332
1402
  if isinstance(message, SolaceMessage):
1333
1403
  message.call_acknowledgements()
@@ -89,6 +89,13 @@ class WebUIBackendApp(BaseGatewayApp):
89
89
  "default": "",
90
90
  "description": "General guidelines on how agent responses should be structured, to be optionally used by agents.",
91
91
  },
92
+ {
93
+ "name": "model",
94
+ "required": False,
95
+ "type": "dict",
96
+ "default": None,
97
+ "description": "The model to use for the WebUI gateway.",
98
+ },
92
99
  {
93
100
  "name": "frontend_welcome_message",
94
101
  "required": False,
@@ -115,6 +115,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
115
115
  self.ssl_keyfile = self.get_config("ssl_keyfile", "")
116
116
  self.ssl_certfile = self.get_config("ssl_certfile", "")
117
117
  self.ssl_keyfile_password = self.get_config("ssl_keyfile_password", "")
118
+ self.model_config = self.get_config("model", None)
118
119
 
119
120
  log.info(
120
121
  "%s WebUI-specific configuration retrieved (Host: %s, Port: %d).",
@@ -437,7 +438,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
437
438
  raise RuntimeError(
438
439
  "Visualization flow setup error: BrokerInput not found."
439
440
  )
440
- log.info(
441
+ log.debug(
441
442
  "%s Obtained reference to internal BrokerInput component.",
442
443
  log_id_prefix,
443
444
  )
@@ -883,7 +884,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
883
884
  Manages global subscription reference counts.
884
885
  """
885
886
  log_id_prefix = f"{self.log_identifier}[AddVizSub:{stream_id}]"
886
- log.info(
887
+ log.debug(
887
888
  "%s Attempting to add subscription to topic: %s", log_id_prefix, topic_str
888
889
  )
889
890
 
@@ -1207,7 +1208,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
1207
1208
  self.task_logger_service = TaskLoggerService(
1208
1209
  session_factory=session_factory, config=task_logging_config
1209
1210
  )
1210
- log.info(
1211
+ log.debug(
1211
1212
  "%s Services dependent on database session factory have been initialized.",
1212
1213
  self.log_identifier,
1213
1214
  )
@@ -1222,7 +1223,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
1222
1223
  app=self.fastapi_app,
1223
1224
  host=self.fastapi_host,
1224
1225
  port=port,
1225
- log_level="info",
1226
+ log_level="warning",
1226
1227
  lifespan="on",
1227
1228
  ssl_keyfile=self.ssl_keyfile,
1228
1229
  ssl_certfile=self.ssl_certfile,
@@ -1238,14 +1239,14 @@ class WebUIBackendComponent(BaseGatewayComponent):
1238
1239
  )
1239
1240
  try:
1240
1241
  self.fastapi_event_loop = asyncio.get_running_loop()
1241
- log.info(
1242
+ log.debug(
1242
1243
  "%s [_start_listener] Captured FastAPI event loop via startup event: %s",
1243
1244
  self.log_identifier,
1244
1245
  self.fastapi_event_loop,
1245
1246
  )
1246
1247
 
1247
1248
  if self.fastapi_event_loop:
1248
- log.info(
1249
+ log.debug(
1249
1250
  "%s Ensuring visualization flow is running...",
1250
1251
  self.log_identifier,
1251
1252
  )
@@ -1255,7 +1256,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
1255
1256
  self._visualization_processor_task is None
1256
1257
  or self._visualization_processor_task.done()
1257
1258
  ):
1258
- log.info(
1259
+ log.debug(
1259
1260
  "%s Starting visualization message processor task.",
1260
1261
  self.log_identifier,
1261
1262
  )
@@ -1265,7 +1266,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
1265
1266
  )
1266
1267
  )
1267
1268
  else:
1268
- log.info(
1269
+ log.debug(
1269
1270
  "%s Visualization message processor task already running.",
1270
1271
  self.log_identifier,
1271
1272
  )
@@ -1812,7 +1813,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
1812
1813
  for agent_name in agents_to_deregister:
1813
1814
  self._deregister_agent(agent_name)
1814
1815
 
1815
- log.info(
1816
+ log.debug(
1816
1817
  "%s Agent health check completed. Total agents: %d, De-registered: %d",
1817
1818
  self.log_identifier,
1818
1819
  total_agents,
@@ -2052,6 +2053,13 @@ class WebUIBackendComponent(BaseGatewayComponent):
2052
2053
  )
2053
2054
  return
2054
2055
 
2056
+ try:
2057
+ from solace_agent_mesh_enterprise.auth.input_required import handle_input_required_request
2058
+ event_data = handle_input_required_request(event_data, sse_task_id, self)
2059
+ except ImportError:
2060
+ pass
2061
+
2062
+
2055
2063
  log.debug(
2056
2064
  "%s Sending update for A2A Task ID %s to SSE Task ID %s. Final chunk: %s",
2057
2065
  log_id_prefix,
@@ -2073,7 +2081,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
2073
2081
  await self.sse_manager.send_event(
2074
2082
  task_id=sse_task_id, event_data=sse_payload, event_type=sse_event_type
2075
2083
  )
2076
- log.info(
2084
+ log.debug(
2077
2085
  "%s Successfully sent %s via SSE for A2A Task ID %s.",
2078
2086
  log_id_prefix,
2079
2087
  sse_event_type,