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

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

Potentially problematic release.


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

Files changed (521) hide show
  1. solace_agent_mesh/__init__.py +5 -0
  2. solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
  3. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  4. solace_agent_mesh/agent/adk/callbacks.py +1716 -0
  5. solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
  6. solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
  7. solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
  8. solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
  9. solace_agent_mesh/agent/adk/runner.py +357 -0
  10. solace_agent_mesh/agent/adk/services.py +240 -0
  11. solace_agent_mesh/agent/adk/setup.py +751 -0
  12. solace_agent_mesh/agent/adk/stream_parser.py +214 -0
  13. solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
  14. solace_agent_mesh/agent/agent_llm.txt +41 -0
  15. solace_agent_mesh/agent/protocol/event_handlers.py +1444 -0
  16. solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
  17. solace_agent_mesh/agent/sac/app.py +640 -0
  18. solace_agent_mesh/agent/sac/component.py +3496 -0
  19. solace_agent_mesh/agent/sac/patch_adk.py +111 -0
  20. solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
  21. solace_agent_mesh/agent/sac/task_execution_context.py +185 -0
  22. solace_agent_mesh/agent/testing/__init__.py +3 -0
  23. solace_agent_mesh/agent/testing/debug_utils.py +135 -0
  24. solace_agent_mesh/agent/testing/testing_llm.txt +90 -0
  25. solace_agent_mesh/agent/tools/__init__.py +14 -0
  26. solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
  27. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
  28. solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
  29. solace_agent_mesh/agent/tools/general_agent_tools.py +571 -0
  30. solace_agent_mesh/agent/tools/image_tools.py +1184 -0
  31. solace_agent_mesh/agent/tools/peer_agent_tool.py +290 -0
  32. solace_agent_mesh/agent/tools/registry.py +36 -0
  33. solace_agent_mesh/agent/tools/test_tools.py +135 -0
  34. solace_agent_mesh/agent/tools/tool_definition.py +45 -0
  35. solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
  36. solace_agent_mesh/agent/tools/web_tools.py +381 -0
  37. solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
  38. solace_agent_mesh/agent/utils/config_parser.py +47 -0
  39. solace_agent_mesh/agent/utils/context_helpers.py +60 -0
  40. solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
  41. solace_agent_mesh/assets/docs/404.html +16 -0
  42. solace_agent_mesh/assets/docs/assets/css/styles.906a1503.css +1 -0
  43. solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
  44. solace_agent_mesh/assets/docs/assets/images/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
  45. solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
  46. solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/1523c6b4.91c7bc01.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
  54. solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
  55. solace_agent_mesh/assets/docs/assets/js/166ab619.7d97ccaf.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
  57. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
  58. solace_agent_mesh/assets/docs/assets/js/1c6e87d2.a8c5ce5a.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/3624.b524e433.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/3d406171.f722eaf5.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/4c2787c2.66ee00e9.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/5b4258a4.bda20761.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js +2 -0
  104. solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.js.LICENSE.txt +61 -0
  105. solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
  106. solace_agent_mesh/assets/docs/assets/js/8731.49e930c2.js +1 -0
  107. solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
  108. solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
  109. solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
  110. solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.js +1 -0
  111. solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
  112. solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
  113. solace_agent_mesh/assets/docs/assets/js/9eff14a2.1bf8f61c.js +1 -0
  114. solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
  115. solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
  116. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
  117. solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
  118. solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
  119. solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
  120. solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
  121. solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
  122. solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
  123. solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
  124. solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
  125. solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
  126. solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
  127. solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
  128. solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
  129. solace_agent_mesh/assets/docs/assets/js/f897a61a.f8c53b0f.js +1 -0
  130. solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
  131. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js +2 -0
  132. solace_agent_mesh/assets/docs/assets/js/main.c6286d7c.js.LICENSE.txt +81 -0
  133. solace_agent_mesh/assets/docs/assets/js/runtime~main.d5133813.js +1 -0
  134. solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
  135. solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
  137. solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
  138. solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
  139. solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
  140. solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +77 -0
  141. solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
  142. solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
  143. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
  146. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
  147. solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
  151. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
  152. solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
  154. solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
  156. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
  158. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
  159. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
  160. solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
  161. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
  164. solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
  165. solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
  166. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -0
  167. solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
  168. solace_agent_mesh/assets/docs/img/logo.png +0 -0
  169. solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
  170. solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
  171. solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
  172. solace_agent_mesh/assets/docs/lunr-index-1754075282978.json +1 -0
  173. solace_agent_mesh/assets/docs/lunr-index.json +1 -0
  174. solace_agent_mesh/assets/docs/search-doc-1754075282978.json +1 -0
  175. solace_agent_mesh/assets/docs/search-doc.json +1 -0
  176. solace_agent_mesh/assets/docs/sitemap.xml +1 -0
  177. solace_agent_mesh/cli/__init__.py +1 -1
  178. solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
  179. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
  180. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +659 -0
  181. solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
  182. solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +93 -0
  183. solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
  184. solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
  185. solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
  186. solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
  187. solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
  188. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
  189. solace_agent_mesh/cli/commands/init_cmd/env_step.py +205 -0
  190. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
  191. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +407 -0
  192. solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
  193. solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +110 -0
  194. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
  195. solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
  196. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
  197. solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
  198. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +139 -0
  199. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
  200. solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
  201. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
  202. solace_agent_mesh/cli/commands/run_cmd.py +158 -0
  203. solace_agent_mesh/cli/main.py +17 -294
  204. solace_agent_mesh/cli/utils.py +135 -204
  205. solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
  206. solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
  207. solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
  208. solace_agent_mesh/client/webui/frontend/static/assets/main-D11Lmy9p.css +1 -0
  209. solace_agent_mesh/client/webui/frontend/static/assets/main-Gfk3BYn5.js +663 -0
  210. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
  211. solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
  212. solace_agent_mesh/common/__init__.py +1 -0
  213. solace_agent_mesh/common/a2a_protocol.py +564 -0
  214. solace_agent_mesh/common/agent_registry.py +42 -0
  215. solace_agent_mesh/common/client/__init__.py +4 -0
  216. solace_agent_mesh/common/client/card_resolver.py +21 -0
  217. solace_agent_mesh/common/client/client.py +85 -0
  218. solace_agent_mesh/common/client/client_llm.txt +133 -0
  219. solace_agent_mesh/common/common_llm.txt +144 -0
  220. solace_agent_mesh/common/constants.py +1 -14
  221. solace_agent_mesh/common/middleware/__init__.py +12 -0
  222. solace_agent_mesh/common/middleware/config_resolver.py +130 -0
  223. solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
  224. solace_agent_mesh/common/middleware/registry.py +125 -0
  225. solace_agent_mesh/common/server/__init__.py +4 -0
  226. solace_agent_mesh/common/server/server.py +122 -0
  227. solace_agent_mesh/common/server/server_llm.txt +169 -0
  228. solace_agent_mesh/common/server/task_manager.py +291 -0
  229. solace_agent_mesh/common/server/utils.py +28 -0
  230. solace_agent_mesh/common/services/__init__.py +4 -0
  231. solace_agent_mesh/common/services/employee_service.py +162 -0
  232. solace_agent_mesh/common/services/identity_service.py +129 -0
  233. solace_agent_mesh/common/services/providers/__init__.py +4 -0
  234. solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
  235. solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
  236. solace_agent_mesh/common/services/services_llm.txt +132 -0
  237. solace_agent_mesh/common/types.py +411 -0
  238. solace_agent_mesh/common/utils/__init__.py +7 -0
  239. solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
  240. solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
  241. solace_agent_mesh/common/utils/embeds/constants.py +55 -0
  242. solace_agent_mesh/common/utils/embeds/converter.py +452 -0
  243. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
  244. solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
  245. solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
  246. solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
  247. solace_agent_mesh/common/utils/embeds/types.py +14 -0
  248. solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
  249. solace_agent_mesh/common/utils/initializer.py +51 -0
  250. solace_agent_mesh/common/utils/log_formatters.py +44 -0
  251. solace_agent_mesh/common/utils/mime_helpers.py +106 -0
  252. solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
  253. solace_agent_mesh/common/utils/utils_llm.txt +67 -0
  254. solace_agent_mesh/config_portal/backend/common.py +66 -24
  255. solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
  256. solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
  257. solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +164 -0
  258. solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
  259. solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
  260. solace_agent_mesh/config_portal/backend/server.py +551 -181
  261. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-_7yox_eh.js +48 -0
  262. solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
  263. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
  264. solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
  265. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-e5c3acfe.js +1 -0
  266. solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
  267. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
  268. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  269. solace_agent_mesh/core_a2a/__init__.py +1 -0
  270. solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
  271. solace_agent_mesh/core_a2a/service.py +331 -0
  272. solace_agent_mesh/evaluation/config_loader.py +657 -0
  273. solace_agent_mesh/evaluation/evaluator.py +667 -0
  274. solace_agent_mesh/evaluation/message_organizer.py +568 -0
  275. solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
  276. solace_agent_mesh/evaluation/report/chart_section.html +141 -0
  277. solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
  278. solace_agent_mesh/evaluation/report/modal.html +59 -0
  279. solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
  280. solace_agent_mesh/evaluation/report/modal_script.js +296 -0
  281. solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
  282. solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
  283. solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
  284. solace_agent_mesh/evaluation/report/templates/header.html +340 -0
  285. solace_agent_mesh/evaluation/report_data_processor.py +972 -0
  286. solace_agent_mesh/evaluation/report_generator.py +613 -0
  287. solace_agent_mesh/evaluation/run.py +613 -0
  288. solace_agent_mesh/evaluation/subscriber.py +872 -0
  289. solace_agent_mesh/evaluation/summary_builder.py +775 -0
  290. solace_agent_mesh/evaluation/test_case_loader.py +714 -0
  291. solace_agent_mesh/gateway/base/__init__.py +1 -0
  292. solace_agent_mesh/gateway/base/app.py +266 -0
  293. solace_agent_mesh/gateway/base/base_llm.txt +119 -0
  294. solace_agent_mesh/gateway/base/component.py +1542 -0
  295. solace_agent_mesh/gateway/base/task_context.py +74 -0
  296. solace_agent_mesh/gateway/gateway_llm.txt +125 -0
  297. solace_agent_mesh/gateway/http_sse/app.py +190 -0
  298. solace_agent_mesh/gateway/http_sse/component.py +1602 -0
  299. solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
  300. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
  301. solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
  302. solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
  303. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
  304. solace_agent_mesh/gateway/http_sse/main.py +442 -0
  305. solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
  306. solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
  307. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +827 -0
  308. solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
  309. solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
  310. solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
  311. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
  312. solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
  313. solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
  314. solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
  315. solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
  316. solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
  317. solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
  318. solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
  319. solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
  320. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
  321. solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
  322. solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
  323. solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
  324. solace_agent_mesh/llm.txt +228 -0
  325. solace_agent_mesh/llm_detail.txt +2835 -0
  326. solace_agent_mesh/templates/agent_template.yaml +53 -0
  327. solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
  328. solace_agent_mesh/templates/gateway_app_template.py +73 -0
  329. solace_agent_mesh/templates/gateway_component_template.py +431 -0
  330. solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
  331. solace_agent_mesh/templates/logging_config_template.ini +64 -0
  332. solace_agent_mesh/templates/main_orchestrator.yaml +55 -0
  333. solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
  334. solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
  335. solace_agent_mesh/templates/plugin_custom_template.py +10 -0
  336. solace_agent_mesh/templates/plugin_gateway_config_template.yaml +63 -0
  337. solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
  338. solace_agent_mesh/templates/plugin_readme_template.md +34 -0
  339. solace_agent_mesh/templates/plugin_tools_template.py +224 -0
  340. solace_agent_mesh/templates/shared_config.yaml +66 -0
  341. solace_agent_mesh/templates/templates_llm.txt +147 -0
  342. solace_agent_mesh/templates/webui.yaml +53 -0
  343. solace_agent_mesh-1.0.2.dist-info/METADATA +432 -0
  344. solace_agent_mesh-1.0.2.dist-info/RECORD +361 -0
  345. solace_agent_mesh-1.0.2.dist-info/entry_points.txt +3 -0
  346. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/licenses/LICENSE +1 -1
  347. solace_agent_mesh/agents/base_agent_component.py +0 -256
  348. solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
  349. solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
  350. solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
  351. solace_agent_mesh/agents/global/actions/create_file.py +0 -70
  352. solace_agent_mesh/agents/global/actions/error_action.py +0 -45
  353. solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
  354. solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
  355. solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
  356. solace_agent_mesh/agents/global/global_agent_component.py +0 -38
  357. solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
  358. solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
  359. solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
  360. solace_agent_mesh/agents/slack/__init__.py +0 -1
  361. solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
  362. solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
  363. solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
  364. solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
  365. solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
  366. solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
  367. solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
  368. solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
  369. solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
  370. solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
  371. solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
  372. solace_agent_mesh/assets/web-visualizer/index.html +0 -14
  373. solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
  374. solace_agent_mesh/cli/commands/add/__init__.py +0 -3
  375. solace_agent_mesh/cli/commands/add/add.py +0 -88
  376. solace_agent_mesh/cli/commands/add/agent.py +0 -110
  377. solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
  378. solace_agent_mesh/cli/commands/add/gateway.py +0 -374
  379. solace_agent_mesh/cli/commands/build.py +0 -670
  380. solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
  381. solace_agent_mesh/cli/commands/chat/chat.py +0 -361
  382. solace_agent_mesh/cli/commands/config.py +0 -29
  383. solace_agent_mesh/cli/commands/init/__init__.py +0 -3
  384. solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
  385. solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
  386. solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
  387. solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
  388. solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
  389. solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
  390. solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
  391. solace_agent_mesh/cli/commands/init/init.py +0 -92
  392. solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
  393. solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
  394. solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
  395. solace_agent_mesh/cli/commands/plugin/add.py +0 -100
  396. solace_agent_mesh/cli/commands/plugin/build.py +0 -268
  397. solace_agent_mesh/cli/commands/plugin/create.py +0 -117
  398. solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
  399. solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
  400. solace_agent_mesh/cli/commands/run.py +0 -68
  401. solace_agent_mesh/cli/commands/visualizer.py +0 -138
  402. solace_agent_mesh/cli/config.py +0 -85
  403. solace_agent_mesh/common/action.py +0 -91
  404. solace_agent_mesh/common/action_list.py +0 -37
  405. solace_agent_mesh/common/action_response.py +0 -340
  406. solace_agent_mesh/common/mysql_database.py +0 -40
  407. solace_agent_mesh/common/postgres_database.py +0 -85
  408. solace_agent_mesh/common/prompt_templates.py +0 -28
  409. solace_agent_mesh/common/stimulus_utils.py +0 -152
  410. solace_agent_mesh/common/time.py +0 -24
  411. solace_agent_mesh/common/utils.py +0 -712
  412. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-a-zJ6rLx.js +0 -46
  413. solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
  414. solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
  415. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-44c41103.js +0 -1
  416. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
  417. solace_agent_mesh/configs/agent_global.yaml +0 -74
  418. solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
  419. solace_agent_mesh/configs/agent_slack.yaml +0 -64
  420. solace_agent_mesh/configs/agent_web_request.yaml +0 -75
  421. solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
  422. solace_agent_mesh/configs/error_catcher.yaml +0 -56
  423. solace_agent_mesh/configs/monitor.yaml +0 -0
  424. solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
  425. solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
  426. solace_agent_mesh/configs/orchestrator.yaml +0 -241
  427. solace_agent_mesh/configs/service_embedding.yaml +0 -81
  428. solace_agent_mesh/configs/service_llm.yaml +0 -265
  429. solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
  430. solace_agent_mesh/gateway/components/gateway_base.py +0 -47
  431. solace_agent_mesh/gateway/components/gateway_input.py +0 -278
  432. solace_agent_mesh/gateway/components/gateway_output.py +0 -298
  433. solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
  434. solace_agent_mesh/gateway/identity/identity_base.py +0 -10
  435. solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
  436. solace_agent_mesh/gateway/identity/no_identity.py +0 -9
  437. solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
  438. solace_agent_mesh/monitors/base_monitor_component.py +0 -26
  439. solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
  440. solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
  441. solace_agent_mesh/orchestrator/__init__.py +0 -0
  442. solace_agent_mesh/orchestrator/action_manager.py +0 -237
  443. solace_agent_mesh/orchestrator/components/__init__.py +0 -0
  444. solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
  445. solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
  446. solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
  447. solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
  448. solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
  449. solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
  450. solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
  451. solace_agent_mesh/services/__init__.py +0 -0
  452. solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
  453. solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
  454. solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
  455. solace_agent_mesh/services/common/__init__.py +0 -4
  456. solace_agent_mesh/services/common/auto_expiry.py +0 -45
  457. solace_agent_mesh/services/common/singleton.py +0 -18
  458. solace_agent_mesh/services/file_service/__init__.py +0 -14
  459. solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
  460. solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
  461. solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
  462. solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
  463. solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
  464. solace_agent_mesh/services/file_service/file_service.py +0 -437
  465. solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
  466. solace_agent_mesh/services/file_service/file_transformations.py +0 -141
  467. solace_agent_mesh/services/file_service/file_utils.py +0 -324
  468. solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
  469. solace_agent_mesh/services/history_service/__init__.py +0 -3
  470. solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
  471. solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
  472. solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
  473. solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
  474. solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
  475. solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
  476. solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
  477. solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
  478. solace_agent_mesh/services/history_service/history_service.py +0 -413
  479. solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
  480. solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
  481. solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
  482. solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
  483. solace_agent_mesh/services/middleware_service/__init__.py +0 -0
  484. solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
  485. solace_agent_mesh/templates/action.py +0 -38
  486. solace_agent_mesh/templates/agent.py +0 -29
  487. solace_agent_mesh/templates/agent.yaml +0 -70
  488. solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
  489. solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
  490. solace_agent_mesh/templates/gateway-flows.yaml +0 -78
  491. solace_agent_mesh/templates/gateway-header.yaml +0 -16
  492. solace_agent_mesh/templates/gateway_base.py +0 -15
  493. solace_agent_mesh/templates/gateway_input.py +0 -98
  494. solace_agent_mesh/templates/gateway_output.py +0 -71
  495. solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
  496. solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
  497. solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
  498. solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
  499. solace_agent_mesh/templates/slack-default-config.yaml +0 -16
  500. solace_agent_mesh/templates/slack-flows.yaml +0 -81
  501. solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
  502. solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
  503. solace_agent_mesh/templates/web-default-config.yaml +0 -10
  504. solace_agent_mesh/templates/web-flows.yaml +0 -76
  505. solace_agent_mesh/tools/__init__.py +0 -0
  506. solace_agent_mesh/tools/components/__init__.py +0 -0
  507. solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
  508. solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
  509. solace_agent_mesh/tools/config/runtime_config.py +0 -26
  510. solace_agent_mesh-0.2.4.dist-info/METADATA +0 -176
  511. solace_agent_mesh-0.2.4.dist-info/RECORD +0 -193
  512. solace_agent_mesh-0.2.4.dist-info/entry_points.txt +0 -3
  513. /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
  514. /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
  515. /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
  516. /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
  517. /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
  518. /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
  519. /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
  520. /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
  521. {solace_agent_mesh-0.2.4.dist-info → solace_agent_mesh-1.0.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,139 @@
1
+ import click
2
+ import multiprocessing
3
+ import webbrowser
4
+ import os
5
+ import time
6
+ from pathlib import Path
7
+ from cli.utils import error_exit
8
+
9
+ config_portal_host = "CONFIG_PORTAL_HOST"
10
+
11
+
12
+ def run_flask_plugin_catalog(host, port, shared_data):
13
+ try:
14
+ from config_portal.backend.plugin_catalog_server import (
15
+ create_plugin_catalog_app,
16
+ )
17
+ from config_portal.backend.plugin_catalog.constants import (
18
+ PLUGIN_CATALOG_TEMP_DIR,
19
+ )
20
+ except ImportError:
21
+ click.echo(
22
+ click.style(
23
+ "Error: Backend components for plugin catalog not found. Please ensure they are implemented.",
24
+ fg="red",
25
+ )
26
+ )
27
+ shared_data["status"] = "error_backend_missing"
28
+ return
29
+
30
+ temp_dir = Path(os.path.expanduser(PLUGIN_CATALOG_TEMP_DIR))
31
+ temp_dir.mkdir(parents=True, exist_ok=True)
32
+
33
+ app = create_plugin_catalog_app(shared_config=shared_data)
34
+ click.echo(
35
+ f"Starting Plugin Catalog backend on http://{host}:{port}/?config_mode=pluginCatalog"
36
+ )
37
+ try:
38
+ app.run(host=host, port=port, debug=False)
39
+ except Exception as e:
40
+ click.echo(click.style(f"Error starting Flask app: {e}", fg="red"))
41
+ shared_data["status"] = f"error_flask_start: {e}"
42
+
43
+
44
+ @click.command("catalog", help="Launch the SAM Plugin catalog web interface.")
45
+ @click.option(
46
+ "--port",
47
+ default=5003,
48
+ type=int,
49
+ show_default=True,
50
+ help="Port to run the plugin catalog web server on.",
51
+ )
52
+ @click.option(
53
+ "--install-command",
54
+ "installer_command",
55
+ help="Command to use to install a python package. Must follow the format 'command {package} args'",
56
+ )
57
+ def catalog(port: int, installer_command: str):
58
+ """Launches the SAM Plugin catalog web interface."""
59
+ host = os.environ.get(config_portal_host, "127.0.0.1")
60
+ try:
61
+ if installer_command:
62
+ installer_command.format(package="dummy") # Test if the command is valid
63
+ os.environ["SAM_PLUGIN_INSTALL_COMMAND"] = installer_command
64
+ except (KeyError, ValueError):
65
+ return error_exit(
66
+ "Error: The installer command must contain a placeholder '{package}' to be replaced with the actual package name."
67
+ )
68
+
69
+ with multiprocessing.Manager() as manager:
70
+ shared_data_from_web = manager.dict()
71
+ shared_data_from_web["status"] = "initializing"
72
+ _run_flask_target = run_flask_plugin_catalog
73
+
74
+ gui_process = multiprocessing.Process(
75
+ target=_run_flask_target, args=(host, port, shared_data_from_web)
76
+ )
77
+ gui_process.start()
78
+
79
+ # Give the server a moment to start
80
+ time.sleep(2)
81
+
82
+ if shared_data_from_web.get(
83
+ "status"
84
+ ) == "initializing" or shared_data_from_web.get("status", "").startswith(
85
+ "error_"
86
+ ):
87
+ backend_status = shared_data_from_web.get("status", "unknown_error")
88
+ if backend_status == "initializing":
89
+ click.echo(
90
+ click.style(
91
+ f"Plugin catalog backend is starting... If it takes too long, there might be an issue.",
92
+ fg="yellow",
93
+ )
94
+ )
95
+ else:
96
+ click.echo(
97
+ click.style(
98
+ f"Plugin catalog backend failed to start properly ({backend_status}). Please check logs.",
99
+ fg="red",
100
+ )
101
+ )
102
+ if gui_process.is_alive():
103
+ gui_process.terminate()
104
+ gui_process.join(timeout=2)
105
+ return # Don't open browser if backend failed
106
+
107
+ portal_url = f"http://{host}:{port}/?config_mode=pluginCatalog"
108
+ click.echo(f"Opening Plugin Catalog at: {portal_url}")
109
+
110
+ try:
111
+ webbrowser.open(portal_url)
112
+ except Exception:
113
+ click.echo(
114
+ click.style(
115
+ f"Could not automatically open browser, Please open {portal_url} manually.",
116
+ fg="yellow",
117
+ )
118
+ )
119
+
120
+ try:
121
+ gui_process.join()
122
+ except KeyboardInterrupt:
123
+ click.echo("Plugin Catalog interrupted by user. Shutting down...")
124
+ finally:
125
+ if gui_process.is_alive():
126
+ click.echo("Terminating Plugin Catalog process...")
127
+ gui_process.terminate()
128
+ gui_process.join(timeout=5)
129
+ if gui_process.is_alive():
130
+ click.echo(
131
+ click.style("Forcibly killing Plugin Catalog process.", fg="yellow")
132
+ )
133
+ gui_process.kill()
134
+
135
+ final_status = shared_data_from_web.get("status", "unknown_exit")
136
+ if final_status == "shutdown_requested":
137
+ click.echo("Plugin Catalog closed successfully.")
138
+ else:
139
+ click.echo(f"Plugin Catalog exited with status: {final_status}")
@@ -0,0 +1,309 @@
1
+ import click
2
+ import pathlib
3
+ from cli.utils import (
4
+ get_formatted_names,
5
+ ask_if_not_provided,
6
+ load_template,
7
+ error_exit,
8
+ )
9
+ from cli import __version__ as cli_version
10
+ from .official_registry import is_official_plugin
11
+
12
+ PLUGIN_TYPES = ["agent", "gateway", "custom"]
13
+
14
+ DEFAULT_PLUGIN_TYPE = "agent"
15
+ DEFAULT_AUTHOR_NAME = "Your Name"
16
+ DEFAULT_AUTHOR_EMAIL = "your.email@example.com"
17
+ DEFAULT_PLUGIN_VERSION = "0.1.0"
18
+
19
+
20
+ def ensure_directory_exists(path: pathlib.Path):
21
+ """Creates a directory if it doesn't exist."""
22
+ path.mkdir(parents=True, exist_ok=True)
23
+
24
+
25
+ def replace_placeholders(content: str, replacements: dict) -> str:
26
+ """Replaces placeholders in a string."""
27
+ for placeholder, value in replacements.items():
28
+ content = content.replace(placeholder, str(value))
29
+ return content
30
+
31
+
32
+ def load_plugin_type_config_template(plugin_type: str, replacement: dict) -> str:
33
+ """Loads the template for the specified plugin type."""
34
+ template_name = f"plugin_{plugin_type}_config_template.yaml"
35
+ try:
36
+ return load_template(template_name, replace_placeholders, replacement)
37
+ except FileNotFoundError:
38
+ error_exit(
39
+ f"Template file '{template_name}' not found. Please ensure it exists in the templates directory."
40
+ )
41
+ except Exception as e:
42
+ error_exit(f"Error loading template '{template_name}': {e}")
43
+
44
+
45
+ def setup_plugin_type_src(plugin_type: str, src_path: pathlib.Path, replacements: dict):
46
+ """Sets up the source directory for the specified plugin type."""
47
+
48
+ # --- Generate __init__.py ---
49
+ src_init_py_content = ""
50
+ try:
51
+ with open(src_path / "__init__.py", "w", encoding="utf-8") as f:
52
+ f.write(src_init_py_content)
53
+ click.echo(f" Created: {src_path / '__init__.py'}")
54
+ except IOError as e:
55
+ error_exit(f"Error writing {src_path / '__init__.py'}: {e}")
56
+
57
+ if plugin_type == "agent":
58
+ # --- Generate tools.py ---
59
+ try:
60
+ src_tools_py_content = load_template(
61
+ "plugin_tools_template.py", replace_placeholders, replacements
62
+ )
63
+ with open(src_path / "tools.py", "w", encoding="utf-8") as f:
64
+ f.write(src_tools_py_content)
65
+ click.echo(f" Created: {src_path / 'tools.py'}")
66
+ except FileNotFoundError:
67
+ error_exit(
68
+ "Template file 'plugin_tools_template.py' not found. Please ensure it exists in the templates directory."
69
+ )
70
+ except IOError as e:
71
+ error_exit(f"Error writing {src_path / 'tools.py'}: {e}")
72
+
73
+ elif plugin_type == "gateway":
74
+ placeholders = {
75
+ **replacements,
76
+ "__GATEWAY_NAME_SNAKE_CASE__": replacements["__PLUGIN_SNAKE_CASE_NAME__"],
77
+ "__GATEWAY_NAME_PASCAL_CASE__": replacements["__PLUGIN_PASCAL_CASE_NAME__"],
78
+ "__GATEWAY_NAME_UPPER_CASE__": replacements[
79
+ "__PLUGIN_UPPER_SNAKE_CASE_NAME__"
80
+ ],
81
+ "__GATEWAY_NAME_KEBAB_CASE__": replacements["__PLUGIN_KEBAB_CASE_NAME__"],
82
+ }
83
+ # --- Generate app.py ---
84
+ try:
85
+ src_gateway_py_content = load_template(
86
+ "gateway_app_template.py", replace_placeholders, placeholders
87
+ )
88
+ with open(src_path / "app.py", "w", encoding="utf-8") as f:
89
+ f.write(src_gateway_py_content)
90
+ click.echo(f" Created: {src_path / 'app.py'}")
91
+ except FileNotFoundError:
92
+ error_exit(
93
+ "Template file 'gateway_app_template.py' not found. Please ensure it exists in the templates directory."
94
+ )
95
+ except IOError as e:
96
+ error_exit(f"Error writing {src_path / 'app.py'}: {e}")
97
+ # --- Generate gateway_component_template.py ---
98
+ try:
99
+ src_gateway_component_py_content = load_template(
100
+ "gateway_component_template.py", replace_placeholders, placeholders
101
+ )
102
+ with open(src_path / "component.py", "w", encoding="utf-8") as f:
103
+ f.write(src_gateway_component_py_content)
104
+ click.echo(f" Created: {src_path / 'component.py'}")
105
+ except FileNotFoundError:
106
+ error_exit(
107
+ "Template file 'gateway_component_template.py' not found. Please ensure it exists in the templates directory."
108
+ )
109
+ except IOError as e:
110
+ error_exit(f"Error writing {src_path / 'component.py'}: {e}")
111
+
112
+ elif plugin_type == "custom":
113
+ # --- generate app.py ---
114
+ placeholders = {
115
+ **replacements,
116
+ "__COMPONENT_PASCAL_CASE_NAME__": replacements[
117
+ "__PLUGIN_PASCAL_CASE_NAME__"
118
+ ],
119
+ }
120
+ try:
121
+ src_custom_py_content = load_template(
122
+ "plugin_custom_template.py", replace_placeholders, placeholders
123
+ )
124
+ with open(src_path / "app.py", "w", encoding="utf-8") as f:
125
+ f.write(src_custom_py_content)
126
+ click.echo(f" Created: {src_path / 'app.py'}")
127
+ except FileNotFoundError:
128
+ error_exit(
129
+ "Template file 'plugin_custom_template.py' not found. Please ensure it exists in the templates directory."
130
+ )
131
+ except IOError as e:
132
+ error_exit(f"Error writing {src_path / 'app.py'}: {e}")
133
+
134
+
135
+ @click.command("create")
136
+ @click.argument("plugin_name_arg")
137
+ @click.option("--type", "type_opt", help="Plugin type. Options: agent, gateway, custom")
138
+ @click.option("--author-name", "author_name_opt", help="Author's name.")
139
+ @click.option("--author-email", "author_email_opt", help="Author's email.")
140
+ @click.option("--description", "description_opt", help="Plugin description.")
141
+ @click.option("--version", "version_opt", help="Initial plugin version.")
142
+ @click.option(
143
+ "--skip",
144
+ is_flag=True,
145
+ help="Skip interactive prompts and use defaults or provided flags.",
146
+ )
147
+ def create_plugin_cmd(
148
+ plugin_name_arg: str,
149
+ type_opt: str,
150
+ author_name_opt: str,
151
+ author_email_opt: str,
152
+ description_opt: str,
153
+ version_opt: str,
154
+ skip: bool,
155
+ ):
156
+ """Creates a new SAM plugin directory structure with interactive prompts for metadata."""
157
+
158
+ options = {
159
+ "plugin_name": plugin_name_arg,
160
+ "type": type_opt,
161
+ "author_name": author_name_opt,
162
+ "author_email": author_email_opt,
163
+ "description": description_opt,
164
+ "version": version_opt,
165
+ }
166
+
167
+ plugin_formats = get_formatted_names(plugin_name_arg)
168
+ default_description = f"A SAM plugin: {plugin_formats['SPACED_NAME']}"
169
+
170
+ if is_official_plugin(plugin_formats["KEBAB_CASE_NAME"]) or is_official_plugin(
171
+ plugin_formats["SNAKE_CASE_NAME"]
172
+ ):
173
+ error_exit(
174
+ f"Error: Plugin name '{plugin_name_arg}' conflicts with an official plugin. "
175
+ f"Please choose a different name."
176
+ )
177
+
178
+ if not skip:
179
+ click.echo(
180
+ "Please provide the following details for your new plugin (press Enter to accept defaults):"
181
+ )
182
+
183
+ options["type"] = ask_if_not_provided(
184
+ options,
185
+ "type",
186
+ "Plugin Type",
187
+ default=DEFAULT_PLUGIN_TYPE,
188
+ choices=PLUGIN_TYPES,
189
+ none_interactive=skip,
190
+ ).lower()
191
+ if options["type"] not in PLUGIN_TYPES:
192
+ error_exit(
193
+ f"Invalid plugin type '{options['type']}'. Must be one of: {', '.join(PLUGIN_TYPES)}."
194
+ )
195
+
196
+ options["author_name"] = ask_if_not_provided(
197
+ options,
198
+ "author_name",
199
+ "Author's Name",
200
+ default=DEFAULT_AUTHOR_NAME,
201
+ none_interactive=skip,
202
+ )
203
+ options["author_email"] = ask_if_not_provided(
204
+ options,
205
+ "author_email",
206
+ "Author's Email",
207
+ default=DEFAULT_AUTHOR_EMAIL,
208
+ none_interactive=skip,
209
+ )
210
+ options["description"] = ask_if_not_provided(
211
+ options,
212
+ "description",
213
+ "Plugin Description",
214
+ default=default_description,
215
+ none_interactive=skip,
216
+ )
217
+ options["version"] = ask_if_not_provided(
218
+ options,
219
+ "version",
220
+ "Initial plugin version",
221
+ default=DEFAULT_PLUGIN_VERSION,
222
+ none_interactive=skip,
223
+ )
224
+
225
+ click.echo(f"Creating plugin '{plugin_formats['KEBAB_CASE_NAME']}'...")
226
+
227
+ base_plugin_path = pathlib.Path(plugin_formats["KEBAB_CASE_NAME"])
228
+ src_path = base_plugin_path / "src" / plugin_formats["SNAKE_CASE_NAME"]
229
+
230
+ try:
231
+ ensure_directory_exists(base_plugin_path)
232
+ ensure_directory_exists(src_path)
233
+ except Exception as e:
234
+ error_exit(f"Error creating plugin directories: {e}")
235
+
236
+ replacements = {
237
+ "__PLUGIN_KEBAB_CASE_NAME__": plugin_formats["KEBAB_CASE_NAME"],
238
+ "__PLUGIN_SNAKE_CASE_NAME__": plugin_formats["SNAKE_CASE_NAME"],
239
+ "__PLUGIN_UPPER_SNAKE_CASE_NAME__": plugin_formats["SNAKE_UPPER_CASE_NAME"],
240
+ "__PLUGIN_SPACED_NAME__": plugin_formats["SPACED_NAME"],
241
+ "__PLUGIN_PASCAL_CASE_NAME__": plugin_formats["PASCAL_CASE_NAME"],
242
+ "__PLUGIN_AUTHOR_NAME__": options["author_name"],
243
+ "__PLUGIN_AUTHOR_EMAIL__": options["author_email"],
244
+ "__PLUGIN_DESCRIPTION__": options["description"],
245
+ "__PLUGIN_VERSION__": options["version"],
246
+ "__PLUGIN_META_DATA_TYPE__": options["type"].lower(),
247
+ "__SAM_VERSION__": cli_version,
248
+ "__COMPONENT_KEBAB_CASE_NAME__": "__COMPONENT_KEBAB_CASE_NAME__",
249
+ "__COMPONENT_PASCAL_CASE_NAME__": "__COMPONENT_PASCAL_CASE_NAME__",
250
+ "__COMPONENT_UPPER_SNAKE_CASE_NAME__": "__COMPONENT_UPPER_SNAKE_CASE_NAME__",
251
+ "__COMPONENT_SNAKE_CASE_NAME__": "__COMPONENT_SNAKE_CASE_NAME__",
252
+ }
253
+
254
+ # --- Generate config.yaml ---
255
+ try:
256
+ config_yaml_content = load_plugin_type_config_template(
257
+ options["type"], replacements
258
+ )
259
+ with open(base_plugin_path / "config.yaml", "w", encoding="utf-8") as f:
260
+ f.write(config_yaml_content)
261
+ click.echo(f" Created: {base_plugin_path / 'config.yaml'}")
262
+ except IOError as e:
263
+ error_exit(f"Error writing config.yaml: {e}")
264
+ except Exception as e:
265
+ error_exit(f"Error processing config.yaml template: {e}")
266
+
267
+ # --- Generate pyproject.toml ---
268
+ try:
269
+ pyproject_toml_content = load_template(
270
+ "plugin_pyproject_template.toml", replace_placeholders, replacements
271
+ )
272
+ with open(base_plugin_path / "pyproject.toml", "w", encoding="utf-8") as f:
273
+ f.write(pyproject_toml_content)
274
+ click.echo(f" Created: {base_plugin_path / 'pyproject.toml'}")
275
+ except FileNotFoundError:
276
+ error_exit(
277
+ "Template file 'plugin_pyproject_template.toml' not found. Please ensure it exists in the templates directory."
278
+ )
279
+ except IOError as e:
280
+ error_exit(f"Error writing pyproject.toml: {e}")
281
+ except Exception as e:
282
+ error_exit(f"Error processing pyproject.toml template: {e}")
283
+
284
+ # --- Generate src directory ---
285
+ setup_plugin_type_src(options["type"], src_path, replacements)
286
+
287
+ # --- Generate README.md ---
288
+ try:
289
+ readme_md_content = load_template(
290
+ "plugin_readme_template.md", replace_placeholders, replacements
291
+ )
292
+ with open(base_plugin_path / "README.md", "w", encoding="utf-8") as f:
293
+ f.write(readme_md_content)
294
+ click.echo(f" Created: {base_plugin_path / 'README.md'}")
295
+ except FileNotFoundError:
296
+ error_exit(
297
+ "Template file 'plugin_readme_template.md' not found. Please ensure it exists in the templates directory."
298
+ )
299
+ except IOError as e:
300
+ error_exit(f"Error writing README.md: {e}")
301
+ except Exception as e:
302
+ error_exit(f"Error processing README.md template: {e}")
303
+
304
+ click.echo(
305
+ click.style(
306
+ f"\nPlugin '{plugin_formats['KEBAB_CASE_NAME']}' created successfully at ./{base_plugin_path}",
307
+ fg="green",
308
+ )
309
+ )
@@ -0,0 +1,175 @@
1
+ import httpx
2
+ from pathlib import Path
3
+ from functools import lru_cache
4
+ from typing import Dict, Optional
5
+ import click
6
+ from config_portal.backend.plugin_catalog.constants import (
7
+ DEFAULT_OFFICIAL_REGISTRY_URL,
8
+ OFFICIAL_REGISTRY_GIT_BRANCH,
9
+ )
10
+
11
+ IGNORE_SUB_DIRS = [".git", "__pycache__", ".venv", "node_modules", ".vscode", ".github"]
12
+
13
+
14
+ @lru_cache(maxsize=1)
15
+ def get_official_plugins() -> Dict[str, str]:
16
+ """
17
+ Fetches the list of official plugins from the default registry.
18
+
19
+ Returns:
20
+ Dict[str, str]: A mapping of plugin names to their full URLs/paths
21
+ """
22
+ registry_url = DEFAULT_OFFICIAL_REGISTRY_URL
23
+
24
+ if _is_github_url(registry_url):
25
+ return _fetch_github_plugins(registry_url, branch=OFFICIAL_REGISTRY_GIT_BRANCH)
26
+ else:
27
+ return _fetch_local_plugins(registry_url)
28
+
29
+
30
+ def _is_github_url(url: str) -> bool:
31
+ """Check if the URL is a GitHub repository URL."""
32
+ return url.startswith("https://github.com/") or url.startswith("http://github.com/")
33
+
34
+
35
+ def _fetch_github_plugins(github_url: str, branch: str = None) -> Dict[str, str]:
36
+ """
37
+ Fetch plugin list from GitHub repository using the GitHub API.
38
+
39
+ Args:
40
+ github_url: GitHub repository URL
41
+ branch: Optional branch name to fetch plugins from
42
+
43
+ Returns:
44
+ Dict[str, str]: Mapping of plugin names to their full GitHub URLs
45
+ """
46
+ try:
47
+ if github_url.endswith(".git"):
48
+ github_url = github_url[:-4]
49
+
50
+ parts = (
51
+ github_url.replace("https://github.com/", "")
52
+ .replace("http://github.com/", "")
53
+ .split("/")
54
+ )
55
+ if len(parts) < 2:
56
+ click.echo(
57
+ click.style(f"Error: Invalid GitHub URL format: {github_url}", fg="red")
58
+ )
59
+ return {}
60
+
61
+ owner, repo = parts[0], parts[1]
62
+ api_url = f"https://api.github.com/repos/{owner}/{repo}/contents"
63
+ if branch:
64
+ api_url += f"?ref={branch}"
65
+
66
+ with httpx.Client() as client:
67
+ response = client.get(api_url, timeout=10.0)
68
+ response.raise_for_status()
69
+
70
+ contents = response.json()
71
+
72
+ plugins = {}
73
+ for item in contents:
74
+ if item.get("type") == "dir" and item["name"] not in IGNORE_SUB_DIRS:
75
+ plugin_name = item["name"]
76
+ plugin_url = f"git+{github_url}"
77
+ if branch:
78
+ plugin_url += f"@{branch}"
79
+ plugin_url += f"#subdirectory={plugin_name}"
80
+ plugins[plugin_name] = plugin_url
81
+
82
+ return plugins
83
+
84
+ except httpx.RequestError as e:
85
+ click.echo(click.style(f"Error fetching plugins from GitHub: {e}", fg="red"))
86
+ return {}
87
+ except httpx.HTTPStatusError as e:
88
+ click.echo(
89
+ click.style(f"HTTP error fetching plugins from GitHub: {e}", fg="red")
90
+ )
91
+ return {}
92
+ except Exception as e:
93
+ click.echo(
94
+ click.style(f"Unexpected error fetching plugins from GitHub: {e}", fg="red")
95
+ )
96
+ return {}
97
+
98
+
99
+ def _fetch_local_plugins(local_path: str) -> Dict[str, str]:
100
+ """
101
+ Fetch plugin list from local filesystem.
102
+
103
+ Args:
104
+ local_path: Local directory path
105
+
106
+ Returns:
107
+ Dict[str, str]: Mapping of plugin names to their full local paths
108
+ """
109
+ try:
110
+ path = Path(local_path).expanduser().resolve()
111
+
112
+ if not path.exists():
113
+ click.echo(
114
+ click.style(
115
+ f"Error: Local plugin registry path does not exist: {path}",
116
+ fg="red",
117
+ )
118
+ )
119
+ return {}
120
+
121
+ if not path.is_dir():
122
+ click.echo(
123
+ click.style(
124
+ f"Error: Local plugin registry path is not a directory: {path}",
125
+ fg="red",
126
+ )
127
+ )
128
+ return {}
129
+
130
+ plugins = {}
131
+ for item in path.iterdir():
132
+ if item.is_dir() and item.name not in IGNORE_SUB_DIRS:
133
+ plugin_name = item.name
134
+ plugins[plugin_name] = str(item)
135
+
136
+ return plugins
137
+
138
+ except Exception as e:
139
+ click.echo(
140
+ click.style(f"Error fetching plugins from local path: {e}", fg="red")
141
+ )
142
+ return {}
143
+
144
+
145
+ def is_official_plugin(plugin_name: str) -> bool:
146
+ """
147
+ Check if a plugin name is an official plugin.
148
+
149
+ Args:
150
+ plugin_name: Name of the plugin to check
151
+
152
+ Returns:
153
+ bool: True if the plugin is official, False otherwise
154
+ """
155
+ official_plugins = get_official_plugins()
156
+ return plugin_name in official_plugins
157
+
158
+
159
+ def get_official_plugin_url(plugin_name: str) -> Optional[str]:
160
+ """
161
+ Get the full URL/path for an official plugin.
162
+
163
+ Args:
164
+ plugin_name: Name of the official plugin
165
+
166
+ Returns:
167
+ Optional[str]: Full URL/path if plugin is official, None otherwise
168
+ """
169
+ # if the plugin_name is a git path, url, or a local path, it can't be an official plugin
170
+ if plugin_name.startswith(
171
+ ("git+", "http://", "https://", "file://", "/", "./", "../", "~/")
172
+ ):
173
+ return False
174
+ official_plugins = get_official_plugins()
175
+ return official_plugins.get(plugin_name)