solace-agent-mesh 1.6.1__py3-none-any.whl → 1.13.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 (481) hide show
  1. solace_agent_mesh/agent/adk/alembic/README +74 -0
  2. solace_agent_mesh/agent/adk/alembic/env.py +77 -0
  3. solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
  4. solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
  5. solace_agent_mesh/agent/adk/alembic.ini +112 -0
  6. solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
  7. solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +165 -1
  8. solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
  9. solace_agent_mesh/agent/adk/callbacks.py +852 -109
  10. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +234 -36
  11. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
  12. solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
  13. solace_agent_mesh/agent/adk/models/lite_llm.py +77 -21
  14. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
  15. solace_agent_mesh/agent/adk/runner.py +85 -20
  16. solace_agent_mesh/agent/adk/schema_migration.py +88 -0
  17. solace_agent_mesh/agent/adk/services.py +94 -18
  18. solace_agent_mesh/agent/adk/setup.py +281 -65
  19. solace_agent_mesh/agent/adk/stream_parser.py +231 -37
  20. solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
  21. solace_agent_mesh/agent/protocol/event_handlers.py +472 -137
  22. solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
  23. solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
  24. solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
  25. solace_agent_mesh/agent/proxies/base/app.py +3 -2
  26. solace_agent_mesh/agent/proxies/base/component.py +188 -22
  27. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
  28. solace_agent_mesh/agent/sac/app.py +91 -3
  29. solace_agent_mesh/agent/sac/component.py +591 -157
  30. solace_agent_mesh/agent/sac/patch_adk.py +8 -16
  31. solace_agent_mesh/agent/sac/task_execution_context.py +146 -4
  32. solace_agent_mesh/agent/tools/__init__.py +3 -0
  33. solace_agent_mesh/agent/tools/audio_tools.py +3 -3
  34. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +710 -171
  35. solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
  36. solace_agent_mesh/agent/tools/dynamic_tool.py +2 -0
  37. solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
  38. solace_agent_mesh/agent/tools/time_tools.py +126 -0
  39. solace_agent_mesh/agent/tools/tool_config_types.py +57 -2
  40. solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
  41. solace_agent_mesh/agent/tools/web_tools.py +125 -17
  42. solace_agent_mesh/agent/utils/artifact_helpers.py +248 -6
  43. solace_agent_mesh/agent/utils/context_helpers.py +17 -0
  44. solace_agent_mesh/assets/docs/404.html +6 -6
  45. solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
  46. solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
  51. solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
  52. solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
  62. solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
  87. solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
  88. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
  89. solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
  90. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
  91. solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
  92. solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
  93. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
  94. solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
  95. solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
  96. solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
  97. solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
  98. solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
  99. solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
  100. solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
  101. solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
  102. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
  103. solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
  104. solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
  105. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
  106. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
  107. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
  108. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
  109. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +82 -68
  110. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
  111. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
  112. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
  113. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
  114. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
  115. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
  116. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
  117. solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
  118. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
  119. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
  120. solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
  121. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
  122. solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
  123. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -49
  124. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -30
  125. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
  126. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
  127. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
  128. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +90 -0
  129. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -16
  130. solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
  131. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +38 -38
  132. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +162 -171
  133. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
  134. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
  135. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
  136. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
  137. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
  138. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
  139. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
  140. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
  141. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
  142. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
  143. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
  144. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
  145. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
  146. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
  147. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
  148. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
  149. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
  150. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +23 -19
  151. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
  152. solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
  153. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +112 -87
  154. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
  155. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +87 -64
  156. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
  157. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
  158. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -37
  159. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
  160. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
  161. solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
  162. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +311 -0
  163. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +39 -42
  164. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
  165. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
  166. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
  167. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
  168. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
  169. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
  170. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
  171. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
  172. solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
  173. solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
  174. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  175. solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
  176. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  177. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  178. solace_agent_mesh/cli/__init__.py +1 -1
  179. solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
  180. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
  181. solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
  182. solace_agent_mesh/cli/commands/docs_cmd.py +4 -1
  183. solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
  184. solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
  185. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
  186. solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
  187. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
  188. solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
  189. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
  190. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
  191. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
  192. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
  193. solace_agent_mesh/cli/commands/run_cmd.py +64 -49
  194. solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
  195. solace_agent_mesh/cli/main.py +15 -0
  196. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-KnKMP_vb.js} +1 -1
  197. solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
  198. solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
  199. solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
  200. solace_agent_mesh/client/webui/frontend/static/assets/vendor-CGk8Suyh.js +565 -0
  201. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  202. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  203. solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
  204. solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
  205. solace_agent_mesh/common/a2a/events.py +2 -1
  206. solace_agent_mesh/common/a2a/protocol.py +5 -0
  207. solace_agent_mesh/common/a2a/types.py +2 -1
  208. solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
  209. solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
  210. solace_agent_mesh/common/agent_registry.py +38 -11
  211. solace_agent_mesh/common/data_parts.py +144 -4
  212. solace_agent_mesh/common/error_handlers.py +83 -0
  213. solace_agent_mesh/common/exceptions.py +24 -0
  214. solace_agent_mesh/common/oauth/__init__.py +17 -0
  215. solace_agent_mesh/common/oauth/oauth_client.py +408 -0
  216. solace_agent_mesh/common/oauth/utils.py +50 -0
  217. solace_agent_mesh/common/rag_dto.py +156 -0
  218. solace_agent_mesh/common/sac/sam_component_base.py +97 -19
  219. solace_agent_mesh/common/sam_events/event_service.py +2 -2
  220. solace_agent_mesh/common/services/employee_service.py +1 -1
  221. solace_agent_mesh/common/utils/embeds/constants.py +1 -0
  222. solace_agent_mesh/common/utils/embeds/converter.py +1 -8
  223. solace_agent_mesh/common/utils/embeds/modifiers.py +4 -28
  224. solace_agent_mesh/common/utils/embeds/resolver.py +152 -31
  225. solace_agent_mesh/common/utils/embeds/types.py +9 -0
  226. solace_agent_mesh/common/utils/log_formatters.py +20 -0
  227. solace_agent_mesh/common/utils/mime_helpers.py +12 -5
  228. solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
  229. solace_agent_mesh/common/utils/rbac_utils.py +69 -0
  230. solace_agent_mesh/common/utils/templates/__init__.py +8 -0
  231. solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
  232. solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
  233. solace_agent_mesh/config_portal/backend/common.py +12 -0
  234. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
  235. solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
  236. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
  237. solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
  238. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
  239. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
  240. solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
  241. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  242. solace_agent_mesh/core_a2a/service.py +3 -2
  243. solace_agent_mesh/gateway/adapter/__init__.py +1 -0
  244. solace_agent_mesh/gateway/adapter/base.py +170 -0
  245. solace_agent_mesh/gateway/adapter/types.py +230 -0
  246. solace_agent_mesh/gateway/base/app.py +39 -2
  247. solace_agent_mesh/gateway/base/auth_interface.py +103 -0
  248. solace_agent_mesh/gateway/base/component.py +1027 -151
  249. solace_agent_mesh/gateway/generic/__init__.py +1 -0
  250. solace_agent_mesh/gateway/generic/app.py +50 -0
  251. solace_agent_mesh/gateway/generic/component.py +894 -0
  252. solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
  253. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
  254. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
  255. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
  256. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
  257. solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
  258. solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
  259. solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
  260. solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
  261. solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
  262. solace_agent_mesh/gateway/http_sse/app.py +40 -11
  263. solace_agent_mesh/gateway/http_sse/component.py +285 -160
  264. solace_agent_mesh/gateway/http_sse/dependencies.py +149 -114
  265. solace_agent_mesh/gateway/http_sse/main.py +68 -450
  266. solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
  267. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
  268. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
  269. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
  270. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +26 -3
  271. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
  272. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
  273. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +114 -6
  274. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +13 -0
  275. solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
  276. solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
  277. solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
  278. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +8 -2
  279. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
  280. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
  281. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
  282. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +177 -11
  283. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
  284. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
  285. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +256 -58
  286. solace_agent_mesh/gateway/http_sse/routers/auth.py +168 -134
  287. solace_agent_mesh/gateway/http_sse/routers/config.py +302 -8
  288. solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
  289. solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
  290. solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
  291. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +14 -1
  292. solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
  293. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
  294. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +5 -2
  295. solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
  296. solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
  297. solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
  298. solace_agent_mesh/gateway/http_sse/routers/projects.py +768 -0
  299. solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
  300. solace_agent_mesh/gateway/http_sse/routers/sessions.py +167 -7
  301. solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
  302. solace_agent_mesh/gateway/http_sse/routers/sse.py +131 -8
  303. solace_agent_mesh/gateway/http_sse/routers/tasks.py +670 -18
  304. solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
  305. solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
  306. solace_agent_mesh/gateway/http_sse/routers/visualization.py +92 -9
  307. solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
  308. solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
  309. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
  310. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
  311. solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
  312. solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
  313. solace_agent_mesh/gateway/http_sse/services/session_service.py +361 -12
  314. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
  315. solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
  316. solace_agent_mesh/gateway/http_sse/sse_manager.py +286 -166
  317. solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
  318. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
  319. solace_agent_mesh/services/__init__.py +0 -0
  320. solace_agent_mesh/services/platform/__init__.py +29 -0
  321. solace_agent_mesh/services/platform/alembic/env.py +85 -0
  322. solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
  323. solace_agent_mesh/services/platform/alembic.ini +109 -0
  324. solace_agent_mesh/services/platform/api/__init__.py +3 -0
  325. solace_agent_mesh/services/platform/api/dependencies.py +154 -0
  326. solace_agent_mesh/services/platform/api/main.py +314 -0
  327. solace_agent_mesh/services/platform/api/middleware.py +51 -0
  328. solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
  329. solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
  330. solace_agent_mesh/services/platform/app.py +215 -0
  331. solace_agent_mesh/services/platform/component.py +777 -0
  332. solace_agent_mesh/shared/__init__.py +14 -0
  333. solace_agent_mesh/shared/api/__init__.py +42 -0
  334. solace_agent_mesh/shared/auth/__init__.py +26 -0
  335. solace_agent_mesh/shared/auth/dependencies.py +204 -0
  336. solace_agent_mesh/shared/auth/middleware.py +347 -0
  337. solace_agent_mesh/shared/database/__init__.py +20 -0
  338. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
  339. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
  340. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
  341. solace_agent_mesh/shared/exceptions/__init__.py +36 -0
  342. solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +19 -5
  343. solace_agent_mesh/shared/utils/__init__.py +21 -0
  344. solace_agent_mesh/templates/logging_config_template.yaml +48 -0
  345. solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
  346. solace_agent_mesh/templates/platform.yaml +49 -0
  347. solace_agent_mesh/templates/plugin_readme_template.md +3 -25
  348. solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
  349. solace_agent_mesh/templates/proxy_template.yaml +62 -0
  350. solace_agent_mesh/templates/webui.yaml +148 -6
  351. solace_agent_mesh/tools/web_search/__init__.py +18 -0
  352. solace_agent_mesh/tools/web_search/base.py +84 -0
  353. solace_agent_mesh/tools/web_search/google_search.py +247 -0
  354. solace_agent_mesh/tools/web_search/models.py +99 -0
  355. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +31 -12
  356. solace_agent_mesh-1.13.2.dist-info/RECORD +591 -0
  357. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
  358. solace_agent_mesh/agent/adk/adk_llm.txt +0 -232
  359. solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
  360. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
  361. solace_agent_mesh/agent/adk/models/models_llm.txt +0 -142
  362. solace_agent_mesh/agent/agent_llm.txt +0 -378
  363. solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
  364. solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
  365. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
  366. solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
  367. solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
  368. solace_agent_mesh/agent/testing/testing_llm.txt +0 -57
  369. solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
  370. solace_agent_mesh/agent/tools/tools_llm.txt +0 -263
  371. solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -274
  372. solace_agent_mesh/agent/utils/utils_llm.txt +0 -138
  373. solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
  374. solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
  375. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
  376. solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
  377. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
  378. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
  379. solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +0 -1
  380. solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
  381. solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
  382. solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
  383. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
  384. solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
  385. solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
  386. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
  387. solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
  388. solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
  389. solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +0 -1
  390. solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
  391. solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
  392. solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
  393. solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +0 -1
  394. solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
  395. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
  396. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +0 -1
  397. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
  398. solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
  399. solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
  400. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
  401. solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
  402. solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
  403. solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +0 -1
  404. solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
  405. solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
  406. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
  407. solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
  408. solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
  409. solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
  410. solace_agent_mesh/assets/docs/search-doc-1761248203150.json +0 -1
  411. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
  412. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
  413. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
  414. solace_agent_mesh/client/webui/frontend/static/assets/client-CaY59VuC.js +0 -25
  415. solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
  416. solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
  417. solace_agent_mesh/client/webui/frontend/static/assets/vendor-BEmvJSYz.js +0 -405
  418. solace_agent_mesh/common/a2a/a2a_llm.txt +0 -182
  419. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
  420. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -407
  421. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
  422. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -313
  423. solace_agent_mesh/common/common_llm.txt +0 -251
  424. solace_agent_mesh/common/common_llm_detail.txt +0 -2562
  425. solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
  426. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
  427. solace_agent_mesh/common/sac/sac_llm.txt +0 -71
  428. solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
  429. solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
  430. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
  431. solace_agent_mesh/common/services/providers/providers_llm.txt +0 -80
  432. solace_agent_mesh/common/services/services_llm.txt +0 -363
  433. solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
  434. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
  435. solace_agent_mesh/common/utils/utils_llm.txt +0 -336
  436. solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
  437. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
  438. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
  439. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
  440. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
  441. solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
  442. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
  443. solace_agent_mesh/gateway/base/base_llm.txt +0 -224
  444. solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
  445. solace_agent_mesh/gateway/gateway_llm.txt +0 -373
  446. solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
  447. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -295
  448. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -155
  449. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
  450. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
  451. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
  452. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -263
  453. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -266
  454. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -340
  455. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -346
  456. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -83
  457. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -107
  458. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -314
  459. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -297
  460. solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
  461. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -285
  462. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
  463. solace_agent_mesh/llm.txt +0 -228
  464. solace_agent_mesh/llm_detail.txt +0 -2835
  465. solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
  466. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
  467. solace_agent_mesh/templates/logging_config_template.ini +0 -45
  468. solace_agent_mesh/templates/templates_llm.txt +0 -147
  469. solace_agent_mesh-1.6.1.dist-info/RECORD +0 -525
  470. /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
  471. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
  472. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
  473. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
  474. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
  475. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
  476. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
  477. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
  478. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
  479. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
  480. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
  481. {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,3 +1,4 @@
1
+ import logging
1
2
  import os
2
3
  import sys
3
4
  from pathlib import Path
@@ -7,6 +8,7 @@ from dotenv import find_dotenv, load_dotenv
7
8
 
8
9
  from cli.utils import error_exit
9
10
  from solace_agent_mesh.common.utils.initializer import initialize
11
+ from solace_ai_connector.common.logging_config import configure_from_file
10
12
 
11
13
 
12
14
  def _execute_with_solace_ai_connector(config_file_paths: list[str]):
@@ -62,12 +64,28 @@ def run(files: tuple[str, ...], skip_files: tuple[str, ...], system_env: bool):
62
64
  This command accepts paths to individual YAML files (`.yaml`, `.yml`) or directories.
63
65
  When a directory is provided, it is recursively searched for YAML files.
64
66
  """
65
- click.echo(click.style("Starting Solace Application Run...", bold=True, fg="blue"))
67
+ # Set up initial logging to root logger (will be overwritten by LOGGING_CONFIG_PATH if provided)
68
+ log = None
69
+ reset_logging = True
70
+
71
+ def _setup_backup_logger():
72
+ nonlocal log
73
+ if not log:
74
+ log = logging.getLogger()
75
+ handler = logging.StreamHandler(sys.stdout)
76
+ formatter = logging.Formatter(
77
+ "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
78
+ )
79
+ handler.setFormatter(formatter)
80
+ log.addHandler(handler)
81
+ log.setLevel(logging.INFO)
82
+ return log
83
+
84
+ env_path = ""
66
85
 
67
86
  if not system_env:
68
87
  env_path = find_dotenv(usecwd=True)
69
88
  if env_path:
70
- click.echo(f"Loading environment variables from: {env_path}")
71
89
  load_dotenv(dotenv_path=env_path, override=True)
72
90
 
73
91
  # Resolve LOGGING_CONFIG_PATH to absolute path if it's relative
@@ -76,22 +94,24 @@ def run(files: tuple[str, ...], skip_files: tuple[str, ...], system_env: bool):
76
94
  absolute_logging_path = os.path.abspath(logging_config_path)
77
95
  os.environ["LOGGING_CONFIG_PATH"] = absolute_logging_path
78
96
 
79
- # Reconfigure logging now that environment variables are loaded
80
- try:
81
- from solace_ai_connector.common.log import reconfigure_logging
82
- if reconfigure_logging():
83
- click.echo("Logging reconfigured from LOGGING_CONFIG_PATH")
84
- except ImportError:
85
- pass # solace_ai_connector might not be available yet
97
+ try:
98
+ if configure_from_file():
99
+ log = logging.getLogger(__name__)
100
+ log.info("Logging reconfigured from LOGGING_CONFIG_PATH")
101
+ reset_logging = False
86
102
  else:
87
- click.echo(
88
- click.style(
89
- "Warning: .env file not found in the current directory or parent directories. Proceeding without loading .env.",
90
- fg="yellow",
91
- )
92
- )
103
+ log = _setup_backup_logger()
104
+ except ImportError:
105
+ log = _setup_backup_logger() # solace_ai_connector might not be available yet
106
+ log.warning("Using backup logger; solace_ai_connector not available.")
107
+
108
+ if system_env:
109
+ log.warning("Skipping .env file loading due to --system-env flag.")
93
110
  else:
94
- click.echo("Skipping .env file loading due to --system-env flag.")
111
+ if not env_path:
112
+ log.warning("Warning: .env file not found in the current directory or parent directories. Proceeding without loading .env.")
113
+ else:
114
+ log.info("Loaded environment variables from: %s", env_path)
95
115
 
96
116
  # Run enterprise initialization if present
97
117
  initialize()
@@ -101,16 +121,13 @@ def run(files: tuple[str, ...], skip_files: tuple[str, ...], system_env: bool):
101
121
  configs_dir = project_root / "configs"
102
122
 
103
123
  if not files:
104
- click.echo(
105
- f"No specific files provided. Discovering YAML files in {configs_dir}..."
124
+ log.info(
125
+ "No specific files provided. Discovering YAML files in %s...", configs_dir
106
126
  )
107
127
  if not configs_dir.is_dir():
108
- click.echo(
109
- click.style(
110
- f"Error: Configuration directory '{configs_dir}' not found. Please run 'init' first or provide specific config files.",
111
- fg="red",
112
- ),
113
- err=True,
128
+ log.error(
129
+ "Error: Configuration directory '%s' not found. Please run 'init' first or provide specific config files.",
130
+ configs_dir
114
131
  )
115
132
  sys.exit(1)
116
133
 
@@ -118,8 +135,8 @@ def run(files: tuple[str, ...], skip_files: tuple[str, ...], system_env: bool):
118
135
  if filepath.name.startswith("_") or filepath.name.startswith(
119
136
  "shared_config"
120
137
  ):
121
- click.echo(
122
- f" Skipping discovery: {filepath} (underscore prefix or shared_config)"
138
+ log.info(
139
+ " Skipping discovery: %s (underscore prefix or shared_config)", filepath
123
140
  )
124
141
  continue
125
142
  config_files_to_run.append(str(filepath.resolve()))
@@ -128,27 +145,27 @@ def run(files: tuple[str, ...], skip_files: tuple[str, ...], system_env: bool):
128
145
  if filepath.name.startswith("_") or filepath.name.startswith(
129
146
  "shared_config"
130
147
  ):
131
- click.echo(
132
- f" Skipping discovery: {filepath} (underscore prefix or shared_config)"
148
+ log.info(
149
+ " Skipping discovery: %s (underscore prefix or shared_config)", filepath
133
150
  )
134
151
  continue
135
152
  if str(filepath.resolve()) not in config_files_to_run:
136
153
  config_files_to_run.append(str(filepath.resolve()))
137
154
 
138
155
  else:
139
- click.echo("Processing provided configuration files and directories:")
156
+ log.info("Processing provided configuration files and directories:")
140
157
  processed_files = set()
141
158
  for path_str in files:
142
159
  path = Path(path_str)
143
160
  if path.is_dir():
144
- click.echo(f" Discovering YAML files in directory: {path}")
161
+ log.info(" Discovering YAML files in directory: %s", path)
145
162
  for yaml_ext in ("*.yaml", "*.yml"):
146
163
  for filepath in path.rglob(yaml_ext):
147
164
  if filepath.name.startswith("_") or filepath.name.startswith(
148
165
  "shared_config"
149
166
  ):
150
- click.echo(
151
- f" Skipping discovery: {filepath} (underscore prefix or shared_config)"
167
+ log.info(
168
+ " Skipping discovery: %s (underscore prefix or shared_config)", filepath
152
169
  )
153
170
  continue
154
171
  processed_files.add(str(filepath.resolve()))
@@ -156,45 +173,43 @@ def run(files: tuple[str, ...], skip_files: tuple[str, ...], system_env: bool):
156
173
  if path.suffix in [".yaml", ".yml"]:
157
174
  processed_files.add(str(path.resolve()))
158
175
  else:
159
- click.echo(
160
- click.style(f" Ignoring non-YAML file: {path}", fg="yellow")
176
+ log.warning(
177
+ " Ignoring non-YAML file: %s", path
161
178
  )
162
179
  config_files_to_run = sorted(list(processed_files))
163
180
 
164
181
  if skip_files:
165
- click.echo(f"Applying --skip for: {skip_files}")
182
+ log.info("Applying --skip for: %s", skip_files)
166
183
  final_list = []
167
184
  skipped_basenames = [os.path.basename(s) for s in skip_files]
168
185
  for cf in config_files_to_run:
169
186
  if os.path.basename(cf) in skipped_basenames:
170
- click.echo(
171
- f" Skipping execution: {cf} (due to --skip)"
187
+ log.info(
188
+ " Skipping execution: %s (due to --skip)", cf
172
189
  )
173
190
  continue
174
191
  final_list.append(cf)
175
192
  config_files_to_run = final_list
176
193
 
177
194
  if not config_files_to_run:
178
- click.echo(
179
- click.style(
180
- "No configuration files to run after filtering. Exiting.", fg="yellow"
181
- )
195
+ log.warning(
196
+ "No configuration files to run after filtering. Exiting."
182
197
  )
183
198
  return 0
184
199
 
185
- click.echo(click.style("Final list of configuration files to run:", bold=True))
186
- for cf_path_str in config_files_to_run:
187
- click.echo(f" - {cf_path_str}")
200
+ file_list = "\n".join(f" - {cf}" for cf in config_files_to_run)
201
+ log.info("Final list of configuration files to run:\n%s", file_list)
188
202
 
203
+ if reset_logging:
204
+ for handler in log.handlers[:]:
205
+ log.removeHandler(handler)
189
206
  return_code = _execute_with_solace_ai_connector(config_files_to_run)
190
207
 
191
208
  if return_code == 0:
192
- click.echo(click.style("Application run completed successfully.", fg="green"))
209
+ log.info("Application run completed successfully.")
193
210
  else:
194
- click.echo(
195
- click.style(
196
- f"Application run failed or exited with code {return_code}.", fg="red"
197
- )
211
+ log.error(
212
+ "Application run failed or exited with code %s.", return_code
198
213
  )
199
214
 
200
215
  sys.exit(return_code)
@@ -0,0 +1,315 @@
1
+ import click
2
+ import json
3
+ from typing import Optional, List, Dict, Any
4
+ from collections import defaultdict
5
+
6
+ # Import to trigger tool registration
7
+ import solace_agent_mesh.agent.tools # noqa: F401
8
+ from solace_agent_mesh.agent.tools.registry import tool_registry
9
+ from cli.utils import error_exit
10
+
11
+
12
+ def format_parameter_schema(schema) -> str:
13
+ """
14
+ Format the parameter schema into a readable string.
15
+
16
+ Args:
17
+ schema: A google.genai.types.Schema object
18
+
19
+ Returns:
20
+ Formatted string representation of parameters
21
+ """
22
+ if not schema or not hasattr(schema, 'properties') or not schema.properties:
23
+ return " No parameters"
24
+
25
+ lines = []
26
+ required = schema.required if hasattr(schema, 'required') else []
27
+
28
+ for prop_name, prop_schema in schema.properties.items():
29
+ is_required = prop_name in required
30
+ req_str = "required" if is_required else "optional"
31
+ type_str = getattr(prop_schema, 'type', 'unknown')
32
+ desc = getattr(prop_schema, 'description', '')
33
+ lines.append(f" - {prop_name} ({type_str}, {req_str}): {desc}")
34
+
35
+ return "\n".join(lines)
36
+
37
+
38
+ def format_tool_table_brief(tools: List) -> None:
39
+ """
40
+ Format tools as a brief list and echo to console.
41
+
42
+ Groups tools by category and displays only names and descriptions.
43
+
44
+ Args:
45
+ tools: List of BuiltinTool objects
46
+ """
47
+ if not tools:
48
+ click.echo("No tools found.")
49
+ return
50
+
51
+ # Group tools by category
52
+ tools_by_category = defaultdict(list)
53
+ for tool in tools:
54
+ tools_by_category[tool.category].append(tool)
55
+
56
+ # Sort categories alphabetically
57
+ sorted_categories = sorted(tools_by_category.keys())
58
+
59
+ total_tools = len(tools)
60
+
61
+ for category in sorted_categories:
62
+ category_tools = sorted(tools_by_category[category], key=lambda t: t.name)
63
+
64
+ # Get category metadata from first tool in category
65
+ first_tool = category_tools[0]
66
+ category_name = first_tool.category_name or category
67
+
68
+ # Display category header
69
+ click.echo()
70
+ click.echo(click.style(f"═══ {category_name} ═══", bold=True, fg='cyan'))
71
+ click.echo()
72
+
73
+ # Display tools in category (brief format)
74
+ for tool in category_tools:
75
+ click.echo(f" • {click.style(tool.name, bold=True, fg='green')}")
76
+ # Wrap description at 70 characters
77
+ desc_words = tool.description.split()
78
+ lines = []
79
+ current_line = " "
80
+ for word in desc_words:
81
+ if len(current_line) + len(word) + 1 <= 74:
82
+ current_line += (" " if len(current_line) > 4 else "") + word
83
+ else:
84
+ lines.append(current_line)
85
+ current_line = " " + word
86
+ if current_line.strip():
87
+ lines.append(current_line)
88
+ for line in lines:
89
+ click.echo(line)
90
+ click.echo()
91
+
92
+ # Display summary
93
+ click.echo(click.style(f"Total: {total_tools} tool{'s' if total_tools != 1 else ''}", bold=True, fg='blue'))
94
+
95
+
96
+ def format_tool_table(tools: List) -> None:
97
+ """
98
+ Format tools as a detailed table and echo to console.
99
+
100
+ Groups tools by category and displays detailed information for each tool.
101
+
102
+ Args:
103
+ tools: List of BuiltinTool objects
104
+ """
105
+ if not tools:
106
+ click.echo("No tools found.")
107
+ return
108
+
109
+ # Group tools by category
110
+ tools_by_category = defaultdict(list)
111
+ for tool in tools:
112
+ tools_by_category[tool.category].append(tool)
113
+
114
+ # Sort categories alphabetically
115
+ sorted_categories = sorted(tools_by_category.keys())
116
+
117
+ total_tools = len(tools)
118
+
119
+ for category in sorted_categories:
120
+ category_tools = sorted(tools_by_category[category], key=lambda t: t.name)
121
+
122
+ # Get category metadata from first tool in category
123
+ first_tool = category_tools[0]
124
+ category_name = first_tool.category_name or category
125
+ category_desc = first_tool.category_description or ""
126
+
127
+ # Display category header
128
+ header_width = 60
129
+ click.echo()
130
+ click.echo("╭" + "─" * (header_width - 2) + "╮")
131
+ click.echo("│ " + click.style(category_name, bold=True, fg='cyan') +
132
+ " " * (header_width - len(category_name) - 3) + "│")
133
+ if category_desc:
134
+ # Wrap description if needed
135
+ desc_lines = []
136
+ current_line = ""
137
+ for word in category_desc.split():
138
+ if len(current_line) + len(word) + 1 <= header_width - 4:
139
+ current_line += (" " if current_line else "") + word
140
+ else:
141
+ desc_lines.append(current_line)
142
+ current_line = word
143
+ if current_line:
144
+ desc_lines.append(current_line)
145
+
146
+ for desc_line in desc_lines:
147
+ click.echo("│ " + desc_line + " " * (header_width - len(desc_line) - 3) + "│")
148
+ click.echo("╰" + "─" * (header_width - 2) + "╯")
149
+ click.echo()
150
+
151
+ # Display tools in category
152
+ for tool in category_tools:
153
+ click.echo(click.style(f"Tool: {tool.name}", bold=True, fg='green'))
154
+ click.echo(f"Description: {tool.description}")
155
+
156
+ # Format and display parameters
157
+ click.echo("Parameters:")
158
+ params_str = format_parameter_schema(tool.parameters)
159
+ click.echo(params_str)
160
+
161
+ # Display required scopes
162
+ if tool.required_scopes:
163
+ scopes_str = ", ".join(tool.required_scopes)
164
+ click.echo(f"Required Scopes: {click.style(scopes_str, fg='yellow')}")
165
+ else:
166
+ click.echo("Required Scopes: None")
167
+
168
+ click.echo() # Blank line between tools
169
+
170
+ # Display summary
171
+ click.echo(click.style(f"Total: {total_tools} tool{'s' if total_tools != 1 else ''}",
172
+ bold=True, fg='blue'))
173
+
174
+
175
+ def tools_to_json(tools: List, detailed: bool = False) -> str:
176
+ """
177
+ Convert tools list to JSON format.
178
+
179
+ Args:
180
+ tools: List of BuiltinTool objects
181
+ detailed: If True, include parameters and all metadata. If False, only name and description.
182
+
183
+ Returns:
184
+ JSON string representation of tools
185
+ """
186
+ result = []
187
+
188
+ for tool in tools:
189
+ if detailed:
190
+ # Convert Schema to dict if possible
191
+ try:
192
+ if hasattr(tool.parameters, 'model_dump'):
193
+ params_dict = tool.parameters.model_dump()
194
+ elif hasattr(tool.parameters, 'to_dict'):
195
+ params_dict = tool.parameters.to_dict()
196
+ else:
197
+ # Fallback: manually construct dict from Schema
198
+ params_dict = {
199
+ "type": getattr(tool.parameters, 'type', None),
200
+ "properties": {},
201
+ "required": getattr(tool.parameters, 'required', [])
202
+ }
203
+ if hasattr(tool.parameters, 'properties') and tool.parameters.properties:
204
+ for prop_name, prop_schema in tool.parameters.properties.items():
205
+ params_dict["properties"][prop_name] = {
206
+ "type": getattr(prop_schema, 'type', None),
207
+ "description": getattr(prop_schema, 'description', '')
208
+ }
209
+ except Exception:
210
+ params_dict = {"error": "Could not serialize parameters"}
211
+
212
+ tool_dict = {
213
+ "name": tool.name,
214
+ "description": tool.description,
215
+ "category": tool.category,
216
+ "category_name": tool.category_name,
217
+ "category_description": tool.category_description,
218
+ "required_scopes": tool.required_scopes,
219
+ "parameters": params_dict,
220
+ "examples": tool.examples,
221
+ "raw_string_args": tool.raw_string_args
222
+ }
223
+ else:
224
+ # Brief format: only name and description
225
+ tool_dict = {
226
+ "name": tool.name,
227
+ "description": tool.description,
228
+ "category": tool.category,
229
+ "category_name": tool.category_name
230
+ }
231
+
232
+ result.append(tool_dict)
233
+
234
+ return json.dumps(result, indent=2)
235
+
236
+
237
+ @click.group("tools")
238
+ def tools():
239
+ """Manage and explore SAM built-in tools."""
240
+ pass
241
+
242
+
243
+ @tools.command("list")
244
+ @click.option(
245
+ "--category", "-c",
246
+ type=str,
247
+ default=None,
248
+ help="Filter tools by category (e.g., 'artifact_management', 'data_analysis')"
249
+ )
250
+ @click.option(
251
+ "--detailed", "-d",
252
+ is_flag=True,
253
+ help="Show detailed information including parameters and required scopes"
254
+ )
255
+ @click.option(
256
+ "--json", "output_json",
257
+ is_flag=True,
258
+ help="Output in JSON format instead of pretty table"
259
+ )
260
+ def list_tools(category: Optional[str], detailed: bool, output_json: bool):
261
+ """
262
+ List all built-in tools available in Solace Agent Mesh.
263
+
264
+ By default, shows brief information with tool names and descriptions.
265
+ Use --detailed flag to see parameters and required scopes.
266
+
267
+ Examples:
268
+
269
+ # List all tools (brief)
270
+ sam tools list
271
+
272
+ # List with full details
273
+ sam tools list --detailed
274
+
275
+ # Filter by category
276
+ sam tools list --category artifact_management
277
+
278
+ # Detailed view with category filter
279
+ sam tools list -c web --detailed
280
+
281
+ # Output as JSON
282
+ sam tools list --json
283
+
284
+ # Filter and output as JSON
285
+ sam tools list -c web --json
286
+ """
287
+ # Fetch tools from registry
288
+ if category:
289
+ tools_list = tool_registry.get_tools_by_category(category)
290
+ if not tools_list:
291
+ # Get all categories to show valid options
292
+ all_tools = tool_registry.get_all_tools()
293
+ if not all_tools:
294
+ error_exit("No tools are registered in the tool registry.")
295
+
296
+ categories = sorted(set(t.category for t in all_tools))
297
+ error_exit(
298
+ f"No tools found for category '{category}'.\n"
299
+ f"Valid categories: {', '.join(categories)}"
300
+ )
301
+ else:
302
+ tools_list = tool_registry.get_all_tools()
303
+ if not tools_list:
304
+ error_exit("No tools are registered in the tool registry.")
305
+
306
+ # Output based on format preference
307
+ if output_json:
308
+ json_output = tools_to_json(tools_list, detailed=detailed)
309
+ click.echo(json_output)
310
+ else:
311
+ # Use detailed format only if --detailed flag is provided
312
+ if detailed:
313
+ format_tool_table(tools_list)
314
+ else:
315
+ format_tool_table_brief(tools_list)
@@ -1,6 +1,12 @@
1
1
  import click
2
2
  import os
3
3
  import sys
4
+ import warnings
5
+
6
+ _suppress_warnings = "--suppress-warnings" in sys.argv
7
+ if _suppress_warnings:
8
+ warnings.simplefilter("ignore")
9
+ sys.argv.remove("--suppress-warnings")
4
10
 
5
11
  SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
6
12
  sys.path.append(os.path.dirname(SCRIPT_DIR))
@@ -12,12 +18,20 @@ from cli.commands.add_cmd import add
12
18
  from cli.commands.plugin_cmd import plugin
13
19
  from cli.commands.eval_cmd import eval_cmd
14
20
  from cli.commands.docs_cmd import docs
21
+ from cli.commands.tools_cmd import tools
15
22
 
16
23
 
17
24
  @click.group(context_settings=dict(help_option_names=['-h', '--help']))
18
25
  @click.version_option(
19
26
  __version__, "-v", "--version", help="Show the CLI version and exit."
20
27
  )
28
+ @click.option(
29
+ '--suppress-warnings',
30
+ is_flag=True,
31
+ expose_value=False,
32
+ is_eager=True,
33
+ help="Suppress warnings emitted by Python's warnings module."
34
+ )
21
35
  def cli():
22
36
  """Solace CLI Application"""
23
37
  pass
@@ -29,6 +43,7 @@ cli.add_command(add)
29
43
  cli.add_command(plugin)
30
44
  cli.add_command(eval_cmd)
31
45
  cli.add_command(docs)
46
+ cli.add_command(tools)
32
47
 
33
48
 
34
49
  def main():
@@ -1 +1 @@
1
- import{c as n}from"./client-CaY59VuC.js";import{r as a,j as s}from"./vendor-BEmvJSYz.js";function c(){return a.useEffect(()=>{const r=window.location.hash.substring(1),e=new URLSearchParams(r),o=e.get("access_token"),t=e.get("refresh_token");o?(localStorage.setItem("access_token",o),t&&localStorage.setItem("refresh_token",t),window.location.href="/"):console.error("AuthCallback: No access token found in URL hash.")},[]),s.jsx("div",{children:"Loading..."})}n.createRoot(document.getElementById("root")).render(s.jsx(c,{}));
1
+ import{c as n}from"./client-DpBL2stg.js";import{r as a,j as s}from"./vendor-CGk8Suyh.js";function c(){return a.useEffect(()=>{const r=window.location.hash.substring(1),e=new URLSearchParams(r),o=e.get("access_token"),t=e.get("refresh_token");o?(localStorage.setItem("access_token",o),t&&localStorage.setItem("refresh_token",t),window.location.href="/"):console.error("AuthCallback: No access token found in URL hash.")},[]),s.jsx("div",{children:"Loading..."})}n.createRoot(document.getElementById("root")).render(s.jsx(c,{}));