solace-agent-mesh 1.11.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.
Files changed (624) hide show
  1. solace_agent_mesh/__init__.py +0 -0
  2. solace_agent_mesh/agent/__init__.py +0 -0
  3. solace_agent_mesh/agent/adk/__init__.py +0 -0
  4. solace_agent_mesh/agent/adk/adk_llm.txt +226 -0
  5. solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
  6. solace_agent_mesh/agent/adk/alembic/README +74 -0
  7. solace_agent_mesh/agent/adk/alembic/env.py +77 -0
  8. solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
  9. solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
  10. solace_agent_mesh/agent/adk/alembic.ini +112 -0
  11. solace_agent_mesh/agent/adk/app_llm_agent.py +52 -0
  12. solace_agent_mesh/agent/adk/artifacts/__init__.py +1 -0
  13. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +171 -0
  14. solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +545 -0
  15. solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +609 -0
  16. solace_agent_mesh/agent/adk/callbacks.py +2318 -0
  17. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +406 -0
  18. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +415 -0
  19. solace_agent_mesh/agent/adk/mcp_content_processor.py +666 -0
  20. solace_agent_mesh/agent/adk/models/lite_llm.py +1026 -0
  21. solace_agent_mesh/agent/adk/models/models_llm.txt +189 -0
  22. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +132 -0
  23. solace_agent_mesh/agent/adk/runner.py +390 -0
  24. solace_agent_mesh/agent/adk/schema_migration.py +88 -0
  25. solace_agent_mesh/agent/adk/services.py +468 -0
  26. solace_agent_mesh/agent/adk/setup.py +1325 -0
  27. solace_agent_mesh/agent/adk/stream_parser.py +415 -0
  28. solace_agent_mesh/agent/adk/tool_wrapper.py +165 -0
  29. solace_agent_mesh/agent/agent_llm.txt +369 -0
  30. solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
  31. solace_agent_mesh/agent/protocol/__init__.py +0 -0
  32. solace_agent_mesh/agent/protocol/event_handlers.py +2041 -0
  33. solace_agent_mesh/agent/protocol/protocol_llm.txt +81 -0
  34. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
  35. solace_agent_mesh/agent/proxies/__init__.py +0 -0
  36. solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
  37. solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
  38. solace_agent_mesh/agent/proxies/a2a/app.py +56 -0
  39. solace_agent_mesh/agent/proxies/a2a/component.py +1585 -0
  40. solace_agent_mesh/agent/proxies/a2a/config.py +216 -0
  41. solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
  42. solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
  43. solace_agent_mesh/agent/proxies/base/app.py +100 -0
  44. solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
  45. solace_agent_mesh/agent/proxies/base/component.py +816 -0
  46. solace_agent_mesh/agent/proxies/base/config.py +85 -0
  47. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +19 -0
  48. solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
  49. solace_agent_mesh/agent/sac/__init__.py +0 -0
  50. solace_agent_mesh/agent/sac/app.py +595 -0
  51. solace_agent_mesh/agent/sac/component.py +3668 -0
  52. solace_agent_mesh/agent/sac/patch_adk.py +103 -0
  53. solace_agent_mesh/agent/sac/sac_llm.txt +189 -0
  54. solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
  55. solace_agent_mesh/agent/sac/task_execution_context.py +415 -0
  56. solace_agent_mesh/agent/testing/__init__.py +3 -0
  57. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  58. solace_agent_mesh/agent/testing/testing_llm.txt +58 -0
  59. solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
  60. solace_agent_mesh/agent/tools/__init__.py +16 -0
  61. solace_agent_mesh/agent/tools/audio_tools.py +1740 -0
  62. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +2500 -0
  63. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +244 -0
  64. solace_agent_mesh/agent/tools/dynamic_tool.py +396 -0
  65. solace_agent_mesh/agent/tools/general_agent_tools.py +572 -0
  66. solace_agent_mesh/agent/tools/image_tools.py +1185 -0
  67. solace_agent_mesh/agent/tools/peer_agent_tool.py +363 -0
  68. solace_agent_mesh/agent/tools/registry.py +38 -0
  69. solace_agent_mesh/agent/tools/test_tools.py +136 -0
  70. solace_agent_mesh/agent/tools/time_tools.py +126 -0
  71. solace_agent_mesh/agent/tools/tool_config_types.py +93 -0
  72. solace_agent_mesh/agent/tools/tool_definition.py +53 -0
  73. solace_agent_mesh/agent/tools/tools_llm.txt +276 -0
  74. solace_agent_mesh/agent/tools/tools_llm_detail.txt +275 -0
  75. solace_agent_mesh/agent/tools/web_tools.py +392 -0
  76. solace_agent_mesh/agent/utils/__init__.py +0 -0
  77. solace_agent_mesh/agent/utils/artifact_helpers.py +1353 -0
  78. solace_agent_mesh/agent/utils/config_parser.py +49 -0
  79. solace_agent_mesh/agent/utils/context_helpers.py +77 -0
  80. solace_agent_mesh/agent/utils/utils_llm.txt +152 -0
  81. solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
  82. solace_agent_mesh/assets/docs/404.html +16 -0
  83. solace_agent_mesh/assets/docs/assets/css/styles.8162edfb.css +1 -0
  84. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  85. solace_agent_mesh/assets/docs/assets/images/sam-enterprise-credentials-b269f095349473118b2b33bdfcc40122.png +0 -0
  86. solace_agent_mesh/assets/docs/assets/js/032c2d61.f3d37824.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  95. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  96. solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
  101. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js.LICENSE.txt +13 -0
  102. solace_agent_mesh/assets/docs/assets/js/2334.1cf50a20.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.js +1 -0
  104. solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/3624.0eaa1fd0.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/3ac1795d.28b7c67b.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/3ff0015d.2ddc75c0.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/41adc471.48b12a4e.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/509e993c.a1fbf45a.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.90a87880.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  131. solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
  132. solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
  133. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  134. solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
  135. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  136. solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
  137. solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.js +1 -0
  138. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  139. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  140. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  141. solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
  142. solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
  143. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
  144. solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
  145. solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
  146. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  147. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  148. solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
  149. solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
  150. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  151. solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
  152. solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.js +1 -0
  153. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  154. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  155. solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +1 -0
  156. solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +1 -0
  157. solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
  158. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  159. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  160. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  161. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  162. solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js +2 -0
  163. solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js.LICENSE.txt +61 -0
  164. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  165. solace_agent_mesh/assets/docs/assets/js/8731.6c1dbf0c.js +1 -0
  166. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  167. solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
  168. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  169. solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
  170. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  171. solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
  172. solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
  173. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  174. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  175. solace_agent_mesh/assets/docs/assets/js/9bb13469.b2333011.js +1 -0
  176. solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
  177. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  178. solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
  179. solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +1 -0
  180. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  181. solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
  182. solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
  183. solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
  184. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
  185. solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
  186. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
  187. solace_agent_mesh/assets/docs/assets/js/ceb2a7a6.5d92d7d0.js +1 -0
  188. solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
  189. solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +1 -0
  190. solace_agent_mesh/assets/docs/assets/js/db924877.e98d12a1.js +1 -0
  191. solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
  192. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
  193. solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
  194. solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
  195. solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +1 -0
  196. solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +1 -0
  197. solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
  198. solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +1 -0
  199. solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
  200. solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +1 -0
  201. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
  202. solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +2 -0
  203. solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js.LICENSE.txt +81 -0
  204. solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +1 -0
  205. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
  206. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +99 -0
  207. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +90 -0
  208. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +107 -0
  209. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +166 -0
  210. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +101 -0
  211. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +219 -0
  212. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +92 -0
  213. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
  214. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
  215. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
  216. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
  217. solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
  218. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +345 -0
  219. solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
  220. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +83 -0
  221. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +84 -0
  222. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
  223. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +47 -0
  224. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +85 -0
  225. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +60 -0
  226. solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
  227. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +144 -0
  228. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +191 -0
  229. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +128 -0
  230. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
  231. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
  232. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
  233. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
  234. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +267 -0
  235. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +142 -0
  236. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +116 -0
  237. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +86 -0
  238. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +164 -0
  239. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +140 -0
  240. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +57 -0
  241. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
  242. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +102 -0
  243. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
  244. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
  245. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
  246. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +37 -0
  247. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +86 -0
  248. solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
  249. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +247 -0
  250. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
  251. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +184 -0
  252. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
  253. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
  254. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +54 -0
  255. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +85 -0
  256. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
  257. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +290 -0
  258. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +78 -0
  259. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
  260. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +78 -0
  261. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
  262. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
  263. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
  264. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
  265. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
  266. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +52 -0
  267. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  268. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  269. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  270. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  271. solace_agent_mesh/assets/docs/img/sam-enterprise-credentials.png +0 -0
  272. solace_agent_mesh/assets/docs/img/solace-logo-text.svg +18 -0
  273. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  274. solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +1 -0
  275. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  276. solace_agent_mesh/assets/docs/search-doc-1765810064709.json +1 -0
  277. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  278. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  279. solace_agent_mesh/cli/__init__.py +1 -0
  280. solace_agent_mesh/cli/commands/__init__.py +0 -0
  281. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  282. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  283. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +729 -0
  284. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  285. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +102 -0
  286. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +114 -0
  287. solace_agent_mesh/cli/commands/docs_cmd.py +60 -0
  288. solace_agent_mesh/cli/commands/eval_cmd.py +46 -0
  289. solace_agent_mesh/cli/commands/init_cmd/__init__.py +439 -0
  290. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  291. solace_agent_mesh/cli/commands/init_cmd/database_step.py +91 -0
  292. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  293. solace_agent_mesh/cli/commands/init_cmd/env_step.py +238 -0
  294. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  295. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +464 -0
  296. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  297. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +119 -0
  298. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +215 -0
  299. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +20 -0
  300. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +137 -0
  301. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  302. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +144 -0
  303. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +306 -0
  304. solace_agent_mesh/cli/commands/plugin_cmd/install_cmd.py +283 -0
  305. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
  306. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  307. solace_agent_mesh/cli/commands/run_cmd.py +215 -0
  308. solace_agent_mesh/cli/main.py +52 -0
  309. solace_agent_mesh/cli/utils.py +262 -0
  310. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-Dj3JtK42.js +1 -0
  311. solace_agent_mesh/client/webui/frontend/static/assets/client-ZKk9kEJ5.js +25 -0
  312. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  313. solace_agent_mesh/client/webui/frontend/static/assets/main-BcUaNZ-Q.css +1 -0
  314. solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +435 -0
  315. solace_agent_mesh/client/webui/frontend/static/assets/vendor-BNV4kZN0.js +535 -0
  316. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +15 -0
  317. solace_agent_mesh/client/webui/frontend/static/index.html +16 -0
  318. solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
  319. solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
  320. solace_agent_mesh/common/__init__.py +1 -0
  321. solace_agent_mesh/common/a2a/__init__.py +241 -0
  322. solace_agent_mesh/common/a2a/a2a_llm.txt +175 -0
  323. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
  324. solace_agent_mesh/common/a2a/artifact.py +368 -0
  325. solace_agent_mesh/common/a2a/events.py +213 -0
  326. solace_agent_mesh/common/a2a/message.py +375 -0
  327. solace_agent_mesh/common/a2a/protocol.py +689 -0
  328. solace_agent_mesh/common/a2a/task.py +127 -0
  329. solace_agent_mesh/common/a2a/translation.py +655 -0
  330. solace_agent_mesh/common/a2a/types.py +55 -0
  331. solace_agent_mesh/common/a2a_spec/a2a.json +2576 -0
  332. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +445 -0
  333. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
  334. solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json +18 -0
  335. solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +48 -0
  336. solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
  337. solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +41 -0
  338. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +330 -0
  339. solace_agent_mesh/common/a2a_spec/schemas/tool_invocation_start.json +26 -0
  340. solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +48 -0
  341. solace_agent_mesh/common/agent_registry.py +122 -0
  342. solace_agent_mesh/common/common_llm.txt +230 -0
  343. solace_agent_mesh/common/common_llm_detail.txt +2562 -0
  344. solace_agent_mesh/common/constants.py +6 -0
  345. solace_agent_mesh/common/data_parts.py +150 -0
  346. solace_agent_mesh/common/exceptions.py +49 -0
  347. solace_agent_mesh/common/middleware/__init__.py +12 -0
  348. solace_agent_mesh/common/middleware/config_resolver.py +132 -0
  349. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  350. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
  351. solace_agent_mesh/common/middleware/registry.py +127 -0
  352. solace_agent_mesh/common/oauth/__init__.py +17 -0
  353. solace_agent_mesh/common/oauth/oauth_client.py +408 -0
  354. solace_agent_mesh/common/oauth/utils.py +50 -0
  355. solace_agent_mesh/common/sac/__init__.py +0 -0
  356. solace_agent_mesh/common/sac/sac_llm.txt +71 -0
  357. solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
  358. solace_agent_mesh/common/sac/sam_component_base.py +730 -0
  359. solace_agent_mesh/common/sam_events/__init__.py +9 -0
  360. solace_agent_mesh/common/sam_events/event_service.py +208 -0
  361. solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
  362. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
  363. solace_agent_mesh/common/services/__init__.py +4 -0
  364. solace_agent_mesh/common/services/employee_service.py +164 -0
  365. solace_agent_mesh/common/services/identity_service.py +134 -0
  366. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  367. solace_agent_mesh/common/services/providers/local_file_identity_service.py +151 -0
  368. solace_agent_mesh/common/services/providers/providers_llm.txt +81 -0
  369. solace_agent_mesh/common/services/services_llm.txt +368 -0
  370. solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
  371. solace_agent_mesh/common/utils/__init__.py +7 -0
  372. solace_agent_mesh/common/utils/artifact_utils.py +31 -0
  373. solace_agent_mesh/common/utils/asyncio_macos_fix.py +88 -0
  374. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  375. solace_agent_mesh/common/utils/embeds/constants.py +56 -0
  376. solace_agent_mesh/common/utils/embeds/converter.py +447 -0
  377. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +220 -0
  378. solace_agent_mesh/common/utils/embeds/evaluators.py +395 -0
  379. solace_agent_mesh/common/utils/embeds/modifiers.py +793 -0
  380. solace_agent_mesh/common/utils/embeds/resolver.py +967 -0
  381. solace_agent_mesh/common/utils/embeds/types.py +23 -0
  382. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  383. solace_agent_mesh/common/utils/initializer.py +52 -0
  384. solace_agent_mesh/common/utils/log_formatters.py +64 -0
  385. solace_agent_mesh/common/utils/message_utils.py +80 -0
  386. solace_agent_mesh/common/utils/mime_helpers.py +172 -0
  387. solace_agent_mesh/common/utils/push_notification_auth.py +135 -0
  388. solace_agent_mesh/common/utils/pydantic_utils.py +159 -0
  389. solace_agent_mesh/common/utils/rbac_utils.py +69 -0
  390. solace_agent_mesh/common/utils/templates/__init__.py +8 -0
  391. solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
  392. solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
  393. solace_agent_mesh/common/utils/type_utils.py +28 -0
  394. solace_agent_mesh/common/utils/utils_llm.txt +335 -0
  395. solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
  396. solace_agent_mesh/config_portal/__init__.py +0 -0
  397. solace_agent_mesh/config_portal/backend/__init__.py +0 -0
  398. solace_agent_mesh/config_portal/backend/common.py +77 -0
  399. solace_agent_mesh/config_portal/backend/plugin_catalog/__init__.py +0 -0
  400. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
  401. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  402. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +166 -0
  403. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
  404. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
  405. solace_agent_mesh/config_portal/backend/server.py +644 -0
  406. solace_agent_mesh/config_portal/frontend/static/client/Solace_community_logo.png +0 -0
  407. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DiOiAjzL.js +103 -0
  408. solace_agent_mesh/config_portal/frontend/static/client/assets/components-Rk0n-9cK.js +140 -0
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/entry.client-mvZjNKiz.js +19 -0
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DzNKzXrc.js +68 -0
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-ba77705e.js +1 -0
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/root-B17tZKK7.css +1 -0
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-V2BeTIUc.js +10 -0
  414. solace_agent_mesh/config_portal/frontend/static/client/favicon.ico +0 -0
  415. solace_agent_mesh/config_portal/frontend/static/client/index.html +7 -0
  416. solace_agent_mesh/core_a2a/__init__.py +1 -0
  417. solace_agent_mesh/core_a2a/core_a2a_llm.txt +90 -0
  418. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
  419. solace_agent_mesh/core_a2a/service.py +307 -0
  420. solace_agent_mesh/evaluation/__init__.py +0 -0
  421. solace_agent_mesh/evaluation/evaluator.py +691 -0
  422. solace_agent_mesh/evaluation/message_organizer.py +553 -0
  423. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  424. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  425. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  426. solace_agent_mesh/evaluation/report/modal.html +59 -0
  427. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  428. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  429. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  430. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  431. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  432. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  433. solace_agent_mesh/evaluation/report_data_processor.py +970 -0
  434. solace_agent_mesh/evaluation/report_generator.py +607 -0
  435. solace_agent_mesh/evaluation/run.py +954 -0
  436. solace_agent_mesh/evaluation/shared/__init__.py +92 -0
  437. solace_agent_mesh/evaluation/shared/constants.py +47 -0
  438. solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
  439. solace_agent_mesh/evaluation/shared/helpers.py +35 -0
  440. solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
  441. solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
  442. solace_agent_mesh/evaluation/subscriber.py +776 -0
  443. solace_agent_mesh/evaluation/summary_builder.py +880 -0
  444. solace_agent_mesh/gateway/__init__.py +0 -0
  445. solace_agent_mesh/gateway/adapter/__init__.py +1 -0
  446. solace_agent_mesh/gateway/adapter/base.py +143 -0
  447. solace_agent_mesh/gateway/adapter/types.py +221 -0
  448. solace_agent_mesh/gateway/base/__init__.py +1 -0
  449. solace_agent_mesh/gateway/base/app.py +345 -0
  450. solace_agent_mesh/gateway/base/base_llm.txt +226 -0
  451. solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
  452. solace_agent_mesh/gateway/base/component.py +2030 -0
  453. solace_agent_mesh/gateway/base/task_context.py +75 -0
  454. solace_agent_mesh/gateway/gateway_llm.txt +369 -0
  455. solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
  456. solace_agent_mesh/gateway/generic/__init__.py +1 -0
  457. solace_agent_mesh/gateway/generic/app.py +50 -0
  458. solace_agent_mesh/gateway/generic/component.py +727 -0
  459. solace_agent_mesh/gateway/http_sse/__init__.py +0 -0
  460. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +345 -0
  461. solace_agent_mesh/gateway/http_sse/alembic/env.py +87 -0
  462. solace_agent_mesh/gateway/http_sse/alembic/script.py.mako +28 -0
  463. solace_agent_mesh/gateway/http_sse/alembic/versions/20250910_d5b3f8f2e9a0_create_initial_database.py +58 -0
  464. solace_agent_mesh/gateway/http_sse/alembic/versions/20250911_b1c2d3e4f5g6_add_database_indexes.py +83 -0
  465. solace_agent_mesh/gateway/http_sse/alembic/versions/20250916_f6e7d8c9b0a1_convert_timestamps_to_epoch_and_align_columns.py +412 -0
  466. solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
  467. solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -0
  468. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
  469. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
  470. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
  471. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
  472. solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
  473. solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
  474. solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
  475. solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
  476. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +161 -0
  477. solace_agent_mesh/gateway/http_sse/alembic.ini +109 -0
  478. solace_agent_mesh/gateway/http_sse/app.py +351 -0
  479. solace_agent_mesh/gateway/http_sse/component.py +2360 -0
  480. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  481. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +105 -0
  482. solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +109 -0
  483. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +110 -0
  484. solace_agent_mesh/gateway/http_sse/dependencies.py +653 -0
  485. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +299 -0
  486. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
  487. solace_agent_mesh/gateway/http_sse/main.py +789 -0
  488. solace_agent_mesh/gateway/http_sse/repository/__init__.py +46 -0
  489. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +102 -0
  490. solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +11 -0
  491. solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
  492. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +221 -0
  493. solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
  494. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
  495. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
  496. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +66 -0
  497. solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -0
  498. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +32 -0
  499. solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
  500. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +125 -0
  501. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +239 -0
  502. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +34 -0
  503. solace_agent_mesh/gateway/http_sse/repository/models/base.py +7 -0
  504. solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
  505. solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
  506. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +257 -0
  507. solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
  508. solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
  509. solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
  510. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +53 -0
  511. solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
  512. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +39 -0
  513. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
  514. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
  515. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +308 -0
  516. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +268 -0
  517. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +248 -0
  518. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  519. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +74 -0
  520. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +1137 -0
  521. solace_agent_mesh/gateway/http_sse/routers/auth.py +311 -0
  522. solace_agent_mesh/gateway/http_sse/routers/config.py +371 -0
  523. solace_agent_mesh/gateway/http_sse/routers/dto/__init__.py +10 -0
  524. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +450 -0
  525. solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
  526. solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
  527. solace_agent_mesh/gateway/http_sse/routers/dto/requests/__init__.py +15 -0
  528. solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
  529. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +133 -0
  530. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +33 -0
  531. solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
  532. solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +18 -0
  533. solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +42 -0
  534. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
  535. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +123 -0
  536. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +33 -0
  537. solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
  538. solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
  539. solace_agent_mesh/gateway/http_sse/routers/feedback.py +168 -0
  540. solace_agent_mesh/gateway/http_sse/routers/people.py +38 -0
  541. solace_agent_mesh/gateway/http_sse/routers/projects.py +767 -0
  542. solace_agent_mesh/gateway/http_sse/routers/prompts.py +1415 -0
  543. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +312 -0
  544. solace_agent_mesh/gateway/http_sse/routers/sessions.py +634 -0
  545. solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
  546. solace_agent_mesh/gateway/http_sse/routers/sse.py +230 -0
  547. solace_agent_mesh/gateway/http_sse/routers/tasks.py +1089 -0
  548. solace_agent_mesh/gateway/http_sse/routers/users.py +83 -0
  549. solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
  550. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1220 -0
  551. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  552. solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +71 -0
  553. solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
  554. solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
  555. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +273 -0
  556. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +250 -0
  557. solace_agent_mesh/gateway/http_sse/services/people_service.py +78 -0
  558. solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
  559. solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
  560. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +303 -0
  561. solace_agent_mesh/gateway/http_sse/services/session_service.py +702 -0
  562. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +593 -0
  563. solace_agent_mesh/gateway/http_sse/services/task_service.py +119 -0
  564. solace_agent_mesh/gateway/http_sse/session_manager.py +219 -0
  565. solace_agent_mesh/gateway/http_sse/shared/__init__.py +146 -0
  566. solace_agent_mesh/gateway/http_sse/shared/auth_utils.py +29 -0
  567. solace_agent_mesh/gateway/http_sse/shared/base_repository.py +252 -0
  568. solace_agent_mesh/gateway/http_sse/shared/database_exceptions.py +274 -0
  569. solace_agent_mesh/gateway/http_sse/shared/database_helpers.py +43 -0
  570. solace_agent_mesh/gateway/http_sse/shared/enums.py +40 -0
  571. solace_agent_mesh/gateway/http_sse/shared/error_dto.py +107 -0
  572. solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +217 -0
  573. solace_agent_mesh/gateway/http_sse/shared/exceptions.py +192 -0
  574. solace_agent_mesh/gateway/http_sse/shared/pagination.py +138 -0
  575. solace_agent_mesh/gateway/http_sse/shared/response_utils.py +134 -0
  576. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +319 -0
  577. solace_agent_mesh/gateway/http_sse/shared/timestamp_utils.py +97 -0
  578. solace_agent_mesh/gateway/http_sse/shared/types.py +50 -0
  579. solace_agent_mesh/gateway/http_sse/shared/utils.py +22 -0
  580. solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +88 -0
  581. solace_agent_mesh/gateway/http_sse/sse_manager.py +491 -0
  582. solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
  583. solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
  584. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +72 -0
  585. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
  586. solace_agent_mesh/llm.txt +228 -0
  587. solace_agent_mesh/llm_detail.txt +2835 -0
  588. solace_agent_mesh/services/__init__.py +0 -0
  589. solace_agent_mesh/services/platform/__init__.py +18 -0
  590. solace_agent_mesh/services/platform/alembic/env.py +85 -0
  591. solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
  592. solace_agent_mesh/services/platform/alembic.ini +109 -0
  593. solace_agent_mesh/services/platform/api/__init__.py +3 -0
  594. solace_agent_mesh/services/platform/api/dependencies.py +147 -0
  595. solace_agent_mesh/services/platform/api/main.py +280 -0
  596. solace_agent_mesh/services/platform/api/middleware.py +51 -0
  597. solace_agent_mesh/services/platform/api/routers/__init__.py +24 -0
  598. solace_agent_mesh/services/platform/app.py +114 -0
  599. solace_agent_mesh/services/platform/component.py +235 -0
  600. solace_agent_mesh/solace_agent_mesh_llm.txt +362 -0
  601. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -0
  602. solace_agent_mesh/templates/agent_template.yaml +53 -0
  603. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  604. solace_agent_mesh/templates/gateway_app_template.py +75 -0
  605. solace_agent_mesh/templates/gateway_component_template.py +484 -0
  606. solace_agent_mesh/templates/gateway_config_template.yaml +38 -0
  607. solace_agent_mesh/templates/logging_config_template.yaml +48 -0
  608. solace_agent_mesh/templates/main_orchestrator.yaml +66 -0
  609. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  610. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  611. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  612. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +60 -0
  613. solace_agent_mesh/templates/plugin_pyproject_template.toml +32 -0
  614. solace_agent_mesh/templates/plugin_readme_template.md +12 -0
  615. solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
  616. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  617. solace_agent_mesh/templates/shared_config.yaml +112 -0
  618. solace_agent_mesh/templates/templates_llm.txt +147 -0
  619. solace_agent_mesh/templates/webui.yaml +177 -0
  620. solace_agent_mesh-1.11.2.dist-info/METADATA +504 -0
  621. solace_agent_mesh-1.11.2.dist-info/RECORD +624 -0
  622. solace_agent_mesh-1.11.2.dist-info/WHEEL +4 -0
  623. solace_agent_mesh-1.11.2.dist-info/entry_points.txt +3 -0
  624. solace_agent_mesh-1.11.2.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,311 @@
1
+ """
2
+ Router for handling authentication-related endpoints.
3
+ """
4
+
5
+ import logging
6
+ import secrets
7
+ from urllib.parse import urlencode
8
+
9
+ import httpx
10
+ from fastapi import (
11
+ APIRouter,
12
+ Depends,
13
+ HTTPException,
14
+ Request as FastAPIRequest,
15
+ Response,
16
+ )
17
+ from fastapi.responses import HTMLResponse, RedirectResponse
18
+
19
+ from ...http_sse.dependencies import get_api_config, get_sac_component
20
+
21
+ log = logging.getLogger(__name__)
22
+
23
+ router = APIRouter()
24
+
25
+
26
+ @router.get("/auth/login")
27
+ async def initiate_login(
28
+ request: FastAPIRequest, config: dict = Depends(get_api_config)
29
+ ):
30
+ """
31
+ Initiates the login flow by redirecting to the external authorization service.
32
+ """
33
+ external_auth_url = config.get("external_auth_service_url", "http://localhost:8080")
34
+ callback_url = config.get(
35
+ "external_auth_callback_uri", "http://localhost:8000/api/v1/auth/callback"
36
+ )
37
+
38
+ params = {
39
+ "provider": config.get("external_auth_provider", "azure"),
40
+ "redirect_uri": callback_url,
41
+ }
42
+
43
+ login_url = f"{external_auth_url}/login?{urlencode(params)}"
44
+ log.info(f"Redirecting to external authorization service: {login_url}")
45
+
46
+ return RedirectResponse(url=login_url)
47
+
48
+
49
+ @router.get("/csrf-token")
50
+ async def get_csrf_token(
51
+ response: Response, component: "WebUIBackendComponent" = Depends(get_sac_component)
52
+ ):
53
+ """
54
+ Generates and returns a CSRF token, setting it as a readable cookie and returning it in the response.
55
+ """
56
+ csrf_token = secrets.token_urlsafe(32)
57
+
58
+ response.set_cookie(
59
+ key="csrf_token",
60
+ value=csrf_token,
61
+ httponly=False,
62
+ secure=False,
63
+ samesite="lax",
64
+ max_age=3600,
65
+ )
66
+
67
+ return {"message": "CSRF token set", "csrf_token": csrf_token}
68
+
69
+
70
+ @router.get("/auth/callback")
71
+ async def auth_callback(
72
+ request: FastAPIRequest,
73
+ config: dict = Depends(get_api_config),
74
+ component: "WebUIBackendComponent" = Depends(get_sac_component),
75
+ ):
76
+ """
77
+ Handles the callback from the OIDC provider by calling an external exchange service.
78
+ """
79
+ code = request.query_params.get("code")
80
+
81
+ if not code:
82
+ raise HTTPException(status_code=400, detail="Missing authorization code")
83
+
84
+ external_auth_url = config.get("external_auth_service_url", "http://localhost:8080")
85
+ exchange_url = f"{external_auth_url}/exchange-code"
86
+ redirect_uri = config.get(
87
+ "external_auth_callback_uri", "http://localhost:8000/api/v1/auth/callback"
88
+ )
89
+
90
+ async with httpx.AsyncClient() as client:
91
+ try:
92
+ response = await client.post(
93
+ exchange_url,
94
+ json={
95
+ "code": code,
96
+ "provider": config.get("external_auth_provider", "azure"),
97
+ "redirect_uri": redirect_uri,
98
+ },
99
+ timeout=20.0,
100
+ )
101
+ response.raise_for_status()
102
+ token_data = response.json()
103
+ except httpx.HTTPStatusError as e:
104
+ log.error(f"Failed to exchange code: {e.response.text}")
105
+ raise HTTPException(
106
+ status_code=e.response.status_code,
107
+ detail=f"Failed to exchange code: {e.response.text}",
108
+ )
109
+ except Exception as e:
110
+ log.error(f"Error during code exchange: {e}")
111
+ raise HTTPException(status_code=500, detail="Error during code exchange")
112
+
113
+ access_token = token_data.get("access_token")
114
+ refresh_token = token_data.get("refresh_token")
115
+
116
+ if not access_token:
117
+ raise HTTPException(
118
+ status_code=400, detail="Access token not in response from exchange service"
119
+ )
120
+
121
+ request.session["access_token"] = access_token
122
+ if refresh_token:
123
+ request.session["refresh_token"] = refresh_token
124
+ log.debug("Tokens stored directly in session.")
125
+
126
+ try:
127
+ async with httpx.AsyncClient() as client:
128
+ user_info_response = await client.get(
129
+ f"{external_auth_url}/user_info",
130
+ params={"provider": config.get("external_auth_provider", "azure")},
131
+ headers={"Authorization": f"Bearer {access_token}"},
132
+ )
133
+ user_info_response.raise_for_status()
134
+ user_info = user_info_response.json()
135
+
136
+ user_id = user_info.get("email", "authenticated_user")
137
+ if user_id:
138
+ session_manager = component.get_session_manager()
139
+ session_manager.store_user_id(request, user_id)
140
+ else:
141
+ log.warning("Could not find 'email' in user info response.")
142
+
143
+ except httpx.HTTPStatusError as e:
144
+ log.error(f"Failed to get user info: {e.response.text}")
145
+
146
+ except Exception as e:
147
+ log.error(f"Error getting user info: {e}")
148
+
149
+ frontend_base_url = config.get("frontend_redirect_url", "http://localhost:3000")
150
+
151
+ hash_params = {"access_token": access_token}
152
+ if refresh_token:
153
+ hash_params["refresh_token"] = refresh_token
154
+
155
+ hash_fragment = urlencode(hash_params)
156
+
157
+ frontend_redirect_url = f"{frontend_base_url}/auth-callback.html#{hash_fragment}"
158
+ return RedirectResponse(url=frontend_redirect_url)
159
+
160
+
161
+ @router.post("/auth/refresh")
162
+ async def refresh_token(
163
+ request: FastAPIRequest,
164
+ config: dict = Depends(get_api_config),
165
+ component: "WebUIBackendComponent" = Depends(get_sac_component),
166
+ ):
167
+ """
168
+ Refreshes an access token using the external authorization service.
169
+ """
170
+ data = await request.json()
171
+ refresh_token = data.get("refresh_token")
172
+ if not refresh_token:
173
+ raise HTTPException(status_code=400, detail="Missing refresh_token")
174
+
175
+ external_auth_url = config.get("external_auth_service_url", "http://localhost:8080")
176
+ refresh_url = f"{external_auth_url}/refresh_token"
177
+
178
+ async with httpx.AsyncClient() as client:
179
+ try:
180
+ response = await client.post(
181
+ refresh_url,
182
+ json={
183
+ "refresh_token": refresh_token,
184
+ "provider": config.get("external_auth_provider", "azure"),
185
+ },
186
+ timeout=20.0,
187
+ )
188
+ response.raise_for_status()
189
+ token_data = response.json()
190
+ except httpx.HTTPStatusError as e:
191
+ log.error(f"Failed to refresh token: {e.response.text}")
192
+ raise HTTPException(
193
+ status_code=e.response.status_code,
194
+ detail=f"Failed to refresh token: {e.response.text}",
195
+ )
196
+ except Exception as e:
197
+ log.error(f"Error during token refresh: {e}")
198
+ raise HTTPException(status_code=500, detail="Error during token refresh")
199
+
200
+ access_token = token_data.get("access_token")
201
+ new_refresh_token = token_data.get("refresh_token")
202
+
203
+ if not access_token:
204
+ raise HTTPException(
205
+ status_code=400, detail="Access token not in response from refresh service"
206
+ )
207
+
208
+ session_manager = component.get_session_manager()
209
+ session_manager.store_auth_tokens(request, access_token, new_refresh_token)
210
+ log.info("Successfully refreshed and updated tokens in session.")
211
+
212
+ return {
213
+ "access_token": access_token,
214
+ "refresh_token": new_refresh_token,
215
+ }
216
+
217
+
218
+ @router.get("/auth/tool/callback")
219
+ async def auth_tool_callback(
220
+ request: FastAPIRequest,
221
+ component: "WebUIBackendComponent" = Depends(get_sac_component),
222
+ ):
223
+ """
224
+ Handles OAuth2 authorization code grant response for tool authentication.
225
+ """
226
+ code = request.query_params.get("code")
227
+ state = request.query_params.get("state")
228
+ error = request.query_params.get("error")
229
+ error_description = request.query_params.get("error_description")
230
+
231
+ if error:
232
+ log.error(f"OAuth2 tool callback received error: {error} - {error_description}")
233
+ return HTMLResponse(
234
+ content=f"""
235
+ <html>
236
+ <head>
237
+ <title>Authorization Error</title>
238
+ </head>
239
+ <body>
240
+ <h2>Authorization Error</h2>
241
+ <p>Error: {error}</p>
242
+ <p>Description: {error_description or 'No description provided'}</p>
243
+ <p>Please close this window and try again.</p>
244
+ </body>
245
+ </html>
246
+ """,
247
+ status_code=400
248
+ )
249
+
250
+ # Get the current request URL for logging/debugging
251
+ url = str(request.url)
252
+
253
+
254
+ if not code:
255
+ log.warning("OAuth2 tool callback received without authorization code")
256
+ return HTMLResponse(
257
+ content="""
258
+ <html>
259
+ <head>
260
+ <title>Authorization Error</title>
261
+ </head>
262
+ <body>
263
+ <h2>Authorization Error</h2>
264
+ <p>No authorization code received. Please close this window and try again.</p>
265
+ </body>
266
+ </html>
267
+ """,
268
+ status_code=400
269
+ )
270
+
271
+ log.info(f"OAuth2 tool callback received authorization code: {code}")
272
+
273
+ try:
274
+ from solace_agent_mesh_enterprise.auth.input_required import process_auth_grant_response
275
+ await process_auth_grant_response(component, code, state, url)
276
+ except ImportError:
277
+ pass
278
+
279
+ # Return simple HTML page instructing user to close the window
280
+ return HTMLResponse(
281
+ content="""
282
+ <html>
283
+ <head>
284
+ <title>Authorization Complete</title>
285
+ <style>
286
+ body {
287
+ font-family: Arial, sans-serif;
288
+ text-align: center;
289
+ padding: 50px;
290
+ background-color: #f5f5f5;
291
+ }
292
+ .container {
293
+ background: white;
294
+ padding: 30px;
295
+ border-radius: 8px;
296
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
297
+ display: inline-block;
298
+ }
299
+ h2 { color: #28a745; }
300
+ </style>
301
+ </head>
302
+ <body>
303
+ <div class="container">
304
+ <h2>✓ Authorization Complete</h2>
305
+ <p>You have successfully authorized the tool access.</p>
306
+ <p><strong>Please close this window.</strong></p>
307
+ </div>
308
+ </body>
309
+ </html>
310
+ """
311
+ )
@@ -0,0 +1,371 @@
1
+ """
2
+ API Router for providing frontend configuration.
3
+ """
4
+
5
+ import logging
6
+ from fastapi import APIRouter, Depends, HTTPException, status
7
+ from typing import Dict, Any
8
+
9
+ from ....gateway.http_sse.dependencies import get_sac_component, get_api_config
10
+ from ..routers.dto.requests.project_requests import CreateProjectRequest, UpdateProjectRequest
11
+ from typing import TYPE_CHECKING
12
+
13
+ if TYPE_CHECKING:
14
+ from gateway.http_sse.component import WebUIBackendComponent
15
+
16
+ log = logging.getLogger(__name__)
17
+
18
+ router = APIRouter()
19
+
20
+
21
+ # Default max upload size (50MB) - matches gateway_max_upload_size_bytes default
22
+ DEFAULT_MAX_UPLOAD_SIZE_BYTES = 52428800
23
+ # Default max ZIP upload size (100MB) - for project import ZIP files
24
+ DEFAULT_MAX_ZIP_UPLOAD_SIZE_BYTES = 104857600
25
+
26
+
27
+ def _get_validation_limits(component: "WebUIBackendComponent" = None) -> Dict[str, Any]:
28
+ """
29
+ Extract validation limits from Pydantic models to expose to frontend.
30
+ This ensures frontend and backend validation limits stay in sync.
31
+ """
32
+ # Extract limits from CreateProjectRequest model
33
+ create_fields = CreateProjectRequest.model_fields
34
+
35
+ # Get max upload size from component config, with fallback to default
36
+ max_upload_size_bytes = (
37
+ component.get_config("gateway_max_upload_size_bytes", DEFAULT_MAX_UPLOAD_SIZE_BYTES)
38
+ if component else DEFAULT_MAX_UPLOAD_SIZE_BYTES
39
+ )
40
+
41
+ # Get max ZIP upload size from component config, with fallback to default (100MB)
42
+ max_zip_upload_size_bytes = (
43
+ component.get_config("gateway_max_zip_upload_size_bytes", DEFAULT_MAX_ZIP_UPLOAD_SIZE_BYTES)
44
+ if component else DEFAULT_MAX_ZIP_UPLOAD_SIZE_BYTES
45
+ )
46
+
47
+ return {
48
+ "projectNameMax": create_fields["name"].metadata[1].max_length if create_fields["name"].metadata else 255,
49
+ "projectDescriptionMax": create_fields["description"].metadata[0].max_length if create_fields["description"].metadata else 1000,
50
+ "projectInstructionsMax": create_fields["system_prompt"].metadata[0].max_length if create_fields["system_prompt"].metadata else 4000,
51
+ "maxUploadSizeBytes": max_upload_size_bytes,
52
+ "maxZipUploadSizeBytes": max_zip_upload_size_bytes,
53
+ }
54
+
55
+
56
+ def _get_background_tasks_config(
57
+ component: "WebUIBackendComponent",
58
+ log_prefix: str
59
+ ) -> Dict[str, Any]:
60
+ """
61
+ Extracts background tasks configuration for the frontend.
62
+
63
+ Returns:
64
+ Dict with background tasks non-boolean settings:
65
+ - default_timeout_ms: Default timeout for background tasks
66
+
67
+ Note: The 'enabled' flag is now in frontend_feature_enablement.background_tasks
68
+ """
69
+ background_config = component.get_config("background_tasks", {})
70
+ default_timeout_ms = background_config.get("default_timeout_ms", 3600000) # 1 hour default
71
+
72
+ return {
73
+ "default_timeout_ms": default_timeout_ms,
74
+ }
75
+
76
+
77
+ def _determine_background_tasks_enabled(
78
+ component: "WebUIBackendComponent",
79
+ log_prefix: str
80
+ ) -> bool:
81
+ """
82
+ Determines if background tasks feature should be enabled.
83
+
84
+ Returns:
85
+ bool: True if background tasks should be enabled
86
+ """
87
+ feature_flags = component.get_config("frontend_feature_enablement", {})
88
+ enabled = feature_flags.get("background_tasks", False)
89
+
90
+ if enabled:
91
+ log.debug("%s Background tasks enabled globally for all agents", log_prefix)
92
+ else:
93
+ log.debug("%s Background tasks disabled", log_prefix)
94
+
95
+ return enabled
96
+
97
+
98
+ def _determine_projects_enabled(
99
+ component: "WebUIBackendComponent",
100
+ api_config: Dict[str, Any],
101
+ log_prefix: str
102
+ ) -> bool:
103
+ """
104
+ Determines if projects feature should be enabled.
105
+
106
+ Logic:
107
+ 1. Check if persistence is enabled (required for projects)
108
+ 2. Check explicit projects.enabled config
109
+ 3. Check frontend_feature_enablement.projects override
110
+
111
+ Returns:
112
+ bool: True if projects should be enabled
113
+ """
114
+ # Projects require persistence
115
+ persistence_enabled = api_config.get("persistence_enabled", False)
116
+ if not persistence_enabled:
117
+ log.debug("%s Projects disabled: persistence is not enabled", log_prefix)
118
+ return False
119
+
120
+ # Check explicit projects config
121
+ projects_config = component.get_config("projects", {})
122
+ if isinstance(projects_config, dict):
123
+ projects_explicitly_enabled = projects_config.get("enabled", True)
124
+ if not projects_explicitly_enabled:
125
+ log.debug("%s Projects disabled: explicitly disabled in config", log_prefix)
126
+ return False
127
+
128
+ # Check frontend_feature_enablement override
129
+ feature_flags = component.get_config("frontend_feature_enablement", {})
130
+ if "projects" in feature_flags:
131
+ projects_flag = feature_flags.get("projects", True)
132
+ if not projects_flag:
133
+ log.debug("%s Projects disabled: disabled in frontend_feature_enablement", log_prefix)
134
+ return False
135
+
136
+ # All checks passed
137
+ log.debug("%s Projects enabled: persistence enabled and no explicit disable", log_prefix)
138
+ return True
139
+
140
+
141
+ @router.get("/config", response_model=Dict[str, Any])
142
+ async def get_app_config(
143
+ component: "WebUIBackendComponent" = Depends(get_sac_component),
144
+ api_config: Dict[str, Any] = Depends(get_api_config),
145
+ ):
146
+ """
147
+ Provides configuration settings needed by the frontend application.
148
+ """
149
+ log_prefix = "[GET /api/v1/config] "
150
+ log.info("%sRequest received.", log_prefix)
151
+ try:
152
+ # Start with explicitly defined feature flags
153
+ feature_enablement = component.get_config("frontend_feature_enablement", {})
154
+
155
+ # Manually check for the task_logging feature and add it
156
+ task_logging_config = component.get_config("task_logging", {})
157
+ if task_logging_config and task_logging_config.get("enabled", False):
158
+ feature_enablement["taskLogging"] = True
159
+ log.debug("%s taskLogging feature flag is enabled.", log_prefix)
160
+
161
+ # Determine if prompt library should be enabled
162
+ # Prompts require SQL session storage for persistence
163
+ prompt_library_config = component.get_config("prompt_library", {})
164
+ prompt_library_explicitly_enabled = prompt_library_config.get("enabled", True)
165
+
166
+ if prompt_library_explicitly_enabled:
167
+ # Check if SQL persistence is available (REQUIRED for prompts)
168
+ session_config = component.get_config("session_service", {})
169
+ session_type = session_config.get("type", "memory")
170
+
171
+ if session_type != "sql":
172
+ log.warning(
173
+ "%s Prompt library is configured but session_service type is '%s' (not 'sql'). "
174
+ "Disabling prompt library for frontend.",
175
+ log_prefix,
176
+ session_type
177
+ )
178
+ prompt_library_enabled = False
179
+ else:
180
+ prompt_library_enabled = True
181
+ feature_enablement["promptLibrary"] = True
182
+ log.debug("%s promptLibrary feature flag is enabled.", log_prefix)
183
+
184
+ # Check AI-assisted sub-feature (only if parent is enabled)
185
+ ai_assisted_config = prompt_library_config.get("ai_assisted", {})
186
+ ai_assisted_enabled = ai_assisted_config.get("enabled", True)
187
+
188
+ if ai_assisted_enabled:
189
+ # Verify LLM is configured through the model config
190
+ model_config = component.get_config("model", {})
191
+
192
+ llm_model = None
193
+ if isinstance(model_config, dict):
194
+ llm_model = model_config.get("model")
195
+
196
+ if llm_model:
197
+ feature_enablement["promptAIAssisted"] = True
198
+ log.debug("%s promptAIAssisted feature flag is enabled.", log_prefix)
199
+ else:
200
+ feature_enablement["promptAIAssisted"] = False
201
+ log.warning(
202
+ "%s AI-assisted prompts disabled: model not configured",
203
+ log_prefix
204
+ )
205
+ else:
206
+ feature_enablement["promptAIAssisted"] = False
207
+
208
+ # Check version history sub-feature (only if parent is enabled)
209
+ version_history_config = prompt_library_config.get("version_history", {})
210
+ version_history_enabled = version_history_config.get("enabled", True)
211
+
212
+ if version_history_enabled:
213
+ feature_enablement["promptVersionHistory"] = True
214
+ log.debug("%s promptVersionHistory feature flag is enabled.", log_prefix)
215
+ else:
216
+ feature_enablement["promptVersionHistory"] = False
217
+
218
+ # Check prompt sharing sub-feature (only if parent is enabled)
219
+ sharing_config = prompt_library_config.get("sharing", {})
220
+ sharing_enabled = sharing_config.get("enabled", False)
221
+
222
+ if sharing_enabled:
223
+ feature_enablement["promptSharing"] = True
224
+ log.debug("%s promptSharing feature flag is enabled.", log_prefix)
225
+ else:
226
+ feature_enablement["promptSharing"] = False
227
+ else:
228
+ # Explicitly set to false when disabled
229
+ feature_enablement["promptLibrary"] = False
230
+ feature_enablement["promptAIAssisted"] = False
231
+ feature_enablement["promptVersionHistory"] = False
232
+ feature_enablement["promptSharing"] = False
233
+ log.info("%s Prompt library feature is explicitly disabled.", log_prefix)
234
+
235
+ # Determine if feedback should be enabled
236
+ # Feedback requires SQL session storage for persistence
237
+ feedback_enabled = component.get_config("frontend_collect_feedback", False)
238
+ if feedback_enabled:
239
+ session_config = component.get_config("session_service", {})
240
+ session_type = session_config.get("type", "memory")
241
+ if session_type != "sql":
242
+ log.warning(
243
+ "%s Feedback is configured but session_service type is '%s' (not 'sql'). "
244
+ "Disabling feedback for frontend.",
245
+ log_prefix,
246
+ session_type
247
+ )
248
+ feedback_enabled = False
249
+
250
+ # Determine if projects should be enabled
251
+ # Projects require SQL session storage for persistence
252
+ projects_enabled = _determine_projects_enabled(component, api_config, log_prefix)
253
+ feature_enablement["projects"] = projects_enabled
254
+ if projects_enabled:
255
+ log.debug("%s Projects feature flag is enabled.", log_prefix)
256
+ else:
257
+ log.debug("%s Projects feature flag is disabled.", log_prefix)
258
+
259
+
260
+ # Determine if background tasks should be enabled
261
+ background_tasks_enabled = _determine_background_tasks_enabled(component, log_prefix)
262
+ feature_enablement["background_tasks"] = background_tasks_enabled
263
+ if background_tasks_enabled:
264
+ log.debug("%s Background tasks feature flag is enabled.", log_prefix)
265
+ else:
266
+ log.debug("%s Background tasks feature flag is disabled.", log_prefix)
267
+
268
+ # Check tool configuration status
269
+ tool_config_status = {}
270
+
271
+ # Check TTS configuration from component config (not environment variables)
272
+ speech_config = component.get_config("speech", {})
273
+ tts_config = speech_config.get("tts", {})
274
+
275
+ # Check if speech/TTS section is defined in config
276
+ # If not defined, disable TTS even if keys might be present elsewhere
277
+ if not speech_config or not tts_config:
278
+ log.debug("%s TTS disabled: speech.tts section not configured", log_prefix)
279
+ tts_configured = False
280
+ tts_provider = "gemini" # Default fallback
281
+ else:
282
+ # Get provider from config (with fallback to default)
283
+ preferred_provider = tts_config.get("provider", "gemini").lower()
284
+
285
+ # Check which providers are configured
286
+ gemini_config = tts_config.get("gemini", {})
287
+ azure_config = tts_config.get("azure", {})
288
+ polly_config = tts_config.get("polly", {})
289
+
290
+ gemini_key = gemini_config.get("api_key")
291
+ azure_speech_key = azure_config.get("api_key")
292
+ azure_speech_region = azure_config.get("region")
293
+ aws_access_key = polly_config.get("aws_access_key_id")
294
+ aws_secret_key = polly_config.get("aws_secret_access_key")
295
+
296
+ # Determine which providers are available
297
+ gemini_available = bool(gemini_key)
298
+ azure_available = bool(azure_speech_key and azure_speech_region)
299
+ polly_available = bool(aws_access_key and aws_secret_key)
300
+ tts_configured = gemini_available or azure_available or polly_available
301
+ tool_config_status["text_to_speech"] = tts_configured
302
+
303
+ # Determine TTS provider based on preference and availability
304
+ if preferred_provider == "azure" and azure_available:
305
+ tts_provider = "azure"
306
+ elif preferred_provider == "gemini" and gemini_available:
307
+ tts_provider = "gemini"
308
+ elif preferred_provider == "polly" and polly_available:
309
+ tts_provider = "polly"
310
+ elif gemini_available:
311
+ # Default to Gemini if available
312
+ tts_provider = "gemini"
313
+ elif azure_available:
314
+ # Fall back to Azure if Gemini not available
315
+ tts_provider = "azure"
316
+ elif polly_available:
317
+ # Fall back to Polly if others not available
318
+ tts_provider = "polly"
319
+ else:
320
+ # No provider available, default to gemini (will use browser fallback)
321
+ tts_provider = "gemini"
322
+
323
+ if tts_configured:
324
+ log.debug("%s TTS is configured (API keys present, provider: %s)", log_prefix, tts_provider)
325
+ if preferred_provider and preferred_provider != tts_provider:
326
+ log.warning(
327
+ "%s TTS_PROVIDER set to '%s' but using '%s' (preferred provider not available)",
328
+ log_prefix, preferred_provider, tts_provider
329
+ )
330
+ else:
331
+ log.debug("%s TTS not configured (no API keys found)", log_prefix)
332
+
333
+ # TTS settings - enable if API keys are present
334
+ tts_settings = {
335
+ "textToSpeech": tts_configured,
336
+ "engineTTS": "external" if tts_configured else "browser",
337
+ "ttsProvider": tts_provider,
338
+ }
339
+
340
+ config_data = {
341
+ "frontend_server_url": "",
342
+ "frontend_auth_login_url": component.get_config(
343
+ "frontend_auth_login_url", ""
344
+ ),
345
+ "frontend_use_authorization": component.get_config(
346
+ "frontend_use_authorization", False
347
+ ),
348
+ "frontend_welcome_message": component.get_config(
349
+ "frontend_welcome_message", ""
350
+ ),
351
+ "frontend_redirect_url": component.get_config("frontend_redirect_url", ""),
352
+ "frontend_collect_feedback": feedback_enabled,
353
+ "frontend_bot_name": component.get_config("frontend_bot_name", "A2A Agent"),
354
+ "frontend_logo_url": component.get_config("frontend_logo_url", ""),
355
+ "frontend_feature_enablement": feature_enablement,
356
+ "persistence_enabled": api_config.get("persistence_enabled", False),
357
+ "validation_limits": _get_validation_limits(component),
358
+ "tool_config_status": tool_config_status,
359
+ "tts_settings": tts_settings,
360
+ "background_tasks_config": _get_background_tasks_config(component, log_prefix),
361
+ }
362
+ log.debug("%sReturning frontend configuration.", log_prefix)
363
+ return config_data
364
+ except Exception as e:
365
+ log.exception(
366
+ "%sError retrieving configuration for frontend: %s", log_prefix, e
367
+ )
368
+ raise HTTPException(
369
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
370
+ detail="Internal server error retrieving configuration.",
371
+ )
@@ -0,0 +1,10 @@
1
+ """
2
+ Data Transfer Objects (DTOs)
3
+
4
+ Contains request and response DTOs for API contract definition and validation.
5
+ """
6
+
7
+ from . import requests
8
+ from . import responses
9
+
10
+ __all__ = ["requests", "responses"]