solace-agent-mesh 0.2.3__py3-none-any.whl → 1.0.1__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 (518) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  2. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  3. solace_agent_mesh/agent/adk/callbacks.py +1694 -0
  4. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  5. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  6. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  7. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  8. solace_agent_mesh/agent/adk/runner.py +353 -0
  9. solace_agent_mesh/agent/adk/services.py +240 -0
  10. solace_agent_mesh/agent/adk/setup.py +751 -0
  11. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  12. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  13. solace_agent_mesh/agent/agent_llm.txt +41 -0
  14. solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
  15. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  16. solace_agent_mesh/agent/sac/app.py +640 -0
  17. solace_agent_mesh/agent/sac/component.py +3388 -0
  18. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  19. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  20. solace_agent_mesh/agent/sac/task_execution_context.py +176 -0
  21. solace_agent_mesh/agent/testing/__init__.py +3 -0
  22. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  23. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  24. solace_agent_mesh/agent/tools/__init__.py +14 -0
  25. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  28. solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
  29. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  30. solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
  31. solace_agent_mesh/agent/tools/registry.py +36 -0
  32. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  33. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  34. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  35. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  36. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  37. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  38. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  39. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  40. solace_agent_mesh/assets/docs/404.html +16 -0
  41. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  42. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  43. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  54. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  57. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  104. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
  132. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  165. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  167. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  168. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  170. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  171. solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
  172. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  173. solace_agent_mesh/assets/docs/search-doc-1753813536522.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  175. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  176. solace_agent_mesh/cli/__init__.py +1 -1
  177. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  178. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  179. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  180. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  181. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  183. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  184. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  185. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  186. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  187. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  188. solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
  189. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  190. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -0
  191. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  192. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  193. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  194. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  201. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  202. solace_agent_mesh/cli/main.py +17 -294
  203. solace_agent_mesh/cli/utils.py +135 -204
  204. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  205. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  210. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  211. solace_agent_mesh/common/__init__.py +1 -0
  212. solace_agent_mesh/common/a2a_protocol.py +564 -0
  213. solace_agent_mesh/common/agent_registry.py +42 -0
  214. solace_agent_mesh/common/client/__init__.py +4 -0
  215. solace_agent_mesh/common/client/card_resolver.py +21 -0
  216. solace_agent_mesh/common/client/client.py +85 -0
  217. solace_agent_mesh/common/client/client_llm.txt +133 -0
  218. solace_agent_mesh/common/common_llm.txt +144 -0
  219. solace_agent_mesh/common/constants.py +1 -14
  220. solace_agent_mesh/common/middleware/__init__.py +12 -0
  221. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  222. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  223. solace_agent_mesh/common/middleware/registry.py +125 -0
  224. solace_agent_mesh/common/server/__init__.py +4 -0
  225. solace_agent_mesh/common/server/server.py +122 -0
  226. solace_agent_mesh/common/server/server_llm.txt +169 -0
  227. solace_agent_mesh/common/server/task_manager.py +291 -0
  228. solace_agent_mesh/common/server/utils.py +28 -0
  229. solace_agent_mesh/common/services/__init__.py +4 -0
  230. solace_agent_mesh/common/services/employee_service.py +162 -0
  231. solace_agent_mesh/common/services/identity_service.py +129 -0
  232. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  233. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  234. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  235. solace_agent_mesh/common/services/services_llm.txt +132 -0
  236. solace_agent_mesh/common/types.py +411 -0
  237. solace_agent_mesh/common/utils/__init__.py +7 -0
  238. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  239. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  240. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  241. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  242. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  243. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  244. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  245. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  246. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  247. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  248. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  249. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  250. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  251. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  252. solace_agent_mesh/config_portal/backend/common.py +66 -24
  253. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
  254. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
  258. solace_agent_mesh/config_portal/backend/server.py +550 -140
  259. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
  260. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  267. solace_agent_mesh/core_a2a/__init__.py +1 -0
  268. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  269. solace_agent_mesh/core_a2a/service.py +331 -0
  270. solace_agent_mesh/evaluation/config_loader.py +657 -0
  271. solace_agent_mesh/evaluation/evaluator.py +667 -0
  272. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  273. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  274. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  275. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  276. solace_agent_mesh/evaluation/report/modal.html +59 -0
  277. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  278. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  279. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  280. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  281. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  282. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  283. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  284. solace_agent_mesh/evaluation/report_generator.py +613 -0
  285. solace_agent_mesh/evaluation/run.py +613 -0
  286. solace_agent_mesh/evaluation/subscriber.py +872 -0
  287. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  288. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  289. solace_agent_mesh/gateway/base/__init__.py +1 -0
  290. solace_agent_mesh/gateway/base/app.py +266 -0
  291. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  292. solace_agent_mesh/gateway/base/component.py +1542 -0
  293. solace_agent_mesh/gateway/base/task_context.py +74 -0
  294. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  295. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  296. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  297. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  298. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  299. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  300. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  301. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  302. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  303. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  304. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  305. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
  306. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  307. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  308. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  309. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  310. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  311. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  312. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  313. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  314. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  315. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  316. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  317. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  318. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  319. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  320. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  321. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  322. solace_agent_mesh/llm.txt +228 -0
  323. solace_agent_mesh/llm_detail.txt +2835 -0
  324. solace_agent_mesh/templates/agent_template.yaml +53 -0
  325. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  326. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  327. solace_agent_mesh/templates/gateway_component_template.py +400 -0
  328. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  329. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  330. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  331. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  332. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  333. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  334. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  335. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  336. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  337. solace_agent_mesh/templates/shared_config.yaml +66 -0
  338. solace_agent_mesh/templates/templates_llm.txt +147 -0
  339. solace_agent_mesh/templates/webui.yaml +53 -0
  340. solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
  341. solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
  342. solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
  343. {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -226
  345. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  346. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  347. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  348. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  349. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  350. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  351. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  352. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  353. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  354. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  355. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  356. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  357. solace_agent_mesh/agents/slack/__init__.py +0 -1
  358. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  359. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  360. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  361. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  362. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  363. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  364. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  365. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  366. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  367. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  368. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  369. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  370. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  371. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  372. solace_agent_mesh/cli/commands/add/add.py +0 -88
  373. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  374. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  375. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  376. solace_agent_mesh/cli/commands/build.py +0 -670
  377. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  378. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  379. solace_agent_mesh/cli/commands/config.py +0 -29
  380. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  382. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  383. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  384. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  385. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  386. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  387. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  388. solace_agent_mesh/cli/commands/init/init.py +0 -92
  389. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  390. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  391. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  392. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  393. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  394. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  395. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  396. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  397. solace_agent_mesh/cli/commands/run.py +0 -68
  398. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  399. solace_agent_mesh/cli/config.py +0 -85
  400. solace_agent_mesh/common/action.py +0 -91
  401. solace_agent_mesh/common/action_list.py +0 -37
  402. solace_agent_mesh/common/action_response.py +0 -340
  403. solace_agent_mesh/common/mysql_database.py +0 -40
  404. solace_agent_mesh/common/postgres_database.py +0 -85
  405. solace_agent_mesh/common/prompt_templates.py +0 -28
  406. solace_agent_mesh/common/stimulus_utils.py +0 -152
  407. solace_agent_mesh/common/time.py +0 -24
  408. solace_agent_mesh/common/utils.py +0 -712
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DMmCawWe.js +0 -42
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-dd988f05.js +0 -1
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  414. solace_agent_mesh/configs/agent_global.yaml +0 -74
  415. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  416. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  417. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  418. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  419. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  420. solace_agent_mesh/configs/monitor.yaml +0 -0
  421. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  422. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  423. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  424. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  425. solace_agent_mesh/configs/service_llm.yaml +0 -265
  426. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  427. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  428. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  429. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  430. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  431. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  432. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  433. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  434. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  435. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  436. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  437. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  438. solace_agent_mesh/orchestrator/__init__.py +0 -0
  439. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  440. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  441. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  442. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  443. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  444. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  445. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  446. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  447. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  448. solace_agent_mesh/services/__init__.py +0 -0
  449. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  450. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  451. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  452. solace_agent_mesh/services/common/__init__.py +0 -4
  453. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  454. solace_agent_mesh/services/common/singleton.py +0 -18
  455. solace_agent_mesh/services/file_service/__init__.py +0 -14
  456. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  457. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  458. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  459. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  460. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  461. solace_agent_mesh/services/file_service/file_service.py +0 -437
  462. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  463. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  464. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  465. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  466. solace_agent_mesh/services/history_service/__init__.py +0 -3
  467. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  468. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  469. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  470. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  471. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  472. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  473. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  474. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  475. solace_agent_mesh/services/history_service/history_service.py +0 -413
  476. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  477. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  478. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  479. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  480. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  481. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  482. solace_agent_mesh/templates/action.py +0 -38
  483. solace_agent_mesh/templates/agent.py +0 -29
  484. solace_agent_mesh/templates/agent.yaml +0 -70
  485. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  486. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  487. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  488. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  489. solace_agent_mesh/templates/gateway_base.py +0 -15
  490. solace_agent_mesh/templates/gateway_input.py +0 -98
  491. solace_agent_mesh/templates/gateway_output.py +0 -71
  492. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  493. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  494. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  495. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  496. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  497. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  498. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  499. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  500. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  501. solace_agent_mesh/templates/web-flows.yaml +0 -76
  502. solace_agent_mesh/tools/__init__.py +0 -0
  503. solace_agent_mesh/tools/components/__init__.py +0 -0
  504. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  505. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  506. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  507. solace_agent_mesh-0.2.3.dist-info/METADATA +0 -172
  508. solace_agent_mesh-0.2.3.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.3.dist-info/entry_points.txt +0 -3
  510. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  511. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  512. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  513. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  517. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  518. {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,212 @@
1
+ """
2
+ Router for handling authentication-related endpoints.
3
+ """
4
+
5
+ from fastapi import (
6
+ APIRouter,
7
+ Request as FastAPIRequest,
8
+ Depends,
9
+ HTTPException,
10
+ Response,
11
+ )
12
+ from fastapi.responses import RedirectResponse
13
+ import httpx
14
+ import secrets
15
+ from urllib.parse import urlencode
16
+
17
+ from ...http_sse.dependencies import get_sac_component, get_api_config
18
+ from solace_ai_connector.common.log import log
19
+
20
+ router = APIRouter()
21
+
22
+
23
+ @router.get("/auth/login")
24
+ async def initiate_login(
25
+ request: FastAPIRequest, config: dict = Depends(get_api_config)
26
+ ):
27
+ """
28
+ Initiates the login flow by redirecting to the external authorization service.
29
+ """
30
+ external_auth_url = config.get("external_auth_service_url", "http://localhost:8080")
31
+ callback_url = config.get(
32
+ "external_auth_callback_uri", "http://localhost:8000/api/v1/auth/callback"
33
+ )
34
+
35
+ params = {
36
+ "provider": config.get("external_auth_provider", "azure"),
37
+ "redirect_uri": callback_url,
38
+ }
39
+
40
+ login_url = f"{external_auth_url}/login?{urlencode(params)}"
41
+ log.info(f"Redirecting to external authorization service: {login_url}")
42
+
43
+ return RedirectResponse(url=login_url)
44
+
45
+
46
+ @router.get("/csrf-token")
47
+ async def get_csrf_token(
48
+ response: Response, component: "WebUIBackendComponent" = Depends(get_sac_component)
49
+ ):
50
+ """
51
+ Generates and returns a CSRF token, setting it as a readable cookie and returning it in the response.
52
+ """
53
+ csrf_token = secrets.token_urlsafe(32)
54
+
55
+ response.set_cookie(
56
+ key="csrf_token",
57
+ value=csrf_token,
58
+ httponly=False,
59
+ secure=False,
60
+ samesite="lax",
61
+ max_age=3600,
62
+ )
63
+
64
+ return {"message": "CSRF token set", "csrf_token": csrf_token}
65
+
66
+
67
+ @router.get("/auth/callback")
68
+ async def auth_callback(
69
+ request: FastAPIRequest,
70
+ config: dict = Depends(get_api_config),
71
+ component: "WebUIBackendComponent" = Depends(get_sac_component),
72
+ ):
73
+ """
74
+ Handles the callback from the OIDC provider by calling an external exchange service.
75
+ """
76
+ code = request.query_params.get("code")
77
+
78
+ if not code:
79
+ raise HTTPException(status_code=400, detail="Missing authorization code")
80
+
81
+ external_auth_url = config.get("external_auth_service_url", "http://localhost:8080")
82
+ exchange_url = f"{external_auth_url}/exchange-code"
83
+ redirect_uri = config.get(
84
+ "external_auth_callback_uri", "http://localhost:8000/api/v1/auth/callback"
85
+ )
86
+
87
+ async with httpx.AsyncClient() as client:
88
+ try:
89
+ response = await client.post(
90
+ exchange_url,
91
+ json={
92
+ "code": code,
93
+ "provider": config.get("external_auth_provider", "azure"),
94
+ "redirect_uri": redirect_uri,
95
+ },
96
+ timeout=20.0,
97
+ )
98
+ response.raise_for_status()
99
+ token_data = response.json()
100
+ except httpx.HTTPStatusError as e:
101
+ log.error(f"Failed to exchange code: {e.response.text}")
102
+ raise HTTPException(
103
+ status_code=e.response.status_code,
104
+ detail=f"Failed to exchange code: {e.response.text}",
105
+ )
106
+ except Exception as e:
107
+ log.error(f"Error during code exchange: {e}")
108
+ raise HTTPException(status_code=500, detail="Error during code exchange")
109
+
110
+ access_token = token_data.get("access_token")
111
+ refresh_token = token_data.get("refresh_token")
112
+
113
+ if not access_token:
114
+ raise HTTPException(
115
+ status_code=400, detail="Access token not in response from exchange service"
116
+ )
117
+
118
+ request.session["access_token"] = access_token
119
+ if refresh_token:
120
+ request.session["refresh_token"] = refresh_token
121
+ log.debug("Tokens stored directly in session.")
122
+
123
+ try:
124
+ async with httpx.AsyncClient() as client:
125
+ user_info_response = await client.get(
126
+ f"{external_auth_url}/user_info",
127
+ params={"provider": config.get("external_auth_provider", "azure")},
128
+ headers={"Authorization": f"Bearer {access_token}"},
129
+ )
130
+ user_info_response.raise_for_status()
131
+ user_info = user_info_response.json()
132
+
133
+ user_id = user_info.get("email", "authenticated_user")
134
+ if user_id:
135
+ session_manager = component.get_session_manager()
136
+ session_manager.store_user_id(request, user_id)
137
+ else:
138
+ log.warning("Could not find 'email' in user info response.")
139
+
140
+ except httpx.HTTPStatusError as e:
141
+ log.error(f"Failed to get user info: {e.response.text}")
142
+
143
+ except Exception as e:
144
+ log.error(f"Error getting user info: {e}")
145
+
146
+ frontend_base_url = config.get("frontend_redirect_url", "http://localhost:3000")
147
+
148
+ hash_params = {"access_token": access_token}
149
+ if refresh_token:
150
+ hash_params["refresh_token"] = refresh_token
151
+
152
+ hash_fragment = urlencode(hash_params)
153
+
154
+ frontend_redirect_url = f"{frontend_base_url}/auth-callback.html#{hash_fragment}"
155
+ return RedirectResponse(url=frontend_redirect_url)
156
+
157
+
158
+ @router.post("/auth/refresh")
159
+ async def refresh_token(
160
+ request: FastAPIRequest,
161
+ config: dict = Depends(get_api_config),
162
+ component: "WebUIBackendComponent" = Depends(get_sac_component),
163
+ ):
164
+ """
165
+ Refreshes an access token using the external authorization service.
166
+ """
167
+ data = await request.json()
168
+ refresh_token = data.get("refresh_token")
169
+ if not refresh_token:
170
+ raise HTTPException(status_code=400, detail="Missing refresh_token")
171
+
172
+ external_auth_url = config.get("external_auth_service_url", "http://localhost:8080")
173
+ refresh_url = f"{external_auth_url}/refresh_token"
174
+
175
+ async with httpx.AsyncClient() as client:
176
+ try:
177
+ response = await client.post(
178
+ refresh_url,
179
+ json={
180
+ "refresh_token": refresh_token,
181
+ "provider": config.get("external_auth_provider", "azure"),
182
+ },
183
+ timeout=20.0,
184
+ )
185
+ response.raise_for_status()
186
+ token_data = response.json()
187
+ except httpx.HTTPStatusError as e:
188
+ log.error(f"Failed to refresh token: {e.response.text}")
189
+ raise HTTPException(
190
+ status_code=e.response.status_code,
191
+ detail=f"Failed to refresh token: {e.response.text}",
192
+ )
193
+ except Exception as e:
194
+ log.error(f"Error during token refresh: {e}")
195
+ raise HTTPException(status_code=500, detail="Error during token refresh")
196
+
197
+ access_token = token_data.get("access_token")
198
+ new_refresh_token = token_data.get("refresh_token")
199
+
200
+ if not access_token:
201
+ raise HTTPException(
202
+ status_code=400, detail="Access token not in response from refresh service"
203
+ )
204
+
205
+ session_manager = component.get_session_manager()
206
+ session_manager.store_auth_tokens(request, access_token, new_refresh_token)
207
+ log.info("Successfully refreshed and updated tokens in session.")
208
+
209
+ return {
210
+ "access_token": access_token,
211
+ "refresh_token": new_refresh_token,
212
+ }
@@ -0,0 +1,55 @@
1
+ """
2
+ API Router for providing frontend configuration.
3
+ """
4
+
5
+ from fastapi import APIRouter, Depends, HTTPException, status
6
+ from typing import Dict, Any
7
+
8
+ from solace_ai_connector.common.log import log
9
+
10
+ from ....gateway.http_sse.dependencies import get_sac_component
11
+ from typing import TYPE_CHECKING
12
+
13
+ if TYPE_CHECKING:
14
+ from gateway.http_sse.component import WebUIBackendComponent
15
+
16
+ router = APIRouter()
17
+
18
+
19
+ @router.get("/config", response_model=Dict[str, Any])
20
+ async def get_app_config(
21
+ component: "WebUIBackendComponent" = Depends(get_sac_component),
22
+ ):
23
+ """
24
+ Provides configuration settings needed by the frontend application.
25
+ """
26
+ log_prefix = "[GET /api/v1/config] "
27
+ log.info("%sRequest received.", log_prefix)
28
+ try:
29
+ config_data = {
30
+ "frontend_server_url": "",
31
+ "frontend_auth_login_url": component.get_config(
32
+ "frontend_auth_login_url", ""
33
+ ),
34
+ "frontend_use_authorization": component.get_config(
35
+ "frontend_use_authorization", False
36
+ ),
37
+ "frontend_welcome_message": component.get_config(
38
+ "frontend_welcome_message", ""
39
+ ),
40
+ "frontend_redirect_url": component.get_config("frontend_redirect_url", ""),
41
+ "frontend_collect_feedback": component.get_config(
42
+ "frontend_collect_feedback", False
43
+ ),
44
+ "frontend_bot_name": component.get_config("frontend_bot_name", "A2A Agent"),
45
+ }
46
+ log.info("%sReturning frontend configuration.", log_prefix)
47
+ return config_data
48
+ except Exception as e:
49
+ log.exception(
50
+ "%sError retrieving configuration for frontend: %s", log_prefix, e
51
+ )
52
+ raise HTTPException(
53
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
54
+ detail="Internal server error retrieving configuration.",
55
+ )
@@ -0,0 +1,69 @@
1
+ """
2
+ API endpoints for people-related features, such as user search for autocomplete.
3
+ """
4
+
5
+ from typing import Any, Dict, List
6
+
7
+ from fastapi import APIRouter, Depends, Query
8
+ from solace_ai_connector.common.log import log
9
+
10
+ from ..dependencies import get_people_service
11
+ from ..services.people_service import PeopleService
12
+
13
+ router = APIRouter()
14
+
15
+
16
+ @router.get("/people/search", response_model=List[Dict[str, Any]])
17
+ async def search_people(
18
+ q: str = Query(
19
+ ...,
20
+ min_length=2,
21
+ max_length=50,
22
+ description="Search query for user name/email.",
23
+ ),
24
+ limit: int = Query(
25
+ 10, ge=1, le=25, description="Maximum number of results to return."
26
+ ),
27
+ people_service: PeopleService = Depends(get_people_service),
28
+ ):
29
+ """
30
+ Searches for users to populate frontend autocomplete suggestions (e.g., for @mentions).
31
+ """
32
+ log.debug("Endpoint /people/search called with query: '%s'", q)
33
+ results = await people_service.search_for_users(query=q, limit=limit)
34
+ return results
35
+
36
+
37
+ """
38
+ API endpoints for people-related features, such as user search for autocomplete.
39
+ """
40
+
41
+ from typing import Any, Dict, List
42
+
43
+ from fastapi import APIRouter, Depends, Query
44
+ from solace_ai_connector.common.log import log
45
+ from ..dependencies import get_people_service
46
+ from ..services.people_service import PeopleService
47
+
48
+ router = APIRouter()
49
+
50
+
51
+ @router.get("/people/search", response_model=List[Dict[str, Any]])
52
+ async def search_people(
53
+ q: str = Query(
54
+ ...,
55
+ min_length=2,
56
+ max_length=50,
57
+ description="Search query for user name/email.",
58
+ ),
59
+ limit: int = Query(
60
+ 10, ge=1, le=25, description="Maximum number of results to return."
61
+ ),
62
+ people_service: PeopleService = Depends(get_people_service),
63
+ ):
64
+ """
65
+ Searches for users to populate frontend autocomplete suggestions (e.g., for @mentions).
66
+ """
67
+ log.debug("Endpoint /people/search called with query: '%s'", q)
68
+ results = await people_service.search_for_users(query=q, limit=limit)
69
+ return results
@@ -0,0 +1,37 @@
1
+ Here is the DEVELOPER GUIDE for the `routers` directory.
2
+
3
+ ## Quick Summary
4
+ The `routers` directory contains FastAPI `APIRouter` modules that define the REST API endpoints for the HTTP SSE Gateway. Each file groups endpoints by a specific domain of functionality, such as agent discovery, artifact management, user authentication, task submission, and real-time event streaming. These routers are the primary interface for frontend applications and other clients to interact with the gateway.
5
+
6
+ ## Files Overview
7
+ - `__init__.py`: Marks the directory as a Python package.
8
+ - `agents.py`: API endpoints for discovering available A2A agents.
9
+ - `artifacts.py`: REST endpoints for managing session-specific artifacts (upload, download, list, delete).
10
+ - `auth.py`: Endpoints for handling the user authentication flow (login, callback, refresh, CSRF).
11
+ - `config.py`: API endpoint for providing configuration settings to the frontend application.
12
+ - `people.py`: API endpoints for user search functionality, typically for autocomplete features.
13
+ - `sessions.py`: API endpoints for managing user sessions (creating new sessions, getting current session info).
14
+ - `sse.py`: The Server-Sent Events (SSE) endpoint for streaming real-time task updates to the client.
15
+ - `tasks.py`: API endpoints for submitting tasks to agents and managing their lifecycle (e.g., cancellation).
16
+ - `users.py`: API endpoint for retrieving information about the currently authenticated user.
17
+ - `visualization.py`: API endpoints for managing A2A message visualization streams for monitoring and debugging.
18
+
19
+ ## Developer API Reference
20
+
21
+ ### agents.py
22
+ **Purpose:** Provides REST endpoints for agent discovery.
23
+ **Import:** `from src.solace_agent_mesh.gateway.http_sse.routers.agents import router`
24
+
25
+ **Functions:**
26
+ - `get_discovered_agents() -> List[AgentCard]`: Retrieves a list of all currently discovered and available A2A agents. The `AgentCard` type contains details about each agent.
27
+
28
+ **Usage Examples:**
29
+ ```python
30
+ # To include this router in a FastAPI application
31
+ from fastapi import FastAPI
32
+ from src.solace_agent_mesh.gateway.http_sse.routers.agents import router
33
+
34
+ app = FastAPI()
35
+ app.include_router(router, prefix="/api/v1")
36
+
37
+ # A client would make a GET request to /api/v1/agents
@@ -0,0 +1,80 @@
1
+ """
2
+ API Router for managing user sessions.
3
+ """
4
+
5
+ from fastapi import APIRouter, Depends, HTTPException, Request as FastAPIRequest, status
6
+ from typing import TYPE_CHECKING
7
+
8
+ from solace_ai_connector.common.log import log
9
+ from ....gateway.http_sse.session_manager import SessionManager
10
+ from ....gateway.http_sse.dependencies import get_session_manager
11
+ from ....common.types import JSONRPCResponse, InternalError
12
+
13
+ if TYPE_CHECKING:
14
+ from ....gateway.http_sse.component import WebUIBackendComponent
15
+
16
+ router = APIRouter()
17
+
18
+
19
+ @router.post("/new", response_model=JSONRPCResponse)
20
+ async def create_new_session(
21
+ request: FastAPIRequest,
22
+ session_manager: SessionManager = Depends(get_session_manager),
23
+ ):
24
+ """
25
+ Forces creation of a new A2A session, replacing any existing one.
26
+ Returns the new session ID.
27
+ """
28
+ log_prefix = "[POST /api/v1/sessions/new] "
29
+ log.info("%sReceived new session creation request", log_prefix)
30
+
31
+ try:
32
+ new_session_id = session_manager.start_new_a2a_session(request)
33
+
34
+ log.info("%sCreated new A2A session: %s", log_prefix, new_session_id)
35
+
36
+ return JSONRPCResponse(
37
+ result={
38
+ "sessionId": new_session_id,
39
+ "message": "New A2A session created successfully",
40
+ }
41
+ )
42
+
43
+ except Exception as e:
44
+ log.exception("%sError creating new session: %s", log_prefix, e)
45
+ error_resp = InternalError(message=f"Failed to create new session: {e}")
46
+ raise HTTPException(
47
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
48
+ detail=error_resp.model_dump(exclude_none=True),
49
+ )
50
+
51
+
52
+ @router.get("/current", response_model=JSONRPCResponse)
53
+ async def get_current_session(
54
+ request: FastAPIRequest,
55
+ session_manager: SessionManager = Depends(get_session_manager),
56
+ ):
57
+ """
58
+ Returns information about the current session.
59
+ """
60
+ log_prefix = "[GET /api/v1/sessions/current] "
61
+
62
+ try:
63
+ client_id = session_manager.get_a2a_client_id(request)
64
+ session_id = session_manager.get_a2a_session_id(request)
65
+
66
+ return JSONRPCResponse(
67
+ result={
68
+ "clientId": client_id,
69
+ "sessionId": session_id,
70
+ "hasActiveSession": session_id is not None,
71
+ }
72
+ )
73
+
74
+ except Exception as e:
75
+ log.exception("%sError getting current session info: %s", log_prefix, e)
76
+ error_resp = InternalError(message=f"Failed to get session info: {e}")
77
+ raise HTTPException(
78
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
79
+ detail=error_resp.model_dump(exclude_none=True),
80
+ )
@@ -0,0 +1,138 @@
1
+ """
2
+ API Router for Server-Sent Events (SSE) subscriptions.
3
+ """
4
+
5
+ import asyncio
6
+ import json
7
+ from fastapi import APIRouter, Depends, Request as FastAPIRequest, HTTPException, status
8
+
9
+ from solace_ai_connector.common.log import log
10
+
11
+ from sse_starlette.sse import EventSourceResponse
12
+
13
+ from ....gateway.http_sse.sse_manager import SSEManager
14
+ from ....gateway.http_sse.dependencies import get_sse_manager
15
+
16
+ router = APIRouter()
17
+
18
+
19
+ @router.get("/subscribe/{task_id}")
20
+ async def subscribe_to_task_events(
21
+ task_id: str,
22
+ request: FastAPIRequest,
23
+ sse_manager: SSEManager = Depends(get_sse_manager),
24
+ ):
25
+ """
26
+ Establishes an SSE connection to receive real-time updates for a specific task.
27
+ """
28
+ log_prefix = "[GET /api/v1/sse/subscribe/%s] " % task_id
29
+ log.info("%sClient requesting SSE subscription.", log_prefix)
30
+
31
+ connection_queue: asyncio.Queue = None
32
+ try:
33
+ connection_queue = await sse_manager.create_sse_connection(task_id)
34
+ log.info("%sSSE connection queue created.", log_prefix)
35
+
36
+ async def event_generator():
37
+ nonlocal connection_queue
38
+ log.debug("%sSSE event generator started.", log_prefix)
39
+ try:
40
+ yield {"comment": "SSE connection established"}
41
+ log.debug("%sSent initial SSE comment.", log_prefix)
42
+
43
+ loop_count = 0
44
+ while True:
45
+ loop_count += 1
46
+ log.debug(
47
+ "%sEvent generator loop iteration: %d", log_prefix, loop_count
48
+ )
49
+
50
+ disconnected = await request.is_disconnected()
51
+ log.debug(
52
+ "%sRequest disconnected status: %s", log_prefix, disconnected
53
+ )
54
+ if disconnected:
55
+ log.info("%sClient disconnected. Breaking loop.", log_prefix)
56
+ break
57
+
58
+ try:
59
+ log.debug("%sWaiting for event from queue...", log_prefix)
60
+ event_payload = await asyncio.wait_for(
61
+ connection_queue.get(), timeout=120
62
+ )
63
+ log.debug(
64
+ "%sReceived from queue: %s",
65
+ log_prefix,
66
+ event_payload is not None,
67
+ )
68
+
69
+ if event_payload is None:
70
+ log.info(
71
+ "%sReceived None sentinel. Closing connection. Breaking loop.",
72
+ log_prefix,
73
+ )
74
+ break
75
+ log.debug(
76
+ "%sYielding event_payload: %s", log_prefix, event_payload
77
+ )
78
+ yield event_payload
79
+ connection_queue.task_done()
80
+ log.debug(
81
+ "%sSent event: %s", log_prefix, event_payload.get("event")
82
+ )
83
+
84
+ except asyncio.TimeoutError:
85
+ log.debug(
86
+ "%sSSE queue wait timed out (iteration %d), checking disconnect status.",
87
+ log_prefix,
88
+ loop_count,
89
+ )
90
+ continue
91
+ except asyncio.CancelledError:
92
+ log.info(
93
+ "%sSSE event generator cancelled. Breaking loop.",
94
+ log_prefix,
95
+ )
96
+ break
97
+ except Exception as q_err:
98
+ log.error(
99
+ "%sError getting event from queue: %s. Breaking loop.",
100
+ log_prefix,
101
+ q_err,
102
+ exc_info=True,
103
+ )
104
+ yield {
105
+ "event": "error",
106
+ "data": json.dumps({"error": "Internal queue error"}),
107
+ }
108
+ break
109
+
110
+ except asyncio.CancelledError:
111
+ log.info(
112
+ "%sSSE event generator explicitly cancelled. Breaking loop.",
113
+ log_prefix,
114
+ )
115
+ except Exception as gen_err:
116
+ log.error(
117
+ "%sError in SSE event generator: %s",
118
+ log_prefix,
119
+ gen_err,
120
+ exc_info=True,
121
+ )
122
+ finally:
123
+ log.info("%sSSE event generator finished.", log_prefix)
124
+ if connection_queue:
125
+ await sse_manager.remove_sse_connection(task_id, connection_queue)
126
+ log.info("%sRemoved SSE connection queue from manager.", log_prefix)
127
+
128
+ return EventSourceResponse(event_generator())
129
+
130
+ except Exception as e:
131
+ log.exception("%sError establishing SSE connection: %s", log_prefix, e)
132
+
133
+ if connection_queue:
134
+ await sse_manager.remove_sse_connection(task_id, connection_queue)
135
+ raise HTTPException(
136
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
137
+ detail="Failed to establish SSE connection: %s" % e,
138
+ )