solace-agent-mesh 0.2.4__py3-none-any.whl → 1.0.1__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (518) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  2. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  3. solace_agent_mesh/agent/adk/callbacks.py +1694 -0
  4. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  5. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  6. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  7. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  8. solace_agent_mesh/agent/adk/runner.py +353 -0
  9. solace_agent_mesh/agent/adk/services.py +240 -0
  10. solace_agent_mesh/agent/adk/setup.py +751 -0
  11. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  12. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  13. solace_agent_mesh/agent/agent_llm.txt +41 -0
  14. solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
  15. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  16. solace_agent_mesh/agent/sac/app.py +640 -0
  17. solace_agent_mesh/agent/sac/component.py +3388 -0
  18. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  19. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  20. solace_agent_mesh/agent/sac/task_execution_context.py +176 -0
  21. solace_agent_mesh/agent/testing/__init__.py +3 -0
  22. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  23. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  24. solace_agent_mesh/agent/tools/__init__.py +14 -0
  25. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  28. solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
  29. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  30. solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
  31. solace_agent_mesh/agent/tools/registry.py +36 -0
  32. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  33. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  34. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  35. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  36. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  37. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  38. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  39. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  40. solace_agent_mesh/assets/docs/404.html +16 -0
  41. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  42. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  43. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  54. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  57. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  104. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
  132. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  165. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  167. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  168. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  170. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  171. solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
  172. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  173. solace_agent_mesh/assets/docs/search-doc-1753813536522.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  175. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  176. solace_agent_mesh/cli/__init__.py +1 -1
  177. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  178. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  179. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  180. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  181. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  183. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  184. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  185. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  186. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  187. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  188. solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
  189. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  190. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -0
  191. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  192. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  193. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  194. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  201. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  202. solace_agent_mesh/cli/main.py +17 -294
  203. solace_agent_mesh/cli/utils.py +135 -204
  204. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  205. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  210. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  211. solace_agent_mesh/common/__init__.py +1 -0
  212. solace_agent_mesh/common/a2a_protocol.py +564 -0
  213. solace_agent_mesh/common/agent_registry.py +42 -0
  214. solace_agent_mesh/common/client/__init__.py +4 -0
  215. solace_agent_mesh/common/client/card_resolver.py +21 -0
  216. solace_agent_mesh/common/client/client.py +85 -0
  217. solace_agent_mesh/common/client/client_llm.txt +133 -0
  218. solace_agent_mesh/common/common_llm.txt +144 -0
  219. solace_agent_mesh/common/constants.py +1 -14
  220. solace_agent_mesh/common/middleware/__init__.py +12 -0
  221. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  222. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  223. solace_agent_mesh/common/middleware/registry.py +125 -0
  224. solace_agent_mesh/common/server/__init__.py +4 -0
  225. solace_agent_mesh/common/server/server.py +122 -0
  226. solace_agent_mesh/common/server/server_llm.txt +169 -0
  227. solace_agent_mesh/common/server/task_manager.py +291 -0
  228. solace_agent_mesh/common/server/utils.py +28 -0
  229. solace_agent_mesh/common/services/__init__.py +4 -0
  230. solace_agent_mesh/common/services/employee_service.py +162 -0
  231. solace_agent_mesh/common/services/identity_service.py +129 -0
  232. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  233. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  234. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  235. solace_agent_mesh/common/services/services_llm.txt +132 -0
  236. solace_agent_mesh/common/types.py +411 -0
  237. solace_agent_mesh/common/utils/__init__.py +7 -0
  238. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  239. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  240. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  241. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  242. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  243. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  244. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  245. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  246. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  247. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  248. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  249. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  250. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  251. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  252. solace_agent_mesh/config_portal/backend/common.py +66 -24
  253. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
  254. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
  258. solace_agent_mesh/config_portal/backend/server.py +550 -181
  259. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
  260. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  267. solace_agent_mesh/core_a2a/__init__.py +1 -0
  268. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  269. solace_agent_mesh/core_a2a/service.py +331 -0
  270. solace_agent_mesh/evaluation/config_loader.py +657 -0
  271. solace_agent_mesh/evaluation/evaluator.py +667 -0
  272. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  273. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  274. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  275. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  276. solace_agent_mesh/evaluation/report/modal.html +59 -0
  277. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  278. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  279. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  280. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  281. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  282. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  283. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  284. solace_agent_mesh/evaluation/report_generator.py +613 -0
  285. solace_agent_mesh/evaluation/run.py +613 -0
  286. solace_agent_mesh/evaluation/subscriber.py +872 -0
  287. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  288. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  289. solace_agent_mesh/gateway/base/__init__.py +1 -0
  290. solace_agent_mesh/gateway/base/app.py +266 -0
  291. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  292. solace_agent_mesh/gateway/base/component.py +1542 -0
  293. solace_agent_mesh/gateway/base/task_context.py +74 -0
  294. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  295. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  296. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  297. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  298. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  299. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  300. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  301. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  302. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  303. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  304. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  305. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
  306. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  307. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  308. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  309. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  310. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  311. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  312. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  313. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  314. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  315. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  316. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  317. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  318. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  319. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  320. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  321. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  322. solace_agent_mesh/llm.txt +228 -0
  323. solace_agent_mesh/llm_detail.txt +2835 -0
  324. solace_agent_mesh/templates/agent_template.yaml +53 -0
  325. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  326. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  327. solace_agent_mesh/templates/gateway_component_template.py +400 -0
  328. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  329. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  330. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  331. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  332. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  333. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  334. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  335. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  336. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  337. solace_agent_mesh/templates/shared_config.yaml +66 -0
  338. solace_agent_mesh/templates/templates_llm.txt +147 -0
  339. solace_agent_mesh/templates/webui.yaml +53 -0
  340. solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
  341. solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
  342. solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
  343. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -256
  345. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  346. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  347. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  348. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  349. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  350. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  351. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  352. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  353. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  354. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  355. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  356. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  357. solace_agent_mesh/agents/slack/__init__.py +0 -1
  358. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  359. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  360. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  361. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  362. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  363. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  364. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  365. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  366. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  367. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  368. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  369. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  370. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  371. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  372. solace_agent_mesh/cli/commands/add/add.py +0 -88
  373. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  374. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  375. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  376. solace_agent_mesh/cli/commands/build.py +0 -670
  377. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  378. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  379. solace_agent_mesh/cli/commands/config.py +0 -29
  380. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  382. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  383. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  384. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  385. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  386. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  387. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  388. solace_agent_mesh/cli/commands/init/init.py +0 -92
  389. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  390. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  391. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  392. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  393. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  394. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  395. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  396. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  397. solace_agent_mesh/cli/commands/run.py +0 -68
  398. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  399. solace_agent_mesh/cli/config.py +0 -85
  400. solace_agent_mesh/common/action.py +0 -91
  401. solace_agent_mesh/common/action_list.py +0 -37
  402. solace_agent_mesh/common/action_response.py +0 -340
  403. solace_agent_mesh/common/mysql_database.py +0 -40
  404. solace_agent_mesh/common/postgres_database.py +0 -85
  405. solace_agent_mesh/common/prompt_templates.py +0 -28
  406. solace_agent_mesh/common/stimulus_utils.py +0 -152
  407. solace_agent_mesh/common/time.py +0 -24
  408. solace_agent_mesh/common/utils.py +0 -712
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  414. solace_agent_mesh/configs/agent_global.yaml +0 -74
  415. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  416. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  417. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  418. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  419. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  420. solace_agent_mesh/configs/monitor.yaml +0 -0
  421. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  422. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  423. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  424. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  425. solace_agent_mesh/configs/service_llm.yaml +0 -265
  426. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  427. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  428. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  429. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  430. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  431. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  432. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  433. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  434. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  435. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  436. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  437. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  438. solace_agent_mesh/orchestrator/__init__.py +0 -0
  439. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  440. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  441. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  442. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  443. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  444. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  445. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  446. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  447. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  448. solace_agent_mesh/services/__init__.py +0 -0
  449. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  450. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  451. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  452. solace_agent_mesh/services/common/__init__.py +0 -4
  453. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  454. solace_agent_mesh/services/common/singleton.py +0 -18
  455. solace_agent_mesh/services/file_service/__init__.py +0 -14
  456. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  457. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  458. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  459. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  460. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  461. solace_agent_mesh/services/file_service/file_service.py +0 -437
  462. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  463. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  464. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  465. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  466. solace_agent_mesh/services/history_service/__init__.py +0 -3
  467. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  468. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  469. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  470. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  471. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  472. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  473. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  474. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  475. solace_agent_mesh/services/history_service/history_service.py +0 -413
  476. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  477. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  478. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  479. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  480. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  481. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  482. solace_agent_mesh/templates/action.py +0 -38
  483. solace_agent_mesh/templates/agent.py +0 -29
  484. solace_agent_mesh/templates/agent.yaml +0 -70
  485. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  486. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  487. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  488. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  489. solace_agent_mesh/templates/gateway_base.py +0 -15
  490. solace_agent_mesh/templates/gateway_input.py +0 -98
  491. solace_agent_mesh/templates/gateway_output.py +0 -71
  492. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  493. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  494. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  495. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  496. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  497. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  498. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  499. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  500. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  501. solace_agent_mesh/templates/web-flows.yaml +0 -76
  502. solace_agent_mesh/tools/__init__.py +0 -0
  503. solace_agent_mesh/tools/components/__init__.py +0 -0
  504. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  505. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  506. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  507. solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
  508. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
  510. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  511. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  512. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  513. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  517. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  518. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,14 @@
1
+ """
2
+ Defines types used within the embed processing system, like DataFormat.
3
+ """
4
+
5
+ from enum import Enum, auto
6
+
7
+
8
+ class DataFormat(Enum):
9
+ """Represents internal data formats during modifier chain execution."""
10
+
11
+ BYTES = auto()
12
+ STRING = auto()
13
+ JSON_OBJECT = auto()
14
+ LIST_OF_DICTS = auto()
@@ -0,0 +1,108 @@
1
+ """In Memory Cache utility."""
2
+
3
+ import threading
4
+ import time
5
+ from typing import Any, Dict, Optional
6
+
7
+
8
+ class InMemoryCache:
9
+ """A thread-safe Singleton class to manage cache data.
10
+
11
+ Ensures only one instance of the cache exists across the application.
12
+ """
13
+
14
+ _instance: Optional["InMemoryCache"] = None
15
+ _lock: threading.Lock = threading.Lock()
16
+ _initialized: bool = False
17
+
18
+ def __new__(cls):
19
+ """Override __new__ to control instance creation (Singleton pattern).
20
+
21
+ Uses a lock to ensure thread safety during the first instantiation.
22
+
23
+ Returns:
24
+ The singleton instance of InMemoryCache.
25
+ """
26
+ if cls._instance is None:
27
+ with cls._lock:
28
+ if cls._instance is None:
29
+ cls._instance = super().__new__(cls)
30
+ return cls._instance
31
+
32
+ def __init__(self):
33
+ """Initialize the cache storage.
34
+
35
+ Uses a flag (_initialized) to ensure this logic runs only on the very first
36
+ creation of the singleton instance.
37
+ """
38
+ if not self._initialized:
39
+ with self._lock:
40
+ if not self._initialized:
41
+ self._cache_data: Dict[str, Dict[str, Any]] = {}
42
+ self._ttl: Dict[str, float] = {}
43
+ self._data_lock: threading.Lock = threading.Lock()
44
+ self._initialized = True
45
+
46
+ def set(self, key: str, value: Any, ttl: Optional[int] = None) -> None:
47
+ """Set a key-value pair.
48
+
49
+ Args:
50
+ key: The key for the data.
51
+ value: The data to store.
52
+ ttl: Time to live in seconds. If None, data will not expire.
53
+ """
54
+ with self._data_lock:
55
+ self._cache_data[key] = value
56
+
57
+ if ttl is not None:
58
+ self._ttl[key] = time.time() + ttl
59
+ else:
60
+ if key in self._ttl:
61
+ del self._ttl[key]
62
+
63
+ def get(self, key: str, default: Any = None) -> Any:
64
+ """Get the value associated with a key.
65
+
66
+ Args:
67
+ key: The key for the data within the session.
68
+ default: The value to return if the session or key is not found.
69
+
70
+ Returns:
71
+ The cached value, or the default value if not found.
72
+ """
73
+ with self._data_lock:
74
+ if key in self._ttl and time.time() > self._ttl[key]:
75
+ del self._cache_data[key]
76
+ del self._ttl[key]
77
+ return default
78
+ return self._cache_data.get(key, default)
79
+
80
+ def delete(self, key: str) -> None:
81
+ """Delete a specific key-value pair from a cache.
82
+
83
+ Args:
84
+ key: The key to delete.
85
+
86
+ Returns:
87
+ True if the key was found and deleted, False otherwise.
88
+ """
89
+
90
+ with self._data_lock:
91
+ if key in self._cache_data:
92
+ del self._cache_data[key]
93
+ if key in self._ttl:
94
+ del self._ttl[key]
95
+ return True
96
+ return False
97
+
98
+ def clear(self) -> bool:
99
+ """Remove all data.
100
+
101
+ Returns:
102
+ True if the data was cleared, False otherwise.
103
+ """
104
+ with self._data_lock:
105
+ self._cache_data.clear()
106
+ self._ttl.clear()
107
+ return True
108
+ return False
@@ -0,0 +1,44 @@
1
+ import logging
2
+ import json
3
+ import os
4
+ from datetime import datetime, timezone
5
+ import traceback
6
+
7
+
8
+ class DatadogJsonFormatter(logging.Formatter):
9
+ """
10
+ Custom formatter to output logs in Datadog-compatible JSON format.
11
+ """
12
+
13
+ def format(self, record):
14
+ log_entry = {
15
+ "timestamp": datetime.fromtimestamp(
16
+ record.created, tz=timezone.utc
17
+ ).isoformat(),
18
+ "level": record.levelname,
19
+ "message": record.getMessage(),
20
+ "logger.name": record.name,
21
+ "logger.thread_name": record.threadName,
22
+ "service": os.getenv("SERVICE_NAME", "solace_agent_mesh"),
23
+ "code.filepath": record.pathname,
24
+ "code.lineno": record.lineno,
25
+ "code.module": record.module,
26
+ "code.funcName": record.funcName,
27
+ }
28
+
29
+ dd_trace_id = getattr(record, "dd.trace_id", None)
30
+ if dd_trace_id:
31
+ log_entry["dd.trace_id"] = dd_trace_id
32
+
33
+ dd_span_id = getattr(record, "dd.span_id", None)
34
+ if dd_span_id:
35
+ log_entry["dd.span_id"] = dd_span_id
36
+
37
+ if record.exc_info:
38
+ log_entry["exception.type"] = record.exc_info[0].__name__
39
+ log_entry["exception.message"] = str(record.exc_info[1])
40
+ log_entry["exception.stacktrace"] = "".join(
41
+ traceback.format_exception(*record.exc_info)
42
+ )
43
+
44
+ return json.dumps(log_entry)
@@ -0,0 +1,106 @@
1
+ """
2
+ Utility functions for handling MIME types.
3
+ """
4
+
5
+ from typing import Optional, Set
6
+
7
+ TEXT_CONTAINER_MIME_TYPES: Set[str] = {
8
+ "text/plain",
9
+ "text/markdown",
10
+ "text/html",
11
+ "application/json",
12
+ "application/yaml",
13
+ "text/yaml",
14
+ "application/x-yaml",
15
+ "text/x-yaml",
16
+ "application/xml",
17
+ "text/xml",
18
+ "text/csv",
19
+ }
20
+
21
+ _TEXT_BASED_PRIMARY_TYPES = {"text"}
22
+ _TEXT_BASED_SUBTYPE_WHOLE = {
23
+ "json",
24
+ "xml",
25
+ "yaml",
26
+ "csv",
27
+ "javascript",
28
+ "ecmascript",
29
+ "xhtml+xml",
30
+ "svg+xml",
31
+ "atom+xml",
32
+ "rss+xml",
33
+ "sparql-query",
34
+ "sparql-update",
35
+ "sql",
36
+ "graphql",
37
+ "markdown",
38
+ "html",
39
+ "rtf",
40
+ "sgml",
41
+ }
42
+ _TEXT_BASED_SUBTYPE_SUFFIXES_AFTER_PLUS = {
43
+ "json",
44
+ "xml",
45
+ "yaml",
46
+ "csv",
47
+ "svg",
48
+ "xhtml",
49
+ }
50
+
51
+ def is_text_based_mime_type(mime_type: Optional[str]) -> bool:
52
+ """
53
+ Checks if a given MIME type is considered text-based.
54
+
55
+ Args:
56
+ mime_type: The MIME type string (e.g., "text/plain", "application/json").
57
+
58
+ Returns:
59
+ True if the MIME type is text-based, False otherwise.
60
+ """
61
+ if not mime_type:
62
+ return False
63
+
64
+ normalized_mime_type = mime_type.lower().strip()
65
+
66
+ if normalized_mime_type.startswith("text/"):
67
+ return True
68
+
69
+ if normalized_mime_type in TEXT_CONTAINER_MIME_TYPES:
70
+ return True
71
+
72
+ return False
73
+
74
+
75
+ def is_text_based_file(mime_type: Optional[str], content_bytes: Optional[bytes] = None) -> bool:
76
+ """
77
+ Determines if a file is text-based based on its MIME type and content.
78
+ Args:
79
+ mime_type: The MIME type of the file.
80
+ content_bytes: The content of the file as bytes.
81
+ Returns:
82
+ True if the file is text-based, False otherwise.
83
+ """
84
+ if not mime_type:
85
+ return False
86
+
87
+ normalized_mime_type = mime_type.lower().strip()
88
+ primary_type, _, subtype = normalized_mime_type.partition("/")
89
+
90
+ if primary_type in _TEXT_BASED_PRIMARY_TYPES:
91
+ return True
92
+ elif subtype in _TEXT_BASED_SUBTYPE_WHOLE:
93
+ return True
94
+ elif "+" in subtype:
95
+ specific_format = subtype.split("+")[-1]
96
+ if specific_format in _TEXT_BASED_SUBTYPE_SUFFIXES_AFTER_PLUS:
97
+ return True
98
+ elif normalized_mime_type == "application/octet-stream" and content_bytes is not None:
99
+ try:
100
+ sample_size = min(1024, len(content_bytes))
101
+ content_bytes[:sample_size].decode("utf-8")
102
+ return True
103
+ except UnicodeDecodeError:
104
+ return False
105
+
106
+ return False
@@ -0,0 +1,134 @@
1
+ from jwcrypto import jwk
2
+ import uuid
3
+ from starlette.responses import JSONResponse
4
+ from starlette.requests import Request
5
+ from typing import Any
6
+
7
+ import jwt
8
+ import time
9
+ import json
10
+ import hashlib
11
+ import httpx
12
+
13
+ from solace_ai_connector.common.log import log
14
+
15
+ from jwt import PyJWK, PyJWKClient
16
+
17
+ AUTH_HEADER_PREFIX = "Bearer "
18
+
19
+
20
+ class PushNotificationAuth:
21
+ def _calculate_request_body_sha256(self, data: dict[str, Any]):
22
+ """Calculates the SHA256 hash of a request body.
23
+
24
+ This logic needs to be same for both the agent who signs the payload and the client verifier.
25
+ """
26
+ body_str = json.dumps(
27
+ data,
28
+ ensure_ascii=False,
29
+ allow_nan=False,
30
+ indent=None,
31
+ separators=(",", ":"),
32
+ )
33
+ return hashlib.sha256(body_str.encode()).hexdigest()
34
+
35
+
36
+ class PushNotificationSenderAuth(PushNotificationAuth):
37
+ def __init__(self):
38
+ self.public_keys = []
39
+ self.private_key_jwk: PyJWK = None
40
+
41
+ @staticmethod
42
+ async def verify_push_notification_url(url: str) -> bool:
43
+ async with httpx.AsyncClient(timeout=10) as client:
44
+ try:
45
+ validation_token = str(uuid.uuid4())
46
+ response = await client.get(
47
+ url, params={"validationToken": validation_token}
48
+ )
49
+ response.raise_for_status()
50
+ is_verified = response.text == validation_token
51
+
52
+ log.info("Verified push-notification URL: %s => %s", url, is_verified)
53
+ return is_verified
54
+ except Exception as e:
55
+ log.warning(
56
+ "Error during sending push-notification for URL %s: %s", url, e
57
+ )
58
+
59
+ return False
60
+
61
+ def generate_jwk(self):
62
+ key = jwk.JWK.generate(kty="RSA", size=2048, kid=str(uuid.uuid4()), use="sig")
63
+ self.public_keys.append(key.export_public(as_dict=True))
64
+ self.private_key_jwk = PyJWK.from_json(key.export_private())
65
+
66
+ def handle_jwks_endpoint(self, _request: Request):
67
+ """Allow clients to fetch public keys."""
68
+ return JSONResponse({"keys": self.public_keys})
69
+
70
+ def _generate_jwt(self, data: dict[str, Any]):
71
+ """JWT is generated by signing both the request payload SHA digest and time of token generation.
72
+
73
+ Payload is signed with private key and it ensures the integrity of payload for client.
74
+ Including iat prevents from replay attack.
75
+ """
76
+
77
+ iat = int(time.time())
78
+
79
+ return jwt.encode(
80
+ {
81
+ "iat": iat,
82
+ "request_body_sha256": self._calculate_request_body_sha256(data),
83
+ },
84
+ key=self.private_key_jwk,
85
+ headers={"kid": self.private_key_jwk.key_id},
86
+ algorithm="RS256",
87
+ )
88
+
89
+ async def send_push_notification(self, url: str, data: dict[str, Any]):
90
+ jwt_token = self._generate_jwt(data)
91
+ headers = {"Authorization": f"Bearer {jwt_token}"}
92
+ async with httpx.AsyncClient(timeout=10) as client:
93
+ try:
94
+ response = await client.post(url, json=data, headers=headers)
95
+ response.raise_for_status()
96
+ log.info("Push-notification sent for URL: %s", url)
97
+ except Exception as e:
98
+ log.warning(
99
+ "Error during sending push-notification for URL %s: %s", url, e
100
+ )
101
+
102
+
103
+ class PushNotificationReceiverAuth(PushNotificationAuth):
104
+ def __init__(self):
105
+ self.public_keys_jwks = []
106
+ self.jwks_client = None
107
+
108
+ async def load_jwks(self, jwks_url: str):
109
+ self.jwks_client = PyJWKClient(jwks_url)
110
+
111
+ async def verify_push_notification(self, request: Request) -> bool:
112
+ auth_header = request.headers.get("Authorization")
113
+ if not auth_header or not auth_header.startswith(AUTH_HEADER_PREFIX):
114
+ log.warning("Invalid authorization header")
115
+ return False
116
+
117
+ token = auth_header[len(AUTH_HEADER_PREFIX) :]
118
+ signing_key = self.jwks_client.get_signing_key_from_jwt(token)
119
+
120
+ decode_token = jwt.decode(
121
+ token,
122
+ signing_key,
123
+ options={"require": ["iat", "request_body_sha256"]},
124
+ algorithms=["RS256"],
125
+ )
126
+
127
+ actual_body_sha256 = self._calculate_request_body_sha256(await request.json())
128
+ if actual_body_sha256 != decode_token["request_body_sha256"]:
129
+ raise ValueError("Invalid request body")
130
+
131
+ if time.time() - decode_token["iat"] > 60 * 5:
132
+ raise ValueError("Token is expired")
133
+
134
+ return True
@@ -0,0 +1,67 @@
1
+ Here is the comprehensive developer guide for the `utils` directory.
2
+
3
+ ## Quick Summary
4
+ The `utils` directory provides a collection of essential, cross-cutting utilities for the Solace AI Connector. Its purpose is to offer robust, reusable solutions for common application needs, including caching, platform compatibility, secure communication, logging, and dynamic content generation.
5
+
6
+ The architecture consists of standalone utility files for specific tasks and a more complex, self-contained subdirectory for advanced functionality. Direct files provide services like a thread-safe in-memory cache (`in_memory_cache.py`), JWT-based authentication for push notifications (`push_notification_auth.py`), custom logging formatters (`log_formatters.py`), and a critical patch for asyncio on macOS (`asyncio_macos_fix.py`).
7
+
8
+ The `embeds` subdirectory provides a powerful system for finding, parsing, and resolving dynamic expressions embedded within strings. These utilities are designed to work together. For instance, a request handler might use `mime_helpers` to validate content type, use the `embeds` system to process the content, and then store the result in the `InMemoryCache` to optimize future requests.
9
+
10
+ ## Files and Subdirectories Overview
11
+ - **Direct files:**
12
+ - `__init__.py`: Exposes key utility functions from the package for convenient access.
13
+ - `asyncio_macos_fix.py`: Automatically applies a patch to fix asyncio subprocess issues on macOS.
14
+ - `in_memory_cache.py`: Implements a thread-safe, singleton in-memory cache with TTL support.
15
+ - `log_formatters.py`: Provides custom logging formatters, such as a Datadog-compatible JSON formatter.
16
+ - `mime_helpers.py`: Contains helper functions to classify and identify text-based MIME types.
17
+ - `push_notification_auth.py`: Implements JWT-based authentication for sending and receiving push notifications.
18
+
19
+ - **Subdirectories:**
20
+ - `embeds/`: Provides a comprehensive system for processing embedded dynamic expressions (e.g., math, datetimes, artifact content).
21
+
22
+ ## Developer API Reference
23
+
24
+ ### Direct Files
25
+
26
+ #### __init__.py
27
+ **Purpose:** Serves as the main entry point for the `utils` package, exporting the most common utility functions for easy importing.
28
+ **Import:** `from solace_ai_connector.common.utils import is_text_based_mime_type`
29
+
30
+ **Classes/Functions/Constants:**
31
+ * `is_text_based_mime_type(mime_type: Optional[str]) -> bool`: Checks if a given MIME type is considered text-based.
32
+
33
+ #### asyncio_macos_fix.py
34
+ **Purpose:** Provides a targeted, automatic fix for a `NotImplementedError` that occurs when creating subprocesses with asyncio on macOS. This module is imported for its side effects and should be loaded early in the application's lifecycle.
35
+ **Import:** `from solace_ai_connector.common.utils import asyncio_macos_fix` (Importing the module is sufficient to apply the patch).
36
+
37
+ **Classes/Functions/Constants:**
38
+ * `ensure_asyncio_compatibility() -> bool`: The core function that applies the patch. It is called automatically when the module is first imported.
39
+
40
+ #### in_memory_cache.py
41
+ **Purpose:** Provides a simple, thread-safe, in-memory cache implemented as a singleton. It's useful for storing frequently accessed data with an optional time-to-live (TTL).
42
+ **Import:** `from solace_ai_connector.common.utils.in_memory_cache import InMemoryCache`
43
+
44
+ **Classes/Functions/Constants:**
45
+ * **`InMemoryCache`**: A singleton class for caching.
46
+ * `set(self, key: str, value: Any, ttl: Optional[int] = None) -> None`: Sets a key-value pair with an optional TTL in seconds.
47
+ * `get(self, key: str, default: Any = None) -> Any`: Retrieves a value by its key, returning a default if the key is not found or has expired.
48
+ * `delete(self, key: str) -> bool`: Deletes a key-value pair from the cache.
49
+ * `clear(self) -> bool`: Removes all items from the cache.
50
+
51
+ #### log_formatters.py
52
+ **Purpose:** Contains custom logging formatters to structure log output for specific platforms, such as Datadog.
53
+ **Import:** `from solace_ai_connector.common.utils.log_formatters import DatadogJsonFormatter`
54
+
55
+ **Classes/Functions/Constants:**
56
+ * **`DatadogJsonFormatter(logging.Formatter)`**: A formatter that outputs log records as a JSON string, compatible with Datadog's standard log attributes. It automatically includes tracing information (`dd.trace_id`, `dd.span_id`) if available.
57
+
58
+ #### mime_helpers.py
59
+ **Purpose:** Provides utilities for handling and classifying MIME types, with a focus on identifying which types represent text-based content.
60
+ **Import:** `from solace_ai_connector.common.utils.mime_helpers import is_text_based_mime_type, TEXT_CONTAINER_MIME_TYPES`
61
+
62
+ **Classes/Functions/Constants:**
63
+ * `is_text_based_mime_type(mime_type: Optional[str]) -> bool`: Returns `True` if the MIME type starts with `text/` or is in the list of known text-based application types (like `application/json`).
64
+ * `TEXT_CONTAINER_MIME_TYPES: Set[str]`: A set of non-`text/*` MIME types that are considered to contain text (e.g., `application/json`, `application/yaml`).
65
+
66
+ #### push_notification_auth.py
67
+ **Purpose:**
@@ -1,9 +1,7 @@
1
- default_options = {
2
- "namespace": "",
3
- "config_dir": "configs",
4
- "module_dir": "modules",
5
- "env_file": ".env",
6
- "build_dir": "build",
1
+ import sys
2
+
3
+ INIT_DEFAULT = {
4
+ "namespace": "default_namespace",
7
5
  "broker_type": "solace",
8
6
  "broker_url": "ws://localhost:8008",
9
7
  "broker_vpn": "default",
@@ -13,23 +11,67 @@ default_options = {
13
11
  "llm_model_name": "openai/gpt-4o",
14
12
  "llm_endpoint_url": "https://api.openai.com/v1",
15
13
  "llm_api_key": "",
16
- "embedding_model_name": "openai/text-embedding-ada-002",
17
- "embedding_endpoint_url": "https://api.openai.com/v1",
18
- "embedding_api_key": "",
19
- "embedding_service_enabled": False,
20
- "built_in_agent": ["web_request"],
21
- "file_service_provider": "volume",
22
- "file_service_config": ["directory=/tmp/solace-agent-mesh"],
23
- "env_var": [],
24
- "rest_api_enabled": True,
25
- "rest_api_server_input_port": "5050",
26
- "rest_api_server_host": "127.0.0.1",
27
- "rest_api_server_input_endpoint": "/api/v1/request",
28
- "rest_api_gateway_name": "rest-api",
29
- "webui_enabled": True,
30
- "webui_listen_port": "5001",
31
- "webui_host": "localhost",
32
- "dev_mode": True,
14
+ "dev_mode": False,
15
+ "add_webui_gateway": True,
16
+ "webui_frontend_welcome_message": "",
17
+ "webui_frontend_bot_name": "Solace Agent Mesh",
18
+ "webui_frontend_collect_feedback": False,
19
+ "webui_fastapi_host": "127.0.0.1",
20
+ "webui_fastapi_port": 8000,
21
+ "webui_enable_embed_resolution": True,
22
+ }
23
+
24
+ USE_DEFAULT_SHARED_SESSION = "use_default_shared_session"
25
+ USE_DEFAULT_SHARED_ARTIFACT = "use_default_shared_artifact"
26
+
27
+ DEFAULT_COMMUNICATION_TIMEOUT = 600 # 10 minutes
28
+
29
+ AGENT_DEFAULTS = {
30
+ "supports_streaming": True,
31
+ "model_type": "general",
32
+ "instruction": "You are a helpful AI assistant named __AGENT_NAME__.",
33
+ "artifact_handling_mode": "embed",
34
+ "enable_embed_resolution": True,
35
+ "enable_artifact_content_instruction": True,
36
+ "tools": "[]",
37
+ "session_service_type": USE_DEFAULT_SHARED_SESSION,
38
+ "session_service_behavior": "PERSISTENT",
39
+ "artifact_service_type": USE_DEFAULT_SHARED_ARTIFACT,
40
+ "artifact_service_base_path": "/tmp/samv2",
41
+ "artifact_service_scope": "namespace",
42
+ "agent_card_description": "A helpful AI assistant.",
43
+ "agent_card_default_input_modes": ["text"],
44
+ "agent_card_default_output_modes": ["text", "file"],
45
+ "agent_card_skills_str": "[]",
46
+ "agent_card_publishing_interval": 10,
47
+ "agent_discovery_enabled": True,
48
+ "inter_agent_communication_allow_list": ["*"],
49
+ "inter_agent_communication_deny_list": [],
50
+ "inter_agent_communication_timeout": DEFAULT_COMMUNICATION_TIMEOUT,
51
+ "namespace": "${NAMESPACE}",
33
52
  }
34
53
 
35
- CONTAINER_RUN_COMMAND = " run -d -p 8080:8080 -p 55554:55555 -p 8008:8008 -p 1883:1883 -p 8000:8000 -p 5672:5672 -p 9000:9000 -p 2222:2222 --shm-size=2g --env username_admin_globalaccesslevel=admin --env username_admin_password=admin --name=solace solace/solace-pubsub-standard"
54
+ GATEWAY_DEFAULTS = {
55
+ "namespace": "${NAMESPACE}",
56
+ "gateway_id_suffix": "-gw-01",
57
+ "artifact_service_type": USE_DEFAULT_SHARED_ARTIFACT,
58
+ "artifact_service_scope": "namespace",
59
+ "artifact_service_base_path": "/tmp/samv2",
60
+ "system_purpose": (
61
+ "The system is an AI Chatbot with agentic capabilities.\n"
62
+ "It will use the agents available to provide information,\n"
63
+ "reasoning and general assistance for the users in this system.\n"
64
+ "**Always return useful artifacts and files that you create to the user.**\n"
65
+ "Provide a status update before each tool call.\n"
66
+ "Your external name is Agent Mesh."
67
+ ),
68
+ "response_format": (
69
+ "Responses should be clear, concise, and professionally toned.\n"
70
+ "Format responses to the user in Markdown using appropriate formatting."
71
+ ),
72
+ }
73
+
74
+
75
+ port_55555 = "-p 55554:55555" if sys.platform == "darwin" else "-p 55555:55555"
76
+
77
+ CONTAINER_RUN_COMMAND = f" run -d --rm -p 8080:8080 {port_55555} -p 8008:8008 -u 1004 --shm-size=2g --env username_admin_globalaccesslevel=admin --env username_admin_password=admin --name=solace-broker solace/solace-pubsub-standard"
@@ -0,0 +1,23 @@
1
+ import os
2
+ from pathlib import Path
3
+
4
+ try:
5
+ from cli.utils import get_sam_cli_home_dir
6
+ SAM_HOME = get_sam_cli_home_dir()
7
+ except ImportError:
8
+ print(
9
+ "WARNING: Could not import 'get_sam_cli_home_dir' from 'cli.utils'. "
10
+ "Falling back to legacy ~/.sam paths for Plugin Catalog. "
11
+ "SAM_CLI_HOME environment variable will not be respected in this mode."
12
+ )
13
+ SAM_HOME = Path(os.path.expanduser("~/.sam"))
14
+ SAM_HOME.mkdir(parents=True, exist_ok=True)
15
+
16
+ DEFAULT_OFFICIAL_REGISTRY_URL = (
17
+ "https://github.com/SolaceLabs/solace-agent-mesh-core-plugins"
18
+ )
19
+ OFFICIAL_REGISTRY_GIT_BRANCH = "main"
20
+ IGNORE_OFFICIAL_FLAG_REPOS = []
21
+
22
+ USER_REGISTRIES_PATH = SAM_HOME / "plugin_catalog_registries.json"
23
+ PLUGIN_CATALOG_TEMP_DIR = SAM_HOME / "plugin_catalog_tmp"
@@ -0,0 +1,49 @@
1
+ from typing import List, Optional, Dict, Any
2
+ from pydantic import BaseModel
3
+
4
+
5
+ class PyProjectAuthor(BaseModel):
6
+ name: Optional[str] = None
7
+ email: Optional[str] = None
8
+
9
+
10
+ class PyProjectDetails(BaseModel):
11
+ name: str
12
+ version: str
13
+ description: Optional[str] = None
14
+ authors: Optional[List[PyProjectAuthor]] = None
15
+ plugin_type: Optional[str] = "custom"
16
+ custom_metadata: Optional[Dict[str, Any]] = None
17
+
18
+
19
+ class AgentCardSkill(BaseModel):
20
+ name: str
21
+ description: Optional[str] = None
22
+
23
+
24
+ class AgentCard(BaseModel):
25
+ displayName: Optional[str] = None
26
+ shortDescription: Optional[str] = None
27
+ Skill: Optional[List[AgentCardSkill]] = None
28
+
29
+
30
+ class PluginScrapedInfo(BaseModel):
31
+ id: str
32
+ pyproject: PyProjectDetails
33
+ readme_content: Optional[str] = None
34
+ agent_card: Optional[AgentCard] = None
35
+ source_registry_name: Optional[str] = None
36
+ source_registry_location: str
37
+ source_type: str
38
+ plugin_subpath: str
39
+ is_official: bool
40
+
41
+
42
+ class Registry(BaseModel):
43
+ id: str
44
+ path_or_url: str
45
+ name: Optional[str] = None
46
+ type: str
47
+ is_default: bool = False
48
+ is_official_source: bool = False
49
+ git_branch: Optional[str] = None