solace-agent-mesh 1.7.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 (447) 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/artifacts/filesystem_artifact_service.py +164 -0
  7. solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
  8. solace_agent_mesh/agent/adk/callbacks.py +752 -127
  9. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +99 -7
  10. solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
  11. solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
  12. solace_agent_mesh/agent/adk/models/lite_llm.py +34 -16
  13. solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
  14. solace_agent_mesh/agent/adk/runner.py +66 -8
  15. solace_agent_mesh/agent/adk/schema_migration.py +88 -0
  16. solace_agent_mesh/agent/adk/services.py +41 -1
  17. solace_agent_mesh/agent/adk/setup.py +220 -32
  18. solace_agent_mesh/agent/adk/stream_parser.py +229 -40
  19. solace_agent_mesh/agent/protocol/event_handlers.py +219 -33
  20. solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
  21. solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
  22. solace_agent_mesh/agent/proxies/base/component.py +188 -22
  23. solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
  24. solace_agent_mesh/agent/sac/app.py +37 -12
  25. solace_agent_mesh/agent/sac/component.py +322 -52
  26. solace_agent_mesh/agent/sac/patch_adk.py +8 -16
  27. solace_agent_mesh/agent/sac/task_execution_context.py +90 -0
  28. solace_agent_mesh/agent/tools/__init__.py +3 -0
  29. solace_agent_mesh/agent/tools/audio_tools.py +3 -3
  30. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +698 -24
  31. solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
  32. solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
  33. solace_agent_mesh/agent/tools/time_tools.py +126 -0
  34. solace_agent_mesh/agent/tools/tool_config_types.py +54 -2
  35. solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
  36. solace_agent_mesh/agent/tools/web_tools.py +125 -17
  37. solace_agent_mesh/agent/utils/artifact_helpers.py +243 -5
  38. solace_agent_mesh/agent/utils/context_helpers.py +17 -0
  39. solace_agent_mesh/assets/docs/404.html +6 -6
  40. solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
  41. solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
  42. solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
  43. solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
  44. solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
  45. solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
  46. solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
  47. solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
  55. solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
  56. solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
  59. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
  60. solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
  61. solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
  62. solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
  63. solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
  64. solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
  65. solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
  66. solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
  67. solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
  68. solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
  69. solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
  70. solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
  71. solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
  72. solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
  73. solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
  74. solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
  75. solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
  76. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
  77. solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
  78. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
  79. solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
  80. solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
  81. solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
  82. solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
  83. solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
  84. solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
  85. solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
  86. solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
  87. solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
  88. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
  89. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
  90. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
  91. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
  92. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +75 -75
  93. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
  94. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
  95. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
  96. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
  97. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
  98. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
  99. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
  100. solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
  101. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
  102. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +98 -112
  103. solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
  104. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
  105. solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
  106. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -28
  107. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -29
  108. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
  109. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
  110. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
  111. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +67 -53
  112. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -17
  113. solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
  114. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +38 -38
  115. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +87 -87
  116. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
  117. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
  118. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
  119. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
  120. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
  121. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
  122. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
  123. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
  124. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
  125. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
  126. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
  127. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
  128. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
  129. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
  130. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
  131. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +50 -23
  132. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +29 -24
  133. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +21 -21
  134. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
  135. solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
  136. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +96 -66
  137. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +181 -181
  138. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +75 -75
  139. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +27 -27
  140. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
  141. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -38
  142. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
  143. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
  144. solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
  145. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +135 -114
  146. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +37 -37
  147. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
  148. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
  149. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
  150. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
  151. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +112 -112
  152. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +28 -28
  153. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
  154. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
  155. solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
  156. solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
  157. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  158. solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
  159. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  160. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  161. solace_agent_mesh/cli/__init__.py +1 -1
  162. solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
  163. solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
  164. solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
  165. solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
  166. solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
  167. solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
  168. solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
  169. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
  170. solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
  171. solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
  172. solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
  173. solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
  174. solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
  175. solace_agent_mesh/cli/commands/run_cmd.py +64 -49
  176. solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
  177. solace_agent_mesh/cli/main.py +15 -0
  178. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-tcIFZLis.js → authCallback-KnKMP_vb.js} +1 -1
  179. solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
  180. solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
  181. solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
  182. solace_agent_mesh/client/webui/frontend/static/assets/{vendor-CINwxvwV.js → vendor-CGk8Suyh.js} +189 -94
  183. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  184. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  185. solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
  186. solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
  187. solace_agent_mesh/common/a2a/types.py +1 -1
  188. solace_agent_mesh/common/agent_registry.py +38 -11
  189. solace_agent_mesh/common/data_parts.py +124 -0
  190. solace_agent_mesh/common/error_handlers.py +83 -0
  191. solace_agent_mesh/common/exceptions.py +24 -0
  192. solace_agent_mesh/common/oauth/__init__.py +17 -0
  193. solace_agent_mesh/common/oauth/oauth_client.py +408 -0
  194. solace_agent_mesh/common/oauth/utils.py +50 -0
  195. solace_agent_mesh/common/rag_dto.py +156 -0
  196. solace_agent_mesh/common/sac/sam_component_base.py +73 -1
  197. solace_agent_mesh/common/sam_events/event_service.py +2 -2
  198. solace_agent_mesh/common/utils/embeds/converter.py +1 -8
  199. solace_agent_mesh/common/utils/embeds/modifiers.py +2 -27
  200. solace_agent_mesh/common/utils/embeds/resolver.py +94 -25
  201. solace_agent_mesh/common/utils/embeds/types.py +1 -0
  202. solace_agent_mesh/common/utils/log_formatters.py +20 -0
  203. solace_agent_mesh/common/utils/mime_helpers.py +12 -5
  204. solace_agent_mesh/common/utils/rbac_utils.py +69 -0
  205. solace_agent_mesh/common/utils/templates/__init__.py +8 -0
  206. solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
  207. solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
  208. solace_agent_mesh/config_portal/backend/common.py +12 -0
  209. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
  210. solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
  211. solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
  212. solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
  213. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
  214. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
  215. solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
  216. solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
  217. solace_agent_mesh/core_a2a/service.py +3 -2
  218. solace_agent_mesh/gateway/adapter/base.py +28 -1
  219. solace_agent_mesh/gateway/adapter/types.py +9 -0
  220. solace_agent_mesh/gateway/base/app.py +10 -0
  221. solace_agent_mesh/gateway/base/auth_interface.py +103 -0
  222. solace_agent_mesh/gateway/base/component.py +451 -10
  223. solace_agent_mesh/gateway/generic/component.py +274 -30
  224. solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
  225. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +2 -43
  226. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +2 -2
  227. solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
  228. solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
  229. solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
  230. solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
  231. solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
  232. solace_agent_mesh/gateway/http_sse/app.py +23 -6
  233. solace_agent_mesh/gateway/http_sse/component.py +158 -73
  234. solace_agent_mesh/gateway/http_sse/dependencies.py +50 -57
  235. solace_agent_mesh/gateway/http_sse/main.py +58 -482
  236. solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
  237. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +1 -1
  238. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +1 -1
  239. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +3 -2
  240. solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
  241. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +2 -2
  242. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +2 -2
  243. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +5 -0
  244. solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
  245. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +1 -1
  246. solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
  247. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +1 -1
  248. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +1 -1
  249. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +12 -107
  250. solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
  251. solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
  252. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +113 -7
  253. solace_agent_mesh/gateway/http_sse/routers/auth.py +69 -132
  254. solace_agent_mesh/gateway/http_sse/routers/config.py +235 -10
  255. solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
  256. solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
  257. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +1 -1
  258. solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
  259. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +1 -0
  260. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +3 -2
  261. solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
  262. solace_agent_mesh/gateway/http_sse/routers/feedback.py +2 -2
  263. solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
  264. solace_agent_mesh/gateway/http_sse/routers/projects.py +250 -24
  265. solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
  266. solace_agent_mesh/gateway/http_sse/routers/sessions.py +14 -5
  267. solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
  268. solace_agent_mesh/gateway/http_sse/routers/sse.py +117 -4
  269. solace_agent_mesh/gateway/http_sse/routers/tasks.py +509 -149
  270. solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
  271. solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
  272. solace_agent_mesh/gateway/http_sse/routers/visualization.py +2 -1
  273. solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
  274. solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
  275. solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
  276. solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
  277. solace_agent_mesh/gateway/http_sse/services/project_service.py +539 -12
  278. solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
  279. solace_agent_mesh/gateway/http_sse/services/session_service.py +198 -21
  280. solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
  281. solace_agent_mesh/gateway/http_sse/sse_manager.py +280 -169
  282. solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
  283. solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
  284. solace_agent_mesh/services/__init__.py +0 -0
  285. solace_agent_mesh/services/platform/__init__.py +29 -0
  286. solace_agent_mesh/services/platform/alembic/env.py +85 -0
  287. solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
  288. solace_agent_mesh/services/platform/alembic.ini +109 -0
  289. solace_agent_mesh/services/platform/api/__init__.py +3 -0
  290. solace_agent_mesh/services/platform/api/dependencies.py +154 -0
  291. solace_agent_mesh/services/platform/api/main.py +314 -0
  292. solace_agent_mesh/services/platform/api/middleware.py +51 -0
  293. solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
  294. solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
  295. solace_agent_mesh/services/platform/app.py +215 -0
  296. solace_agent_mesh/services/platform/component.py +777 -0
  297. solace_agent_mesh/shared/__init__.py +14 -0
  298. solace_agent_mesh/shared/api/__init__.py +42 -0
  299. solace_agent_mesh/shared/auth/__init__.py +26 -0
  300. solace_agent_mesh/shared/auth/dependencies.py +204 -0
  301. solace_agent_mesh/shared/auth/middleware.py +347 -0
  302. solace_agent_mesh/shared/database/__init__.py +20 -0
  303. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
  304. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
  305. solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
  306. solace_agent_mesh/shared/exceptions/__init__.py +36 -0
  307. solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +1 -1
  308. solace_agent_mesh/shared/utils/__init__.py +21 -0
  309. solace_agent_mesh/templates/logging_config_template.yaml +48 -0
  310. solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
  311. solace_agent_mesh/templates/platform.yaml +49 -0
  312. solace_agent_mesh/templates/plugin_readme_template.md +3 -25
  313. solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
  314. solace_agent_mesh/templates/proxy_template.yaml +62 -0
  315. solace_agent_mesh/templates/webui.yaml +148 -6
  316. solace_agent_mesh/tools/web_search/__init__.py +18 -0
  317. solace_agent_mesh/tools/web_search/base.py +84 -0
  318. solace_agent_mesh/tools/web_search/google_search.py +247 -0
  319. solace_agent_mesh/tools/web_search/models.py +99 -0
  320. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +29 -8
  321. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/RECORD +334 -313
  322. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
  323. solace_agent_mesh/agent/adk/adk_llm.txt +0 -226
  324. solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
  325. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
  326. solace_agent_mesh/agent/adk/models/models_llm.txt +0 -189
  327. solace_agent_mesh/agent/agent_llm.txt +0 -369
  328. solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
  329. solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
  330. solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
  331. solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +0 -190
  332. solace_agent_mesh/agent/proxies/base/base_llm.txt +0 -148
  333. solace_agent_mesh/agent/proxies/proxies_llm.txt +0 -283
  334. solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
  335. solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
  336. solace_agent_mesh/agent/testing/testing_llm.txt +0 -58
  337. solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
  338. solace_agent_mesh/agent/tools/tools_llm.txt +0 -276
  339. solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -275
  340. solace_agent_mesh/agent/utils/utils_llm.txt +0 -152
  341. solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
  342. solace_agent_mesh/assets/docs/assets/js/05749d90.c70b2be9.js +0 -1
  343. solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +0 -1
  344. solace_agent_mesh/assets/docs/assets/js/15e40e79.36003774.js +0 -1
  345. solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
  346. solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.js +0 -1
  347. solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
  348. solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
  349. solace_agent_mesh/assets/docs/assets/js/3ac1795d.e4870a49.js +0 -1
  350. solace_agent_mesh/assets/docs/assets/js/3ff0015d.b63ee53a.js +0 -1
  351. solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +0 -1
  352. solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
  353. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.45b32c2b.js +0 -1
  354. solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +0 -1
  355. solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +0 -1
  356. solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
  357. solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +0 -1
  358. solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
  359. solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
  360. solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
  361. solace_agent_mesh/assets/docs/assets/js/94e8668d.09ed9234.js +0 -1
  362. solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
  363. solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
  364. solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +0 -1
  365. solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
  366. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.f902fad8.js +0 -1
  367. solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +0 -1
  368. solace_agent_mesh/assets/docs/assets/js/e04b235d.c9c50c7b.js +0 -1
  369. solace_agent_mesh/assets/docs/assets/js/e3d9abda.d11c67a7.js +0 -1
  370. solace_agent_mesh/assets/docs/assets/js/e6f9706b.045d0fa1.js +0 -1
  371. solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +0 -1
  372. solace_agent_mesh/assets/docs/assets/js/f284c35a.5099c51e.js +0 -1
  373. solace_agent_mesh/assets/docs/assets/js/main.f213fe0c.js +0 -2
  374. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9606d6a.js +0 -1
  375. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +0 -47
  376. solace_agent_mesh/assets/docs/lunr-index-1762283454666.json +0 -1
  377. solace_agent_mesh/assets/docs/search-doc-1762283454666.json +0 -1
  378. solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
  379. solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
  380. solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
  381. solace_agent_mesh/client/webui/frontend/static/assets/client-CRYdKo2Q.js +0 -25
  382. solace_agent_mesh/client/webui/frontend/static/assets/main-CojeY_1w.css +0 -1
  383. solace_agent_mesh/client/webui/frontend/static/assets/main-ILja9MCG.js +0 -353
  384. solace_agent_mesh/common/a2a/a2a_llm.txt +0 -175
  385. solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
  386. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -445
  387. solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
  388. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -330
  389. solace_agent_mesh/common/common_llm.txt +0 -230
  390. solace_agent_mesh/common/common_llm_detail.txt +0 -2562
  391. solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
  392. solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
  393. solace_agent_mesh/common/sac/sac_llm.txt +0 -71
  394. solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
  395. solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
  396. solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
  397. solace_agent_mesh/common/services/providers/providers_llm.txt +0 -81
  398. solace_agent_mesh/common/services/services_llm.txt +0 -368
  399. solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
  400. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
  401. solace_agent_mesh/common/utils/utils_llm.txt +0 -335
  402. solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
  403. solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
  404. solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
  405. solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
  406. solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
  407. solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
  408. solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
  409. solace_agent_mesh/gateway/base/base_llm.txt +0 -226
  410. solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
  411. solace_agent_mesh/gateway/gateway_llm.txt +0 -369
  412. solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
  413. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -345
  414. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_fulltext_search_indexes.py +0 -92
  415. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -161
  416. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
  417. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
  418. solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
  419. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -221
  420. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -257
  421. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -308
  422. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -450
  423. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -133
  424. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -123
  425. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -312
  426. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -303
  427. solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
  428. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -319
  429. solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
  430. solace_agent_mesh/llm.txt +0 -228
  431. solace_agent_mesh/llm_detail.txt +0 -2835
  432. solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
  433. solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
  434. solace_agent_mesh/templates/logging_config_template.ini +0 -45
  435. solace_agent_mesh/templates/templates_llm.txt +0 -147
  436. /solace_agent_mesh/assets/docs/assets/js/{main.f213fe0c.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
  437. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
  438. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
  439. /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
  440. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
  441. /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
  442. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
  443. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
  444. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
  445. /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
  446. {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
  447. {solace_agent_mesh-1.7.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-CRYdKo2Q.js";import{r as a,j as s}from"./vendor-CINwxvwV.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,{}));