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,415 @@
1
+ """
2
+ Encapsulates the runtime state for a single, in-flight agent task.
3
+ """
4
+
5
+ import asyncio
6
+ import threading
7
+ from typing import Any, Dict, List, Optional, TYPE_CHECKING
8
+
9
+ if TYPE_CHECKING:
10
+ from solace_ai_connector.common.message import Message as SolaceMessage
11
+
12
+
13
+ class TaskExecutionContext:
14
+ """
15
+ A class to hold all runtime state and control mechanisms for a single agent task.
16
+ This object is created when a task is initiated and destroyed when it completes,
17
+ ensuring that all state is properly encapsulated and cleaned up.
18
+ """
19
+
20
+ def __init__(self, task_id: str, a2a_context: Dict[str, Any]):
21
+ """
22
+ Initializes the TaskExecutionContext.
23
+
24
+ Args:
25
+ task_id: The unique logical ID of the task.
26
+ a2a_context: The original, rich context dictionary from the A2A request.
27
+ """
28
+ self.task_id: str = task_id
29
+ self.a2a_context: Dict[str, Any] = a2a_context
30
+ self.cancellation_event: asyncio.Event = asyncio.Event()
31
+ self.streaming_buffer: str = ""
32
+ self.run_based_response_buffer: str = ""
33
+ self.active_peer_sub_tasks: Dict[str, Dict[str, Any]] = {}
34
+ self.parallel_tool_calls: Dict[str, Dict[str, Any]] = {}
35
+ self.produced_artifacts: List[Dict[str, Any]] = []
36
+ self.artifact_signals_to_return: List[Dict[str, Any]] = []
37
+ self.event_loop: Optional[asyncio.AbstractEventLoop] = None
38
+ self.lock: threading.Lock = threading.Lock()
39
+ self.is_paused: bool = False # Track if task is paused waiting for peer/auth
40
+
41
+ # Token usage tracking
42
+ self.total_input_tokens: int = 0
43
+ self.total_output_tokens: int = 0
44
+ self.total_cached_input_tokens: int = 0
45
+ self.token_usage_by_model: Dict[str, Dict[str, int]] = {}
46
+ self.token_usage_by_source: Dict[str, Dict[str, int]] = {}
47
+
48
+ # Generic security storage (enterprise use only)
49
+ self._security_context: Dict[str, Any] = {}
50
+
51
+ # Original Solace message for ACK/NACK operations
52
+ # Stored here instead of a2a_context to avoid serialization issues
53
+ self._original_solace_message: Optional["SolaceMessage"] = None
54
+
55
+ # Turn tracking for proper spacing between LLM turns
56
+ self._current_invocation_id: Optional[str] = None
57
+ self._first_text_seen_in_turn: bool = False
58
+ self._need_spacing_before_next_text: bool = False
59
+
60
+ def cancel(self) -> None:
61
+ """Signals that the task should be cancelled."""
62
+ self.cancellation_event.set()
63
+
64
+ def is_cancelled(self) -> bool:
65
+ """Checks if the cancellation event has been set."""
66
+ return self.cancellation_event.is_set()
67
+
68
+ def set_paused(self, paused: bool) -> None:
69
+ """
70
+ Marks the task as paused (waiting for peer response or user input).
71
+
72
+ Args:
73
+ paused: True if task is paused, False if resuming.
74
+ """
75
+ with self.lock:
76
+ self.is_paused = paused
77
+
78
+ def get_is_paused(self) -> bool:
79
+ """
80
+ Checks if the task is currently paused.
81
+
82
+ Returns:
83
+ True if task is paused (waiting for peer/auth), False otherwise.
84
+ """
85
+ with self.lock:
86
+ return self.is_paused
87
+
88
+ def append_to_streaming_buffer(self, text: str) -> None:
89
+ """Appends a chunk of text to the main streaming buffer."""
90
+ with self.lock:
91
+ self.streaming_buffer += text
92
+
93
+ def flush_streaming_buffer(self) -> str:
94
+ """Returns the entire content of the streaming buffer and clears it."""
95
+ with self.lock:
96
+ content = self.streaming_buffer
97
+ self.streaming_buffer = ""
98
+ return content
99
+
100
+ def get_streaming_buffer_content(self) -> str:
101
+ """Returns the current buffer content without clearing it."""
102
+ with self.lock:
103
+ return self.streaming_buffer
104
+
105
+ def append_to_run_based_buffer(self, text: str) -> None:
106
+ """Appends a chunk of processed text to the run-based response buffer."""
107
+ with self.lock:
108
+ self.run_based_response_buffer += text
109
+
110
+ def register_peer_sub_task(
111
+ self, sub_task_id: str, correlation_data: Dict[str, Any]
112
+ ) -> None:
113
+ """Adds a new peer sub-task's correlation data to the tracking dictionary."""
114
+ with self.lock:
115
+ self.active_peer_sub_tasks[sub_task_id] = correlation_data
116
+
117
+ def claim_sub_task_completion(self, sub_task_id: str) -> Optional[Dict[str, Any]]:
118
+ """
119
+ Atomically retrieves and removes a sub-task's correlation data.
120
+ This is the core atomic operation to prevent race conditions.
121
+ Returns the correlation data if the claim is successful, otherwise None.
122
+ """
123
+ with self.lock:
124
+ return self.active_peer_sub_tasks.pop(sub_task_id, None)
125
+
126
+ def register_parallel_call_sent(self, invocation_id: str) -> None:
127
+ """
128
+ Registers that a new parallel tool call has been sent for a specific invocation.
129
+ Initializes the tracking dictionary for the invocation if it's the first call,
130
+ otherwise increments the total.
131
+ """
132
+ with self.lock:
133
+ if invocation_id not in self.parallel_tool_calls:
134
+ self.parallel_tool_calls[invocation_id] = {
135
+ "total": 1,
136
+ "completed": 0,
137
+ "results": [],
138
+ }
139
+ else:
140
+ self.parallel_tool_calls[invocation_id]["total"] += 1
141
+
142
+ def handle_peer_timeout(
143
+ self,
144
+ sub_task_id: str,
145
+ correlation_data: Dict,
146
+ timeout_sec: int,
147
+ invocation_id: str,
148
+ ) -> bool:
149
+ """
150
+ Handles a timeout for a specific peer sub-task for a given invocation.
151
+
152
+ Updates the parallel call tracker with a formatted error message and returns
153
+ True if all peer calls for that invocation are now complete.
154
+
155
+ Args:
156
+ sub_task_id: The ID of the sub-task that timed out.
157
+ correlation_data: The correlation data associated with the sub-task.
158
+ timeout_sec: The timeout duration in seconds.
159
+ invocation_id: The ID of the invocation that initiated the parallel calls.
160
+
161
+ Returns:
162
+ A boolean indicating if all parallel calls for the invocation are now complete.
163
+ """
164
+ peer_tool_name = correlation_data.get("peer_tool_name", "unknown_tool")
165
+ timeout_message = f"Request to peer agent tool '{peer_tool_name}' timed out after {timeout_sec} seconds."
166
+
167
+ # The payload must be a dictionary with a 'result' key containing the simple string.
168
+ # This ensures the ADK framework presents it to the LLM as a simple text response.
169
+ simple_error_payload = {"result": timeout_message}
170
+
171
+ current_result = {
172
+ "adk_function_call_id": correlation_data.get("adk_function_call_id"),
173
+ "peer_tool_name": peer_tool_name,
174
+ "payload": simple_error_payload,
175
+ }
176
+ return self.record_parallel_result(current_result, invocation_id)
177
+
178
+ def record_parallel_result(self, result: Dict, invocation_id: str) -> bool:
179
+ """
180
+ Records a result for a parallel tool call for a specific invocation
181
+ and returns True if all calls for that invocation are now complete.
182
+ """
183
+ with self.lock:
184
+ invocation_state = self.parallel_tool_calls.get(invocation_id)
185
+ if not invocation_state:
186
+ # This can happen if a response arrives after a timeout has cleaned up.
187
+ return False
188
+
189
+ invocation_state["results"].append(result)
190
+ invocation_state["completed"] += 1
191
+ return invocation_state["completed"] >= invocation_state["total"]
192
+
193
+ def clear_parallel_invocation_state(self, invocation_id: str) -> None:
194
+ """
195
+ Removes the state for a completed parallel tool call invocation.
196
+ """
197
+ with self.lock:
198
+ if invocation_id in self.parallel_tool_calls:
199
+ del self.parallel_tool_calls[invocation_id]
200
+
201
+ def register_produced_artifact(self, filename: str, version: int) -> None:
202
+ """Adds a newly created artifact to the tracking list."""
203
+ with self.lock:
204
+ self.produced_artifacts.append({"filename": filename, "version": version})
205
+
206
+ def add_artifact_signal(self, signal: Dict[str, Any]) -> None:
207
+ """Adds an artifact return signal to the list in a thread-safe manner."""
208
+ with self.lock:
209
+ self.artifact_signals_to_return.append(signal)
210
+
211
+ def get_and_clear_artifact_signals(self) -> List[Dict[str, Any]]:
212
+ """
213
+ Retrieves all pending artifact signals and clears the list atomically.
214
+ """
215
+ with self.lock:
216
+ signals = list(self.artifact_signals_to_return) # Create a copy
217
+ self.artifact_signals_to_return.clear()
218
+ return signals
219
+
220
+ def set_event_loop(self, loop: asyncio.AbstractEventLoop) -> None:
221
+ """Stores a reference to the task's event loop."""
222
+ with self.lock:
223
+ self.event_loop = loop
224
+
225
+ def get_event_loop(self) -> Optional[asyncio.AbstractEventLoop]:
226
+ """Retrieves the stored event loop."""
227
+ with self.lock:
228
+ return self.event_loop
229
+
230
+ def record_token_usage(
231
+ self,
232
+ input_tokens: int,
233
+ output_tokens: int,
234
+ model: str,
235
+ source: str = "agent",
236
+ tool_name: Optional[str] = None,
237
+ cached_input_tokens: int = 0,
238
+ ) -> None:
239
+ """
240
+ Records token usage for an LLM call.
241
+
242
+ Args:
243
+ input_tokens: Number of input/prompt tokens.
244
+ output_tokens: Number of output/completion tokens.
245
+ model: Model identifier used for this call.
246
+ source: Source of the LLM call ("agent" or "tool").
247
+ tool_name: Tool name if source is "tool".
248
+ cached_input_tokens: Number of cached input tokens (optional).
249
+ """
250
+ with self.lock:
251
+ # Update totals
252
+ self.total_input_tokens += input_tokens
253
+ self.total_output_tokens += output_tokens
254
+ self.total_cached_input_tokens += cached_input_tokens
255
+
256
+ # Track by model
257
+ if model not in self.token_usage_by_model:
258
+ self.token_usage_by_model[model] = {
259
+ "input_tokens": 0,
260
+ "output_tokens": 0,
261
+ "cached_input_tokens": 0,
262
+ }
263
+ self.token_usage_by_model[model]["input_tokens"] += input_tokens
264
+ self.token_usage_by_model[model]["output_tokens"] += output_tokens
265
+ self.token_usage_by_model[model]["cached_input_tokens"] += cached_input_tokens
266
+
267
+ # Track by source
268
+ source_key = f"{source}:{tool_name}" if tool_name else source
269
+ if source_key not in self.token_usage_by_source:
270
+ self.token_usage_by_source[source_key] = {
271
+ "input_tokens": 0,
272
+ "output_tokens": 0,
273
+ "cached_input_tokens": 0,
274
+ }
275
+ self.token_usage_by_source[source_key]["input_tokens"] += input_tokens
276
+ self.token_usage_by_source[source_key]["output_tokens"] += output_tokens
277
+ self.token_usage_by_source[source_key]["cached_input_tokens"] += cached_input_tokens
278
+
279
+ def get_token_usage_summary(self) -> Dict[str, Any]:
280
+ """
281
+ Returns a summary of all token usage for this task.
282
+
283
+ Returns:
284
+ Dictionary containing total token counts and breakdowns by model and source.
285
+ """
286
+ with self.lock:
287
+ return {
288
+ "total_input_tokens": self.total_input_tokens,
289
+ "total_output_tokens": self.total_output_tokens,
290
+ "total_cached_input_tokens": self.total_cached_input_tokens,
291
+ "total_tokens": self.total_input_tokens + self.total_output_tokens,
292
+ "by_model": dict(self.token_usage_by_model),
293
+ "by_source": dict(self.token_usage_by_source),
294
+ }
295
+
296
+ def set_security_data(self, key: str, value: Any) -> None:
297
+ """
298
+ Store opaque security data (enterprise use only).
299
+
300
+ This method provides a secure storage mechanism for enterprise security features
301
+ such as authentication tokens. The stored data is isolated per task and
302
+ automatically cleaned up when the task completes.
303
+
304
+ Args:
305
+ key: Storage key for the security data
306
+ value: Security data to store (opaque to open source code)
307
+ """
308
+ with self.lock:
309
+ self._security_context[key] = value
310
+
311
+ def get_security_data(self, key: str, default: Any = None) -> Any:
312
+ """
313
+ Retrieve opaque security data (enterprise use only).
314
+
315
+ This method retrieves security data that was previously stored using
316
+ set_security_data(). The data is opaque to open source code.
317
+
318
+ Args:
319
+ key: Storage key for the security data
320
+ default: Default value to return if key not found
321
+
322
+ Returns:
323
+ The stored security data, or default if not found
324
+ """
325
+ with self.lock:
326
+ return self._security_context.get(key, default)
327
+
328
+ def clear_security_data(self) -> None:
329
+ """
330
+ Clear all security data.
331
+
332
+ This method is provided for completeness but is not explicitly called.
333
+ Security data is automatically cleaned up when the TaskExecutionContext
334
+ is removed from active_tasks and garbage collected.
335
+ """
336
+ with self.lock:
337
+ self._security_context.clear()
338
+
339
+ def set_original_solace_message(self, message: Optional["SolaceMessage"]) -> None:
340
+ """
341
+ Store the original Solace message for this task.
342
+
343
+ This message is used for ACK/NACK operations when the task completes.
344
+ Stored separately from a2a_context to avoid serialization issues when
345
+ the context is persisted to the ADK session state.
346
+
347
+ Args:
348
+ message: The Solace message that initiated this task, or None
349
+ """
350
+ with self.lock:
351
+ self._original_solace_message = message
352
+
353
+ def get_original_solace_message(self) -> Optional["SolaceMessage"]:
354
+ """
355
+ Retrieve the original Solace message for this task.
356
+
357
+ Returns:
358
+ The Solace message that initiated this task, or None if not available
359
+ """
360
+ with self.lock:
361
+ return self._original_solace_message
362
+
363
+ def check_and_update_invocation(self, new_invocation_id: str) -> bool:
364
+ """
365
+ Check if this is a new turn (different invocation_id) and update tracking.
366
+
367
+ Args:
368
+ new_invocation_id: The invocation_id from the current ADK event
369
+
370
+ Returns:
371
+ True if this is a new turn (invocation_id changed), False otherwise
372
+ """
373
+ with self.lock:
374
+ is_new_turn = (
375
+ self._current_invocation_id is not None
376
+ and self._current_invocation_id != new_invocation_id
377
+ )
378
+
379
+ if is_new_turn:
380
+ # Mark that we need spacing before the next text
381
+ self._need_spacing_before_next_text = True
382
+
383
+ if is_new_turn or self._current_invocation_id is None:
384
+ self._current_invocation_id = new_invocation_id
385
+ self._first_text_seen_in_turn = False
386
+
387
+ return is_new_turn
388
+
389
+ def is_first_text_in_turn(self) -> bool:
390
+ """
391
+ Check if this is the first text we're seeing in the current turn,
392
+ and mark it as seen.
393
+
394
+ Returns:
395
+ True if this is the first text in the turn, False otherwise
396
+ """
397
+ with self.lock:
398
+ if not self._first_text_seen_in_turn:
399
+ self._first_text_seen_in_turn = True
400
+ return True
401
+ return False
402
+
403
+ def should_add_turn_spacing(self) -> bool:
404
+ """
405
+ Check if we need to add spacing before the next text (because it's a new turn).
406
+ This flag is set when a new invocation starts and cleared after spacing is added.
407
+
408
+ Returns:
409
+ True if spacing should be added, False otherwise
410
+ """
411
+ with self.lock:
412
+ if self._need_spacing_before_next_text:
413
+ self._need_spacing_before_next_text = False
414
+ return True
415
+ return False
@@ -0,0 +1,3 @@
1
+ """
2
+ Contains utilities for testing the A2A agent framework.
3
+ """
@@ -0,0 +1,135 @@
1
+ """
2
+ Provides debugging utilities for the declarative test framework,
3
+ including a pretty-printer for A2A event history.
4
+ """
5
+
6
+ import json
7
+ from datetime import datetime
8
+ from typing import List, Dict, Any
9
+
10
+
11
+ def _truncate(s: str, max_len: int) -> str:
12
+ """Truncates a string if it exceeds max_len, appending '...'."""
13
+ if not isinstance(s, str):
14
+ s = str(s)
15
+ if max_len <= 0 or len(s) <= max_len:
16
+ return s
17
+ if max_len <= 3:
18
+ return s[:max_len]
19
+ return s[: max_len - 3] + "..."
20
+
21
+
22
+ def _format_a2a_parts(parts: List[Dict], max_string_length: int) -> str:
23
+ """Helper to format A2A message parts into a readable string."""
24
+ if not parts:
25
+ return "[No Parts]"
26
+
27
+ formatted_parts = []
28
+ for part in parts:
29
+ part_type = part.get("type", "unknown")
30
+ if part_type == "text":
31
+ text = part.get("text", "")
32
+ formatted_parts.append(
33
+ f" - [Text]: '{_truncate(text, max_string_length)}'"
34
+ )
35
+ elif part_type == "data":
36
+ data_content = json.dumps(part.get("data", {}))
37
+ formatted_parts.append(
38
+ f" - [Data]: {_truncate(data_content, max_string_length)}"
39
+ )
40
+ elif part_type == "file":
41
+ file_info = part.get("file", {})
42
+ name = file_info.get("name", "N/A")
43
+ mime = file_info.get("mimeType", "N/A")
44
+ formatted_parts.append(
45
+ f" - [File]: {_truncate(name, max_string_length)} ({mime})"
46
+ )
47
+ else:
48
+ part_str = json.dumps(part)
49
+ formatted_parts.append(
50
+ f" - [Unknown Part]: {_truncate(part_str, max_string_length)}"
51
+ )
52
+ return "\n".join(formatted_parts)
53
+
54
+
55
+ def _truncate_dict_strings(data: Any, max_len: int) -> Any:
56
+ """Recursively traverses a dict/list and truncates all string values."""
57
+ if max_len <= 0:
58
+ return data
59
+ if isinstance(data, dict):
60
+ return {k: _truncate_dict_strings(v, max_len) for k, v in data.items()}
61
+ elif isinstance(data, list):
62
+ return [_truncate_dict_strings(item, max_len) for item in data]
63
+ elif isinstance(data, str):
64
+ return _truncate(data, max_len)
65
+ else:
66
+ return data
67
+
68
+
69
+ def pretty_print_event_history(
70
+ event_history: List[Dict[str, Any]], max_string_length: int = 200
71
+ ):
72
+ """
73
+ Formats and prints a list of A2A event payloads for debugging.
74
+ """
75
+ if not event_history:
76
+ print("\n" + "=" * 25 + " NO EVENTS RECORDED " + "=" * 25)
77
+ print("--- The test failed before any events were received from the agent. ---")
78
+ print("=" * 70 + "\n")
79
+ return
80
+
81
+ print("\n" + "=" * 25 + " TASK EVENT HISTORY " + "=" * 25)
82
+ for i, event_payload in enumerate(event_history):
83
+ print(f"\n--- Event {i+1} ---")
84
+
85
+ event_type = "Unknown Event"
86
+ details = ""
87
+
88
+ result = event_payload.get("result", {})
89
+ error = event_payload.get("error")
90
+
91
+ if error:
92
+ event_type = "Error Response"
93
+ details += f" Error Code: {error.get('code')}\n"
94
+ details += f" Error Message: {_truncate(error.get('message'), max_string_length)}\n"
95
+
96
+ elif result.get("status") and result.get("final") is not None:
97
+ event_type = "Task Status Update"
98
+ status = result.get("status", {})
99
+ state = status.get("state", "UNKNOWN")
100
+ message = status.get("message", {})
101
+ parts = message.get("parts", [])
102
+ details += f" State: {state}\n"
103
+ details += f" Parts:\n{_format_a2a_parts(parts, max_string_length)}\n"
104
+
105
+ elif result.get("status") and result.get("sessionId"):
106
+ event_type = "Final Task Response"
107
+ status = result.get("status", {})
108
+ state = status.get("state", "UNKNOWN")
109
+ message = status.get("message", {})
110
+ parts = message.get("parts", [])
111
+ details += f" Final State: {state}\n"
112
+ details += (
113
+ f" Final Parts:\n{_format_a2a_parts(parts, max_string_length)}\n"
114
+ )
115
+ if result.get("artifacts"):
116
+ artifacts_str = json.dumps(result.get("artifacts"))
117
+ details += (
118
+ f" Artifacts: {_truncate(artifacts_str, max_string_length)}\n"
119
+ )
120
+
121
+ elif result.get("artifact"):
122
+ event_type = "Task Artifact Update"
123
+ artifact = result.get("artifact", {})
124
+ details += f" Artifact Name: {_truncate(artifact.get('name'), max_string_length)}\n"
125
+ details += f" Artifact Parts:\n{_format_a2a_parts(artifact.get('parts', []), max_string_length)}\n"
126
+
127
+ print(f"Type: {event_type}")
128
+ if details:
129
+ print(details, end="")
130
+
131
+ print("Raw Payload:")
132
+ truncated_payload = _truncate_dict_strings(event_payload, max_string_length)
133
+ print(json.dumps(truncated_payload, indent=2))
134
+
135
+ print("=" * 70 + "\n")
@@ -0,0 +1,58 @@
1
+ ## Quick Summary
2
+ The `testing` directory provides utilities for testing the A2A (Agent-to-Agent) framework, with a focus on debugging tools that help developers understand test failures by providing readable representations of agent event histories.
3
+
4
+ ## Files Overview
5
+ - `__init__.py` - Package initialization file marking the directory as a Python module
6
+ - `debug_utils.py` - Debugging utilities including pretty-printing for A2A event history
7
+ - `testing_llm.txt` - Documentation file (not a code module)
8
+ - `testing_llm_detail.txt` - Concatenated documentation file (not a code module)
9
+
10
+ ## Developer API Reference
11
+
12
+ ### debug_utils.py
13
+ **Purpose:** Provides debugging utilities for the declarative test framework, including a pretty-printer for A2A event history
14
+ **Import:** `from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history`
15
+
16
+ **Functions:**
17
+ - `pretty_print_event_history(event_history: List[Dict[str, Any]], max_string_length: int = 200) -> None` - Formats and prints a list of A2A event payloads for debugging, intelligently parsing different event types and truncating long strings for readability
18
+
19
+ **Usage Examples:**
20
+ ```python
21
+ # Import the debugging utility
22
+ from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
23
+ from typing import List, Dict, Any
24
+
25
+ # Example: Debug a failed test by printing event history
26
+ event_history: List[Dict[str, Any]] = [
27
+ {
28
+ "result": {
29
+ "status": {
30
+ "state": "EXECUTING",
31
+ "message": {
32
+ "parts": [
33
+ {"type": "text", "text": "Processing your request..."}
34
+ ]
35
+ }
36
+ },
37
+ "final": False
38
+ }
39
+ },
40
+ {
41
+ "error": {
42
+ "code": "TIMEOUT_ERROR",
43
+ "message": "Request timed out after 30 seconds"
44
+ }
45
+ }
46
+ ]
47
+
48
+ # Print formatted event history for debugging
49
+ pretty_print_event_history(event_history)
50
+
51
+ # Print with custom string truncation length
52
+ pretty_print_event_history(event_history, max_string_length=100)
53
+
54
+ # Handle empty event history (when test fails before any events)
55
+ pretty_print_event_history([])
56
+ ```
57
+
58
+ # content_hash: 09db923206be2f0cd02c12cb97cf50f7b6364773fae328dd0570e69067cc1971
@@ -0,0 +1,68 @@
1
+ # LLM Summary Detail File
2
+
3
+ This file is a concatenation of all individual *llm.txt files found in the 'testing' directory tree. Each section below corresponds to a specific directory's summary file.
4
+
5
+ ================================================================================
6
+
7
+ ## Section 1: solace_agent_mesh/agent/testing/testing_llm.txt
8
+
9
+ **Source file:** `solace_agent_mesh/agent/testing/testing_llm.txt`
10
+
11
+ ## Quick Summary
12
+ The `testing` directory provides utilities for testing the A2A (Agent-to-Agent) framework, with a focus on debugging tools that help developers understand test failures by providing readable representations of agent event histories.
13
+
14
+ ## Files Overview
15
+ - `__init__.py` - Package initialization file marking the directory as a Python module
16
+ - `debug_utils.py` - Debugging utilities including pretty-printing for A2A event history
17
+ - `testing_llm.txt` - Documentation file (not a code module)
18
+
19
+ ## Developer API Reference
20
+
21
+ ### debug_utils.py
22
+ **Purpose:** Provides debugging utilities for the declarative test framework, including a pretty-printer for A2A event history
23
+ **Import:** `from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history`
24
+
25
+ **Functions:**
26
+ - `pretty_print_event_history(event_history: List[Dict[str, Any]], max_string_length: int = 200) -> None` - Formats and prints a list of A2A event payloads for debugging, intelligently parsing different event types and truncating long strings for readability
27
+
28
+ **Usage Examples:**
29
+ ```python
30
+ # Import the debugging utility
31
+ from solace_agent_mesh.agent.testing.debug_utils import pretty_print_event_history
32
+ from typing import List, Dict, Any
33
+
34
+ # Example: Debug a failed test by printing event history
35
+ event_history: List[Dict[str, Any]] = [
36
+ {
37
+ "result": {
38
+ "status": {
39
+ "state": "EXECUTING",
40
+ "message": {
41
+ "parts": [
42
+ {"type": "text", "text": "Processing your request..."}
43
+ ]
44
+ }
45
+ },
46
+ "final": False
47
+ }
48
+ },
49
+ {
50
+ "error": {
51
+ "code": "TIMEOUT_ERROR",
52
+ "message": "Request timed out after 30 seconds"
53
+ }
54
+ }
55
+ ]
56
+
57
+ # Print formatted event history for debugging
58
+ pretty_print_event_history(event_history)
59
+
60
+ # Print with custom string truncation length
61
+ pretty_print_event_history(event_history, max_string_length=100)
62
+
63
+ # Handle empty event history (when test fails before any events)
64
+ pretty_print_event_history([])
65
+ ```
66
+
67
+ ================================================================================
68
+