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

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

Potentially problematic release.


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

Files changed (518) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  2. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  3. solace_agent_mesh/agent/adk/callbacks.py +1694 -0
  4. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  5. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  6. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  7. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  8. solace_agent_mesh/agent/adk/runner.py +353 -0
  9. solace_agent_mesh/agent/adk/services.py +240 -0
  10. solace_agent_mesh/agent/adk/setup.py +751 -0
  11. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  12. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  13. solace_agent_mesh/agent/agent_llm.txt +41 -0
  14. solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
  15. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  16. solace_agent_mesh/agent/sac/app.py +640 -0
  17. solace_agent_mesh/agent/sac/component.py +3388 -0
  18. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  19. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  20. solace_agent_mesh/agent/sac/task_execution_context.py +176 -0
  21. solace_agent_mesh/agent/testing/__init__.py +3 -0
  22. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  23. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  24. solace_agent_mesh/agent/tools/__init__.py +14 -0
  25. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  26. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  27. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  28. solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
  29. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  30. solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
  31. solace_agent_mesh/agent/tools/registry.py +36 -0
  32. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  33. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  34. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  35. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  36. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  37. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  38. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  39. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  40. solace_agent_mesh/assets/docs/404.html +16 -0
  41. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  42. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  43. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  54. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  57. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  104. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  105. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
  132. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
  133. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  165. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  167. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  168. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  170. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  171. solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
  172. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  173. solace_agent_mesh/assets/docs/search-doc-1753813536522.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  175. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  176. solace_agent_mesh/cli/__init__.py +1 -1
  177. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  178. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  179. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  180. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  181. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  183. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  184. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  185. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  186. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  187. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  188. solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
  189. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  190. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -0
  191. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  192. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  193. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  194. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  201. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  202. solace_agent_mesh/cli/main.py +17 -294
  203. solace_agent_mesh/cli/utils.py +135 -204
  204. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  205. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  210. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  211. solace_agent_mesh/common/__init__.py +1 -0
  212. solace_agent_mesh/common/a2a_protocol.py +564 -0
  213. solace_agent_mesh/common/agent_registry.py +42 -0
  214. solace_agent_mesh/common/client/__init__.py +4 -0
  215. solace_agent_mesh/common/client/card_resolver.py +21 -0
  216. solace_agent_mesh/common/client/client.py +85 -0
  217. solace_agent_mesh/common/client/client_llm.txt +133 -0
  218. solace_agent_mesh/common/common_llm.txt +144 -0
  219. solace_agent_mesh/common/constants.py +1 -14
  220. solace_agent_mesh/common/middleware/__init__.py +12 -0
  221. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  222. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  223. solace_agent_mesh/common/middleware/registry.py +125 -0
  224. solace_agent_mesh/common/server/__init__.py +4 -0
  225. solace_agent_mesh/common/server/server.py +122 -0
  226. solace_agent_mesh/common/server/server_llm.txt +169 -0
  227. solace_agent_mesh/common/server/task_manager.py +291 -0
  228. solace_agent_mesh/common/server/utils.py +28 -0
  229. solace_agent_mesh/common/services/__init__.py +4 -0
  230. solace_agent_mesh/common/services/employee_service.py +162 -0
  231. solace_agent_mesh/common/services/identity_service.py +129 -0
  232. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  233. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  234. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  235. solace_agent_mesh/common/services/services_llm.txt +132 -0
  236. solace_agent_mesh/common/types.py +411 -0
  237. solace_agent_mesh/common/utils/__init__.py +7 -0
  238. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  239. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  240. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  241. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  242. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  243. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  244. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  245. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  246. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  247. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  248. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  249. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  250. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  251. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  252. solace_agent_mesh/config_portal/backend/common.py +66 -24
  253. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
  254. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
  258. solace_agent_mesh/config_portal/backend/server.py +550 -140
  259. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
  260. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  267. solace_agent_mesh/core_a2a/__init__.py +1 -0
  268. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  269. solace_agent_mesh/core_a2a/service.py +331 -0
  270. solace_agent_mesh/evaluation/config_loader.py +657 -0
  271. solace_agent_mesh/evaluation/evaluator.py +667 -0
  272. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  273. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  274. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  275. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  276. solace_agent_mesh/evaluation/report/modal.html +59 -0
  277. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  278. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  279. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  280. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  281. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  282. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  283. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  284. solace_agent_mesh/evaluation/report_generator.py +613 -0
  285. solace_agent_mesh/evaluation/run.py +613 -0
  286. solace_agent_mesh/evaluation/subscriber.py +872 -0
  287. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  288. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  289. solace_agent_mesh/gateway/base/__init__.py +1 -0
  290. solace_agent_mesh/gateway/base/app.py +266 -0
  291. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  292. solace_agent_mesh/gateway/base/component.py +1542 -0
  293. solace_agent_mesh/gateway/base/task_context.py +74 -0
  294. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  295. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  296. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  297. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  298. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  299. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  300. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  301. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  302. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  303. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  304. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  305. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
  306. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  307. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  308. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  309. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  310. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  311. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  312. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  313. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  314. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  315. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  316. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  317. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  318. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  319. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  320. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  321. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  322. solace_agent_mesh/llm.txt +228 -0
  323. solace_agent_mesh/llm_detail.txt +2835 -0
  324. solace_agent_mesh/templates/agent_template.yaml +53 -0
  325. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  326. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  327. solace_agent_mesh/templates/gateway_component_template.py +400 -0
  328. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  329. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  330. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  331. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  332. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  333. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  334. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  335. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  336. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  337. solace_agent_mesh/templates/shared_config.yaml +66 -0
  338. solace_agent_mesh/templates/templates_llm.txt +147 -0
  339. solace_agent_mesh/templates/webui.yaml +53 -0
  340. solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
  341. solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
  342. solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
  343. {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
  344. solace_agent_mesh/agents/base_agent_component.py +0 -226
  345. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  346. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  347. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  348. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  349. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  350. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  351. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  352. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  353. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  354. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  355. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  356. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  357. solace_agent_mesh/agents/slack/__init__.py +0 -1
  358. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  359. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  360. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  361. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  362. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  363. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  364. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  365. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  366. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  367. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  368. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  369. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  370. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  371. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  372. solace_agent_mesh/cli/commands/add/add.py +0 -88
  373. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  374. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  375. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  376. solace_agent_mesh/cli/commands/build.py +0 -670
  377. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  378. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  379. solace_agent_mesh/cli/commands/config.py +0 -29
  380. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  382. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  383. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  384. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  385. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  386. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  387. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  388. solace_agent_mesh/cli/commands/init/init.py +0 -92
  389. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  390. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  391. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  392. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  393. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  394. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  395. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  396. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  397. solace_agent_mesh/cli/commands/run.py +0 -68
  398. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  399. solace_agent_mesh/cli/config.py +0 -85
  400. solace_agent_mesh/common/action.py +0 -91
  401. solace_agent_mesh/common/action_list.py +0 -37
  402. solace_agent_mesh/common/action_response.py +0 -340
  403. solace_agent_mesh/common/mysql_database.py +0 -40
  404. solace_agent_mesh/common/postgres_database.py +0 -85
  405. solace_agent_mesh/common/prompt_templates.py +0 -28
  406. solace_agent_mesh/common/stimulus_utils.py +0 -152
  407. solace_agent_mesh/common/time.py +0 -24
  408. solace_agent_mesh/common/utils.py +0 -712
  409. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DMmCawWe.js +0 -42
  410. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  411. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-dd988f05.js +0 -1
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  414. solace_agent_mesh/configs/agent_global.yaml +0 -74
  415. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  416. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  417. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  418. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  419. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  420. solace_agent_mesh/configs/monitor.yaml +0 -0
  421. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  422. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  423. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  424. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  425. solace_agent_mesh/configs/service_llm.yaml +0 -265
  426. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  427. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  428. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  429. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  430. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  431. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  432. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  433. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  434. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  435. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  436. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  437. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  438. solace_agent_mesh/orchestrator/__init__.py +0 -0
  439. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  440. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  441. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  442. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  443. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  444. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  445. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  446. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  447. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  448. solace_agent_mesh/services/__init__.py +0 -0
  449. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  450. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  451. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  452. solace_agent_mesh/services/common/__init__.py +0 -4
  453. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  454. solace_agent_mesh/services/common/singleton.py +0 -18
  455. solace_agent_mesh/services/file_service/__init__.py +0 -14
  456. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  457. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  458. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  459. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  460. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  461. solace_agent_mesh/services/file_service/file_service.py +0 -437
  462. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  463. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  464. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  465. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  466. solace_agent_mesh/services/history_service/__init__.py +0 -3
  467. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  468. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  469. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  470. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  471. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  472. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  473. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  474. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  475. solace_agent_mesh/services/history_service/history_service.py +0 -413
  476. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  477. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  478. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  479. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  480. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  481. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  482. solace_agent_mesh/templates/action.py +0 -38
  483. solace_agent_mesh/templates/agent.py +0 -29
  484. solace_agent_mesh/templates/agent.yaml +0 -70
  485. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  486. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  487. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  488. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  489. solace_agent_mesh/templates/gateway_base.py +0 -15
  490. solace_agent_mesh/templates/gateway_input.py +0 -98
  491. solace_agent_mesh/templates/gateway_output.py +0 -71
  492. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  493. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  494. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  495. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  496. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  497. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  498. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  499. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  500. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  501. solace_agent_mesh/templates/web-flows.yaml +0 -76
  502. solace_agent_mesh/tools/__init__.py +0 -0
  503. solace_agent_mesh/tools/components/__init__.py +0 -0
  504. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  505. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  506. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  507. solace_agent_mesh-0.2.3.dist-info/METADATA +0 -172
  508. solace_agent_mesh-0.2.3.dist-info/RECORD +0 -193
  509. solace_agent_mesh-0.2.3.dist-info/entry_points.txt +0 -3
  510. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  511. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  512. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  513. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  517. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  518. {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,322 @@
1
+ import click
2
+ from pathlib import Path
3
+
4
+ from config_portal.backend.common import GATEWAY_DEFAULTS, USE_DEFAULT_SHARED_ARTIFACT
5
+ from ...utils import (
6
+ get_formatted_names,
7
+ load_template,
8
+ error_exit,
9
+ ask_if_not_provided,
10
+ indent_multiline_string,
11
+ )
12
+ from .web_add_gateway_step import launch_add_gateway_web_portal
13
+
14
+
15
+ def create_gateway_files(
16
+ gateway_name_input: str,
17
+ cli_options: dict,
18
+ project_root: Path,
19
+ skip_interactive: bool,
20
+ ):
21
+ """
22
+ Generates the gateway skeleton files based on templates and collected options.
23
+ """
24
+ collected_options = cli_options.copy()
25
+ formatted_names = get_formatted_names(gateway_name_input)
26
+ gateway_name_snake_case = formatted_names["SNAKE_CASE_NAME"]
27
+ gateway_name_pascal_case = formatted_names["PASCAL_CASE_NAME"]
28
+ gateway_name_upper_case = formatted_names["SNAKE_UPPER_CASE_NAME"]
29
+ gateway_name_kebab_case = formatted_names["KEBAB_CASE_NAME"]
30
+
31
+ collected_options["namespace"] = ask_if_not_provided(
32
+ collected_options,
33
+ "namespace",
34
+ "Enter A2A namespace for the gateway (e.g., myorg/dev, or leave for ${NAMESPACE})",
35
+ GATEWAY_DEFAULTS["namespace"],
36
+ skip_interactive,
37
+ )
38
+ default_gateway_id = (
39
+ f"{gateway_name_kebab_case}{GATEWAY_DEFAULTS['gateway_id_suffix']}"
40
+ )
41
+ collected_options["gateway_id"] = ask_if_not_provided(
42
+ collected_options,
43
+ "gateway_id",
44
+ f"Enter Gateway ID (default: {default_gateway_id})",
45
+ default_gateway_id,
46
+ skip_interactive,
47
+ )
48
+
49
+ collected_options["artifact_service_type"] = ask_if_not_provided(
50
+ collected_options,
51
+ "artifact_service_type",
52
+ "Artifact service type for the gateway",
53
+ GATEWAY_DEFAULTS["artifact_service_type"],
54
+ skip_interactive,
55
+ choices=[USE_DEFAULT_SHARED_ARTIFACT, "memory", "filesystem", "gcs"],
56
+ )
57
+
58
+ if collected_options["artifact_service_type"] != USE_DEFAULT_SHARED_ARTIFACT:
59
+ if collected_options.get("artifact_service_type") == "filesystem":
60
+ default_artifact_base_path = GATEWAY_DEFAULTS[
61
+ "artifact_service_base_path"
62
+ ].replace("__GATEWAY_NAME_SNAKE_CASE__", gateway_name_snake_case)
63
+ collected_options["artifact_service_base_path"] = ask_if_not_provided(
64
+ collected_options,
65
+ "artifact_service_base_path",
66
+ f"Artifact service base path (default: {default_artifact_base_path})",
67
+ default_artifact_base_path,
68
+ skip_interactive,
69
+ )
70
+ collected_options["artifact_service_scope"] = ask_if_not_provided(
71
+ collected_options,
72
+ "artifact_service_scope",
73
+ "Artifact service scope",
74
+ GATEWAY_DEFAULTS["artifact_service_scope"],
75
+ skip_interactive,
76
+ choices=["namespace", "app", "custom"],
77
+ )
78
+
79
+ if (
80
+ "system_purpose" not in collected_options
81
+ or collected_options["system_purpose"] is None
82
+ ):
83
+ if skip_interactive:
84
+ collected_options["system_purpose"] = GATEWAY_DEFAULTS["system_purpose"]
85
+ else:
86
+ click.echo("Define system purpose for the gateway (opens editor):")
87
+ edited_purpose = click.edit(text=GATEWAY_DEFAULTS["system_purpose"])
88
+ collected_options["system_purpose"] = (
89
+ edited_purpose
90
+ if edited_purpose is not None
91
+ else GATEWAY_DEFAULTS["system_purpose"]
92
+ )
93
+
94
+ if (
95
+ "response_format" not in collected_options
96
+ or collected_options["response_format"] is None
97
+ ):
98
+ if skip_interactive:
99
+ collected_options["response_format"] = GATEWAY_DEFAULTS["response_format"]
100
+ else:
101
+ click.echo("Define response format for the gateway (opens editor):")
102
+ edited_format = click.edit(text=GATEWAY_DEFAULTS["response_format"])
103
+ collected_options["response_format"] = (
104
+ edited_format
105
+ if edited_format is not None
106
+ else GATEWAY_DEFAULTS["response_format"]
107
+ )
108
+
109
+ configs_gateway_dir = project_root / "configs" / "gateways"
110
+ src_gateway_dir = project_root / "src" / gateway_name_snake_case
111
+
112
+ if (
113
+ src_gateway_dir.exists()
114
+ or (configs_gateway_dir / f"{gateway_name_snake_case}_config.yaml").exists()
115
+ ):
116
+ if not skip_interactive:
117
+ if not click.confirm(
118
+ click.style(
119
+ f"Warning: Gateway '{gateway_name_snake_case}' already exists or has conflicting files. Overwrite?",
120
+ fg="yellow",
121
+ )
122
+ ):
123
+ click.echo("Operation cancelled by user.")
124
+ return False, "Operation cancelled."
125
+
126
+ try:
127
+ configs_gateway_dir.mkdir(parents=True, exist_ok=True)
128
+ src_gateway_dir.mkdir(parents=True, exist_ok=True)
129
+
130
+ artifact_service_type_opt = collected_options.get("artifact_service_type")
131
+ if (
132
+ artifact_service_type_opt
133
+ and artifact_service_type_opt != USE_DEFAULT_SHARED_ARTIFACT
134
+ ):
135
+ type_val = artifact_service_type_opt
136
+ scope_val = collected_options.get(
137
+ "artifact_service_scope", GATEWAY_DEFAULTS["artifact_service_scope"]
138
+ )
139
+ custom_artifact_lines = [f'type: "{type_val}"']
140
+ if type_val == "filesystem":
141
+ base_path_val = collected_options.get("artifact_service_base_path")
142
+ if (
143
+ "ARTIFACT_BASE_PATH" not in base_path_val
144
+ and "${" not in base_path_val
145
+ ):
146
+ base_path_val_processed = (
147
+ f"${{ARTIFACT_BASE_PATH, {base_path_val}}}"
148
+ )
149
+ else:
150
+ base_path_val_processed = f'"{base_path_val}"'
151
+
152
+ custom_artifact_lines.append(f"base_path: {base_path_val_processed}")
153
+
154
+ custom_artifact_lines.append(f"artifact_scope: {scope_val}")
155
+ artifact_service_block = "\n" + "\n".join(
156
+ [f" {line}" for line in custom_artifact_lines]
157
+ )
158
+ else:
159
+ artifact_service_block = "*default_artifact_service"
160
+
161
+ system_purpose_value = collected_options.get("system_purpose", "")
162
+ if system_purpose_value is None:
163
+ system_purpose_value = ""
164
+ formatted_system_purpose = indent_multiline_string(system_purpose_value, 8)
165
+
166
+ response_format_value = collected_options.get("response_format", "")
167
+ if response_format_value is None:
168
+ response_format_value = ""
169
+ formatted_response_format = indent_multiline_string(response_format_value, 8)
170
+
171
+ placeholders = {
172
+ "__GATEWAY_NAME_SNAKE_CASE__": gateway_name_snake_case,
173
+ "__GATEWAY_NAME_PASCAL_CASE__": gateway_name_pascal_case,
174
+ "__GATEWAY_NAME_UPPER_CASE__": gateway_name_upper_case,
175
+ "__GATEWAY_NAME_KEBAB_CASE__": gateway_name_kebab_case,
176
+ "__APP_CONFIG_NAMESPACE__": collected_options["namespace"],
177
+ "__GATEWAY_ID__": collected_options["gateway_id"],
178
+ "__ARTIFACT_SERVICE__": artifact_service_block,
179
+ "__SYSTEM_PURPOSE__": formatted_system_purpose,
180
+ "__RESPONSE_FORMAT__": formatted_response_format,
181
+ }
182
+
183
+ template_files_map = {
184
+ "gateway_config_template.yaml": configs_gateway_dir
185
+ / f"{gateway_name_snake_case}_config.yaml",
186
+ "gateway_app_template.py": src_gateway_dir / "app.py",
187
+ "gateway_component_template.py": src_gateway_dir / "component.py",
188
+ }
189
+
190
+ generated_files_relative_paths = []
191
+
192
+ for template_name, target_path in template_files_map.items():
193
+ template_content = load_template(template_name)
194
+ processed_content = template_content
195
+ for placeholder, value in placeholders.items():
196
+ processed_content = processed_content.replace(placeholder, value)
197
+
198
+ with open(target_path, "w", encoding="utf-8") as f:
199
+ f.write(processed_content)
200
+ generated_files_relative_paths.append(
201
+ str(target_path.relative_to(project_root))
202
+ )
203
+
204
+ py_init_file = src_gateway_dir / "__init__.py"
205
+ with open(py_init_file, "w", encoding="utf-8") as f:
206
+ f.write("")
207
+ generated_files_relative_paths.append(
208
+ str(py_init_file.relative_to(project_root))
209
+ )
210
+
211
+ success_message = f"Gateway '{gateway_name_snake_case}' skeleton created successfully.\nGenerated files:\n"
212
+ for rel_path in generated_files_relative_paths:
213
+ success_message += f" - {rel_path}\n"
214
+ success_message += "\nNext steps:\n"
215
+ success_message += f"1. Review and customize the specific parameters in '{generated_files_relative_paths[0]}'.\n"
216
+ success_message += f"2. Define your gateway's specific schema in '{generated_files_relative_paths[2]}'.\n"
217
+ success_message += (
218
+ f"3. Implement the core logic in '{generated_files_relative_paths[3]}'."
219
+ )
220
+
221
+ return True, success_message
222
+
223
+ except FileNotFoundError as fnf_error:
224
+ error_message = (
225
+ f"Error creating gateway files: Template file not found. {fnf_error}"
226
+ )
227
+ click.echo(click.style(error_message, fg="red"), err=True)
228
+ return False, error_message
229
+ except Exception as e:
230
+ import traceback
231
+
232
+ error_message = f"An unexpected error occurred: {e}\n{traceback.format_exc()}"
233
+ click.echo(click.style(error_message, fg="red"), err=True)
234
+ return False, error_message
235
+
236
+
237
+ @click.command(name="gateway")
238
+ @click.argument("name", required=False)
239
+ @click.option("--namespace", help="A2A namespace for the gateway (e.g., myorg/dev).")
240
+ @click.option("--gateway-id", help="Custom Gateway ID for the gateway.")
241
+ @click.option(
242
+ "--artifact-service-type",
243
+ type=click.Choice([USE_DEFAULT_SHARED_ARTIFACT, "memory", "filesystem", "gcs"]),
244
+ help="Artifact service type for the gateway.",
245
+ )
246
+ @click.option(
247
+ "--artifact-service-base-path",
248
+ help="Base path for filesystem artifact service (if type is 'filesystem').",
249
+ )
250
+ @click.option(
251
+ "--artifact-service-scope",
252
+ type=click.Choice(["namespace", "app", "custom"]),
253
+ help="Artifact service scope (if not using default shared artifact service).",
254
+ )
255
+ @click.option(
256
+ "--system-purpose", help="System purpose for the gateway (can be multi-line)."
257
+ )
258
+ @click.option(
259
+ "--response-format", help="Response format for the gateway (can be multi-line)."
260
+ )
261
+ @click.option(
262
+ "--skip",
263
+ is_flag=True,
264
+ help="Skip interactive prompts and use defaults (CLI mode only).",
265
+ )
266
+ @click.option("--gui", is_flag=True, help="Launch the web UI to configure the gateway.")
267
+ def add_gateway(name: str | None, gui: bool = False, **kwargs):
268
+ """
269
+ Creates a new gateway skeleton structure via CLI or Web UI.
270
+
271
+ NAME: Name of the gateway component to create (e.g., my-new-gateway).
272
+ Required if not using --gui.
273
+ """
274
+ project_root = Path.cwd()
275
+ gui_initial_options = {
276
+ k: v for k, v in kwargs.items() if v is not None and k not in ["gui", "skip"]
277
+ }
278
+ if name:
279
+ gui_initial_options["name"] = name
280
+
281
+ if gui:
282
+ click.echo("Launching Add Gateway GUI...")
283
+ gui_result = launch_add_gateway_web_portal(cli_options=gui_initial_options)
284
+
285
+ if gui_result:
286
+ gateway_name_from_gui, collected_options_from_gui, project_root_from_gui = (
287
+ gui_result
288
+ )
289
+ success, message = create_gateway_files(
290
+ gateway_name_input=gateway_name_from_gui,
291
+ cli_options=collected_options_from_gui,
292
+ project_root=project_root_from_gui,
293
+ skip_interactive=True,
294
+ )
295
+ if success:
296
+ click.echo(click.style(message, fg="green"))
297
+ else:
298
+ click.echo(
299
+ click.style(
300
+ "Gateway creation via GUI was cancelled or failed.", fg="yellow"
301
+ ),
302
+ err=True,
303
+ )
304
+ return
305
+
306
+ if not name:
307
+ ctx = click.get_current_context()
308
+ click.echo(ctx.get_help())
309
+ error_exit("Error: Gateway NAME is required when not using the --gui option.")
310
+
311
+ cli_options_for_creation = {
312
+ k: v for k, v in kwargs.items() if v is not None and k not in ["gui", "skip"]
313
+ }
314
+ skip_interactive_cli = kwargs.get("skip", False)
315
+
316
+ click.echo(f"Creating gateway skeleton for '{name}' via CLI...")
317
+ success, message = create_gateway_files(
318
+ name, cli_options_for_creation, project_root, skip_interactive_cli
319
+ )
320
+
321
+ if success:
322
+ click.echo(click.style(message, fg="green"))
@@ -0,0 +1,93 @@
1
+ import click
2
+ import multiprocessing
3
+ import sys
4
+ import webbrowser
5
+ from pathlib import Path
6
+ from time import sleep
7
+
8
+ from config_portal.backend.server import run_flask
9
+
10
+
11
+ def launch_add_agent_web_portal(cli_options: dict):
12
+ """
13
+ Launches the web-based configuration portal for adding a new agent.
14
+ The actual file writing will happen here after the portal returns data.
15
+ """
16
+ click.echo(
17
+ click.style("Attempting to start web-based 'Add Agent' portal...", fg="blue")
18
+ )
19
+
20
+ with multiprocessing.Manager() as manager:
21
+ shared_data_from_web = manager.dict()
22
+
23
+ add_agent_gui_process = multiprocessing.Process(
24
+ target=run_flask, args=("127.0.0.1", 5002, shared_data_from_web)
25
+ )
26
+ add_agent_gui_process.start()
27
+ portal_url = "http://127.0.0.1:5002/?config_mode=addAgent"
28
+ click.echo(
29
+ click.style(
30
+ f"Add Agent portal is running. Opening your browser to '{portal_url}'...",
31
+ fg="green",
32
+ )
33
+ )
34
+ sleep(1)
35
+ try:
36
+ webbrowser.open(portal_url)
37
+ except Exception:
38
+ click.echo(
39
+ click.style(
40
+ f"Could not automatically open browser, Please open {portal_url} manually.",
41
+ fg="yellow",
42
+ )
43
+ )
44
+
45
+ click.echo(
46
+ "Complete the agent configuration in your browser. The CLI will resume once the portal is closed or submits data."
47
+ )
48
+
49
+ add_agent_gui_process.join()
50
+
51
+ if shared_data_from_web:
52
+ returned_data = dict(shared_data_from_web)
53
+ if returned_data.get("status") == "success_from_gui_save":
54
+ agent_name_from_gui = returned_data.get("agent_name_input")
55
+ agent_config_options = returned_data.get("config")
56
+ if agent_name_from_gui and agent_config_options:
57
+ click.echo(
58
+ click.style(
59
+ "Configuration received from web portal. Writing agent file...",
60
+ fg="cyan",
61
+ )
62
+ )
63
+ project_root = Path.cwd()
64
+ return agent_name_from_gui, agent_config_options, project_root
65
+
66
+ else:
67
+ click.echo(
68
+ click.style(
69
+ "Incomplete data received from web portal.", fg="red"
70
+ )
71
+ )
72
+ elif returned_data.get("status") == "shutdown_aborted":
73
+ click.echo(
74
+ click.style(
75
+ f"Web portal feedback: {returned_data.get('message', 'Operation aborted.')}",
76
+ fg="yellow",
77
+ )
78
+ )
79
+ else:
80
+ click.echo(
81
+ click.style(
82
+ f"Web portal operation failed or was cancelled. Message: {returned_data.get('message', 'No specific error message.')}",
83
+ fg="red",
84
+ )
85
+ )
86
+ else:
87
+ click.echo(
88
+ click.style(
89
+ "No data received from web portal (e.g., portal closed abruptly). Agent not created.",
90
+ fg="yellow",
91
+ )
92
+ )
93
+ sys.exit(1)
@@ -0,0 +1,118 @@
1
+ import click
2
+ import multiprocessing
3
+ import webbrowser
4
+ from pathlib import Path
5
+ from time import sleep
6
+
7
+ from config_portal.backend.server import run_flask
8
+
9
+
10
+ def launch_add_gateway_web_portal(cli_options: dict):
11
+ """
12
+ Launches the web-based configuration portal for adding a new gateway.
13
+ The actual file writing will happen in the calling command after the portal returns data.
14
+
15
+ Args:
16
+ cli_options (dict): A dictionary that can contain initial values,
17
+ e.g., {'name': 'my-initial-gateway-name'}
18
+ This is passed to the Flask app.
19
+ Returns:
20
+ tuple | None: A tuple (gateway_name, gateway_options, project_root) if successful,
21
+ otherwise None.
22
+ """
23
+ click.echo(
24
+ click.style("Attempting to start web-based 'Add Gateway' portal...", fg="blue")
25
+ )
26
+
27
+ with multiprocessing.Manager() as manager:
28
+ shared_data_from_web = manager.dict()
29
+
30
+ flask_process_args = ("127.0.0.1", 5002, shared_data_from_web)
31
+ add_gateway_gui_process = multiprocessing.Process(
32
+ target=run_flask, args=flask_process_args
33
+ )
34
+ add_gateway_gui_process.start()
35
+ portal_url = "http://127.0.0.1:5002/?config_mode=addGateway"
36
+
37
+ click.echo(
38
+ click.style(
39
+ f"Add Gateway portal is attempting to start. Waiting a moment...",
40
+ fg="cyan",
41
+ )
42
+ )
43
+ sleep(2)
44
+ try:
45
+ if not add_gateway_gui_process.is_alive():
46
+ click.echo(
47
+ click.style("Web server failed to start.", fg="red"), err=True
48
+ )
49
+ add_gateway_gui_process.join(timeout=1)
50
+ return None
51
+
52
+ click.echo(
53
+ click.style(
54
+ f"Opening your browser to '{portal_url}'...",
55
+ fg="green",
56
+ )
57
+ )
58
+ webbrowser.open(portal_url)
59
+ except Exception as e:
60
+ click.echo(
61
+ click.style(
62
+ f"Could not automatically open browser: {e}. Please open {portal_url} manually.",
63
+ fg="yellow",
64
+ )
65
+ )
66
+
67
+ click.echo(
68
+ "Complete the gateway configuration in your browser. The CLI will resume once the portal is closed or submits data."
69
+ )
70
+
71
+ add_gateway_gui_process.join()
72
+
73
+ if shared_data_from_web:
74
+ returned_data = dict(shared_data_from_web)
75
+ if returned_data.get("status") == "success_from_gui_save":
76
+ gateway_name_from_gui = returned_data.get("gateway_name_input")
77
+ gateway_config_options = returned_data.get("config")
78
+
79
+ if gateway_name_from_gui and gateway_config_options is not None:
80
+ click.echo(
81
+ click.style(
82
+ "Configuration received from web portal.", fg="cyan"
83
+ )
84
+ )
85
+ project_root = Path.cwd()
86
+ return gateway_name_from_gui, gateway_config_options, project_root
87
+ else:
88
+ click.echo(
89
+ click.style(
90
+ f"Incomplete data received from web portal. Name: {gateway_name_from_gui}, Config: {gateway_config_options}",
91
+ fg="red",
92
+ ),
93
+ err=True,
94
+ )
95
+ elif returned_data.get("status") == "shutdown_aborted":
96
+ click.echo(
97
+ click.style(
98
+ f"Web portal feedback: {returned_data.get('message', 'Operation aborted by user.')}",
99
+ fg="yellow",
100
+ )
101
+ )
102
+ else:
103
+ click.echo(
104
+ click.style(
105
+ f"Web portal operation failed or was cancelled. Message: {returned_data.get('message', 'No specific error message.')}",
106
+ fg="red",
107
+ ),
108
+ err=True,
109
+ )
110
+ else:
111
+ click.echo(
112
+ click.style(
113
+ "No data received from web portal (e.g., portal closed abruptly or server failed). Gateway not created.",
114
+ fg="yellow",
115
+ ),
116
+ err=True,
117
+ )
118
+ return None
@@ -0,0 +1,57 @@
1
+ import click
2
+ import http.server
3
+ import socketserver
4
+ import webbrowser
5
+ import os
6
+ from cli.utils import get_cli_root_dir, error_exit
7
+
8
+ class DocsHttpRequestHandler(http.server.SimpleHTTPRequestHandler):
9
+ def __init__(self, *args, **kwargs):
10
+ super().__init__(*args, directory=kwargs.pop('directory'), **kwargs)
11
+
12
+ def do_GET(self):
13
+ if self.path.startswith('/solace-agent-mesh'):
14
+ self.path = self.path[len('/solace-agent-mesh'):] or '/'
15
+ super().do_GET()
16
+
17
+ def send_error(self, code, message=None):
18
+ if code == 404:
19
+ self.send_response(302)
20
+ self.send_header('Location', '/solace-agent-mesh/docs/documentation/getting-started/introduction/')
21
+ self.end_headers()
22
+ else:
23
+ super().send_error(code, message)
24
+
25
+ @click.command(name="docs")
26
+ @click.option(
27
+ "-p",
28
+ "--port",
29
+ "port",
30
+ default=8585,
31
+ help="Port to run the documentation server on.",
32
+ type=int,
33
+ )
34
+ def docs(port: int):
35
+ """
36
+ Starts a web server to view the documentation.
37
+ """
38
+ prod_docs_dir = os.path.join(get_cli_root_dir(), 'assets', 'docs')
39
+ dev_docs_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'build')
40
+
41
+ if os.path.exists(prod_docs_dir):
42
+ docs_dir = prod_docs_dir
43
+ elif os.path.exists(dev_docs_dir):
44
+ docs_dir = dev_docs_dir
45
+ click.echo("Serving development documentation")
46
+ else:
47
+ docs_dir = None
48
+ error_exit("Documentation directory not found. Please build the documentation first.")
49
+
50
+ def handler(*args, **kwargs):
51
+ return DocsHttpRequestHandler(*args, directory=docs_dir, **kwargs)
52
+
53
+ with socketserver.TCPServer(("", port), handler) as httpd:
54
+ url = f"http://localhost:{port}/solace-agent-mesh/docs/documentation/getting-started/introduction/"
55
+ click.echo(f"Starting documentation server on {url}")
56
+ webbrowser.open_new_tab(url)
57
+ httpd.serve_forever()
@@ -0,0 +1,64 @@
1
+ import click
2
+ from pathlib import Path
3
+
4
+ from evaluation.run import main as run_evaluation_main
5
+ from cli.utils import error_exit, load_template
6
+
7
+
8
+ def _ensure_eval_backend_config_exists():
9
+ """Checks for eval_backend.yaml and creates it from a template if missing."""
10
+ project_root = Path.cwd()
11
+ configs_dir = project_root / "configs"
12
+ eval_backend_config_path = configs_dir / "eval_backend.yaml"
13
+
14
+ if eval_backend_config_path.exists():
15
+ return
16
+
17
+ click.echo(
18
+ f"'{eval_backend_config_path.relative_to(project_root)}' not found. Creating it..."
19
+ )
20
+
21
+ if not (configs_dir / "shared_config.yaml").exists():
22
+ error_exit(
23
+ "Error: 'configs/shared_config.yaml' not found. Please run 'sam init' first."
24
+ )
25
+
26
+ try:
27
+ template_content = load_template("eval_backend_template.yaml")
28
+ with open(eval_backend_config_path, "w", encoding="utf-8") as f:
29
+ f.write(template_content)
30
+ click.echo(
31
+ click.style(
32
+ f"Successfully created '{eval_backend_config_path.relative_to(project_root)}'.",
33
+ fg="green",
34
+ )
35
+ )
36
+ except Exception as e:
37
+ error_exit(f"Failed to create eval_backend.yaml: {e}")
38
+
39
+
40
+ @click.command(name="eval")
41
+ @click.argument(
42
+ "test_suite_config_path",
43
+ type=click.Path(exists=True, dir_okay=False, resolve_path=True),
44
+ required=True,
45
+ metavar="<PATH>",
46
+ )
47
+ def eval_cmd(test_suite_config_path):
48
+ """
49
+ Run an evaluation suite using a specified configuration file. Such as path/to/file.yaml.
50
+
51
+ <PATH>: The path to the evaluation test suite config file.
52
+ """
53
+ click.echo(
54
+ click.style(
55
+ f"Starting evaluation with test_suite_config: {test_suite_config_path}",
56
+ fg="blue",
57
+ )
58
+ )
59
+ _ensure_eval_backend_config_exists()
60
+ try:
61
+ run_evaluation_main(test_suite_config_path)
62
+ click.echo(click.style("Evaluation completed successfully.", fg="green"))
63
+ except Exception as e:
64
+ error_exit(f"An error occurred during evaluation: {e}")