solace-agent-mesh 1.7.1__py3-none-any.whl → 1.13.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (447) hide show
  1. solace_agent_mesh/agent/adk/alembic/README +74 -0
  2. solace_agent_mesh/agent/adk/alembic/env.py +77 -0
  3. solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
  4. solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
  5. solace_agent_mesh/agent/adk/alembic.ini +112 -0
  6. solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +164 -0
  7. solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
  8. solace_agent_mesh/agent/adk/callbacks.py +752 -127
  9. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +99 -7
  10. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
  11. solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
  12. solace_agent_mesh/agent/adk/models/lite_llm.py +34 -16
  13. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
  14. solace_agent_mesh/agent/adk/runner.py +66 -8
  15. solace_agent_mesh/agent/adk/schema_migration.py +88 -0
  16. solace_agent_mesh/agent/adk/services.py +41 -1
  17. solace_agent_mesh/agent/adk/setup.py +220 -32
  18. solace_agent_mesh/agent/adk/stream_parser.py +229 -40
  19. solace_agent_mesh/agent/protocol/event_handlers.py +219 -33
  20. solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
  21. solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
  22. solace_agent_mesh/agent/proxies/base/component.py +188 -22
  23. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
  24. solace_agent_mesh/agent/sac/app.py +37 -12
  25. solace_agent_mesh/agent/sac/component.py +322 -52
  26. solace_agent_mesh/agent/sac/patch_adk.py +8 -16
  27. solace_agent_mesh/agent/sac/task_execution_context.py +90 -0
  28. solace_agent_mesh/agent/tools/__init__.py +3 -0
  29. solace_agent_mesh/agent/tools/audio_tools.py +3 -3
  30. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +698 -24
  31. solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
  32. solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
  33. solace_agent_mesh/agent/tools/time_tools.py +126 -0
  34. solace_agent_mesh/agent/tools/tool_config_types.py +54 -2
  35. solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
  36. solace_agent_mesh/agent/tools/web_tools.py +125 -17
  37. solace_agent_mesh/agent/utils/artifact_helpers.py +243 -5
  38. solace_agent_mesh/agent/utils/context_helpers.py +17 -0
  39. solace_agent_mesh/assets/docs/404.html +6 -6
  40. solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
  41. solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
  42. solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
  43. solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
  44. solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
  45. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
  46. solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
  47. solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
  56. solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
  87. solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
  88. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
  89. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
  90. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
  91. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
  92. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +75 -75
  93. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
  94. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
  95. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
  96. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
  97. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
  98. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
  99. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
  100. solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
  101. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
  102. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +98 -112
  103. solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
  104. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
  105. solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
  106. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -28
  107. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -29
  108. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
  109. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
  110. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
  111. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +67 -53
  112. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -17
  113. solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
  114. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +38 -38
  115. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +87 -87
  116. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
  117. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
  118. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
  119. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
  120. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
  121. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
  122. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
  123. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
  124. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
  125. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
  126. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
  127. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
  128. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
  129. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
  130. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
  131. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +50 -23
  132. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +29 -24
  133. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +21 -21
  134. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
  135. solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +96 -66
  137. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +181 -181
  138. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +75 -75
  139. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +27 -27
  140. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
  141. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -38
  142. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +135 -114
  146. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +37 -37
  147. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
  148. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
  149. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
  150. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
  151. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +112 -112
  152. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +28 -28
  153. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
  154. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
  155. solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
  156. solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
  157. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  158. solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
  159. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  160. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  161. solace_agent_mesh/cli/__init__.py +1 -1
  162. solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
  163. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
  164. solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
  165. solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
  166. solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
  167. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
  168. solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
  169. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
  170. solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
  171. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
  172. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
  173. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
  174. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
  175. solace_agent_mesh/cli/commands/run_cmd.py +64 -49
  176. solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
  177. solace_agent_mesh/cli/main.py +15 -0
  178. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-tcIFZLis.js → authCallback-KnKMP_vb.js} +1 -1
  179. solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
  180. solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
  181. solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
  182. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-CINwxvwV.js → vendor-CGk8Suyh.js} +189 -94
  183. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  184. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  185. solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
  186. solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
  187. solace_agent_mesh/common/a2a/types.py +1 -1
  188. solace_agent_mesh/common/agent_registry.py +38 -11
  189. solace_agent_mesh/common/data_parts.py +124 -0
  190. solace_agent_mesh/common/error_handlers.py +83 -0
  191. solace_agent_mesh/common/exceptions.py +24 -0
  192. solace_agent_mesh/common/oauth/__init__.py +17 -0
  193. solace_agent_mesh/common/oauth/oauth_client.py +408 -0
  194. solace_agent_mesh/common/oauth/utils.py +50 -0
  195. solace_agent_mesh/common/rag_dto.py +156 -0
  196. solace_agent_mesh/common/sac/sam_component_base.py +73 -1
  197. solace_agent_mesh/common/sam_events/event_service.py +2 -2
  198. solace_agent_mesh/common/utils/embeds/converter.py +1 -8
  199. solace_agent_mesh/common/utils/embeds/modifiers.py +2 -27
  200. solace_agent_mesh/common/utils/embeds/resolver.py +94 -25
  201. solace_agent_mesh/common/utils/embeds/types.py +1 -0
  202. solace_agent_mesh/common/utils/log_formatters.py +20 -0
  203. solace_agent_mesh/common/utils/mime_helpers.py +12 -5
  204. solace_agent_mesh/common/utils/rbac_utils.py +69 -0
  205. solace_agent_mesh/common/utils/templates/__init__.py +8 -0
  206. solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
  207. solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
  208. solace_agent_mesh/config_portal/backend/common.py +12 -0
  209. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
  210. solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
  211. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
  212. solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
  213. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
  214. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
  215. solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
  216. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  217. solace_agent_mesh/core_a2a/service.py +3 -2
  218. solace_agent_mesh/gateway/adapter/base.py +28 -1
  219. solace_agent_mesh/gateway/adapter/types.py +9 -0
  220. solace_agent_mesh/gateway/base/app.py +10 -0
  221. solace_agent_mesh/gateway/base/auth_interface.py +103 -0
  222. solace_agent_mesh/gateway/base/component.py +451 -10
  223. solace_agent_mesh/gateway/generic/component.py +274 -30
  224. solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
  225. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +2 -43
  226. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +2 -2
  227. solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
  228. solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
  229. solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
  230. solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
  231. solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
  232. solace_agent_mesh/gateway/http_sse/app.py +23 -6
  233. solace_agent_mesh/gateway/http_sse/component.py +158 -73
  234. solace_agent_mesh/gateway/http_sse/dependencies.py +50 -57
  235. solace_agent_mesh/gateway/http_sse/main.py +58 -482
  236. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
  237. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +1 -1
  238. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +1 -1
  239. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +3 -2
  240. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
  241. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +2 -2
  242. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +2 -2
  243. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +5 -0
  244. solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
  245. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +1 -1
  246. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
  247. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +1 -1
  248. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +1 -1
  249. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +12 -107
  250. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
  251. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
  252. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +113 -7
  253. solace_agent_mesh/gateway/http_sse/routers/auth.py +69 -132
  254. solace_agent_mesh/gateway/http_sse/routers/config.py +235 -10
  255. solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
  256. solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
  257. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +1 -1
  258. solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
  259. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +1 -0
  260. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +3 -2
  261. solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
  262. solace_agent_mesh/gateway/http_sse/routers/feedback.py +2 -2
  263. solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
  264. solace_agent_mesh/gateway/http_sse/routers/projects.py +250 -24
  265. solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
  266. solace_agent_mesh/gateway/http_sse/routers/sessions.py +14 -5
  267. solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
  268. solace_agent_mesh/gateway/http_sse/routers/sse.py +117 -4
  269. solace_agent_mesh/gateway/http_sse/routers/tasks.py +509 -149
  270. solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
  271. solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
  272. solace_agent_mesh/gateway/http_sse/routers/visualization.py +2 -1
  273. solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
  274. solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
  275. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
  276. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
  277. solace_agent_mesh/gateway/http_sse/services/project_service.py +539 -12
  278. solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
  279. solace_agent_mesh/gateway/http_sse/services/session_service.py +198 -21
  280. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
  281. solace_agent_mesh/gateway/http_sse/sse_manager.py +280 -169
  282. solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
  283. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
  284. solace_agent_mesh/services/__init__.py +0 -0
  285. solace_agent_mesh/services/platform/__init__.py +29 -0
  286. solace_agent_mesh/services/platform/alembic/env.py +85 -0
  287. solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
  288. solace_agent_mesh/services/platform/alembic.ini +109 -0
  289. solace_agent_mesh/services/platform/api/__init__.py +3 -0
  290. solace_agent_mesh/services/platform/api/dependencies.py +154 -0
  291. solace_agent_mesh/services/platform/api/main.py +314 -0
  292. solace_agent_mesh/services/platform/api/middleware.py +51 -0
  293. solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
  294. solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
  295. solace_agent_mesh/services/platform/app.py +215 -0
  296. solace_agent_mesh/services/platform/component.py +777 -0
  297. solace_agent_mesh/shared/__init__.py +14 -0
  298. solace_agent_mesh/shared/api/__init__.py +42 -0
  299. solace_agent_mesh/shared/auth/__init__.py +26 -0
  300. solace_agent_mesh/shared/auth/dependencies.py +204 -0
  301. solace_agent_mesh/shared/auth/middleware.py +347 -0
  302. solace_agent_mesh/shared/database/__init__.py +20 -0
  303. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
  304. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
  305. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
  306. solace_agent_mesh/shared/exceptions/__init__.py +36 -0
  307. solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +1 -1
  308. solace_agent_mesh/shared/utils/__init__.py +21 -0
  309. solace_agent_mesh/templates/logging_config_template.yaml +48 -0
  310. solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
  311. solace_agent_mesh/templates/platform.yaml +49 -0
  312. solace_agent_mesh/templates/plugin_readme_template.md +3 -25
  313. solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
  314. solace_agent_mesh/templates/proxy_template.yaml +62 -0
  315. solace_agent_mesh/templates/webui.yaml +148 -6
  316. solace_agent_mesh/tools/web_search/__init__.py +18 -0
  317. solace_agent_mesh/tools/web_search/base.py +84 -0
  318. solace_agent_mesh/tools/web_search/google_search.py +247 -0
  319. solace_agent_mesh/tools/web_search/models.py +99 -0
  320. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +29 -8
  321. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/RECORD +334 -313
  322. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
  323. solace_agent_mesh/agent/adk/adk_llm.txt +0 -226
  324. solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
  325. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
  326. solace_agent_mesh/agent/adk/models/models_llm.txt +0 -189
  327. solace_agent_mesh/agent/agent_llm.txt +0 -369
  328. solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
  329. solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
  330. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
  331. solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +0 -190
  332. solace_agent_mesh/agent/proxies/base/base_llm.txt +0 -148
  333. solace_agent_mesh/agent/proxies/proxies_llm.txt +0 -283
  334. solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
  335. solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
  336. solace_agent_mesh/agent/testing/testing_llm.txt +0 -58
  337. solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
  338. solace_agent_mesh/agent/tools/tools_llm.txt +0 -276
  339. solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -275
  340. solace_agent_mesh/agent/utils/utils_llm.txt +0 -152
  341. solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
  342. solace_agent_mesh/assets/docs/assets/js/05749d90.c70b2be9.js +0 -1
  343. solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +0 -1
  344. solace_agent_mesh/assets/docs/assets/js/15e40e79.36003774.js +0 -1
  345. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
  346. solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +0 -1
  347. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
  348. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
  349. solace_agent_mesh/assets/docs/assets/js/3ac1795d.e4870a49.js +0 -1
  350. solace_agent_mesh/assets/docs/assets/js/3ff0015d.b63ee53a.js +0 -1
  351. solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +0 -1
  352. solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
  353. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.45b32c2b.js +0 -1
  354. solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +0 -1
  355. solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +0 -1
  356. solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
  357. solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +0 -1
  358. solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
  359. solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
  360. solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
  361. solace_agent_mesh/assets/docs/assets/js/94e8668d.09ed9234.js +0 -1
  362. solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
  363. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
  364. solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +0 -1
  365. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
  366. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.f902fad8.js +0 -1
  367. solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +0 -1
  368. solace_agent_mesh/assets/docs/assets/js/e04b235d.c9c50c7b.js +0 -1
  369. solace_agent_mesh/assets/docs/assets/js/e3d9abda.d11c67a7.js +0 -1
  370. solace_agent_mesh/assets/docs/assets/js/e6f9706b.045d0fa1.js +0 -1
  371. solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +0 -1
  372. solace_agent_mesh/assets/docs/assets/js/f284c35a.5099c51e.js +0 -1
  373. solace_agent_mesh/assets/docs/assets/js/main.f213fe0c.js +0 -2
  374. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9606d6a.js +0 -1
  375. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +0 -47
  376. solace_agent_mesh/assets/docs/lunr-index-1762283454666.json +0 -1
  377. solace_agent_mesh/assets/docs/search-doc-1762283454666.json +0 -1
  378. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
  379. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
  380. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
  381. solace_agent_mesh/client/webui/frontend/static/assets/client-CRYdKo2Q.js +0 -25
  382. solace_agent_mesh/client/webui/frontend/static/assets/main-CojeY_1w.css +0 -1
  383. solace_agent_mesh/client/webui/frontend/static/assets/main-ILja9MCG.js +0 -353
  384. solace_agent_mesh/common/a2a/a2a_llm.txt +0 -175
  385. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
  386. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -445
  387. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
  388. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -330
  389. solace_agent_mesh/common/common_llm.txt +0 -230
  390. solace_agent_mesh/common/common_llm_detail.txt +0 -2562
  391. solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
  392. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
  393. solace_agent_mesh/common/sac/sac_llm.txt +0 -71
  394. solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
  395. solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
  396. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
  397. solace_agent_mesh/common/services/providers/providers_llm.txt +0 -81
  398. solace_agent_mesh/common/services/services_llm.txt +0 -368
  399. solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
  400. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
  401. solace_agent_mesh/common/utils/utils_llm.txt +0 -335
  402. solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
  403. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
  404. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
  405. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
  406. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
  407. solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
  408. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
  409. solace_agent_mesh/gateway/base/base_llm.txt +0 -226
  410. solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
  411. solace_agent_mesh/gateway/gateway_llm.txt +0 -369
  412. solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
  413. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -345
  414. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_fulltext_search_indexes.py +0 -92
  415. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -161
  416. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
  417. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
  418. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
  419. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -221
  420. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -257
  421. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -308
  422. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -450
  423. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -133
  424. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -123
  425. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -312
  426. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -303
  427. solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
  428. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -319
  429. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
  430. solace_agent_mesh/llm.txt +0 -228
  431. solace_agent_mesh/llm_detail.txt +0 -2835
  432. solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
  433. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
  434. solace_agent_mesh/templates/logging_config_template.ini +0 -45
  435. solace_agent_mesh/templates/templates_llm.txt +0 -147
  436. /solace_agent_mesh/assets/docs/assets/js/{main.f213fe0c.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
  437. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
  438. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
  439. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
  440. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
  441. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
  442. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
  443. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
  444. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
  445. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
  446. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
  447. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,235 +0,0 @@
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
-
@@ -1,369 +0,0 @@
1
- # DEVELOPER GUIDE: gateway
2
-
3
- ## Quick Summary
4
- The `gateway` directory provides a comprehensive framework for building gateways that connect external platforms (Slack, HTTP/SSE web interfaces) to the Solace AI Connector's A2A (Agent-to-Agent) messaging system. The architecture consists of a foundational `base` module that defines abstract classes for gateway implementations, and specific gateway implementations like `slack` for Slack integration and `http_sse` for web-based interfaces. The framework handles authentication, message translation between external formats and A2A protocol, real-time streaming updates, and manages the complete lifecycle of requests from external platforms to AI agents.
5
-
6
- ## Files and Subdirectories Overview
7
- - **Direct files:**
8
- - `__init__.py`: Standard Python package initializer
9
- - `gateway_llm.txt`: Documentation or configuration file for LLM-related gateway functionality
10
- - `gateway_llm_detail.txt`: Comprehensive documentation combining all gateway module summaries
11
-
12
- - **Subdirectories:**
13
- - `base/`: Foundational abstract classes and utilities for building gateway implementations
14
- - `http_sse/`: HTTP/Server-Sent Events gateway for web-based user interfaces
15
-
16
- ## Developer API Reference
17
-
18
- ### Direct Files
19
-
20
- #### __init__.py
21
- **Purpose:** Initializes the `gateway` Python package
22
- **Import:** `from solace_agent_mesh.gateway import ...`
23
-
24
- **Classes/Functions/Constants:**
25
- This file is empty and contains no direct exports.
26
-
27
- #### gateway_llm.txt
28
- **Purpose:** Documentation or configuration file for LLM-related gateway functionality
29
- **Import:** Not applicable (text/documentation file)
30
-
31
- **Content:** This appears to be a documentation or configuration file rather than executable code.
32
-
33
- #### gateway_llm_detail.txt
34
- **Purpose:** Comprehensive documentation combining all individual LLM summary files from the gateway directory tree
35
- **Import:** Not applicable (text/documentation file)
36
-
37
- **Content:** Contains concatenated developer guides for all gateway subdirectories and components.
38
-
39
- ### Subdirectory APIs
40
-
41
- #### base/
42
- **Purpose:** Provides foundational abstract classes for building Gateway implementations
43
- **Key Exports:** `BaseGatewayApp`, `BaseGatewayComponent`, `TaskContextManager`
44
- **Import Examples:**
45
- ```python
46
- from solace_agent_mesh.gateway.base.app import BaseGatewayApp
47
- from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
48
- from solace_agent_mesh.gateway.base.task_context import TaskContextManager
49
- ```
50
-
51
- #### http_sse/
52
- **Purpose:** HTTP/Server-Sent Events gateway for web-based user interfaces with real-time streaming
53
- **Key Exports:** `WebUIBackendApp`, `WebUIBackendComponent`, `SSEManager`, `SessionManager`, routers, services
54
- **Import Examples:**
55
- ```python
56
- from solace_agent_mesh.gateway.http_sse.app import WebUIBackendApp
57
- from solace_agent_mesh.gateway.http_sse.component import WebUIBackendComponent
58
- from solace_agent_mesh.gateway.http_sse.sse_manager import SSEManager
59
- from solace_agent_mesh.gateway.http_sse.dependencies import get_sse_manager, get_session_manager
60
- ```
61
-
62
- ## Complete Usage Guide
63
-
64
- ### 1. Creating a Custom Gateway Implementation
65
-
66
- ```python
67
- from typing import Type, List, Dict, Any, Optional, Tuple, Union
68
- from solace_agent_mesh.gateway.base.app import BaseGatewayApp
69
- from solace_agent_mesh.gateway.base.component import BaseGatewayComponent
70
- from solace_agent_mesh.common.a2a.types import ContentPart, TextPart
71
- from a2a.types import Task, TaskStatusUpdateEvent, TaskArtifactUpdateEvent, JSONRPCError
72
-
73
- # Step 1: Define your gateway app class
74
- class MyCustomGatewayApp(BaseGatewayApp):
75
- """Custom gateway for My Platform integration."""
76
-
77
- # Define platform-specific configuration parameters
78
- SPECIFIC_APP_SCHEMA_PARAMS: List[Dict[str, Any]] = [
79
- {
80
- "name": "my_platform_api_key",
81
- "required": True,
82
- "type": "string",
83
- "description": "API key for My Platform"
84
- },
85
- {
86
- "name": "my_platform_webhook_url",
87
- "required": False,
88
- "type": "string",
89
- "description": "Webhook URL for receiving events"
90
- },
91
- {
92
- "name": "default_agent_name",
93
- "required": False,
94
- "type": "string",
95
- "default": "assistant",
96
- "description": "Default agent to route messages to"
97
- }
98
- ]
99
-
100
- def _get_gateway_component_class(self) -> Type[BaseGatewayComponent]:
101
- return MyCustomGatewayComponent
102
-
103
- # Step 2: Implement your gateway component
104
- class MyCustomGatewayComponent(BaseGatewayComponent):
105
- """Component implementing My Platform integration logic."""
106
-
107
- def __init__(self, **kwargs):
108
- super().__init__(**kwargs)
109
- self.api_key = self.get_config("my_platform_api_key")
110
- self.webhook_url = self.get_config("my_platform_webhook_url")
111
- self.default_agent = self.get_config("default_agent_name", "assistant")
112
- self.platform_client = None # Initialize your platform client
113
-
114
- async def _extract_initial_claims(self, external_event_data: Any) -> Optional[Dict[str, Any]]:
115
- """Extract user identity from platform event."""
116
- # Example: Extract user ID from your platform's event structure
117
- if hasattr(external_event_data, 'user_id'):
118
- return {
119
- "id": external_event_data.user_id,
120
- "platform": "my_platform",
121
- "username": getattr(external_event_data, 'username', None)
122
- }
123
- return None
124
-
125
- def _start_listener(self) -> None:
126
- """Start your platform's event listener."""
127
- # Example: Start webhook server, WebSocket connection, etc.
128
- print(f"Starting My Platform listener on {self.webhook_url}")
129
- # Initialize your platform client/listener here
130
-
131
- def _stop_listener(self) -> None:
132
- """Stop your platform's event listener."""
133
- print("Stopping My Platform listener")
134
- # Clean up platform client/listener here
135
-
136
- async def _translate_external_input(self, external_event: Any) -> Tuple[str, List[ContentPart], Dict[str, Any]]:
137
- """Convert platform event to A2A format."""
138
- # Extract message content
139
- message_text = getattr(external_event, 'message', '')
140
-
141
- # Determine target agent (could be extracted from message or use default)
142
- target_agent = getattr(external_event, 'target_agent', self.default_agent)
143
-
144
- # Create A2A content parts
145
- a2a_parts = [TextPart(text=message_text)]
146
-
147
- # Create context for tracking this request
148
- context = {
149
- "platform": "my_platform",
150
- "event_id": getattr(external_event, 'id', ''),
151
- "channel_id": getattr(external_event, 'channel_id', ''),
152
- "user_id_for_artifacts": getattr(external_event, 'user_id', ''),
153
- "a2a_session_id": f"my_platform_{getattr(external_event, 'session_id', '')}"
154
- }
155
-
156
- return target_agent, a2a_parts, context
157
-
158
- async def _send_update_to_external(self,
159
- external_request_context: Dict[str, Any],
160
- event_data: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent],
161
- is_final_chunk_of_update: bool) -> None:
162
- """Send streaming update to your platform."""
163
- channel_id = external_request_context.get("channel_id")
164
-
165
- # Extract text content from the event
166
- if hasattr(event_data, 'text_delta'):
167
- text_content = event_data.text_delta
168
- elif hasattr(event_data, 'content'):
169
- text_content = str(event_data.content)
170
- else:
171
- text_content = "Update received"
172
-
173
- # Send to your platform (example)
174
- await self._send_to_platform(channel_id, text_content, is_partial=not is_final_chunk_of_update)
175
-
176
- async def _send_final_response_to_external(self,
177
- external_request_context: Dict[str, Any],
178
- task_data: Task) -> None:
179
- """Send final response to your platform."""
180
- channel_id = external_request_context.get("channel_id")
181
-
182
- # Extract final response from task data
183
- final_response = "Task completed"
184
- if task_data.result and hasattr(task_data.result, 'content'):
185
- final_response = str(task_data.result.content)
186
-
187
- await self._send_to_platform(channel_id, final_response, is_final=True)
188
-
189
- async def _send_error_to_external(self,
190
- external_request_context: Dict[str, Any],
191
- error_data: JSONRPCError) -> None:
192
- """Send error to your platform."""
193
- channel_id = external_request_context.get("channel_id")
194
- error_message = f"Error: {error_data.message}"
195
- await self._send_to_platform(channel_id, error_message, is_error=True)
196
-
197
- async def _send_to_platform(self, channel_id: str, message: str, **kwargs):
198
- """Helper method to send messages to your platform."""
199
- # Implement your platform's message sending logic here
200
- print(f"Sending to {channel_id}: {message}")
201
-
202
- # Step 3: Usage
203
- if __name__ == "__main__":
204
- config = {
205
- "name": "my-custom-gateway",
206
- "namespace": "/myorg/prod",
207
- "gateway_id": "my-gateway-01",
208
- "my_platform_api_key": "your-api-key",
209
- "my_platform_webhook_url": "https://my-webhook.example.com",
210
- "default_agent_name": "my-assistant",
211
- "solace_config": {
212
- "broker_url": "tcp://localhost:55555",
213
- "vpn_name": "default",
214
- "username": "default",
215
- "password": "default"
216
- }
217
- }
218
-
219
- app = MyCustomGatewayApp(app_info=config)
220
- app.run()
221
- ```
222
-
223
- ### 2. Using the HTTP/SSE Gateway for Web Interfaces
224
-
225
- ```python
226
- from solace_agent_mesh.gateway.http_sse.app import WebUIBackendApp
227
- from fastapi import APIRouter, Depends, Request
228
- from solace_agent_mesh.gateway.http_sse.dependencies import (
229
- get_sse_manager, get_session_manager, get_core_a2a_service
230
- )
231
-
232
- # Configure web UI gateway
233
- webui_config = {
234
- "name": "my-webui",
235
- "session_secret_key": "your-secret-key",
236
- "fastapi_host": "0.0.0.0",
237
- "fastapi_port": 8000,
238
- "namespace": "/myorg/prod",
239
- "gateway_id": "webui-01",
240
- "cors_allowed_origins": ["http://localhost:3000"],
241
- "frontend_welcome_message": "Welcome to AI Assistant!",
242
- "frontend_bot_name": "Assistant",
243
- "frontend_enable_file_upload": True,
244
- "frontend_enable_agent_selection": True,
245
-
246
- # Database for session persistence
247
- "session_service": {
248
- "type": "sql",
249
- "database_url": "sqlite:///./sessions.db"
250
- },
251
-
252
- # A2A system configuration
253
- "solace_config": {
254
- "broker_url": "tcp://localhost:55555",
255
- "vpn_name": "default",
256
- "username": "default",
257
- "password": "default"
258
- }
259
- }
260
-
261
- # Create custom router for additional endpoints
262
- custom_router = APIRouter(prefix="/api/custom")
263
-
264
- @custom_router.get("/my-endpoint")
265
- async def my_custom_endpoint(
266
- request: Request,
267
- sse_manager = Depends(get_sse_manager),
268
- session_manager = Depends(get_session_manager)
269
- ):
270
- """Custom endpoint with access to gateway services."""
271
- user_id = session_manager.get_a2a_client_id(request)
272
- return {"user_id": user_id, "message": "Custom endpoint response"}
273
-
274
- # Create and run the web UI gateway
275
- webui_app = WebUIBackendApp(app_info=webui_config)
276
- webui_app.run()
277
- ```
278
-
279
- ### 3. Working with Task Context and Session Management
280
-
281
- ```python
282
- from solace_agent_mesh.gateway.base.task_context import TaskContextManager
283
- from solace_agent_mesh.gateway.http_sse.session_manager import SessionManager
284
-
285
- # Task context management (used internally by gateways)
286
- context_manager = TaskContextManager()
287
-
288
- # Store context when submitting a task
289
- task_id = "task-123"
290
- context = {
291
- "platform": "http_sse",
292
- "session_id": "session-456",
293
- "user_id": "user-789",
294
- "client_id": "client-abc"
295
- }
296
- context_manager.store_context(task_id, context)
297
-
298
- # Retrieve context when processing response
299
- retrieved_context = context_manager.get_context(task_id)
300
- if retrieved_context:
301
- # Send response back to original platform
302
- session_id = retrieved_context["session_id"]
303
-
304
- # Session management for web interfaces
305
- session_manager = SessionManager(
306
- secret_key="your-secret-key",
307
- app_config={"session_timeout": 3600}
308
- )
309
-
310
- # In a FastAPI endpoint
311
- @app.get("/api/session-info")
312
- async def get_session_info(request: Request):
313
- # Get A2A client ID for this web session
314
- client_id = session_manager.get_a2a_client_id(request)
315
-
316
- # Ensure we have an A2A session
317
- session_id = session_manager.ensure_a2a_session(request)
318
-
319
- return {
320
- "client_id": client_id,
321
- "session_id": session_id
322
- }
323
- ```
324
-
325
- ### 4. Real-time Streaming with Server-Sent Events
326
-
327
- ```python
328
- import asyncio
329
- import httpx
330
- import json
331
- from solace_agent_mesh.gateway.http_sse.sse_manager import SSEManager
332
- from solace_agent_mesh.gateway.http_sse.sse_event_buffer import SSEEventBuffer
333
-
334
- # Server-side SSE management
335
- sse_buffer = SSEEventBuffer(max_queue_size=100, max_age_seconds=300)
336
- sse_manager = SSEManager(max_queue_size=100, event_buffer=sse_buffer)
337
-
338
- # Create SSE connection for a task
339
- task_id = "task-123"
340
- sse_queue = sse_manager.create_sse_connection(task_id)
341
-
342
- # Send events to connected clients
343
- sse_manager.send_event(
344
- task_id=task_id,
345
- event_data={"message": "Task started", "progress": 0},
346
- event_type="task_update"
347
- )
348
-
349
- # Client-side SSE consumption
350
- async def listen_to_task_events(task_id: str):
351
- async with httpx.AsyncClient() as client:
352
- async with client.stream(
353
- "GET",
354
- f"http://localhost:8000/api/v1/sse/subscribe/{task_id}",
355
- headers={"Accept": "text/event-stream"}
356
- ) as response:
357
- async for line in response.aiter_lines():
358
- if line.startswith("data: "):
359
- event_data = line[6:] # Remove "data: " prefix
360
- try:
361
- parsed_data = json.loads(event_data)
362
- print(f"Received event: {parsed_data}")
363
- except json.JSONDecodeError:
364
- print(f"Received raw data: {event_data}")
365
- ```
366
-
367
- ### 5. Database
368
-
369
- # content_hash: 0b7ed0154e912abecea7634ace04f072596af9b37780b6093ab5585b700d3d39