solace-agent-mesh 1.6.1__py3-none-any.whl → 1.6.3__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 (124) 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 +53 -17
  7. solace_agent_mesh/agent/adk/setup.py +66 -38
  8. solace_agent_mesh/agent/protocol/event_handlers.py +243 -122
  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/sac/app.py +43 -2
  12. solace_agent_mesh/agent/sac/component.py +200 -72
  13. solace_agent_mesh/agent/sac/task_execution_context.py +35 -4
  14. solace_agent_mesh/agent/tools/tool_config_types.py +3 -0
  15. solace_agent_mesh/agent/utils/artifact_helpers.py +1 -1
  16. solace_agent_mesh/assets/docs/404.html +3 -3
  17. solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +1 -0
  18. solace_agent_mesh/assets/docs/assets/js/631738c7.7c4594c9.js +1 -0
  19. solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +1 -0
  20. solace_agent_mesh/assets/docs/assets/js/71da7b71.ddbdfbe2.js +1 -0
  21. solace_agent_mesh/assets/docs/assets/js/94e8668d.3b883666.js +1 -0
  22. solace_agent_mesh/assets/docs/assets/js/e92d0134.4f395c6b.js +1 -0
  23. solace_agent_mesh/assets/docs/assets/js/f284c35a.720d2ef2.js +1 -0
  24. solace_agent_mesh/assets/docs/assets/js/main.ed05b14d.js +2 -0
  25. solace_agent_mesh/assets/docs/assets/js/runtime~main.a8a75e0b.js +1 -0
  26. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +3 -3
  27. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +3 -3
  28. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +3 -3
  29. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +3 -3
  30. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +3 -3
  31. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +3 -3
  32. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +3 -3
  33. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +3 -3
  34. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +3 -3
  35. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +3 -3
  36. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +3 -3
  37. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +3 -3
  38. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +4 -25
  39. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +4 -4
  40. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
  41. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +76 -0
  42. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +5 -4
  43. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +3 -3
  44. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +3 -3
  45. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +3 -3
  46. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +3 -3
  47. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +3 -3
  48. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +3 -3
  49. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +3 -3
  50. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +3 -3
  51. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +3 -3
  52. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +3 -3
  53. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +3 -3
  54. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +3 -3
  55. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +3 -3
  56. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +3 -3
  57. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +3 -3
  58. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +3 -3
  59. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +3 -3
  60. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +3 -3
  61. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +23 -28
  62. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +3 -3
  63. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +3 -3
  64. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +3 -3
  65. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
  66. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +3 -3
  67. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +3 -6
  68. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +3 -3
  69. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +3 -3
  70. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +3 -3
  71. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +3 -3
  72. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
  73. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +3 -3
  74. solace_agent_mesh/assets/docs/lunr-index-1761744323675.json +1 -0
  75. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  76. solace_agent_mesh/assets/docs/search-doc-1761744323675.json +1 -0
  77. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  78. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  79. solace_agent_mesh/cli/__init__.py +1 -1
  80. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-D4_RMYRh.js} +1 -1
  81. solace_agent_mesh/client/webui/frontend/static/assets/{client-CaY59VuC.js → client-UZ3qU6Bq.js} +1 -1
  82. solace_agent_mesh/client/webui/frontend/static/assets/main--3yJYl7S.css +1 -0
  83. solace_agent_mesh/client/webui/frontend/static/assets/main-DojKHS49.js +342 -0
  84. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BEmvJSYz.js → vendor-DSqhjwq_.js} +1 -1
  85. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  86. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  87. solace_agent_mesh/common/a2a/events.py +2 -1
  88. solace_agent_mesh/common/sac/sam_component_base.py +24 -18
  89. solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
  90. solace_agent_mesh/gateway/base/component.py +12 -8
  91. solace_agent_mesh/gateway/http_sse/app.py +26 -0
  92. solace_agent_mesh/gateway/http_sse/component.py +158 -79
  93. solace_agent_mesh/gateway/http_sse/dependencies.py +83 -59
  94. solace_agent_mesh/gateway/http_sse/main.py +35 -11
  95. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +1 -1
  96. solace_agent_mesh/gateway/http_sse/routers/auth.py +103 -6
  97. solace_agent_mesh/gateway/http_sse/routers/config.py +1 -1
  98. solace_agent_mesh/gateway/http_sse/routers/sessions.py +1 -1
  99. solace_agent_mesh/gateway/http_sse/routers/sse.py +15 -5
  100. solace_agent_mesh/gateway/http_sse/routers/tasks.py +3 -3
  101. solace_agent_mesh/gateway/http_sse/routers/visualization.py +90 -8
  102. solace_agent_mesh/gateway/http_sse/services/session_service.py +1 -1
  103. solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
  104. solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +16 -1
  105. solace_agent_mesh/gateway/http_sse/sse_manager.py +15 -6
  106. solace_agent_mesh/templates/logging_config_template.ini +2 -2
  107. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.3.dist-info}/METADATA +2 -2
  108. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.3.dist-info}/RECORD +112 -110
  109. solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
  110. solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
  111. solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
  112. solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +0 -1
  113. solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
  114. solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
  115. solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
  116. solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
  117. solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
  118. solace_agent_mesh/assets/docs/search-doc-1761248203150.json +0 -1
  119. solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
  120. solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
  121. /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.js.LICENSE.txt → main.ed05b14d.js.LICENSE.txt} +0 -0
  122. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.3.dist-info}/WHEEL +0 -0
  123. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.3.dist-info}/entry_points.txt +0 -0
  124. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.3.dist-info}/licenses/LICENSE +0 -0
@@ -2,79 +2,80 @@
2
2
  Custom Solace AI Connector Component to Host Google ADK Agents via A2A Protocol.
3
3
  """
4
4
 
5
- import logging
6
- from typing import Any, Dict, Optional, Union, Callable, List, Tuple, TYPE_CHECKING
7
5
  import asyncio
8
- import functools
9
- import threading
10
6
  import concurrent.futures
11
7
  import fnmatch
12
- import time
8
+ import functools
9
+ import inspect
13
10
  import json
14
- from solace_ai_connector.common.message import (
15
- Message as SolaceMessage,
16
- )
17
- from solace_ai_connector.common.event import Event, EventType
11
+ import logging
12
+ import threading
13
+ import time
14
+ from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Union
18
15
 
19
- from solace_ai_connector.common.utils import import_module
20
- import inspect
21
- from pydantic import BaseModel, ValidationError
22
- from google.adk.agents.invocation_context import (
23
- LlmCallsLimitExceededError,
24
- )
25
- from google.adk.agents import RunConfig
26
- from google.adk.agents.run_config import StreamingMode
27
- from google.adk.sessions import BaseSessionService
28
- from google.adk.artifacts import BaseArtifactService
29
- from google.adk.memory import BaseMemoryService
30
- from google.adk.agents import LlmAgent
31
- from google.adk.runners import Runner
32
- from google.adk.models import LlmResponse
33
- from google.adk.agents.readonly_context import ReadonlyContext
34
- from google.adk.events import Event as ADKEvent
35
- from google.adk.agents.callback_context import CallbackContext
36
- from google.adk.models.llm_request import LlmRequest
37
- from google.genai import types as adk_types
38
- from google.adk.tools.mcp_tool import MCPToolset
39
16
  from a2a.types import (
40
17
  AgentCard,
41
- Artifact as A2AArtifact,
42
- Message as A2AMessage,
43
18
  MessageSendParams,
44
19
  SendMessageRequest,
45
20
  TaskState,
46
21
  TaskStatus,
47
22
  TaskStatusUpdateEvent,
48
23
  )
49
- from ...common import a2a
50
- from ...common.data_parts import AgentProgressUpdateData
51
- from ...common.a2a.translation import format_and_route_adk_event
52
- from ...agent.utils.config_parser import resolve_instruction_provider
24
+ from a2a.types import Artifact as A2AArtifact
25
+ from a2a.types import Message as A2AMessage
26
+ from google.adk.agents import LlmAgent, RunConfig
27
+ from google.adk.agents.callback_context import CallbackContext
28
+ from google.adk.agents.invocation_context import LlmCallsLimitExceededError
29
+ from google.adk.agents.readonly_context import ReadonlyContext
30
+ from google.adk.agents.run_config import StreamingMode
31
+ from google.adk.artifacts import BaseArtifactService
32
+ from google.adk.auth.credential_service.base_credential_service import (
33
+ BaseCredentialService,
34
+ )
35
+ from google.adk.events import Event as ADKEvent
36
+ from google.adk.memory import BaseMemoryService
37
+ from google.adk.models import LlmResponse
38
+ from google.adk.models.llm_request import LlmRequest
39
+ from google.adk.runners import Runner
40
+ from google.adk.sessions import BaseSessionService
41
+ from google.adk.tools.mcp_tool import MCPToolset
42
+ from google.genai import types as adk_types
43
+ from pydantic import BaseModel, ValidationError
44
+ from solace_ai_connector.common.event import Event, EventType
45
+ from solace_ai_connector.common.message import Message as SolaceMessage
46
+ from solace_ai_connector.common.utils import import_module
47
+
48
+ from ...agent.adk.runner import TaskCancelledError, run_adk_async_task_thread_wrapper
53
49
  from ...agent.adk.services import (
54
- initialize_session_service,
55
50
  initialize_artifact_service,
51
+ initialize_credential_service,
56
52
  initialize_memory_service,
53
+ initialize_session_service,
57
54
  )
58
55
  from ...agent.adk.setup import (
59
- load_adk_tools,
60
56
  initialize_adk_agent,
61
57
  initialize_adk_runner,
58
+ load_adk_tools,
62
59
  )
63
- from ...agent.protocol.event_handlers import (
64
- process_event,
65
- publish_agent_card,
66
- )
67
- from ...agent.adk.runner import run_adk_async_task_thread_wrapper, TaskCancelledError
60
+ from ...agent.protocol.event_handlers import process_event, publish_agent_card
68
61
  from ...agent.tools.peer_agent_tool import (
69
62
  CORRELATION_DATA_PREFIX,
70
- PeerAgentTool,
71
63
  PEER_TOOL_PREFIX,
64
+ PeerAgentTool,
72
65
  )
73
- from ...common.middleware.registry import MiddlewareRegistry
74
- from ...common.constants import DEFAULT_COMMUNICATION_TIMEOUT, HEALTH_CHECK_TTL_SECONDS, HEALTH_CHECK_INTERVAL_SECONDS
75
66
  from ...agent.tools.registry import tool_registry
76
- from ...common.sac.sam_component_base import SamComponentBase
67
+ from ...agent.utils.config_parser import resolve_instruction_provider
68
+ from ...common import a2a
69
+ from ...common.a2a.translation import format_and_route_adk_event
77
70
  from ...common.agent_registry import AgentRegistry
71
+ from ...common.constants import (
72
+ DEFAULT_COMMUNICATION_TIMEOUT,
73
+ HEALTH_CHECK_INTERVAL_SECONDS,
74
+ HEALTH_CHECK_TTL_SECONDS,
75
+ )
76
+ from ...common.data_parts import AgentProgressUpdateData
77
+ from ...common.middleware.registry import MiddlewareRegistry
78
+ from ...common.sac.sam_component_base import SamComponentBase
78
79
 
79
80
  log = logging.getLogger(__name__)
80
81
 
@@ -103,7 +104,6 @@ info = {
103
104
  }
104
105
  InstructionProvider = Callable[[ReadonlyContext], str]
105
106
 
106
-
107
107
  class SamAgentComponent(SamComponentBase):
108
108
  """
109
109
  A Solace AI Connector component that hosts a Google ADK agent,
@@ -128,7 +128,7 @@ class SamAgentComponent(SamComponentBase):
128
128
 
129
129
  super().__init__(info, **kwargs)
130
130
  self.agent_name = self.get_config("agent_name")
131
- log.info("%s Initializing A2A ADK Host Component...", self.log_identifier)
131
+ log.info("%s Initializing agent: %s (A2A ADK Host Component)...", self.log_identifier, self.agent_name)
132
132
 
133
133
  # Initialize the agent registry for health tracking
134
134
  self.agent_registry = AgentRegistry()
@@ -226,7 +226,6 @@ class SamAgentComponent(SamComponentBase):
226
226
  "max_message_size_bytes", 10_000_000
227
227
  )
228
228
 
229
- log.info("%s Configuration retrieved successfully.", self.log_identifier)
230
229
  except Exception as e:
231
230
  log.error(
232
231
  "%s Failed to retrieve configuration via get_config: %s",
@@ -237,6 +236,7 @@ class SamAgentComponent(SamComponentBase):
237
236
  self.session_service: BaseSessionService = None
238
237
  self.artifact_service: BaseArtifactService = None
239
238
  self.memory_service: BaseMemoryService = None
239
+ self.credential_service: Optional[BaseCredentialService] = None
240
240
  self.adk_agent: LlmAgent = None
241
241
  self.runner: Runner = None
242
242
  self.agent_card_tool_manifest: List[Dict[str, Any]] = []
@@ -265,9 +265,10 @@ class SamAgentComponent(SamComponentBase):
265
265
  self.session_service = initialize_session_service(self)
266
266
  self.artifact_service = initialize_artifact_service(self)
267
267
  self.memory_service = initialize_memory_service(self)
268
+ self.credential_service = initialize_credential_service(self)
268
269
 
269
270
  log.info(
270
- "%s Synchronous ADK services initialized.", self.log_identifier
271
+ "%s Initialized Synchronous ADK services.", self.log_identifier
271
272
  )
272
273
  except Exception as service_err:
273
274
  log.exception(
@@ -279,6 +280,18 @@ class SamAgentComponent(SamComponentBase):
279
280
  f"Failed to initialize synchronous ADK services: {service_err}"
280
281
  ) from service_err
281
282
 
283
+ # initialize enterprise features if available
284
+ try:
285
+ from solace_agent_mesh_enterprise.init_enterprise_component import (
286
+ init_enterprise_component_features,
287
+ )
288
+
289
+ init_enterprise_component_features(self)
290
+ except ImportError:
291
+ # Community edition
292
+ # Contact Solace support for enterprise features
293
+ pass
294
+
282
295
  from .app import (
283
296
  AgentInitCleanupConfig,
284
297
  ) # delayed import to avoid circular dependency
@@ -446,7 +459,7 @@ class SamAgentComponent(SamComponentBase):
446
459
  )
447
460
 
448
461
  log.info(
449
- "%s Initialization complete for agent: %s",
462
+ "%s Initialized agent: %s",
450
463
  self.log_identifier,
451
464
  self.agent_name,
452
465
  )
@@ -523,6 +536,83 @@ class SamAgentComponent(SamComponentBase):
523
536
  sub_task_id,
524
537
  )
525
538
 
539
+ async def get_main_task_context(
540
+ self, logical_task_id: str
541
+ ) -> Optional["TaskExecutionContext"]:
542
+ """
543
+ Retrieves the main task context for a given logical task ID.
544
+
545
+ This method is used when the current agent is the target agent for the task.
546
+ It returns the TaskExecutionContext which contains the full task state including
547
+ a2a_context, active_peer_sub_tasks, and other task execution details.
548
+
549
+ Args:
550
+ logical_task_id: The unique logical ID of the task
551
+
552
+ Returns:
553
+ The TaskExecutionContext if the task is active, None otherwise
554
+
555
+ Raises:
556
+ ValueError: If logical_task_id is None or empty
557
+ """
558
+ if not logical_task_id:
559
+ raise ValueError("logical_task_id cannot be None or empty")
560
+
561
+ with self.active_tasks_lock:
562
+ active_task_context = self.active_tasks.get(logical_task_id)
563
+ if active_task_context is None:
564
+ log.warning(
565
+ f"No active task context found for logical_task_id: {logical_task_id}"
566
+ )
567
+ return None
568
+
569
+ return active_task_context
570
+
571
+ async def get_all_sub_task_correlation_data_from_logical_task_id(
572
+ self, logical_task_id: str
573
+ ) -> list[dict[str, Any]]:
574
+ """
575
+ Retrieves correlation data for all active peer sub-tasks of a given logical task.
576
+
577
+ This method is used when forwarding requests to other agents in an A2A workflow.
578
+ It returns a list of correlation data dictionaries, each containing information
579
+ about a peer sub-task including peer_task_id, peer_agent_name, and original_task_context.
580
+
581
+ Args:
582
+ logical_task_id: The unique logical ID of the parent task
583
+
584
+ Returns:
585
+ List of correlation data dictionaries for active peer sub-tasks.
586
+ Returns empty list if no active peer sub-tasks exist.
587
+
588
+ Raises:
589
+ ValueError: If logical_task_id is None or empty
590
+ """
591
+ if not logical_task_id:
592
+ raise ValueError("logical_task_id cannot be None or empty")
593
+
594
+ with self.active_tasks_lock:
595
+ active_task_context = self.active_tasks.get(logical_task_id)
596
+ if active_task_context is None:
597
+ log.warning(
598
+ f"No active task context found for logical_task_id: {logical_task_id}"
599
+ )
600
+ return []
601
+
602
+ active_peer_sub_tasks = active_task_context.active_peer_sub_tasks
603
+ if not active_peer_sub_tasks:
604
+ log.debug(
605
+ f"No active peer sub-tasks found for logical_task_id: {logical_task_id}"
606
+ )
607
+ return []
608
+
609
+ results = []
610
+ for sub_task_id, correlation_data in active_peer_sub_tasks.items():
611
+ if sub_task_id is not None and correlation_data is not None:
612
+ results.append(correlation_data)
613
+
614
+ return results
615
+
526
616
  async def _get_correlation_data_for_sub_task(
527
617
  self, sub_task_id: str
528
618
  ) -> Optional[Dict[str, Any]]:
@@ -1514,7 +1604,7 @@ class SamAgentComponent(SamComponentBase):
1514
1604
  payload_to_publish, target_topic, a2a_context, user_properties
1515
1605
  )
1516
1606
 
1517
- log.info(
1607
+ log.debug(
1518
1608
  "%s Published %s status update to %s.",
1519
1609
  log_identifier,
1520
1610
  status_type,
@@ -1627,6 +1717,19 @@ class SamAgentComponent(SamComponentBase):
1627
1717
  is_run_based_session = a2a_context.get("is_run_based_session", False)
1628
1718
  is_final_turn_event = not adk_event.partial
1629
1719
 
1720
+ try:
1721
+ from solace_agent_mesh_enterprise.auth.tool_auth import handle_tool_auth_event
1722
+ auth_status_update = await handle_tool_auth_event(adk_event, self, a2a_context)
1723
+ if auth_status_update:
1724
+ await self._publish_status_update_with_buffer_flush(
1725
+ auth_status_update,
1726
+ a2a_context,
1727
+ skip_buffer_flush=False,
1728
+ )
1729
+ return
1730
+ except ImportError:
1731
+ pass
1732
+
1630
1733
  if not is_final_turn_event:
1631
1734
  if adk_event.content and adk_event.content.parts:
1632
1735
  for part in adk_event.content.parts:
@@ -1655,7 +1758,7 @@ class SamAgentComponent(SamComponentBase):
1655
1758
  )
1656
1759
 
1657
1760
  if buffer_has_content and (batching_disabled or threshold_met):
1658
- log.info(
1761
+ log.debug(
1659
1762
  "%s Partial event triggered buffer flush due to size/batching config.",
1660
1763
  log_id_main,
1661
1764
  )
@@ -1678,7 +1781,7 @@ class SamAgentComponent(SamComponentBase):
1678
1781
  else:
1679
1782
  buffer_content = task_context.get_streaming_buffer_content()
1680
1783
  if buffer_content:
1681
- log.info(
1784
+ log.debug(
1682
1785
  "%s Final event triggered flush of remaining buffer content.",
1683
1786
  log_id_main,
1684
1787
  )
@@ -1712,7 +1815,7 @@ class SamAgentComponent(SamComponentBase):
1712
1815
 
1713
1816
  if a2a_payload and target_topic:
1714
1817
  self._publish_a2a_event(a2a_payload, target_topic, a2a_context)
1715
- log.info(
1818
+ log.debug(
1716
1819
  "%s Published final turn event (e.g., tool call) to %s.",
1717
1820
  log_id_main,
1718
1821
  target_topic,
@@ -1998,9 +2101,14 @@ class SamAgentComponent(SamComponentBase):
1998
2101
  For STREAMING tasks, it uses the content of the last ADK event.
1999
2102
  """
2000
2103
  logical_task_id = a2a_context.get("logical_task_id")
2001
- original_message: Optional[SolaceMessage] = a2a_context.get(
2002
- "original_solace_message"
2003
- )
2104
+
2105
+ # Retrieve the original Solace message from TaskExecutionContext
2106
+ original_message: Optional[SolaceMessage] = None
2107
+ with self.active_tasks_lock:
2108
+ task_context = self.active_tasks.get(logical_task_id)
2109
+ if task_context:
2110
+ original_message = task_context.get_original_solace_message()
2111
+
2004
2112
  log.info(
2005
2113
  "%s Finalizing task %s successfully.", self.log_identifier, logical_task_id
2006
2114
  )
@@ -2194,9 +2302,14 @@ class SamAgentComponent(SamComponentBase):
2194
2302
  Called by the background ADK thread wrapper when a task is cancelled.
2195
2303
  """
2196
2304
  logical_task_id = a2a_context.get("logical_task_id")
2197
- original_message: Optional[SolaceMessage] = a2a_context.get(
2198
- "original_solace_message"
2199
- )
2305
+
2306
+ # Retrieve the original Solace message from TaskExecutionContext
2307
+ original_message: Optional[SolaceMessage] = None
2308
+ with self.active_tasks_lock:
2309
+ task_context = self.active_tasks.get(logical_task_id)
2310
+ if task_context:
2311
+ original_message = task_context.get_original_solace_message()
2312
+
2200
2313
  log.info(
2201
2314
  "%s Finalizing task %s as CANCELED.", self.log_identifier, logical_task_id
2202
2315
  )
@@ -2398,9 +2511,14 @@ class SamAgentComponent(SamComponentBase):
2398
2511
  Sends a COMPLETED status with an informative message.
2399
2512
  """
2400
2513
  logical_task_id = a2a_context.get("logical_task_id")
2401
- original_message: Optional[SolaceMessage] = a2a_context.get(
2402
- "original_solace_message"
2403
- )
2514
+
2515
+ # Retrieve the original Solace message from TaskExecutionContext
2516
+ original_message: Optional[SolaceMessage] = None
2517
+ with self.active_tasks_lock:
2518
+ task_context = self.active_tasks.get(logical_task_id)
2519
+ if task_context:
2520
+ original_message = task_context.get_original_solace_message()
2521
+
2404
2522
  log.info(
2405
2523
  "%s Finalizing task %s as COMPLETED (LLM call limit reached).",
2406
2524
  self.log_identifier,
@@ -2477,9 +2595,14 @@ class SamAgentComponent(SamComponentBase):
2477
2595
  Called by the background ADK thread wrapper.
2478
2596
  """
2479
2597
  logical_task_id = a2a_context.get("logical_task_id")
2480
- original_message: Optional[SolaceMessage] = a2a_context.get(
2481
- "original_solace_message"
2482
- )
2598
+
2599
+ # Retrieve the original Solace message from TaskExecutionContext
2600
+ original_message: Optional[SolaceMessage] = None
2601
+ with self.active_tasks_lock:
2602
+ task_context = self.active_tasks.get(logical_task_id)
2603
+ if task_context:
2604
+ original_message = task_context.get_original_solace_message()
2605
+
2483
2606
  log.error(
2484
2607
  "%s Finalizing task %s with error: %s",
2485
2608
  self.log_identifier,
@@ -2622,9 +2745,13 @@ class SamAgentComponent(SamComponentBase):
2622
2745
  log_id,
2623
2746
  e,
2624
2747
  )
2625
- original_message: Optional[SolaceMessage] = a2a_context.get(
2626
- "original_solace_message"
2627
- )
2748
+ # Retrieve the original Solace message from TaskExecutionContext for fallback NACK
2749
+ original_message: Optional[SolaceMessage] = None
2750
+ with self.active_tasks_lock:
2751
+ task_context = self.active_tasks.get(logical_task_id)
2752
+ if task_context:
2753
+ original_message = task_context.get_original_solace_message()
2754
+
2628
2755
  if original_message:
2629
2756
  try:
2630
2757
  original_message.call_negative_acknowledgements()
@@ -2825,6 +2952,7 @@ class SamAgentComponent(SamComponentBase):
2825
2952
  "replyTo": reply_to_topic,
2826
2953
  "a2aStatusTopic": status_topic,
2827
2954
  "userId": user_id,
2955
+ "delegating_agent_name": delegating_agent_name,
2828
2956
  }
2829
2957
  if isinstance(user_config, dict):
2830
2958
  user_properties["a2aUserConfig"] = user_config
@@ -3356,11 +3484,11 @@ class SamAgentComponent(SamComponentBase):
3356
3484
  resolver_config = context_for_embeds["config"]
3357
3485
 
3358
3486
  try:
3487
+ from ...common.utils.embeds.constants import EARLY_EMBED_TYPES
3359
3488
  from ...common.utils.embeds.resolver import (
3360
- resolve_embeds_in_string,
3361
3489
  evaluate_embed,
3490
+ resolve_embeds_in_string,
3362
3491
  )
3363
- from ...common.utils.embeds.constants import EARLY_EMBED_TYPES
3364
3492
 
3365
3493
  resolved_text, processed_until_index, signals_found = (
3366
3494
  await resolve_embeds_in_string(
@@ -4,7 +4,10 @@ Encapsulates the runtime state for a single, in-flight agent task.
4
4
 
5
5
  import asyncio
6
6
  import threading
7
- from typing import Any, Dict, List, Optional
7
+ from typing import Any, Dict, List, Optional, TYPE_CHECKING
8
+
9
+ if TYPE_CHECKING:
10
+ from solace_ai_connector.common.message import Message as SolaceMessage
8
11
 
9
12
 
10
13
  class TaskExecutionContext:
@@ -33,17 +36,21 @@ class TaskExecutionContext:
33
36
  self.artifact_signals_to_return: List[Dict[str, Any]] = []
34
37
  self.event_loop: Optional[asyncio.AbstractEventLoop] = None
35
38
  self.lock: threading.Lock = threading.Lock()
36
-
39
+
37
40
  # Token usage tracking
38
41
  self.total_input_tokens: int = 0
39
42
  self.total_output_tokens: int = 0
40
43
  self.total_cached_input_tokens: int = 0
41
44
  self.token_usage_by_model: Dict[str, Dict[str, int]] = {}
42
45
  self.token_usage_by_source: Dict[str, Dict[str, int]] = {}
43
-
46
+
44
47
  # Generic security storage (enterprise use only)
45
48
  self._security_context: Dict[str, Any] = {}
46
49
 
50
+ # Original Solace message for ACK/NACK operations
51
+ # Stored here instead of a2a_context to avoid serialization issues
52
+ self._original_solace_message: Optional["SolaceMessage"] = None
53
+
47
54
  def cancel(self) -> None:
48
55
  """Signals that the task should be cancelled."""
49
56
  self.cancellation_event.set()
@@ -295,10 +302,34 @@ class TaskExecutionContext:
295
302
  def clear_security_data(self) -> None:
296
303
  """
297
304
  Clear all security data.
298
-
305
+
299
306
  This method is provided for completeness but is not explicitly called.
300
307
  Security data is automatically cleaned up when the TaskExecutionContext
301
308
  is removed from active_tasks and garbage collected.
302
309
  """
303
310
  with self.lock:
304
311
  self._security_context.clear()
312
+
313
+ def set_original_solace_message(self, message: Optional["SolaceMessage"]) -> None:
314
+ """
315
+ Store the original Solace message for this task.
316
+
317
+ This message is used for ACK/NACK operations when the task completes.
318
+ Stored separately from a2a_context to avoid serialization issues when
319
+ the context is persisted to the ADK session state.
320
+
321
+ Args:
322
+ message: The Solace message that initiated this task, or None
323
+ """
324
+ with self.lock:
325
+ self._original_solace_message = message
326
+
327
+ def get_original_solace_message(self) -> Optional["SolaceMessage"]:
328
+ """
329
+ Retrieve the original Solace message for this task.
330
+
331
+ Returns:
332
+ The Solace message that initiated this task, or None if not available
333
+ """
334
+ with self.lock:
335
+ return self._original_solace_message
@@ -49,6 +49,9 @@ class McpToolConfig(BaseToolConfig):
49
49
  connection_params: Dict[str, Any]
50
50
  tool_name: Optional[str] = None # Optional filter
51
51
  environment_variables: Optional[Dict[str, Any]] = None
52
+ auth: dict[str, Any] | None = None
53
+ manifest: list[dict[str, Any]] | None = None
54
+
52
55
 
53
56
  AnyToolConfig = Union[
54
57
  BuiltinToolConfig,
@@ -822,7 +822,7 @@ async def get_artifact_info_list(
822
822
  keys = await list_keys_method(
823
823
  app_name=app_name, user_id=user_id, session_id=session_id
824
824
  )
825
- log.info(
825
+ log.debug(
826
826
  "%s Found %d artifact keys. Fetching details...", log_prefix, len(keys)
827
827
  )
828
828
 
@@ -4,13 +4,13 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.8.1">
6
6
  <title data-rh="true">Page Not Found | Solace Agent Mesh</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://solacelabs.github.io/solace-agent-mesh/img/logo.png"><meta data-rh="true" name="twitter:image" content="https://solacelabs.github.io/solace-agent-mesh/img/logo.png"><meta data-rh="true" property="og:url" content="https://solacelabs.github.io/solace-agent-mesh/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | Solace Agent Mesh"><link data-rh="true" rel="icon" href="/solace-agent-mesh/img/logo.png"><link data-rh="true" rel="canonical" href="https://solacelabs.github.io/solace-agent-mesh/404.html"><link data-rh="true" rel="alternate" href="https://solacelabs.github.io/solace-agent-mesh/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://solacelabs.github.io/solace-agent-mesh/404.html" hreflang="x-default"><link rel="stylesheet" href="/solace-agent-mesh/assets/css/styles.906a1503.css">
7
- <script src="/solace-agent-mesh/assets/js/runtime~main.e268214e.js" defer="defer"></script>
8
- <script src="/solace-agent-mesh/assets/js/main.b12eac43.js" defer="defer"></script>
7
+ <script src="/solace-agent-mesh/assets/js/runtime~main.a8a75e0b.js" defer="defer"></script>
8
+ <script src="/solace-agent-mesh/assets/js/main.ed05b14d.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
12
12
  <symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
13
13
  </defs></svg>
14
- <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/solace-agent-mesh/img/logo.png"><link rel="preload" as="image" href="/solace-agent-mesh/img/solace-logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/solace-agent-mesh/docs/documentation/getting-started"><div class="navbar__logo"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Solace Agent Mesh</b></a><a class="navbar__item navbar__link" href="/solace-agent-mesh/docs/documentation/getting-started/">Documentation</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Solace Agent Mesh</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/solace-agent-mesh/docs/documentation/getting-started">Documentation</a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh-core-plugins/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Official Plugins<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Company</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://solace.com/products/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Products<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/contact/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contact<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/support/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Support<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/legal/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Privacy and Legal<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.linkedin.com/company/solacedotcom/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/SolaceSystems" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://twitter.com/solacedotcom" target="_blank" rel="noopener noreferrer" class="footer__link-item">X<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="10%" height="10%"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="10%" height="10%"></div><div class="footer__copyright">Solace Agent Mesh. Copyright © 2025 Solace. Version: 1.6.1</div></div></div></footer></div>
14
+ <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/solace-agent-mesh/img/logo.png"><link rel="preload" as="image" href="/solace-agent-mesh/img/solace-logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/solace-agent-mesh/docs/documentation/getting-started"><div class="navbar__logo"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Solace Agent Mesh</b></a><a class="navbar__item navbar__link" href="/solace-agent-mesh/docs/documentation/getting-started/">Documentation</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Solace Agent Mesh</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/solace-agent-mesh/docs/documentation/getting-started">Documentation</a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh-core-plugins/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Official Plugins<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Company</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://solace.com/products/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Products<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/contact/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contact<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/support/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Support<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/legal/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Privacy and Legal<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.linkedin.com/company/solacedotcom/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/SolaceSystems" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://twitter.com/solacedotcom" target="_blank" rel="noopener noreferrer" class="footer__link-item">X<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="10%" height="10%"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="10%" height="10%"></div><div class="footer__copyright">Solace Agent Mesh. Copyright © 2025 Solace. Version: 1.6.3</div></div></div></footer></div>
15
15
  </body>
16
16
  </html>