solace-agent-mesh 1.4.12__py3-none-any.whl → 1.5.0__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 (181) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +3 -4
  2. solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
  3. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +1 -1
  4. solace_agent_mesh/agent/adk/callbacks.py +51 -2
  5. solace_agent_mesh/agent/adk/models/lite_llm.py +1 -0
  6. solace_agent_mesh/agent/adk/models/models_llm.txt +1 -2
  7. solace_agent_mesh/agent/agent_llm.txt +1 -1
  8. solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
  9. solace_agent_mesh/agent/protocol/event_handlers.py +2 -13
  10. solace_agent_mesh/agent/protocol/protocol_llm.txt +15 -2
  11. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
  12. solace_agent_mesh/agent/sac/component.py +51 -21
  13. solace_agent_mesh/agent/sac/sac_llm.txt +15 -1
  14. solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
  15. solace_agent_mesh/agent/sac/task_execution_context.py +73 -0
  16. solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
  17. solace_agent_mesh/agent/tools/tools_llm.txt +148 -154
  18. solace_agent_mesh/agent/tools/tools_llm_detail.txt +274 -0
  19. solace_agent_mesh/agent/utils/utils_llm.txt +1 -1
  20. solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
  21. solace_agent_mesh/assets/docs/404.html +3 -3
  22. solace_agent_mesh/assets/docs/assets/js/483cef9a.bf9398af.js +1 -0
  23. solace_agent_mesh/assets/docs/assets/js/{main.f67fc9f4.js → main.0c149855.js} +2 -2
  24. solace_agent_mesh/assets/docs/assets/js/{runtime~main.40527046.js → runtime~main.c66557e4.js} +1 -1
  25. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/installation/index.html +3 -3
  26. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/rbac-setup-guilde/index.html +3 -3
  27. solace_agent_mesh/assets/docs/docs/documentation/Enterprise/single-sign-on/index.html +8 -4
  28. solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
  29. solace_agent_mesh/assets/docs/docs/documentation/Migrations/A2A Upgrade To 0.3.0/a2a-technical-migration-map/index.html +3 -3
  30. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +3 -3
  31. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +3 -3
  32. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +3 -3
  33. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +3 -3
  34. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +3 -3
  35. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +3 -3
  36. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +3 -3
  37. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +3 -3
  38. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +3 -3
  39. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +3 -3
  40. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/index.html +3 -3
  41. solace_agent_mesh/assets/docs/docs/documentation/getting-started/configurations/litellm_models/index.html +3 -3
  42. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +3 -3
  43. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
  44. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +3 -3
  45. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +3 -3
  46. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +3 -3
  47. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +3 -3
  48. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +3 -3
  49. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +3 -3
  50. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rag-integration/index.html +3 -3
  51. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +3 -3
  52. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +3 -3
  53. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +3 -3
  54. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +3 -3
  55. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +3 -3
  56. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +3 -3
  57. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +3 -3
  58. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +3 -3
  59. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +3 -3
  60. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +3 -3
  61. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-python-tools/index.html +3 -3
  62. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +3 -3
  63. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +3 -3
  64. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +3 -3
  65. solace_agent_mesh/assets/docs/lunr-index-1760032255022.json +1 -0
  66. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  67. solace_agent_mesh/assets/docs/search-doc-1760032255022.json +1 -0
  68. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  69. solace_agent_mesh/cli/__init__.py +1 -1
  70. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-j1LW-wlq.js → authCallback-DwrxZE0E.js} +1 -1
  71. solace_agent_mesh/client/webui/frontend/static/assets/{client-B9p_nFNA.js → client-DarGQzyw.js} +1 -1
  72. solace_agent_mesh/client/webui/frontend/static/assets/main-CZbpmwfA.css +1 -0
  73. solace_agent_mesh/client/webui/frontend/static/assets/main-C__uuUkB.js +339 -0
  74. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-CS5YMf8a.js → vendor-BKIeiHj_.js} +80 -70
  75. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  76. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  77. solace_agent_mesh/common/a2a/a2a_llm.txt +1 -1
  78. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
  79. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +1 -1
  80. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
  81. solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +23 -0
  82. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +93 -15
  83. solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +23 -0
  84. solace_agent_mesh/common/common_llm.txt +24 -39
  85. solace_agent_mesh/common/common_llm_detail.txt +2562 -0
  86. solace_agent_mesh/common/data_parts.py +9 -1
  87. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
  88. solace_agent_mesh/common/sac/sac_llm.txt +1 -1
  89. solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
  90. solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
  91. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
  92. solace_agent_mesh/common/services/services_llm.txt +57 -6
  93. solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
  94. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +1 -1
  95. solace_agent_mesh/common/utils/utils_llm.txt +75 -87
  96. solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
  97. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
  98. solace_agent_mesh/gateway/base/app.py +1 -1
  99. solace_agent_mesh/gateway/base/base_llm.txt +1 -1
  100. solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
  101. solace_agent_mesh/gateway/gateway_llm.txt +242 -235
  102. solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
  103. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +295 -0
  104. solace_agent_mesh/gateway/http_sse/alembic/env.py +10 -1
  105. solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
  106. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +155 -0
  107. solace_agent_mesh/gateway/http_sse/alembic.ini +1 -1
  108. solace_agent_mesh/gateway/http_sse/app.py +148 -2
  109. solace_agent_mesh/gateway/http_sse/component.py +368 -60
  110. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +46 -6
  111. solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +108 -0
  112. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +1 -1
  113. solace_agent_mesh/gateway/http_sse/dependencies.py +116 -26
  114. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +172 -172
  115. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
  116. solace_agent_mesh/gateway/http_sse/main.py +146 -41
  117. solace_agent_mesh/gateway/http_sse/repository/__init__.py +3 -12
  118. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +103 -0
  119. solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +5 -3
  120. solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
  121. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +263 -0
  122. solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
  123. solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -16
  124. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +25 -0
  125. solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
  126. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +81 -0
  127. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +73 -18
  128. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +9 -5
  129. solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
  130. solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
  131. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +266 -0
  132. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +3 -3
  133. solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
  134. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +32 -0
  135. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +340 -0
  136. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +4 -53
  137. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +173 -0
  138. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +1 -1
  139. solace_agent_mesh/gateway/http_sse/routers/config.py +26 -4
  140. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +346 -0
  141. solace_agent_mesh/gateway/http_sse/routers/dto/requests/__init__.py +3 -3
  142. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +83 -0
  143. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +2 -10
  144. solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
  145. solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +5 -3
  146. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +107 -0
  147. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +1 -15
  148. solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
  149. solace_agent_mesh/gateway/http_sse/routers/feedback.py +37 -0
  150. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +255 -204
  151. solace_agent_mesh/gateway/http_sse/routers/sessions.py +220 -40
  152. solace_agent_mesh/gateway/http_sse/routers/tasks.py +168 -42
  153. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +272 -0
  154. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +241 -0
  155. solace_agent_mesh/gateway/http_sse/services/people_service.py +0 -80
  156. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +177 -13
  157. solace_agent_mesh/gateway/http_sse/services/session_service.py +151 -84
  158. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +317 -0
  159. solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +25 -14
  160. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +285 -0
  161. solace_agent_mesh/gateway/http_sse/shared/types.py +7 -0
  162. solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
  163. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +32 -0
  164. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
  165. solace_agent_mesh/solace_agent_mesh_llm.txt +1 -1
  166. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -0
  167. {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/METADATA +1 -1
  168. {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/RECORD +172 -124
  169. solace_agent_mesh/agent/adk/invocation_monitor.py +0 -295
  170. solace_agent_mesh/assets/docs/assets/js/483cef9a.4736f2d8.js +0 -1
  171. solace_agent_mesh/assets/docs/lunr-index-1759936913198.json +0 -1
  172. solace_agent_mesh/assets/docs/search-doc-1759936913198.json +0 -1
  173. solace_agent_mesh/client/webui/frontend/static/assets/main-ChRwcV89.css +0 -1
  174. solace_agent_mesh/client/webui/frontend/static/assets/main-DnnE01OM.js +0 -339
  175. solace_agent_mesh/gateway/http_sse/repository/entities/message.py +0 -41
  176. solace_agent_mesh/gateway/http_sse/repository/message_repository.py +0 -84
  177. solace_agent_mesh/gateway/http_sse/repository/models/message_model.py +0 -45
  178. /solace_agent_mesh/assets/docs/assets/js/{main.f67fc9f4.js.LICENSE.txt → main.0c149855.js.LICENSE.txt} +0 -0
  179. {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/WHEEL +0 -0
  180. {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/entry_points.txt +0 -0
  181. {solace_agent_mesh-1.4.12.dist-info → solace_agent_mesh-1.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -221,4 +221,4 @@ if retrieved_context:
221
221
  context_manager.remove_context(task_id)
222
222
  ```
223
223
 
224
- # content_hash: 016addd094bc383fc1606b1540887c181ef630740fff8f4d801ff03d91e1cbd4
224
+ # content_hash: 849930d2f66a87b20823732d8339e50a0a55a0d52958b2467e072de8b3eebea9
@@ -0,0 +1,235 @@
1
+ # LLM Summary Detail File
2
+
3
+ This file is a concatenation of all individual *llm.txt files found in the 'base' directory tree. Each section below corresponds to a specific directory's summary file.
4
+
5
+ ================================================================================
6
+
7
+ ## Section 1: solace_agent_mesh/gateway/base/base_llm.txt
8
+
9
+ **Source file:** `solace_agent_mesh/gateway/base/base_llm.txt`
10
+
11
+ # DEVELOPER GUIDE: base
12
+
13
+ ## Quick Summary
14
+ The `base` directory provides foundational abstract classes for building Gateway implementations within the Solace AI Connector. It establishes a framework for handling common gateway tasks such as application configuration, Solace broker integration, A2A (Agent-to-Agent) message protocol handling, and managing the lifecycle of requests from external platforms. Developers should subclass `BaseGatewayApp` and `BaseGatewayComponent` to create new gateways.
15
+
16
+ ## Files Overview
17
+ - `__init__.py` - Marks the directory as a Python package
18
+ - `app.py` - Contains the base application class that handles configuration, schema merging, and broker setup
19
+ - `component.py` - Contains the core logic class for processing A2A messages and integrating with external platforms
20
+ - `task_context.py` - Provides a thread-safe manager for mapping A2A task IDs to their original request context
21
+
22
+ ## Developer API Reference
23
+
24
+ ### __init__.py
25
+ **Purpose:** Initializes the `gateway.base` Python package
26
+ **Import:** `from solace_agent_mesh.gateway.base import ...`
27
+
28
+ ---
29
+
30
+ ### app.py
31
+ **Purpose:** Provides the base application class for gateway implementations with automated configuration schema merging, Solace broker setup, and component instantiation
32
+ **Import:** `from solace_agent_mesh.gateway.base.app import BaseGatewayApp, BaseGatewayComponent`
33
+
34
+ **Classes:**
35
+ - `BaseGatewayComponent(ComponentBase)` - Base marker class for gateway components
36
+ - `BaseGatewayApp(app_info: Dict[str, Any], **kwargs)` - Main application class to be subclassed for new gateways
37
+ - `_get_gateway_component_class(self) -> Type[BaseGatewayComponent]` - **[Abstract Method]** Must return the specific gateway component class
38
+ - `namespace: str` - Absolute topic prefix for A2A communication (e.g., 'myorg/dev')
39
+ - `gateway_id: str` - Unique ID for this gateway instance (auto-generated if not provided)
40
+ - `artifact_service_config: Dict` - Configuration for the shared ADK Artifact Service
41
+ - `enable_embed_resolution: bool` - Flag to enable/disable late-stage 'artifact_content' embed resolution
42
+ - `gateway_max_artifact_resolve_size_bytes: int` - Maximum size for resolving artifacts (default: 104857600)
43
+ - `gateway_recursive_embed_depth: int` - Maximum depth for recursive embed resolution (default: 12)
44
+
45
+ **Constants/Variables:**
46
+ - `BASE_GATEWAY_APP_SCHEMA: Dict[str, List[Dict[str, Any]]]` - Base configuration schema automatically merged with subclass parameters
47
+ - `SPECIFIC_APP_SCHEMA_PARAMS_ATTRIBUTE_NAME: str` - Class attribute name ("SPECIFIC_APP_SCHEMA_PARAMS") for subclass-specific config parameters
48
+
49
+ **Usage Examples:**
50
+ ```python
51
+ from typing import Type, List, Dict, Any
52
+ from solace_agent_mesh.gateway.base.app import BaseGatewayApp
53
+ from .component import MyGatewayComponent
54
+
55
+ class MyGatewayApp(BaseGatewayApp):
56
+ """Custom gateway application for My Platform."""
57
+
58
+ # Define additional configuration parameters
59
+ SPECIFIC_APP_SCHEMA_PARAMS: List[Dict[str, Any]] = [
60
+ {
61
+ "name": "my_platform_api_key",
62
+ "required": True,
63
+ "type": "string",
64
+ "description": "API key for connecting to My Platform."
65
+ }
66
+ ]
67
+
68
+ def _get_gateway_component_class(self) -> Type[MyGatewayComponent]:
69
+ return MyGatewayComponent
70
+
71
+ # Usage in YAML config:
72
+ # app_config:
73
+ # namespace: "myorg/prod"
74
+ # gateway_id: "my-gateway-instance-01"
75
+ # artifact_service:
76
+ # type: "local_file"
77
+ # base_path: "/data/artifacts"
78
+ # my_platform_api_key: "secret-key-here"
79
+ ```
80
+
81
+ ---
82
+
83
+ ### component.py
84
+ **Purpose:** Provides the abstract base class for gateway components containing core A2A protocol logic, service management, and external platform integration interface
85
+ **Import:** `from solace_agent_mesh.gateway.base.component import BaseGatewayComponent`
86
+
87
+ **Classes:**
88
+ - `BaseGatewayComponent(**kwargs: Any)` - Abstract base class for gateway components
89
+ - **Public Methods:**
90
+ - `get_config(self, key: str, default: Any = None) -> Any` - Retrieves configuration from nested app_config or component_config
91
+ - `publish_a2a_message(self, topic: str, payload: Dict, user_properties: Optional[Dict] = None) -> None` - Publishes A2A messages to Solace broker
92
+ - `authenticate_and_enrich_user(self, external_event_data: Any) -> Optional[Dict[str, Any]]` - Orchestrates user authentication and identity enrichment
93
+ - `submit_a2a_task(self, target_agent_name: str, a2a_parts: List[ContentPart], external_request_context: Dict[str, Any], user_identity: Any, is_streaming: bool = True, api_version: str = "v2") -> str` - Submits task to target agent, returns task_id
94
+ - `run(self) -> None` - Starts component's async operations and external platform listener
95
+ - `cleanup(self) -> None` - Cleans up resources and stops background threads
96
+ - **Abstract Methods (Must be Implemented):**
97
+ - `_extract_initial_claims(self, external_event_data: Any) -> Optional[Dict[str, Any]]` - Extract identity claims from platform event (must return dict with 'id' key)
98
+ - `_start_listener(self) -> None` - Start external platform listener (e.g., web server, WebSocket)
99
+ - `_stop_listener(self) -> None` - Stop external platform listener
100
+ - `_translate_external_input(self, external_event: Any) -> Tuple[str, List[ContentPart], Dict[str, Any]]` - Convert external event to A2A format: (target_agent_name, a2a_parts, context)
101
+ - `_send_update_to_external(self, external_request_context: Dict[str, Any], event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent], is_final_chunk_of_update: bool) -> None` - Send streaming update to external platform
102
+ - `_send_final_response_to_external(self, external_request_context: Dict[str, Any], task_data: Task) -> None` - Send final response to external platform
103
+ - `_send_error_to_external(self, external_request_context: Dict[str, Any], error_data: JSONRPCError) -> None` - Send error to external platform
104
+ - **Properties:**
105
+ - `namespace: str` - A2A communication namespace
106
+ - `gateway_id: str` - Unique gateway instance ID
107
+ - `agent_registry: AgentRegistry` - Registry for discovered agents
108
+ - `core_a2a_service: CoreA2AService` - Core A2A protocol service
109
+ - `shared_artifact_service: Optional[BaseArtifactService]` - Artifact service instance
110
+ - `task_context_manager: TaskContextManager` - Thread-safe task context storage
111
+ - `identity_service: Optional[BaseIdentityService]` - Identity enrichment service
112
+
113
+ **Usage Examples:**
114
+ ```python
115
+ from typing import Any, Dict, List, Optional, Tuple, Union
116
+ from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
117
+ from solace_agent_mesh.common.a2a.types import ContentPart
118
+ from a2a.types import TextPart, Task, TaskStatusUpdateEvent, TaskArtifactUpdateEvent, JSONRPCError
119
+
120
+ class MyGatewayComponent(BaseGatewayComponent):
121
+
122
+ async def _extract_initial_claims(self, external_event_data: Any) -> Optional[Dict[str, Any]]:
123
+ """Extract user identity from platform-specific event."""
124
+ # Example for HTTP request
125
+ if hasattr(external_event_data, 'headers'):
126
+ user_id = external_event_data.headers.get('X-User-ID')
127
+ if user_id:
128
+ return {"id": user_id, "source": "http_header"}
129
+ return None
130
+
131
+ def _start_listener(self) -> None:
132
+ """Start your platform listener (web server, etc.)."""
133
+ # Example: Start FastAPI server, WebSocket connection, etc.
134
+ pass
135
+
136
+ def _stop_listener(self) -> None:
137
+ """Stop your platform listener."""
138
+ pass
139
+
140
+ async def _translate_external_input(self, external_event: Any) -> Tuple[str, List[ContentPart], Dict[str, Any]]:
141
+ """Convert external event to A2A format."""
142
+ # Example translation
143
+ target_agent = "my-agent"
144
+ message_text = getattr(external_event, 'message', 'Hello')
145
+ a2a_parts = [TextPart(text=message_text)]
146
+ context = {
147
+ "platform": "my_platform",
148
+ "user_id_for_artifacts": "user123",
149
+ "a2a_session_id": "session456"
150
+ }
151
+ return target_agent, a2a_parts, context
152
+
153
+ async def _send_update_to_external(self, external_request_context: Dict[str, Any],
154
+ event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent],
155
+ is_final_chunk_of_update: bool) -> None:
156
+ """Send streaming update back to external platform."""
157
+ # Extract text from event and send to your platform
158
+ pass
159
+
160
+ async def _send_final_response_to_external(self, external_request_context: Dict[str, Any],
161
+ task_data: Task) -> None:
162
+ """Send final response back to external platform."""
163
+ # Extract final result and send to your platform
164
+ pass
165
+
166
+ async def _send_error_to_external(self, external_request_context: Dict[str, Any],
167
+ error_data: JSONRPCError) -> None:
168
+ """Send error back to external platform."""
169
+ # Send error message to your platform
170
+ pass
171
+
172
+ # Usage in your handler:
173
+ async def handle_external_request(request):
174
+ # Authenticate user
175
+ user_identity = await component.authenticate_and_enrich_user(request)
176
+ if not user_identity:
177
+ return "Authentication failed"
178
+
179
+ # Translate request
180
+ target_agent, a2a_parts, context = await component._translate_external_input(request)
181
+
182
+ # Submit to A2A system
183
+ task_id = await component.submit_a2a_task(
184
+ target_agent_name=target_agent,
185
+ a2a_parts=a2a_parts,
186
+ external_request_context=context,
187
+ user_identity=user_identity,
188
+ is_streaming=True
189
+ )
190
+
191
+ return f"Task submitted: {task_id}"
192
+ ```
193
+
194
+ ---
195
+
196
+ ### task_context.py
197
+ **Purpose:** Provides thread-safe storage for mapping A2A task IDs to their original external request context
198
+ **Import:** `from solace_agent_mesh.gateway.base.task_context import TaskContextManager`
199
+
200
+ **Classes:**
201
+ - `TaskContextManager()` - Thread-safe context storage manager
202
+ - `store_context(self, task_id: str, context_data: Dict[str, Any]) -> None` - Store context for a task ID
203
+ - `get_context(self, task_id: str) -> Optional[Dict[str, Any]]` - Retrieve context for a task ID
204
+ - `remove_context(self, task_id: str) -> Optional[Dict[str, Any]]` - Remove and return context for a task ID
205
+ - `clear_all_contexts_for_testing(self) -> None` - Clear all contexts (testing only)
206
+
207
+ **Usage Examples:**
208
+ ```python
209
+ from solace_agent_mesh.gateway.base.task_context import TaskContextManager
210
+
211
+ # Initialize manager
212
+ context_manager = TaskContextManager()
213
+
214
+ # Store context when submitting task
215
+ task_id = "gdk-task-abc123"
216
+ context = {
217
+ "platform": "slack",
218
+ "channel_id": "C1234567890",
219
+ "thread_ts": "1234567890.123456",
220
+ "user_identity": {"id": "user123", "name": "John Doe"}
221
+ }
222
+ context_manager.store_context(task_id, context)
223
+
224
+ # Retrieve context when processing response
225
+ retrieved_context = context_manager.get_context(task_id)
226
+ if retrieved_context:
227
+ channel_id = retrieved_context["channel_id"]
228
+ # Send response back to Slack channel
229
+
230
+ # Clean up when task is complete
231
+ context_manager.remove_context(task_id)
232
+ ```
233
+
234
+ ================================================================================
235
+