solace-agent-mesh 1.6.1__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.
- solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +1 -1
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +135 -31
- solace_agent_mesh/agent/adk/models/lite_llm.py +5 -0
- solace_agent_mesh/agent/adk/runner.py +10 -12
- solace_agent_mesh/agent/adk/services.py +50 -14
- solace_agent_mesh/agent/adk/setup.py +66 -38
- solace_agent_mesh/agent/protocol/event_handlers.py +243 -122
- solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
- solace_agent_mesh/agent/proxies/base/app.py +3 -2
- solace_agent_mesh/agent/sac/app.py +43 -2
- solace_agent_mesh/agent/sac/component.py +200 -72
- solace_agent_mesh/agent/sac/task_execution_context.py +35 -4
- solace_agent_mesh/agent/tools/tool_config_types.py +3 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +1 -1
- solace_agent_mesh/assets/docs/404.html +3 -3
- solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.7c4594c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.ddbdfbe2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.4f395c6b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.720d2ef2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.d1643f0b.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.97f920d4.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +4 -25
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +76 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +5 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +3 -6
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +3 -3
- solace_agent_mesh/assets/docs/lunr-index-1761663789856.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1761663789856.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-D4_RMYRh.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{client-CaY59VuC.js → client-UZ3qU6Bq.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main--3yJYl7S.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-DojKHS49.js +342 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BEmvJSYz.js → vendor-DSqhjwq_.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
- solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
- solace_agent_mesh/common/a2a/events.py +2 -1
- solace_agent_mesh/common/sac/sam_component_base.py +24 -18
- solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
- solace_agent_mesh/gateway/base/component.py +12 -8
- solace_agent_mesh/gateway/http_sse/app.py +7 -0
- solace_agent_mesh/gateway/http_sse/component.py +17 -9
- solace_agent_mesh/gateway/http_sse/dependencies.py +83 -59
- solace_agent_mesh/gateway/http_sse/main.py +3 -2
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/auth.py +103 -6
- solace_agent_mesh/gateway/http_sse/routers/config.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/sse.py +15 -5
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +3 -3
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +90 -8
- solace_agent_mesh/gateway/http_sse/services/session_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +16 -1
- solace_agent_mesh/gateway/http_sse/sse_manager.py +15 -6
- solace_agent_mesh/templates/logging_config_template.ini +2 -2
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.2.dist-info}/METADATA +2 -2
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.2.dist-info}/RECORD +111 -109
- solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1761248203150.json +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
- solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
- /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.js.LICENSE.txt → main.d1643f0b.js.LICENSE.txt} +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.2.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.6.2.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
|
|
8
|
+
import functools
|
|
9
|
+
import inspect
|
|
13
10
|
import json
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
from
|
|
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
|
|
50
|
-
from
|
|
51
|
-
from
|
|
52
|
-
from
|
|
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 ...
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
2002
|
-
|
|
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
|
-
|
|
2198
|
-
|
|
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
|
-
|
|
2402
|
-
|
|
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
|
-
|
|
2481
|
-
|
|
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
|
-
|
|
2626
|
-
|
|
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,
|
|
@@ -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.
|
|
8
|
-
<script src="/solace-agent-mesh/assets/js/main.
|
|
7
|
+
<script src="/solace-agent-mesh/assets/js/runtime~main.97f920d4.js" defer="defer"></script>
|
|
8
|
+
<script src="/solace-agent-mesh/assets/js/main.d1643f0b.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.
|
|
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.2</div></div></div></footer></div>
|
|
15
15
|
</body>
|
|
16
16
|
</html>
|