solace-agent-mesh 1.6.3__py3-none-any.whl → 1.7.1__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (244) hide show
  1. solace_agent_mesh/agent/adk/adk_llm.txt +12 -18
  2. solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +1 -1
  3. solace_agent_mesh/agent/adk/callbacks.py +138 -20
  4. solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +2 -0
  5. solace_agent_mesh/agent/adk/models/lite_llm.py +38 -5
  6. solace_agent_mesh/agent/adk/models/models_llm.txt +82 -35
  7. solace_agent_mesh/agent/adk/runner.py +9 -0
  8. solace_agent_mesh/agent/adk/stream_parser.py +6 -1
  9. solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
  10. solace_agent_mesh/agent/agent_llm.txt +61 -70
  11. solace_agent_mesh/agent/protocol/event_handlers.py +29 -1
  12. solace_agent_mesh/agent/protocol/protocol_llm.txt +1 -1
  13. solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
  14. solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
  15. solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
  16. solace_agent_mesh/agent/sac/app.py +22 -0
  17. solace_agent_mesh/agent/sac/component.py +76 -40
  18. solace_agent_mesh/agent/sac/sac_llm.txt +1 -1
  19. solace_agent_mesh/agent/sac/task_execution_context.py +21 -0
  20. solace_agent_mesh/agent/testing/testing_llm.txt +2 -1
  21. solace_agent_mesh/agent/tools/builtin_artifact_tools.py +13 -148
  22. solace_agent_mesh/agent/tools/dynamic_tool.py +2 -0
  23. solace_agent_mesh/agent/tools/tools_llm.txt +93 -80
  24. solace_agent_mesh/agent/tools/tools_llm_detail.txt +3 -2
  25. solace_agent_mesh/agent/utils/artifact_helpers.py +4 -0
  26. solace_agent_mesh/agent/utils/utils_llm.txt +16 -2
  27. solace_agent_mesh/assets/docs/404.html +3 -3
  28. solace_agent_mesh/assets/docs/assets/js/05749d90.c70b2be9.js +1 -0
  29. solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +1 -0
  30. solace_agent_mesh/assets/docs/assets/js/15e40e79.36003774.js +1 -0
  31. solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
  32. solace_agent_mesh/assets/docs/assets/js/3ac1795d.e4870a49.js +1 -0
  33. solace_agent_mesh/assets/docs/assets/js/3ff0015d.b63ee53a.js +1 -0
  34. solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
  35. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.45b32c2b.js +1 -0
  36. solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
  37. solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
  38. solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
  39. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
  40. solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
  41. solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +1 -0
  42. solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
  43. solace_agent_mesh/assets/docs/assets/js/94e8668d.09ed9234.js +1 -0
  44. solace_agent_mesh/assets/docs/assets/js/{ab9708a8.3e6dd091.js → ab9708a8.245ae0ef.js} +1 -1
  45. solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
  46. solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.f902fad8.js +1 -0
  47. solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
  48. solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +1 -0
  49. solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
  50. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
  51. solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
  52. solace_agent_mesh/assets/docs/assets/js/e04b235d.c9c50c7b.js +1 -0
  53. solace_agent_mesh/assets/docs/assets/js/e3d9abda.d11c67a7.js +1 -0
  54. solace_agent_mesh/assets/docs/assets/js/{e6f9706b.e74a984d.js → e6f9706b.045d0fa1.js} +1 -1
  55. solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
  56. solace_agent_mesh/assets/docs/assets/js/f284c35a.5099c51e.js +1 -0
  57. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
  58. solace_agent_mesh/assets/docs/assets/js/main.f213fe0c.js +2 -0
  59. solace_agent_mesh/assets/docs/assets/js/runtime~main.d9606d6a.js +1 -0
  60. solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +4 -4
  61. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +4 -4
  62. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +4 -4
  63. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +4 -4
  64. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +18 -4
  65. solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +4 -4
  66. solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +4 -4
  67. solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +5 -5
  68. solace_agent_mesh/assets/docs/docs/documentation/components/index.html +4 -4
  69. solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +4 -4
  70. solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +4 -4
  71. solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +196 -0
  72. solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +4 -4
  73. solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +5 -5
  74. solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +6 -7
  75. solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
  76. solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +47 -0
  77. solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +4 -4
  78. solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +4 -4
  79. solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +4 -4
  80. solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +160 -169
  81. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +4 -4
  82. solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +4 -4
  83. solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +4 -4
  84. solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +4 -4
  85. solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +4 -4
  86. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +4 -4
  87. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +5 -5
  88. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +4 -4
  89. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +4 -4
  90. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +4 -4
  91. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +4 -4
  92. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +4 -4
  93. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +4 -4
  94. solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +4 -4
  95. solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +59 -0
  96. solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +62 -0
  97. solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +10 -6
  98. solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +4 -4
  99. solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +4 -4
  100. solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
  101. solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +27 -4
  102. solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
  103. solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +4 -4
  104. solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +5 -4
  105. solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
  106. solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +3 -3
  107. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +290 -0
  108. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +9 -9
  109. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +4 -4
  110. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +4 -4
  111. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +4 -4
  112. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +4 -4
  113. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
  114. solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
  115. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
  116. solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +3 -3
  117. solace_agent_mesh/assets/docs/lunr-index-1762283454666.json +1 -0
  118. solace_agent_mesh/assets/docs/lunr-index.json +1 -1
  119. solace_agent_mesh/assets/docs/search-doc-1762283454666.json +1 -0
  120. solace_agent_mesh/assets/docs/search-doc.json +1 -1
  121. solace_agent_mesh/assets/docs/sitemap.xml +1 -1
  122. solace_agent_mesh/cli/__init__.py +1 -1
  123. solace_agent_mesh/cli/commands/docs_cmd.py +4 -1
  124. solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +1 -1
  125. solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-D4_RMYRh.js → authCallback-tcIFZLis.js} +1 -1
  126. solace_agent_mesh/client/webui/frontend/static/assets/{client-UZ3qU6Bq.js → client-CRYdKo2Q.js} +3 -3
  127. solace_agent_mesh/client/webui/frontend/static/assets/main-CojeY_1w.css +1 -0
  128. solace_agent_mesh/client/webui/frontend/static/assets/main-ILja9MCG.js +353 -0
  129. solace_agent_mesh/client/webui/frontend/static/assets/vendor-CINwxvwV.js +470 -0
  130. solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
  131. solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
  132. solace_agent_mesh/common/a2a/a2a_llm.txt +13 -20
  133. solace_agent_mesh/common/a2a/protocol.py +5 -0
  134. solace_agent_mesh/common/a2a/types.py +1 -0
  135. solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +49 -11
  136. solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
  137. solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
  138. solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +26 -9
  139. solace_agent_mesh/common/common_llm.txt +13 -34
  140. solace_agent_mesh/common/data_parts.py +20 -4
  141. solace_agent_mesh/common/middleware/middleware_llm.txt +1 -1
  142. solace_agent_mesh/common/sac/sac_llm.txt +1 -1
  143. solace_agent_mesh/common/sam_events/sam_events_llm.txt +1 -1
  144. solace_agent_mesh/common/services/employee_service.py +1 -1
  145. solace_agent_mesh/common/services/providers/providers_llm.txt +3 -2
  146. solace_agent_mesh/common/services/services_llm.txt +9 -4
  147. solace_agent_mesh/common/utils/embeds/constants.py +1 -0
  148. solace_agent_mesh/common/utils/embeds/embeds_llm.txt +1 -1
  149. solace_agent_mesh/common/utils/embeds/modifiers.py +2 -1
  150. solace_agent_mesh/common/utils/embeds/resolver.py +58 -6
  151. solace_agent_mesh/common/utils/embeds/types.py +8 -0
  152. solace_agent_mesh/common/utils/utils_llm.txt +5 -6
  153. solace_agent_mesh/core_a2a/core_a2a_llm.txt +1 -1
  154. solace_agent_mesh/gateway/adapter/__init__.py +1 -0
  155. solace_agent_mesh/gateway/adapter/base.py +143 -0
  156. solace_agent_mesh/gateway/adapter/types.py +221 -0
  157. solace_agent_mesh/gateway/base/app.py +29 -2
  158. solace_agent_mesh/gateway/base/base_llm.txt +10 -8
  159. solace_agent_mesh/gateway/base/component.py +573 -142
  160. solace_agent_mesh/gateway/gateway_llm.txt +55 -59
  161. solace_agent_mesh/gateway/generic/__init__.py +1 -0
  162. solace_agent_mesh/gateway/generic/app.py +50 -0
  163. solace_agent_mesh/gateway/generic/component.py +650 -0
  164. solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +99 -49
  165. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_fulltext_search_indexes.py +92 -0
  166. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
  167. solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +150 -0
  168. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
  169. solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
  170. solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +26 -20
  171. solace_agent_mesh/gateway/http_sse/app.py +0 -14
  172. solace_agent_mesh/gateway/http_sse/component.py +17 -56
  173. solace_agent_mesh/gateway/http_sse/components/components_llm.txt +1 -1
  174. solace_agent_mesh/gateway/http_sse/dependencies.py +21 -3
  175. solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +8 -8
  176. solace_agent_mesh/gateway/http_sse/main.py +23 -5
  177. solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
  178. solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +56 -98
  179. solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
  180. solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
  181. solace_agent_mesh/gateway/http_sse/repository/entities/session.py +23 -1
  182. solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
  183. solace_agent_mesh/gateway/http_sse/repository/interfaces.py +112 -4
  184. solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +9 -1
  185. solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +51 -60
  186. solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
  187. solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
  188. solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +7 -1
  189. solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
  190. solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
  191. solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +125 -157
  192. solace_agent_mesh/gateway/http_sse/repository/session_repository.py +269 -8
  193. solace_agent_mesh/gateway/http_sse/routers/artifacts.py +143 -51
  194. solace_agent_mesh/gateway/http_sse/routers/config.py +69 -0
  195. solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +198 -94
  196. solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
  197. solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +68 -18
  198. solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +13 -0
  199. solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +30 -0
  200. solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +51 -35
  201. solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +2 -0
  202. solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
  203. solace_agent_mesh/gateway/http_sse/routers/projects.py +542 -0
  204. solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +9 -11
  205. solace_agent_mesh/gateway/http_sse/routers/sessions.py +154 -3
  206. solace_agent_mesh/gateway/http_sse/routers/tasks.py +296 -4
  207. solace_agent_mesh/gateway/http_sse/services/project_service.py +403 -0
  208. solace_agent_mesh/gateway/http_sse/services/services_llm.txt +16 -10
  209. solace_agent_mesh/gateway/http_sse/services/session_service.py +178 -6
  210. solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +2 -3
  211. solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +48 -14
  212. solace_agent_mesh/solace_agent_mesh_llm.txt +1 -1
  213. {solace_agent_mesh-1.6.3.dist-info → solace_agent_mesh-1.7.1.dist-info}/METADATA +3 -5
  214. {solace_agent_mesh-1.6.3.dist-info → solace_agent_mesh-1.7.1.dist-info}/RECORD +218 -175
  215. solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
  216. solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +0 -1
  217. solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
  218. solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
  219. solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
  220. solace_agent_mesh/assets/docs/assets/js/631738c7.7c4594c9.js +0 -1
  221. solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
  222. solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
  223. solace_agent_mesh/assets/docs/assets/js/71da7b71.ddbdfbe2.js +0 -1
  224. solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +0 -1
  225. solace_agent_mesh/assets/docs/assets/js/94e8668d.3b883666.js +0 -1
  226. solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
  227. solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
  228. solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
  229. solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
  230. solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
  231. solace_agent_mesh/assets/docs/assets/js/e92d0134.4f395c6b.js +0 -1
  232. solace_agent_mesh/assets/docs/assets/js/f284c35a.720d2ef2.js +0 -1
  233. solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
  234. solace_agent_mesh/assets/docs/assets/js/main.ed05b14d.js +0 -2
  235. solace_agent_mesh/assets/docs/assets/js/runtime~main.a8a75e0b.js +0 -1
  236. solace_agent_mesh/assets/docs/lunr-index-1761744323675.json +0 -1
  237. solace_agent_mesh/assets/docs/search-doc-1761744323675.json +0 -1
  238. solace_agent_mesh/client/webui/frontend/static/assets/main--3yJYl7S.css +0 -1
  239. solace_agent_mesh/client/webui/frontend/static/assets/main-DojKHS49.js +0 -342
  240. solace_agent_mesh/client/webui/frontend/static/assets/vendor-DSqhjwq_.js +0 -405
  241. /solace_agent_mesh/assets/docs/assets/js/{main.ed05b14d.js.LICENSE.txt → main.f213fe0c.js.LICENSE.txt} +0 -0
  242. {solace_agent_mesh-1.6.3.dist-info → solace_agent_mesh-1.7.1.dist-info}/WHEEL +0 -0
  243. {solace_agent_mesh-1.6.3.dist-info → solace_agent_mesh-1.7.1.dist-info}/entry_points.txt +0 -0
  244. {solace_agent_mesh-1.6.3.dist-info → solace_agent_mesh-1.7.1.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-D4_RMYRh.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/vendor-DSqhjwq_.js">
10
- <link rel="modulepreload" crossorigin href="/assets/client-UZ3qU6Bq.js">
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">
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-DojKHS49.js"></script>
9
- <link rel="modulepreload" crossorigin href="/assets/vendor-DSqhjwq_.js">
10
- <link rel="modulepreload" crossorigin href="/assets/client-UZ3qU6Bq.js">
11
- <link rel="stylesheet" crossorigin href="/assets/main--3yJYl7S.css">
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">
12
12
  </head>
13
13
  <body>
14
14
  <div id="root"></div>
@@ -34,6 +34,8 @@ This file re-exports all public functions from the other modules, allowing devel
34
34
  - `get_artifact_id(artifact: Artifact) -> str` - Safely retrieves the ID from an Artifact
35
35
  - `get_artifact_name(artifact: Artifact) -> Optional[str]` - Safely retrieves the name from an Artifact
36
36
  - `get_parts_from_artifact(artifact: Artifact) -> List[ContentPart]` - Extracts unwrapped content parts from an Artifact
37
+ - `is_text_only_artifact(artifact: Artifact) -> bool` - Checks if an artifact contains only TextParts
38
+ - `get_text_content_from_artifact(artifact: Artifact) -> List[str]` - Extracts all text content from TextParts in an artifact
37
39
 
38
40
  **Usage Examples:**
39
41
  ```python
@@ -61,6 +63,8 @@ artifact_id = get_artifact_id(artifact)
61
63
  - `get_message_from_status_update(event: TaskStatusUpdateEvent) -> Optional[Message]` - Extracts Message from TaskStatusUpdateEvent
62
64
  - `get_data_parts_from_status_update(event: TaskStatusUpdateEvent) -> List[DataPart]` - Extracts DataPart objects from status update
63
65
  - `get_artifact_from_artifact_update(event: TaskArtifactUpdateEvent) -> Optional[Artifact]` - Extracts Artifact from TaskArtifactUpdateEvent
66
+ - `is_task_status_update(obj: Any) -> bool` - Checks if an object is a TaskStatusUpdateEvent
67
+ - `is_task_artifact_update(obj: Any) -> bool` - Checks if an object is a TaskArtifactUpdateEvent
64
68
 
65
69
  **Usage Examples:**
66
70
  ```python
@@ -106,6 +110,11 @@ status_event = create_status_update(
106
110
  - `get_bytes_from_file_part(part: FilePart) -> Optional[bytes]` - Gets decoded bytes from FilePart
107
111
  - `get_filename_from_file_part(part: FilePart) -> Optional[str]` - Gets filename from FilePart
108
112
  - `get_mimetype_from_file_part(part: FilePart) -> Optional[str]` - Gets MIME type from FilePart
113
+ - `is_text_part(part: Part) -> bool` - Checks if a Part contains a TextPart
114
+ - `is_file_part(part: Part) -> bool` - Checks if a Part contains a FilePart
115
+ - `is_data_part(part: Part) -> bool` - Checks if a Part contains a DataPart
116
+ - `is_file_part_bytes(part: FilePart) -> bool` - Checks if a FilePart uses FileWithBytes
117
+ - `is_file_part_uri(part: FilePart) -> bool` - Checks if a FilePart uses FileWithUri
109
118
 
110
119
  **Usage Examples:**
111
120
  ```python
@@ -150,6 +159,8 @@ user_message = create_user_message(
150
159
  - `get_client_response_topic(namespace: str, client_id: str) -> str` - Returns topic for publishing response to client
151
160
  - `get_client_status_topic(namespace: str, client_id: str, task_id: str) -> str` - Returns topic for publishing status to client
152
161
  - `get_client_status_subscription_topic(namespace: str, client_id: str) -> str` - Returns wildcard topic for client to receive status
162
+ - `get_sam_events_topic(namespace: str, category: str, action: str) -> str` - Returns SAM system events topic
163
+ - `get_sam_events_subscription_topic(namespace: str, category: str) -> str` - Returns SAM system events subscription topic
153
164
  - `create_send_message_request(message: Message, task_id: str, metadata: Optional[Dict[str, Any]] = None) -> SendMessageRequest` - Creates SendMessageRequest object
154
165
  - `create_send_streaming_message_request(message: Message, task_id: str, metadata: Optional[Dict[str, Any]] = None) -> SendStreamingMessageRequest` - Creates SendStreamingMessageRequest object
155
166
  - `create_success_response(result: Any, request_id: Optional[Union[str, int]]) -> JSONRPCResponse` - Creates successful JSON-RPC response
@@ -159,24 +170,6 @@ user_message = create_user_message(
159
170
  - `get_request_id(request: A2ARequest) -> str | int` - Gets JSON-RPC request ID
160
171
  - `get_request_method(request: A2ARequest) -> str` - Gets JSON-RPC method name
161
172
  - `get_message_from_send_request(request: A2ARequest) -> Optional[Message]` - Gets Message from send request
162
- - `get_task_id_from_cancel_request(request: A2ARequest) -> Optional[str]` - Gets task ID from cancel request
163
- - `get_response_id(response: JSONRPCResponse) -> Optional[Union[str, int]]` - Gets response ID
164
- - `get_response_result(response: JSONRPCResponse) -> Optional[Any]` - Gets response result
165
- - `get_response_error(response: JSONRPCResponse) -> Optional[JSONRPCError]` - Gets response error
166
- - `topic_matches_subscription(topic: str, subscription: str) -> bool` - Checks if topic matches Solace subscription pattern
167
- - `subscription_to_regex(subscription: str) -> str` - Converts Solace subscription to regex
168
- - `extract_task_id_from_topic(topic: str, subscription_pattern: str, log_identifier: str) -> Optional[str]` - Extracts task ID from topic
173
+ - `
169
174
 
170
- **Usage Examples:**
171
- ```python
172
- from solace_agent_mesh.common.a2a.protocol import get_agent_request_topic, create_send_message_request
173
- from solace_agent_mesh.common.a2a.message import create_agent_text_message
174
-
175
- # Get topic for sending request to an agent
176
- topic = get_agent_request_topic("my-namespace", "my-agent")
177
-
178
- # Create a send message request
179
- message = create_agent_text_message("Hello agent!")
180
- request = create_sen
181
-
182
- # content_hash: 9b1778648fd65100e79527a9b08867fe94c18b13a52bbe33d86f2e4a6cd62269
175
+ # content_hash: 71c64edf65fe99d8d5cc67d5522436b870fc5b1ead118fc5ef38689b6f26689e
@@ -188,6 +188,11 @@ def get_sam_events_topic(namespace: str, category: str, action: str) -> str:
188
188
  return f"{namespace.rstrip('/')}/sam/events/{category}/{action}"
189
189
 
190
190
 
191
+ def get_feedback_topic(namespace: str) -> str:
192
+ """Returns the topic for publishing user feedback events."""
193
+ return f"{namespace.rstrip('/')}/sam/v1/feedback/submit"
194
+
195
+
191
196
  def get_sam_events_subscription_topic(namespace: str, category: str) -> str:
192
197
  """Returns SAM system events subscription topic."""
193
198
  if not namespace:
@@ -35,6 +35,7 @@ class ArtifactInfo(BaseModel):
35
35
  uri: Optional[str] = None
36
36
  version: Optional[Union[int, str]] = None
37
37
  version_count: int
38
+ source: Optional[str] = None # Optional: Source of the artifact (e.g., "project")
38
39
 
39
40
  model_config = ConfigDict(populate_by_name=True)
40
41
 
@@ -7,6 +7,7 @@ The `a2a_spec` directory contains the complete Agent-to-Agent (A2A) communicatio
7
7
  - **Direct files:**
8
8
  - `a2a.json` - Complete JSON Schema specification for A2A protocol including all data types, requests, responses, and error definitions
9
9
  - `a2a_spec_llm.txt` - Developer guide documentation for the A2A specification
10
+ - `a2a_spec_llm_detail.txt` - Concatenated detailed documentation from all subdirectories
10
11
  - **Subdirectories:**
11
12
  - `schemas/` - JSON Schema definitions for agent communication signals (progress updates, tool invocations, LLM calls, artifact creation)
12
13
 
@@ -62,6 +63,10 @@ Task {
62
63
  **Purpose:** Developer documentation and usage guide for the A2A specification
63
64
  **Import:** Documentation file for reference
64
65
 
66
+ #### a2a_spec_llm_detail.txt
67
+ **Purpose:** Comprehensive documentation combining all subdirectory guides
68
+ **Import:** Documentation file for reference
69
+
65
70
  ### Subdirectory APIs
66
71
 
67
72
  #### schemas/
@@ -79,10 +84,10 @@ with open('solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json'
79
84
 
80
85
  **Available Schemas:**
81
86
  - `agent_progress_update.json` - General progress status messages
82
- - `artifact_creation_progress.json` - File/artifact creation tracking with chunked data
83
- - `llm_invocation.json` - LLM model invocation signals
87
+ - `artifact_creation_progress.json` - File/artifact creation tracking with chunked data and status
88
+ - `llm_invocation.json` - LLM model invocation signals with usage tracking
84
89
  - `tool_invocation_start.json` - Tool execution start notifications
85
- - `tool_result.json` - Tool execution completion results
90
+ - `tool_result.json` - Tool execution completion results with optional LLM usage
86
91
 
87
92
  ## Complete Usage Guide
88
93
 
@@ -215,21 +220,33 @@ agent_card = {
215
220
  validate_agent_card(agent_card)
216
221
  ```
217
222
 
218
- ### 5. Artifact Creation Progress Tracking
223
+ ### 5. Enhanced Artifact Creation Progress Tracking
219
224
 
220
225
  ```python
221
226
  # Load artifact creation schema
222
227
  with open('solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json') as f:
223
228
  artifact_schema = json.load(f)
224
229
 
225
- # Track artifact creation with chunked data
230
+ # Track artifact creation in progress with chunked data
226
231
  artifact_progress = {
227
232
  "type": "artifact_creation_progress",
228
233
  "filename": "report.pdf",
229
- "bytes_saved": 1024,
234
+ "description": "Monthly sales report",
235
+ "status": "in-progress",
236
+ "bytes_transferred": 1024,
230
237
  "artifact_chunk": "JVBERi0xLjQKJcOkw7zDtsO..." # Base64 encoded chunk
231
238
  }
232
239
  validate(instance=artifact_progress, schema=artifact_schema)
240
+
241
+ # Track artifact completion
242
+ artifact_completed = {
243
+ "type": "artifact_creation_progress",
244
+ "filename": "report.pdf",
245
+ "status": "completed",
246
+ "bytes_transferred": 5120,
247
+ "mime_type": "application/pdf"
248
+ }
249
+ validate(instance=artifact_completed, schema=artifact_schema)
233
250
  ```
234
251
 
235
252
  ### 6. LLM Invocation Tracking
@@ -239,13 +256,19 @@ validate(instance=artifact_progress, schema=artifact_schema)
239
256
  with open('solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json') as f:
240
257
  llm_schema = json.load(f)
241
258
 
242
- # Track LLM calls
259
+ # Track LLM calls with usage information
243
260
  llm_invocation = {
244
261
  "type": "llm_invocation",
245
262
  "request": {
246
263
  "model": "gpt-4",
247
264
  "messages": [{"role": "user", "content": "Analyze this data"}],
248
265
  "temperature": 0.7
266
+ },
267
+ "usage": {
268
+ "input_tokens": 150,
269
+ "output_tokens": 75,
270
+ "cached_input_tokens": 50,
271
+ "model": "gpt-4"
249
272
  }
250
273
  }
251
274
  validate(instance=llm_invocation, schema=llm_schema)
@@ -296,14 +319,16 @@ def track_tool_invocation(tool_name, args, call_id):
296
319
  validate(instance=invocation, schema=tool_schema)
297
320
  return invocation
298
321
 
299
- # 4. Track tool results
300
- def track_tool_result(tool_name, result_data, call_id):
322
+ # 4. Track tool results with LLM usage
323
+ def track_tool_result(tool_name, result_data, call_id, llm_usage=None):
301
324
  result = {
302
325
  "type": "tool_result",
303
326
  "tool_name": tool_name,
304
327
  "result_data": result_data,
305
328
  "function_call_id": call_id
306
329
  }
330
+ if llm_usage:
331
+ result["llm_usage"] = llm_usage
307
332
  validate(instance=result, schema=result_schema)
308
333
  return result
309
334
  ```
@@ -402,6 +427,19 @@ error_response = {
402
427
  validator.validate_definition(error_response, 'JSONRPCErrorResponse')
403
428
  ```
404
429
 
405
- This comprehensive guide shows how to use both the main A2A specification and the specialized signal schemas together to build compliant agent-to-agent communication systems in the Solace Agent Mesh, including progress tracking, tool invocation monitoring, LLM call tracking, and artifact creation progress.
430
+ ### 10. Working with Different Transport Protocols
431
+
432
+ ```python
433
+ # Create agent card with multiple transport interfaces
434
+ agent_card_multi_transport = {
435
+ "name": "Multi-Transport Agent",
436
+ "description": "Agent supporting multiple transport protocols",
437
+ "url": "https://api.example.com/jsonrpc",
438
+ "preferredTransport": "JSONRPC",
439
+ "additionalInterfaces": [
440
+ {
441
+ "url": "https://api.example.com/jsonrpc",
442
+ "transport": "JSONRPC"
443
+ },
406
444
 
407
- # content_hash: 70d5dd9030447ae14b684049b5e111c72606e637df99d917420a25ac1f718bae
445
+ # content_hash: b8b4bc87e9300c50f2500efdd840bb765e107bfbc1de283800934528e8092614
@@ -13,19 +13,36 @@
13
13
  "type": "string",
14
14
  "description": "The name of the artifact being created."
15
15
  },
16
- "bytes_saved": {
16
+ "description": {
17
+ "type": "string",
18
+ "description": "An optional description of the artifact being created."
19
+ },
20
+ "status": {
21
+ "type": "string",
22
+ "enum": ["in-progress", "completed", "failed"],
23
+ "description": "The status of the artifact creation."
24
+ },
25
+ "bytes_transferred": {
17
26
  "type": "integer",
18
- "description": "The number of bytes saved so far."
27
+ "description": "The number of bytes transferred so far."
19
28
  },
20
29
  "artifact_chunk": {
21
30
  "type": "string",
22
- "description": "The chunk of artifact data that was saved in this progress update."
31
+ "description": "The chunk of artifact data that was transferred in this progress update. Only present for 'in-progress' status."
32
+ },
33
+ "mime_type": {
34
+ "type": "string",
35
+ "description": "The MIME type of the artifact. Only present for 'completed' status."
36
+ },
37
+ "version": {
38
+ "type": "integer",
39
+ "description": "The version number of the artifact being created or updated."
23
40
  }
24
41
  },
25
42
  "required": [
26
43
  "type",
27
44
  "filename",
28
- "bytes_saved",
29
- "artifact_chunk"
45
+ "status",
46
+ "bytes_transferred"
30
47
  ]
31
- }
48
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "FeedbackEvent",
4
+ "description": "Schema for a user feedback event published by a gateway.",
5
+ "type": "object",
6
+ "properties": {
7
+ "id": {
8
+ "type": "string",
9
+ "description": "A unique identifier for this feedback submission."
10
+ },
11
+ "session_id": {
12
+ "type": "string",
13
+ "description": "The A2A session ID associated with the task."
14
+ },
15
+ "task_id": {
16
+ "type": "string",
17
+ "description": "The ID of the task this feedback is for."
18
+ },
19
+ "user_id": {
20
+ "type": "string",
21
+ "description": "The identifier of the user who provided the feedback."
22
+ },
23
+ "rating": {
24
+ "type": "string",
25
+ "enum": ["up", "down"],
26
+ "description": "The rating provided by the user."
27
+ },
28
+ "comment": {
29
+ "type": ["string", "null"],
30
+ "description": "Optional text comment provided by the user."
31
+ },
32
+ "created_time": {
33
+ "type": "string",
34
+ "format": "date-time",
35
+ "description": "The ISO 8601 timestamp (UTC) when the feedback was submitted."
36
+ },
37
+ "gateway_id": {
38
+ "type": "string",
39
+ "description": "The ID of the gateway that collected the feedback."
40
+ }
41
+ },
42
+ "required": [
43
+ "id",
44
+ "session_id",
45
+ "task_id",
46
+ "user_id",
47
+ "rating",
48
+ "created_time",
49
+ "gateway_id"
50
+ ]
51
+ }
@@ -9,7 +9,6 @@ This directory contains JSON Schema definitions for various agent-to-agent (A2A)
9
9
  - `llm_invocation.json` - Schema for LLM model invocation signals with usage tracking
10
10
  - `tool_invocation_start.json` - Schema for tool execution start notifications
11
11
  - `tool_result.json` - Schema for tool execution completion results with optional LLM usage
12
- - `schemas_llm.txt` - Previous developer guide (legacy documentation)
13
12
 
14
13
  ## Developer API Reference
15
14
 
@@ -52,7 +51,7 @@ validate(instance=data, schema=schema)
52
51
  ```
53
52
 
54
53
  ### artifact_creation_progress.json
55
- **Purpose:** Defines the schema for tracking progress during file or artifact creation operations with chunked data transfer.
54
+ **Purpose:** Defines the schema for tracking progress during file or artifact creation operations with status tracking and chunked data transfer.
56
55
 
57
56
  **Import:** Load as JSON schema for validation
58
57
  ```python
@@ -65,16 +64,22 @@ from jsonschema import validate
65
64
  {
66
65
  "type": "artifact_creation_progress",
67
66
  "filename": "string",
68
- "bytes_saved": "integer",
69
- "artifact_chunk": "string"
67
+ "description": "string",
68
+ "status": "in-progress|completed|failed",
69
+ "bytes_transferred": "integer",
70
+ "artifact_chunk": "string",
71
+ "mime_type": "string"
70
72
  }
71
73
  ```
72
74
 
73
75
  **Properties:**
74
76
  - `type: "artifact_creation_progress"` - Constant identifier for this signal type (required)
75
77
  - `filename: string` - Name of the artifact being created (required)
76
- - `bytes_saved: integer` - Number of bytes saved so far (required)
77
- - `artifact_chunk: string` - The chunk of artifact data that was saved in this update (required)
78
+ - `description: string` - Optional description of the artifact being created (optional)
79
+ - `status: string` - Status of artifact creation: "in-progress", "completed", or "failed" (required)
80
+ - `bytes_transferred: integer` - Number of bytes transferred so far (required)
81
+ - `artifact_chunk: string` - Chunk of artifact data transferred in this update (optional, only for 'in-progress')
82
+ - `mime_type: string` - MIME type of the artifact (optional, only for 'completed')
78
83
 
79
84
  **Usage Examples:**
80
85
  ```python
@@ -85,14 +90,26 @@ from jsonschema import validate
85
90
  with open('solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json') as f:
86
91
  schema = json.load(f)
87
92
 
88
- # Valid data example
93
+ # In-progress example
89
94
  data = {
90
95
  "type": "artifact_creation_progress",
91
96
  "filename": "report.pdf",
92
- "bytes_saved": 1024,
97
+ "description": "Monthly sales report",
98
+ "status": "in-progress",
99
+ "bytes_transferred": 1024,
93
100
  "artifact_chunk": "JVBERi0xLjQKJcOkw7zDtsO..."
94
101
  }
95
102
  validate(instance=data, schema=schema)
103
+
104
+ # Completed example
105
+ completed_data = {
106
+ "type": "artifact_creation_progress",
107
+ "filename": "report.pdf",
108
+ "status": "completed",
109
+ "bytes_transferred": 5120,
110
+ "mime_type": "application/pdf"
111
+ }
112
+ validate(instance=completed_data, schema=schema)
96
113
  ```
97
114
 
98
115
  ### llm_invocation.json
@@ -310,4 +327,4 @@ schemas = {
310
327
  }
311
328
  ```
312
329
 
313
- # content_hash: 8d0325636918fd8bdabc0ba61bed79ae2b2be06778893406197aebfb7c3e3a21
330
+ # content_hash: 9b18c2ba0e0aa3d52a27ecd90f45376713fe2738cee386219f988fd84da93a51
@@ -68,9 +68,12 @@ Together, these components form a cohesive ecosystem, enabling developers to eit
68
68
 
69
69
  **Classes/Functions/Constants:**
70
70
  - **`AgentRegistry`**: A thread-safe class for storing and managing agent cards.
71
- - `add_or_update_agent(self, agent_card: AgentCard)`: Adds a new agent or updates an existing one.
71
+ - `add_or_update_agent(self, agent_card: AgentCard) -> bool`: Adds a new agent or updates an existing one, returns True if new.
72
72
  - `get_agent(self, agent_name: str) -> Optional[AgentCard]`: Retrieves an agent card by its unique name.
73
73
  - `get_agent_names(self) -> List[str]`: Returns a sorted list of all discovered agent names.
74
+ - `get_last_seen(self, agent_name: str) -> Optional[float]`: Returns the timestamp when the agent was last seen.
75
+ - `check_ttl_expired(self, agent_name: str, ttl_seconds: int) -> Tuple[bool, int]`: Checks if an agent's TTL has expired.
76
+ - `remove_agent(self, agent_name: str) -> bool`: Removes an agent from the registry.
74
77
  - `clear(self)`: Clears all agents from the registry.
75
78
 
76
79
  #### constants.py
@@ -79,6 +82,8 @@ Together, these components form a cohesive ecosystem, enabling developers to eit
79
82
 
80
83
  **Classes/Functions/Constants:**
81
84
  - `DEFAULT_COMMUNICATION_TIMEOUT: int`: Default timeout for communication operations (600 seconds / 10 minutes).
85
+ - `HEALTH_CHECK_TTL_SECONDS: int`: Time after which a health check is considered stale (60 seconds).
86
+ - `HEALTH_CHECK_INTERVAL_SECONDS: int`: Interval between health checks (10 seconds).
82
87
  - `TEXT_ARTIFACT_CONTEXT_MAX_LENGTH_CAPACITY: int`: Maximum number of characters that can be loaded from a text artifact (200,000).
83
88
  - `TEXT_ARTIFACT_CONTEXT_DEFAULT_LENGTH: int`: Default number of characters to load from a text artifact (100,000).
84
89
 
@@ -102,8 +107,11 @@ Together, these components form a cohesive ecosystem, enabling developers to eit
102
107
  - **`ArtifactCreationProgressData`**: Data model for artifact creation progress signals.
103
108
  - `type: Literal["artifact_creation_progress"]`: The constant type identifier.
104
109
  - `filename: str`: The name of the artifact being created.
105
- - `bytes_saved: int`: The number of bytes saved so far.
106
- - `artifact_chunk: str`: The chunk of artifact data that was saved in this progress update.
110
+ - `status: Literal["in-progress", "completed", "failed"]`: The status of the artifact creation.
111
+ - `bytes_transferred: int`: The number of bytes transferred so far.
112
+ - `description: Optional[str]`: An optional description of the artifact being created.
113
+ - `artifact_chunk: Optional[str]`: The chunk of artifact data that was transferred in this progress update.
114
+ - `mime_type: Optional[str]`: The MIME type of the artifact (for completed status).
107
115
  - **`ToolResultData`**: Data model for tool execution result signals.
108
116
  - `type: Literal["tool_result"]`: The constant type identifier.
109
117
  - `tool_name: str`: The name of the tool that was called.
@@ -217,35 +225,6 @@ from solace_agent_mesh.common.services.identity_service import create_identity_s
217
225
 
218
226
  #### utils/
219
227
  **Purpose:** A collection of cross-cutting utilities for caching, logging, MIME type handling, and dynamic content processing.
220
- **Key Exports:** `InMemoryCache`, `is_text_based_mime_type`, `resolve_embeds_in_string`
221
- **Import Examples:**
222
- ```python
223
- from solace_agent_mesh.common.utils.in_memory_cache import InMemoryCache
224
- from solace_agent_mesh.common.utils import is_text_based_mime_type
225
- from solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string
226
- ```
228
+ **Key Exports:** `InMemoryCache`, `is_text_based_mime_type`, `resolve_emb
227
229
 
228
- ## Complete Usage Guide
229
-
230
- ### 1. Basic A2A Protocol Usage
231
- This example shows how to use the core protocol functions and types to build A2A communication.
232
-
233
- ```python
234
- import uuid
235
- from datetime import datetime, timezone
236
- from solace_agent_mesh.common.a2a_protocol import (
237
- get_agent_request_topic,
238
- get_gateway_status_topic,
239
- translate_a2a_to_adk_content
240
- )
241
- from solace_agent_mesh.common.types import (
242
- Message,
243
- TextPart,
244
- Task,
245
- TaskStatus,
246
- TaskState,
247
- AgentCard
248
- )
249
- from solace_
250
-
251
- # content_hash: 4cbf98260b5f5bef314fae44cf680520f4581948d2bfd8b08e7c6455bbcac1bc
230
+ # content_hash: 6fd3be2d2c731f45200e4f3968c7ff82a85f6d57e8269b276fd56cd4444013c9
@@ -71,10 +71,26 @@ class ArtifactCreationProgressData(BaseModel):
71
71
  description="The constant type for this data part.",
72
72
  )
73
73
  filename: str = Field(..., description="The name of the artifact being created.")
74
- bytes_saved: int = Field(..., description="The number of bytes saved so far.")
75
- artifact_chunk: str = Field(
76
- ...,
77
- description="The chunk of artifact data that was saved in this progress update.",
74
+ status: Literal["in-progress", "completed", "failed"] = Field(
75
+ ..., description="The status of the artifact creation."
76
+ )
77
+ bytes_transferred: int = Field(
78
+ ..., description="The number of bytes transferred so far."
79
+ )
80
+ description: Optional[str] = Field(
81
+ None, description="An optional description of the artifact being created."
82
+ )
83
+ artifact_chunk: Optional[str] = Field(
84
+ None,
85
+ description="The chunk of artifact data that was transferred in this progress update. Only present for 'in-progress' status.",
86
+ )
87
+ mime_type: Optional[str] = Field(
88
+ None,
89
+ description="The MIME type of the artifact. Only present for 'completed' status.",
90
+ )
91
+ version: Optional[int] = Field(
92
+ None,
93
+ description="The version number of the artifact being created or updated.",
78
94
  )
79
95
 
80
96
 
@@ -171,4 +171,4 @@ MiddlewareRegistry.reset_bindings()
171
171
  print(f"Registry Status after reset: {MiddlewareRegistry.get_registry_status()}")
172
172
  ```
173
173
 
174
- # content_hash: 9f505d5203463aeca42959c92c78fe35212f34e4ea0288b67c1c6a6450117d6c
174
+ # content_hash: eb6f60d7fdc4a0fb198bf8cc5644c3d372a72ebf46870c79282f230b07637095
@@ -68,4 +68,4 @@ agent.run()
68
68
  agent.cleanup()
69
69
  ```
70
70
 
71
- # content_hash: 8ba90bbcaab8684e6611224e74cb0bb86a9cf87d6dccd25352d70ee3d851a06b
71
+ # content_hash: 3a67b8df1c1af409e52645a3674864418b00017b58519d84736eb4d1da56ea11
@@ -101,4 +101,4 @@ topic = SamEventService.get_event_topic("my_namespace", "session.deleted")
101
101
  print(topic) # Returns the proper SAM events topic
102
102
  ```
103
103
 
104
- # content_hash: e2f1353fe6841458c68f294efc03e1fdbac3632f78507e6e58044bb0c59919af
104
+ # content_hash: 2a249adbac594bbf8a551a6b4f606218b7b8fce41753efe31954b8acc50cc126
@@ -66,7 +66,7 @@ class BaseEmployeeService(ABC):
66
66
  pass
67
67
 
68
68
  @abstractmethod
69
- async def get_time_off_data(self, employee_id: str) -> List[Dict[str, Any]]:
69
+ async def get_time_off_data(self, employee_id: str, start_date: Optional[str] = None, end_date: Optional[str] = None) -> List[Dict[str, Any]]:
70
70
  """
71
71
  Retrieves a list of raw time-off entries for an employee.
72
72
 
@@ -18,7 +18,7 @@ This file contains no public classes or functions - it serves only as package do
18
18
  **Import:** `from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService`
19
19
 
20
20
  **Classes:**
21
- - `LocalFileIdentityService(config: Dict[str, Any])` - Identity service that sources user data from a local JSON file
21
+ - `LocalFileIdentityService(config: Dict[str, Any], component: Optional[SamComponentBase] = None)` - Identity service that sources user data from a local JSON file
22
22
  - `async get_user_profile(auth_claims: Dict[str, Any]) -> Optional[Dict[str, Any]]` - Looks up a user profile using the lookup key from auth claims
23
23
  - `async search_users(query: str, limit: int = 10) -> List[Dict[str, Any]]` - Performs case-insensitive search on user names and emails
24
24
  - `file_path: str` - Path to the JSON file containing user data
@@ -30,6 +30,7 @@ This file contains no public classes or functions - it serves only as package do
30
30
  ```python
31
31
  import asyncio
32
32
  import json
33
+ from typing import Dict, Any
33
34
  from solace_agent_mesh.common.services.providers.local_file_identity_service import LocalFileIdentityService
34
35
 
35
36
  # Create sample users.json file
@@ -77,4 +78,4 @@ async def main():
77
78
  asyncio.run(main())
78
79
  ```
79
80
 
80
- # content_hash: 3661ffe07466b1391797c2feb90e2c97544b1a9c6c8cd15fc448cf95f4be6015
81
+ # content_hash: 26b677e947bf60f1e211b6e119bf6382f0a269d46c0f102751bae9faab3c8435
@@ -36,10 +36,10 @@ The core architecture revolves around factory functions (`create_identity_servic
36
36
 
37
37
  **Classes/Functions/Constants:**
38
38
  - **`class BaseIdentityService(ABC)`**: The abstract base class for identity service providers.
39
- - **`__init__(self, config: Dict[str, Any])`**: Initializes the service, setting up configuration and an optional in-memory cache.
39
+ - **`__init__(self, config: Dict[str, Any], component: Optional[SamComponentBase] = None)`**: Initializes the service, setting up configuration and an optional in-memory cache.
40
40
  - **`async def get_user_profile(self, auth_claims: Dict[str, Any]) -> Optional[Dict[str, Any]]`**: (Abstract) Fetches additional profile details for an authenticated user based on claims.
41
41
  - **`async def search_users(self, query: str, limit: int = 10) -> List[Dict[str, Any]]`**: (Abstract) Searches for users based on a query string (e.g., for autocomplete).
42
- - **`def create_identity_service(config: Optional[Dict[str, Any]]) -> Optional[BaseIdentityService]`**: A factory function that instantiates an identity service provider. It has special handling for the built-in `local_file` provider and uses Python entry points for all other provider types.
42
+ - **`def create_identity_service(config: Optional[Dict[str, Any]], component: Optional[SamComponentBase] = None) -> Optional[BaseIdentityService]`**: A factory function that instantiates an identity service provider. It has special handling for the built-in `local_file` provider and uses Python entry points for all other provider types.
43
43
 
44
44
  ### Subdirectory APIs
45
45
 
@@ -358,6 +358,11 @@ async def setup_file_based_identity():
358
358
  asyncio.run(setup_file_based_identity())
359
359
  ```
360
360
 
361
- This comprehensive guide shows how the services framework provides a clean, extensible way to integrate various data sources while maintaining consistent interfaces and supporting both built-in providers and external plugins through the factory pattern and plugin system.
361
+ ### 6. Advanced Usage: Custom Identity Service with Component Integration
362
+
363
+ ```python
364
+ import asyncio
365
+ from typing import Any, Dict, List, Optional
366
+ from solace_agent
362
367
 
363
- # content_hash: 879562926a7d3b7c6782ae395159d6c1f8a55663ce052a93eea8966e69b04444
368
+ # content_hash: 4532aa73f5067694fc253bc1875f79148f7b8778d1d46680c423d2b3da8456e6
@@ -38,6 +38,7 @@ EARLY_EMBED_TYPES: Set[str] = {
38
38
  }
39
39
  LATE_EMBED_TYPES: Set[str] = {
40
40
  "artifact_content",
41
+ "artifact_return",
41
42
  }
42
43
 
43
44
  TEXT_CONTAINER_MIME_TYPES: Set[str] = {
@@ -217,4 +217,4 @@ result, error, size = await evaluate_embed(
217
217
 
218
218
  ### types.py
219
219
 
220
- # content_hash: 2f31c6289fe46fe2ebb4c490574d6d030547346221337f730f315f7b3cac572f
220
+ # content_hash: b2c6bea4995d4d68f8cad84016e236560d091897ba1b8502f1532bf84eb813f7
@@ -26,7 +26,7 @@ except ImportError:
26
26
 
27
27
  from google.adk.artifacts import BaseArtifactService
28
28
 
29
- from .types import DataFormat
29
+ from .types import DataFormat, ResolutionMode
30
30
 
31
31
 
32
32
  def _apply_jsonpath(
@@ -661,6 +661,7 @@ async def _apply_template(
661
661
  context=context,
662
662
  resolver_func=evaluate_embed,
663
663
  types_to_resolve=EARLY_EMBED_TYPES.union(LATE_EMBED_TYPES),
664
+ resolution_mode=ResolutionMode.RECURSIVE_ARTIFACT_CONTENT,
664
665
  log_identifier=f"{log_id}[TemplateEmbeds]",
665
666
  config=resolver_config,
666
667
  max_depth=resolver_config.get("gateway_recursive_embed_depth", 12),