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
@@ -5,9 +5,9 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/assets/favicon-BLgzUch9.ico" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Solace Agent Mesh</title>
8
- <script type="module" crossorigin src="/assets/authCallback-tcIFZLis.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/vendor-CINwxvwV.js">
10
- <link rel="modulepreload" crossorigin href="/assets/client-CRYdKo2Q.js">
8
+ <script type="module" crossorigin src="/assets/authCallback-KnKMP_vb.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/vendor-CGk8Suyh.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/client-DpBL2stg.js">
11
11
  </head>
12
12
  <body>
13
13
  <div id="root"></div>
@@ -5,10 +5,10 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/assets/favicon-BLgzUch9.ico" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Solace Agent Mesh</title>
8
- <script type="module" crossorigin src="/assets/main-ILja9MCG.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/vendor-CINwxvwV.js">
10
- <link rel="modulepreload" crossorigin href="/assets/client-CRYdKo2Q.js">
11
- <link rel="stylesheet" crossorigin href="/assets/main-CojeY_1w.css">
8
+ <script type="module" crossorigin src="/assets/main-Cd498TV2.js"></script>
9
+ <link rel="modulepreload" crossorigin href="/assets/vendor-CGk8Suyh.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/client-DpBL2stg.js">
11
+ <link rel="stylesheet" crossorigin href="/assets/main-rSf8Vu29.css">
12
12
  </head>
13
13
  <body>
14
14
  <div id="root"></div>
@@ -0,0 +1,336 @@
1
+ /* eslint-disable */
2
+ /* tslint:disable */
3
+
4
+ /**
5
+ * Mock Service Worker.
6
+ * @see https://github.com/mswjs/msw
7
+ * - Please do NOT modify this file.
8
+ */
9
+
10
+ const PACKAGE_VERSION = "2.12.3";
11
+ const INTEGRITY_CHECKSUM = "4db4a41e972cec1b64cc569c66952d82";
12
+ const IS_MOCKED_RESPONSE = Symbol("isMockedResponse");
13
+ const activeClientIds = new Set();
14
+
15
+ addEventListener("install", function () {
16
+ self.skipWaiting();
17
+ });
18
+
19
+ addEventListener("activate", function (event) {
20
+ event.waitUntil(self.clients.claim());
21
+ });
22
+
23
+ addEventListener("message", async function (event) {
24
+ const clientId = Reflect.get(event.source || {}, "id");
25
+
26
+ if (!clientId || !self.clients) {
27
+ return;
28
+ }
29
+
30
+ const client = await self.clients.get(clientId);
31
+
32
+ if (!client) {
33
+ return;
34
+ }
35
+
36
+ const allClients = await self.clients.matchAll({
37
+ type: "window",
38
+ });
39
+
40
+ switch (event.data) {
41
+ case "KEEPALIVE_REQUEST": {
42
+ sendToClient(client, {
43
+ type: "KEEPALIVE_RESPONSE",
44
+ });
45
+ break;
46
+ }
47
+
48
+ case "INTEGRITY_CHECK_REQUEST": {
49
+ sendToClient(client, {
50
+ type: "INTEGRITY_CHECK_RESPONSE",
51
+ payload: {
52
+ packageVersion: PACKAGE_VERSION,
53
+ checksum: INTEGRITY_CHECKSUM,
54
+ },
55
+ });
56
+ break;
57
+ }
58
+
59
+ case "MOCK_ACTIVATE": {
60
+ activeClientIds.add(clientId);
61
+
62
+ sendToClient(client, {
63
+ type: "MOCKING_ENABLED",
64
+ payload: {
65
+ client: {
66
+ id: client.id,
67
+ frameType: client.frameType,
68
+ },
69
+ },
70
+ });
71
+ break;
72
+ }
73
+
74
+ case "CLIENT_CLOSED": {
75
+ activeClientIds.delete(clientId);
76
+
77
+ const remainingClients = allClients.filter(client => {
78
+ return client.id !== clientId;
79
+ });
80
+
81
+ // Unregister itself when there are no more clients
82
+ if (remainingClients.length === 0) {
83
+ self.registration.unregister();
84
+ }
85
+
86
+ break;
87
+ }
88
+ }
89
+ });
90
+
91
+ addEventListener("fetch", function (event) {
92
+ const requestInterceptedAt = Date.now();
93
+
94
+ // Bypass navigation requests.
95
+ if (event.request.mode === "navigate") {
96
+ return;
97
+ }
98
+
99
+ // Opening the DevTools triggers the "only-if-cached" request
100
+ // that cannot be handled by the worker. Bypass such requests.
101
+ if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") {
102
+ return;
103
+ }
104
+
105
+ // Bypass all requests when there are no active clients.
106
+ // Prevents the self-unregistered worked from handling requests
107
+ // after it's been terminated (still remains active until the next reload).
108
+ if (activeClientIds.size === 0) {
109
+ return;
110
+ }
111
+
112
+ const requestId = crypto.randomUUID();
113
+ event.respondWith(handleRequest(event, requestId, requestInterceptedAt));
114
+ });
115
+
116
+ /**
117
+ * @param {FetchEvent} event
118
+ * @param {string} requestId
119
+ * @param {number} requestInterceptedAt
120
+ */
121
+ async function handleRequest(event, requestId, requestInterceptedAt) {
122
+ const client = await resolveMainClient(event);
123
+ const requestCloneForEvents = event.request.clone();
124
+ const response = await getResponse(event, client, requestId, requestInterceptedAt);
125
+
126
+ // Send back the response clone for the "response:*" life-cycle events.
127
+ // Ensure MSW is active and ready to handle the message, otherwise
128
+ // this message will pend indefinitely.
129
+ if (client && activeClientIds.has(client.id)) {
130
+ const serializedRequest = await serializeRequest(requestCloneForEvents);
131
+
132
+ // Clone the response so both the client and the library could consume it.
133
+ const responseClone = response.clone();
134
+
135
+ sendToClient(
136
+ client,
137
+ {
138
+ type: "RESPONSE",
139
+ payload: {
140
+ isMockedResponse: IS_MOCKED_RESPONSE in response,
141
+ request: {
142
+ id: requestId,
143
+ ...serializedRequest,
144
+ },
145
+ response: {
146
+ type: responseClone.type,
147
+ status: responseClone.status,
148
+ statusText: responseClone.statusText,
149
+ headers: Object.fromEntries(responseClone.headers.entries()),
150
+ body: responseClone.body,
151
+ },
152
+ },
153
+ },
154
+ responseClone.body ? [serializedRequest.body, responseClone.body] : []
155
+ );
156
+ }
157
+
158
+ return response;
159
+ }
160
+
161
+ /**
162
+ * Resolve the main client for the given event.
163
+ * Client that issues a request doesn't necessarily equal the client
164
+ * that registered the worker. It's with the latter the worker should
165
+ * communicate with during the response resolving phase.
166
+ * @param {FetchEvent} event
167
+ * @returns {Promise<Client | undefined>}
168
+ */
169
+ async function resolveMainClient(event) {
170
+ const client = await self.clients.get(event.clientId);
171
+
172
+ if (activeClientIds.has(event.clientId)) {
173
+ return client;
174
+ }
175
+
176
+ if (client?.frameType === "top-level") {
177
+ return client;
178
+ }
179
+
180
+ const allClients = await self.clients.matchAll({
181
+ type: "window",
182
+ });
183
+
184
+ return allClients
185
+ .filter(client => {
186
+ // Get only those clients that are currently visible.
187
+ return client.visibilityState === "visible";
188
+ })
189
+ .find(client => {
190
+ // Find the client ID that's recorded in the
191
+ // set of clients that have registered the worker.
192
+ return activeClientIds.has(client.id);
193
+ });
194
+ }
195
+
196
+ /**
197
+ * @param {FetchEvent} event
198
+ * @param {Client | undefined} client
199
+ * @param {string} requestId
200
+ * @param {number} requestInterceptedAt
201
+ * @returns {Promise<Response>}
202
+ */
203
+ async function getResponse(event, client, requestId, requestInterceptedAt) {
204
+ // Clone the request because it might've been already used
205
+ // (i.e. its body has been read and sent to the client).
206
+ const requestClone = event.request.clone();
207
+
208
+ function passthrough() {
209
+ // Cast the request headers to a new Headers instance
210
+ // so the headers can be manipulated with.
211
+ const headers = new Headers(requestClone.headers);
212
+
213
+ // Remove the "accept" header value that marked this request as passthrough.
214
+ // This prevents request alteration and also keeps it compliant with the
215
+ // user-defined CORS policies.
216
+ const acceptHeader = headers.get("accept");
217
+ if (acceptHeader) {
218
+ const values = acceptHeader.split(",").map(value => value.trim());
219
+ const filteredValues = values.filter(value => value !== "msw/passthrough");
220
+
221
+ if (filteredValues.length > 0) {
222
+ headers.set("accept", filteredValues.join(", "));
223
+ } else {
224
+ headers.delete("accept");
225
+ }
226
+ }
227
+
228
+ return fetch(requestClone, { headers });
229
+ }
230
+
231
+ // Bypass mocking when the client is not active.
232
+ if (!client) {
233
+ return passthrough();
234
+ }
235
+
236
+ // Bypass initial page load requests (i.e. static assets).
237
+ // The absence of the immediate/parent client in the map of the active clients
238
+ // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
239
+ // and is not ready to handle requests.
240
+ if (!activeClientIds.has(client.id)) {
241
+ return passthrough();
242
+ }
243
+
244
+ // Notify the client that a request has been intercepted.
245
+ const serializedRequest = await serializeRequest(event.request);
246
+ const clientMessage = await sendToClient(
247
+ client,
248
+ {
249
+ type: "REQUEST",
250
+ payload: {
251
+ id: requestId,
252
+ interceptedAt: requestInterceptedAt,
253
+ ...serializedRequest,
254
+ },
255
+ },
256
+ [serializedRequest.body]
257
+ );
258
+
259
+ switch (clientMessage.type) {
260
+ case "MOCK_RESPONSE": {
261
+ return respondWithMock(clientMessage.data);
262
+ }
263
+
264
+ case "PASSTHROUGH": {
265
+ return passthrough();
266
+ }
267
+ }
268
+
269
+ return passthrough();
270
+ }
271
+
272
+ /**
273
+ * @param {Client} client
274
+ * @param {any} message
275
+ * @param {Array<Transferable>} transferrables
276
+ * @returns {Promise<any>}
277
+ */
278
+ function sendToClient(client, message, transferrables = []) {
279
+ return new Promise((resolve, reject) => {
280
+ const channel = new MessageChannel();
281
+
282
+ channel.port1.onmessage = event => {
283
+ if (event.data && event.data.error) {
284
+ return reject(event.data.error);
285
+ }
286
+
287
+ resolve(event.data);
288
+ };
289
+
290
+ client.postMessage(message, [channel.port2, ...transferrables.filter(Boolean)]);
291
+ });
292
+ }
293
+
294
+ /**
295
+ * @param {Response} response
296
+ * @returns {Response}
297
+ */
298
+ function respondWithMock(response) {
299
+ // Setting response status code to 0 is a no-op.
300
+ // However, when responding with a "Response.error()", the produced Response
301
+ // instance will have status code set to 0. Since it's not possible to create
302
+ // a Response instance with status code 0, handle that use-case separately.
303
+ if (response.status === 0) {
304
+ return Response.error();
305
+ }
306
+
307
+ const mockedResponse = new Response(response.body, response);
308
+
309
+ Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, {
310
+ value: true,
311
+ enumerable: true,
312
+ });
313
+
314
+ return mockedResponse;
315
+ }
316
+
317
+ /**
318
+ * @param {Request} request
319
+ */
320
+ async function serializeRequest(request) {
321
+ return {
322
+ url: request.url,
323
+ mode: request.mode,
324
+ method: request.method,
325
+ headers: Object.fromEntries(request.headers.entries()),
326
+ cache: request.cache,
327
+ credentials: request.credentials,
328
+ destination: request.destination,
329
+ integrity: request.integrity,
330
+ redirect: request.redirect,
331
+ referrer: request.referrer,
332
+ referrerPolicy: request.referrerPolicy,
333
+ body: await request.arrayBuffer(),
334
+ keepalive: request.keepalive,
335
+ };
336
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "@SolaceLabs/solace-agent-mesh-ui",
3
+ "name": "Solace Agent Mesh UI",
4
+ "description": "Solace Agent Mesh UI components - React library for building agent communication interfaces",
5
+ "version": "1.30.4"
6
+ }
@@ -34,7 +34,7 @@ class ArtifactInfo(BaseModel):
34
34
  schema_definition: Optional[Dict[str, Any]] = Field(default=None, alias="schema")
35
35
  uri: Optional[str] = None
36
36
  version: Optional[Union[int, str]] = None
37
- version_count: int
37
+ version_count: Optional[int] = None
38
38
  source: Optional[str] = None # Optional: Source of the artifact (e.g., "project")
39
39
 
40
40
  model_config = ConfigDict(populate_by_name=True)
@@ -12,17 +12,28 @@ from a2a.types import AgentCard
12
12
 
13
13
  log = logging.getLogger(__name__)
14
14
 
15
+
15
16
  class AgentRegistry:
16
17
  """Stores and manages discovered AgentCards with health tracking."""
17
18
 
18
- def __init__(self):
19
+ def __init__(self, on_agent_added=None, on_agent_removed=None):
19
20
  self._agents: Dict[str, AgentCard] = {}
20
21
  self._last_seen: Dict[str, float] = {} # Timestamp of last agent card received
21
22
  self._lock = threading.Lock()
23
+ self._on_agent_added = on_agent_added
24
+ self._on_agent_removed = on_agent_removed
25
+
26
+ def set_on_agent_added_callback(self, callback):
27
+ """Sets the callback function to be called when a new agent is added."""
28
+ self._on_agent_added = callback
29
+
30
+ def set_on_agent_removed_callback(self, callback):
31
+ """Sets the callback function to be called when an agent is removed."""
32
+ self._on_agent_removed = callback
22
33
 
23
34
  def add_or_update_agent(self, agent_card: AgentCard):
24
35
  """Adds a new agent or updates an existing one."""
25
-
36
+
26
37
  if not agent_card or not agent_card.name:
27
38
  log.warning("Attempted to register agent with invalid agent card or missing name")
28
39
  return False
@@ -30,12 +41,19 @@ class AgentRegistry:
30
41
  with self._lock:
31
42
  is_new = agent_card.name not in self._agents
32
43
  current_time = time.time()
33
-
44
+
34
45
  # Store the agent information
35
46
  self._agents[agent_card.name] = agent_card
36
47
  self._last_seen[agent_card.name] = current_time
37
-
38
- return is_new
48
+
49
+ # Call callback OUTSIDE the lock to avoid deadlock
50
+ if is_new and self._on_agent_added:
51
+ try:
52
+ self._on_agent_added(agent_card)
53
+ except Exception as e:
54
+ log.error(f"Error in agent added callback for {agent_card.name}: {e}", exc_info=True)
55
+
56
+ return is_new
39
57
 
40
58
  def get_agent(self, agent_name: str) -> Optional[AgentCard]:
41
59
  """Retrieves an agent card by name."""
@@ -88,14 +106,14 @@ class AgentRegistry:
88
106
 
89
107
  def remove_agent(self, agent_name: str) -> bool:
90
108
  """Removes an agent from the registry."""
91
-
109
+
92
110
  with self._lock:
93
111
  if agent_name in self._agents:
94
112
  # Get agent details before removal for logging
95
113
  last_seen_time = self._last_seen.get(agent_name)
96
114
  current_time = time.time()
97
115
  time_since_last_seen = int(current_time - last_seen_time) if last_seen_time else "unknown"
98
-
116
+
99
117
  # Log detailed information about the agent being removed
100
118
  log.warning(
101
119
  "AGENT DE-REGISTRATION: Removing agent '%s' from registry. "
@@ -103,17 +121,26 @@ class AgentRegistry:
103
121
  agent_name,
104
122
  time_since_last_seen
105
123
  )
106
-
124
+
107
125
  # Remove the agent from all tracking dictionaries
108
126
  del self._agents[agent_name]
109
127
  if agent_name in self._last_seen:
110
128
  del self._last_seen[agent_name]
111
-
129
+
112
130
  log.info("Agent '%s' successfully removed from registry", agent_name)
113
- return True
131
+ removed = True
114
132
  else:
115
133
  log.debug("Attempted to remove non-existent agent '%s' from registry", agent_name)
116
- return False
134
+ removed = False
135
+
136
+ # Call callback OUTSIDE the lock to avoid deadlock
137
+ if removed and self._on_agent_removed:
138
+ try:
139
+ self._on_agent_removed(agent_name)
140
+ except Exception as e:
141
+ log.error(f"Error in agent removed callback for {agent_name}: {e}", exc_info=True)
142
+
143
+ return removed
117
144
 
118
145
  def clear(self):
119
146
  """Clears all registered agents."""
@@ -92,6 +92,33 @@ class ArtifactCreationProgressData(BaseModel):
92
92
  None,
93
93
  description="The version number of the artifact being created or updated.",
94
94
  )
95
+ function_call_id: Optional[str] = Field(
96
+ None, description="The function call ID if artifact was created by a tool."
97
+ )
98
+
99
+
100
+ class ArtifactSavedData(BaseModel):
101
+ """
102
+ Data model for an artifact saved notification signal.
103
+ This is sent when an artifact has been successfully saved to storage.
104
+ Unlike ArtifactCreationProgressData, this is a single notification event
105
+ and does not follow the start->updates->end protocol.
106
+ """
107
+
108
+ type: Literal["artifact_saved"] = Field(
109
+ "artifact_saved",
110
+ description="The constant type for this data part.",
111
+ )
112
+ filename: str = Field(..., description="The name of the saved artifact.")
113
+ version: int = Field(..., description="The version number of the saved artifact.")
114
+ mime_type: str = Field(..., description="The MIME type of the artifact.")
115
+ size_bytes: int = Field(..., description="The size of the artifact in bytes.")
116
+ description: Optional[str] = Field(
117
+ None, description="An optional description of the artifact."
118
+ )
119
+ function_call_id: Optional[str] = Field(
120
+ None, description="The function call ID if artifact was created by a tool."
121
+ )
95
122
 
96
123
 
97
124
  class ToolResultData(BaseModel):
@@ -114,10 +141,107 @@ class ToolResultData(BaseModel):
114
141
  )
115
142
 
116
143
 
144
+ class TemplateBlockData(BaseModel):
145
+ """
146
+ Data model for a buffered inline template block ready for resolution.
147
+ Corresponds to template_block.json schema.
148
+ """
149
+
150
+ type: Literal["template_block"] = Field(
151
+ "template_block", description="The constant type for this data part."
152
+ )
153
+ template_id: str = Field(
154
+ ..., description="UUID for tracking this specific template instance."
155
+ )
156
+ data_artifact: str = Field(
157
+ ..., description="Data artifact filename or filename:version."
158
+ )
159
+ jsonpath: Optional[str] = Field(
160
+ None, description="Optional JSONPath expression to filter data."
161
+ )
162
+ limit: Optional[int] = Field(
163
+ None, description="Optional limit on number of items/rows to pass to template."
164
+ )
165
+ template_content: str = Field(
166
+ ..., description="The full Liquid template content."
167
+ )
168
+
169
+
170
+ class DeepResearchProgressData(BaseModel):
171
+ """
172
+ Data model for deep research progress updates with structured information.
173
+ Provides detailed progress for UI visualization during iterative research.
174
+ """
175
+
176
+ type: Literal["deep_research_progress"] = Field(
177
+ "deep_research_progress", description="The constant type for this data part."
178
+ )
179
+ phase: str = Field(..., description="Current phase: planning, searching, analyzing, writing")
180
+ status_text: str = Field(..., description="Human-readable status message")
181
+ progress_percentage: int = Field(..., description="Overall progress percentage (0-100)")
182
+ current_iteration: int = Field(..., description="Current iteration number")
183
+ total_iterations: int = Field(..., description="Total planned iterations")
184
+ sources_found: int = Field(..., description="Total sources found so far")
185
+ current_query: str = Field(default="", description="Current search query being executed")
186
+ fetching_urls: list[Dict[str, str]] = Field(
187
+ default_factory=list,
188
+ description="List of sources being analyzed (with title, favicon/icon, and source_type)"
189
+ )
190
+ elapsed_seconds: int = Field(..., description="Elapsed time in seconds")
191
+ max_runtime_seconds: int = Field(default=0, description="Maximum runtime limit (0 = no limit)")
192
+
193
+
194
+ class RAGInfoUpdateData(BaseModel):
195
+ """
196
+ Data model for RAG info panel updates during deep research.
197
+ Sends title and sources to the UI early so the RAG info panel can display them
198
+ while research is still in progress.
199
+ """
200
+
201
+ type: Literal["rag_info_update"] = Field(
202
+ "rag_info_update", description="The constant type for this data part."
203
+ )
204
+ title: str = Field(..., description="Human-readable title for the research (generated by LLM)")
205
+ query: str = Field(..., description="The original research question/query")
206
+ search_type: str = Field(default="deep_research", description="Type of search (deep_research, web_search, etc.)")
207
+ sources: list[Dict[str, Any]] = Field(
208
+ default_factory=list,
209
+ description="List of sources found so far (in camelCase format for frontend)"
210
+ )
211
+ is_complete: bool = Field(default=False, description="Whether the research is complete")
212
+ timestamp: str = Field(..., description="ISO timestamp of this update")
213
+
214
+
215
+ class DeepResearchReportData(BaseModel):
216
+ """
217
+ Data model for a deep research report completion signal.
218
+ This is sent when a deep research report artifact has been created and saved.
219
+ The frontend will use this to render the DeepResearchReportBubble component
220
+ instead of displaying the report content inline.
221
+
222
+ This signal bypasses the LLM response entirely, ensuring the report is displayed
223
+ via the artifact viewer without duplication.
224
+ """
225
+
226
+ type: Literal["deep_research_report"] = Field(
227
+ "deep_research_report", description="The constant type for this data part."
228
+ )
229
+ filename: str = Field(..., description="The filename of the research report artifact.")
230
+ version: int = Field(..., description="The version number of the artifact.")
231
+ uri: str = Field(..., description="The artifact URI for fetching the report content.")
232
+ title: Optional[str] = Field(None, description="Human-readable title for the research.")
233
+ sources_count: int = Field(default=0, description="Number of sources analyzed.")
234
+
235
+
117
236
  SignalData = Union[
118
237
  ToolInvocationStartData,
119
238
  LlmInvocationData,
120
239
  AgentProgressUpdateData,
121
240
  ArtifactCreationProgressData,
241
+ ArtifactSavedData,
122
242
  ToolResultData,
243
+ TemplateBlockData,
244
+ DeepResearchProgressData,
245
+ RAGInfoUpdateData,
246
+ DeepResearchReportData,
123
247
  ]