solace-agent-mesh 1.6.1__py3-none-any.whl → 1.13.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- solace_agent_mesh/agent/adk/alembic/README +74 -0
- solace_agent_mesh/agent/adk/alembic/env.py +77 -0
- solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
- solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
- solace_agent_mesh/agent/adk/alembic.ini +112 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +165 -1
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
- solace_agent_mesh/agent/adk/callbacks.py +852 -109
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +234 -36
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
- solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
- solace_agent_mesh/agent/adk/models/lite_llm.py +77 -21
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
- solace_agent_mesh/agent/adk/runner.py +85 -20
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +94 -18
- solace_agent_mesh/agent/adk/setup.py +281 -65
- solace_agent_mesh/agent/adk/stream_parser.py +231 -37
- solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +472 -137
- solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
- solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
- solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
- solace_agent_mesh/agent/proxies/base/app.py +3 -2
- solace_agent_mesh/agent/proxies/base/component.py +188 -22
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
- solace_agent_mesh/agent/sac/app.py +91 -3
- solace_agent_mesh/agent/sac/component.py +591 -157
- solace_agent_mesh/agent/sac/patch_adk.py +8 -16
- solace_agent_mesh/agent/sac/task_execution_context.py +146 -4
- solace_agent_mesh/agent/tools/__init__.py +3 -0
- solace_agent_mesh/agent/tools/audio_tools.py +3 -3
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +710 -171
- solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +2 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +57 -2
- solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
- solace_agent_mesh/agent/tools/web_tools.py +125 -17
- solace_agent_mesh/agent/utils/artifact_helpers.py +248 -6
- solace_agent_mesh/agent/utils/context_helpers.py +17 -0
- solace_agent_mesh/assets/docs/404.html +6 -6
- solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +82 -68
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
- solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +208 -125
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -49
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -30
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -16
- solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +38 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +162 -171
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +23 -19
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +112 -87
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +87 -64
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +44 -44
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -37
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +311 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +39 -42
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
- solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
- solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
- solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +4 -1
- solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
- solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
- solace_agent_mesh/cli/commands/run_cmd.py +64 -49
- solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
- solace_agent_mesh/cli/main.py +15 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-KnKMP_vb.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-CGk8Suyh.js +565 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
- solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
- solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
- solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
- solace_agent_mesh/common/a2a/events.py +2 -1
- solace_agent_mesh/common/a2a/protocol.py +5 -0
- solace_agent_mesh/common/a2a/types.py +2 -1
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/agent_registry.py +38 -11
- solace_agent_mesh/common/data_parts.py +144 -4
- solace_agent_mesh/common/error_handlers.py +83 -0
- solace_agent_mesh/common/exceptions.py +24 -0
- solace_agent_mesh/common/oauth/__init__.py +17 -0
- solace_agent_mesh/common/oauth/oauth_client.py +408 -0
- solace_agent_mesh/common/oauth/utils.py +50 -0
- solace_agent_mesh/common/rag_dto.py +156 -0
- solace_agent_mesh/common/sac/sam_component_base.py +97 -19
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/common/services/employee_service.py +1 -1
- solace_agent_mesh/common/utils/embeds/constants.py +1 -0
- solace_agent_mesh/common/utils/embeds/converter.py +1 -8
- solace_agent_mesh/common/utils/embeds/modifiers.py +4 -28
- solace_agent_mesh/common/utils/embeds/resolver.py +152 -31
- solace_agent_mesh/common/utils/embeds/types.py +9 -0
- solace_agent_mesh/common/utils/log_formatters.py +20 -0
- solace_agent_mesh/common/utils/mime_helpers.py +12 -5
- solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
- solace_agent_mesh/common/utils/rbac_utils.py +69 -0
- solace_agent_mesh/common/utils/templates/__init__.py +8 -0
- solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
- solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
- solace_agent_mesh/config_portal/backend/common.py +12 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/service.py +3 -2
- solace_agent_mesh/gateway/adapter/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +170 -0
- solace_agent_mesh/gateway/adapter/types.py +230 -0
- solace_agent_mesh/gateway/base/app.py +39 -2
- solace_agent_mesh/gateway/base/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +1027 -151
- solace_agent_mesh/gateway/generic/__init__.py +1 -0
- solace_agent_mesh/gateway/generic/app.py +50 -0
- solace_agent_mesh/gateway/generic/component.py +894 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +0 -36
- solace_agent_mesh/gateway/http_sse/app.py +40 -11
- solace_agent_mesh/gateway/http_sse/component.py +285 -160
- solace_agent_mesh/gateway/http_sse/dependencies.py +149 -114
- solace_agent_mesh/gateway/http_sse/main.py +68 -450
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +26 -3
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +114 -6
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +13 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +8 -2
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +177 -11
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +256 -58
- solace_agent_mesh/gateway/http_sse/routers/auth.py +168 -134
- solace_agent_mesh/gateway/http_sse/routers/config.py +302 -8
- solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +14 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +5 -2
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
- solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +768 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +167 -7
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +131 -8
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +670 -18
- solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +92 -9
- solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
- solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +361 -12
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
- solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
- solace_agent_mesh/gateway/http_sse/sse_manager.py +286 -166
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +29 -0
- solace_agent_mesh/services/platform/alembic/env.py +85 -0
- solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
- solace_agent_mesh/services/platform/alembic.ini +109 -0
- solace_agent_mesh/services/platform/api/__init__.py +3 -0
- solace_agent_mesh/services/platform/api/dependencies.py +154 -0
- solace_agent_mesh/services/platform/api/main.py +314 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
- solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
- solace_agent_mesh/services/platform/app.py +215 -0
- solace_agent_mesh/services/platform/component.py +777 -0
- solace_agent_mesh/shared/__init__.py +14 -0
- solace_agent_mesh/shared/api/__init__.py +42 -0
- solace_agent_mesh/shared/auth/__init__.py +26 -0
- solace_agent_mesh/shared/auth/dependencies.py +204 -0
- solace_agent_mesh/shared/auth/middleware.py +347 -0
- solace_agent_mesh/shared/database/__init__.py +20 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
- solace_agent_mesh/shared/exceptions/__init__.py +36 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +19 -5
- solace_agent_mesh/shared/utils/__init__.py +21 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
- solace_agent_mesh/templates/platform.yaml +49 -0
- solace_agent_mesh/templates/plugin_readme_template.md +3 -25
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/proxy_template.yaml +62 -0
- solace_agent_mesh/templates/webui.yaml +148 -6
- solace_agent_mesh/tools/web_search/__init__.py +18 -0
- solace_agent_mesh/tools/web_search/base.py +84 -0
- solace_agent_mesh/tools/web_search/google_search.py +247 -0
- solace_agent_mesh/tools/web_search/models.py +99 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +31 -12
- solace_agent_mesh-1.13.2.dist-info/RECORD +591 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
- solace_agent_mesh/agent/adk/adk_llm.txt +0 -232
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
- solace_agent_mesh/agent/adk/models/models_llm.txt +0 -142
- solace_agent_mesh/agent/agent_llm.txt +0 -378
- solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
- solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
- solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
- solace_agent_mesh/agent/testing/testing_llm.txt +0 -57
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
- solace_agent_mesh/agent/tools/tools_llm.txt +0 -263
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -274
- solace_agent_mesh/agent/utils/utils_llm.txt +0 -138
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1761248203150.json +0 -1
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
- solace_agent_mesh/client/webui/frontend/static/assets/client-CaY59VuC.js +0 -25
- solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
- solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BEmvJSYz.js +0 -405
- solace_agent_mesh/common/a2a/a2a_llm.txt +0 -182
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -407
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -313
- solace_agent_mesh/common/common_llm.txt +0 -251
- solace_agent_mesh/common/common_llm_detail.txt +0 -2562
- solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
- solace_agent_mesh/common/sac/sac_llm.txt +0 -71
- solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
- solace_agent_mesh/common/services/providers/providers_llm.txt +0 -80
- solace_agent_mesh/common/services/services_llm.txt +0 -363
- solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
- solace_agent_mesh/common/utils/utils_llm.txt +0 -336
- solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
- solace_agent_mesh/gateway/base/base_llm.txt +0 -224
- solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
- solace_agent_mesh/gateway/gateway_llm.txt +0 -373
- solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -295
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -155
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -263
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -266
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -340
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -346
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -83
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -107
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -314
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -297
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -285
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
- solace_agent_mesh/llm.txt +0 -228
- solace_agent_mesh/llm_detail.txt +0 -2835
- solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
- solace_agent_mesh/templates/logging_config_template.ini +0 -45
- solace_agent_mesh/templates/templates_llm.txt +0 -147
- solace_agent_mesh-1.6.1.dist-info/RECORD +0 -525
- /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -9,7 +9,7 @@ from typing import Any
|
|
|
9
9
|
from fastapi import APIRouter, Depends, Query
|
|
10
10
|
|
|
11
11
|
from ..dependencies import get_config_resolver, get_user_config
|
|
12
|
-
from
|
|
12
|
+
from solace_agent_mesh.shared.api.auth_utils import get_current_user
|
|
13
13
|
from ....common.middleware.config_resolver import ConfigResolver
|
|
14
14
|
|
|
15
15
|
log = logging.getLogger(__name__)
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"""
|
|
2
|
+
API Router for providing version information about installed SAM products.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import logging
|
|
7
|
+
from importlib.metadata import version, PackageNotFoundError
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from fastapi import APIRouter, HTTPException, status
|
|
11
|
+
|
|
12
|
+
from .dto.responses.version_responses import ProductInfo, VersionResponse
|
|
13
|
+
|
|
14
|
+
log = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
router = APIRouter()
|
|
17
|
+
|
|
18
|
+
# Constants
|
|
19
|
+
NOT_INSTALLED = "not-installed"
|
|
20
|
+
UNKNOWN_VERSION = "unknown"
|
|
21
|
+
UI_VERSION_RELATIVE_PATH = Path("client") / "webui" / "frontend" / "static" / "ui-version.json"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@router.get("/version", response_model=VersionResponse)
|
|
25
|
+
async def get_version():
|
|
26
|
+
"""
|
|
27
|
+
Returns version information for all installed SAM products and dependencies.
|
|
28
|
+
|
|
29
|
+
Detects and returns information only for products that are actually installed.
|
|
30
|
+
"""
|
|
31
|
+
log_prefix = "[GET /api/v1/version] "
|
|
32
|
+
log.debug("%sRequest received.", log_prefix)
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
products = []
|
|
36
|
+
|
|
37
|
+
# Add base solace-agent-mesh product
|
|
38
|
+
base_product = _get_base_product_info(log_prefix)
|
|
39
|
+
if base_product:
|
|
40
|
+
products.append(base_product)
|
|
41
|
+
|
|
42
|
+
# Add UI product
|
|
43
|
+
ui_product = _get_ui_product_info(log_prefix)
|
|
44
|
+
if ui_product:
|
|
45
|
+
products.append(ui_product)
|
|
46
|
+
|
|
47
|
+
# Add enterprise product if installed
|
|
48
|
+
enterprise_product = _get_enterprise_product_info(log_prefix)
|
|
49
|
+
if enterprise_product:
|
|
50
|
+
products.append(enterprise_product)
|
|
51
|
+
|
|
52
|
+
# Add solace-chat product if installed
|
|
53
|
+
chat_product = _get_solace_chat_product_info(log_prefix)
|
|
54
|
+
if chat_product:
|
|
55
|
+
products.append(chat_product)
|
|
56
|
+
|
|
57
|
+
log.debug(
|
|
58
|
+
"%sReturning version information for %d products",
|
|
59
|
+
log_prefix,
|
|
60
|
+
len(products),
|
|
61
|
+
)
|
|
62
|
+
return VersionResponse(products=products)
|
|
63
|
+
|
|
64
|
+
except Exception as e:
|
|
65
|
+
log.exception("%sError retrieving version information: %s", log_prefix, e)
|
|
66
|
+
raise HTTPException(
|
|
67
|
+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
68
|
+
detail="Failed to retrieve version information",
|
|
69
|
+
) from e
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _get_base_product_info(log_prefix: str) -> ProductInfo:
|
|
73
|
+
"""
|
|
74
|
+
Get version information for the base solace-agent-mesh product.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
log_prefix: Logging prefix for consistent log formatting
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
ProductInfo with product information including key dependencies
|
|
81
|
+
"""
|
|
82
|
+
base_version = _get_package_version("solace-agent-mesh", log_prefix)
|
|
83
|
+
|
|
84
|
+
# Collect dependencies and filter out those not installed
|
|
85
|
+
dependencies = {
|
|
86
|
+
"a2a-sdk": _get_package_version("a2a-sdk", log_prefix),
|
|
87
|
+
"google-adk": _get_package_version("google-adk", log_prefix),
|
|
88
|
+
}
|
|
89
|
+
# Filter out packages that are not installed
|
|
90
|
+
dependencies = {k: v for k, v in dependencies.items() if v != NOT_INSTALLED}
|
|
91
|
+
|
|
92
|
+
return ProductInfo(
|
|
93
|
+
id="solace-agent-mesh",
|
|
94
|
+
name="Solace Agent Mesh",
|
|
95
|
+
description="Open-source framework for event-driven, multi-agent AI systems",
|
|
96
|
+
version=base_version,
|
|
97
|
+
dependencies=dependencies if dependencies else None,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _get_ui_product_info(log_prefix: str) -> ProductInfo | None:
|
|
102
|
+
"""
|
|
103
|
+
Get version information for the UI product.
|
|
104
|
+
|
|
105
|
+
Checks multiple locations for ui-version.json (enterprise, installed, dev)
|
|
106
|
+
and returns the first one found.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
log_prefix: Logging prefix for consistent log formatting
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
ProductInfo with UI product information, or None if not found
|
|
113
|
+
"""
|
|
114
|
+
# Define all possible UI version file paths to check
|
|
115
|
+
ui_version_paths = [
|
|
116
|
+
_get_enterprise_ui_version_path(log_prefix),
|
|
117
|
+
_get_installed_ui_version_path(),
|
|
118
|
+
_get_dev_ui_version_path(),
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
# Try each path in order until we find one that exists
|
|
122
|
+
for path in ui_version_paths:
|
|
123
|
+
if path is None:
|
|
124
|
+
continue
|
|
125
|
+
|
|
126
|
+
ui_metadata = _read_ui_version_file(path, log_prefix)
|
|
127
|
+
if ui_metadata:
|
|
128
|
+
try:
|
|
129
|
+
return ProductInfo(**ui_metadata)
|
|
130
|
+
except Exception as e:
|
|
131
|
+
log.warning(
|
|
132
|
+
"%sInvalid ui-version.json format at %s: %s",
|
|
133
|
+
log_prefix,
|
|
134
|
+
path,
|
|
135
|
+
e
|
|
136
|
+
)
|
|
137
|
+
# Continue to next path
|
|
138
|
+
|
|
139
|
+
# No UI version file found, return default info
|
|
140
|
+
log.debug("%sui-version.json not found in expected locations", log_prefix)
|
|
141
|
+
return _get_default_ui_product_info()
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _get_enterprise_ui_version_path(log_prefix: str) -> Path | None:
|
|
145
|
+
"""
|
|
146
|
+
Get the path to the enterprise UI version file if enterprise is installed.
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
log_prefix: Logging prefix for consistent log formatting
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
Path to enterprise UI version file, or None if enterprise is not installed
|
|
153
|
+
"""
|
|
154
|
+
enterprise_version = _get_package_version("solace-agent-mesh-enterprise", log_prefix)
|
|
155
|
+
if enterprise_version == NOT_INSTALLED:
|
|
156
|
+
return None
|
|
157
|
+
|
|
158
|
+
try:
|
|
159
|
+
import solace_agent_mesh_enterprise
|
|
160
|
+
enterprise_package_path = Path(solace_agent_mesh_enterprise.__file__).parent
|
|
161
|
+
ui_version_path = enterprise_package_path / UI_VERSION_RELATIVE_PATH
|
|
162
|
+
return ui_version_path
|
|
163
|
+
except ImportError as e:
|
|
164
|
+
log.debug("%sEnterprise package import failed: %s", log_prefix, e)
|
|
165
|
+
return None
|
|
166
|
+
except AttributeError as e:
|
|
167
|
+
log.warning("%sEnterprise package missing __file__ attribute: %s", log_prefix, e)
|
|
168
|
+
return None
|
|
169
|
+
except Exception as e:
|
|
170
|
+
log.warning("%sCould not locate enterprise UI version path: %s", log_prefix, e)
|
|
171
|
+
return None
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _get_installed_ui_version_path() -> Path:
|
|
175
|
+
"""
|
|
176
|
+
Get the path to the UI version file in the installed package location.
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
Path to installed UI version file
|
|
180
|
+
"""
|
|
181
|
+
# Path: routers -> http_sse -> gateway -> solace_agent_mesh (4 levels up)
|
|
182
|
+
current_file = Path(__file__)
|
|
183
|
+
base_package_path = current_file.parent.parent.parent.parent
|
|
184
|
+
ui_version_path = base_package_path / UI_VERSION_RELATIVE_PATH
|
|
185
|
+
return ui_version_path
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _get_dev_ui_version_path() -> Path:
|
|
189
|
+
"""
|
|
190
|
+
Get the path to the UI version file in the development location.
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
Path to dev UI version file
|
|
194
|
+
"""
|
|
195
|
+
# Path: src/solace_agent_mesh/... -> root/client/webui/frontend/static (6 levels up)
|
|
196
|
+
current_file = Path(__file__)
|
|
197
|
+
repo_root = current_file.parent.parent.parent.parent.parent.parent
|
|
198
|
+
ui_version_path = repo_root / UI_VERSION_RELATIVE_PATH
|
|
199
|
+
return ui_version_path
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def _read_ui_version_file(path: Path, log_prefix: str) -> dict | None:
|
|
203
|
+
"""
|
|
204
|
+
Read and parse a UI version JSON file.
|
|
205
|
+
|
|
206
|
+
Args:
|
|
207
|
+
path: Path to the ui-version.json file
|
|
208
|
+
log_prefix: Logging prefix for consistent log formatting
|
|
209
|
+
|
|
210
|
+
Returns:
|
|
211
|
+
Parsed JSON metadata dict, or None if file doesn't exist or can't be read
|
|
212
|
+
"""
|
|
213
|
+
if not path.exists():
|
|
214
|
+
return None
|
|
215
|
+
|
|
216
|
+
try:
|
|
217
|
+
with open(path, "r", encoding="utf-8") as f:
|
|
218
|
+
ui_metadata = json.load(f)
|
|
219
|
+
log.debug(
|
|
220
|
+
"%sUI version from %s: %s",
|
|
221
|
+
log_prefix,
|
|
222
|
+
path,
|
|
223
|
+
ui_metadata.get("version"),
|
|
224
|
+
)
|
|
225
|
+
return ui_metadata
|
|
226
|
+
except FileNotFoundError:
|
|
227
|
+
# File disappeared between exists() check and open() - rare race condition
|
|
228
|
+
log.debug("%sUI version file not found at %s", log_prefix, path)
|
|
229
|
+
return None
|
|
230
|
+
except PermissionError as e:
|
|
231
|
+
log.warning("%sPermission denied reading %s: %s", log_prefix, path, e)
|
|
232
|
+
return None
|
|
233
|
+
except json.JSONDecodeError as e:
|
|
234
|
+
log.error("%sInvalid JSON in %s: %s", log_prefix, path, e)
|
|
235
|
+
return None
|
|
236
|
+
except Exception as e:
|
|
237
|
+
log.warning("%sCould not read %s: %s", log_prefix, path, e)
|
|
238
|
+
return None
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _get_default_ui_product_info() -> ProductInfo:
|
|
242
|
+
"""
|
|
243
|
+
Get default UI product information when version file is not found.
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
ProductInfo with default values
|
|
247
|
+
"""
|
|
248
|
+
return ProductInfo(
|
|
249
|
+
id="@SolaceLabs/solace-agent-mesh-ui",
|
|
250
|
+
name="Solace Agent Mesh UI",
|
|
251
|
+
description="React UI components for Solace Agent Mesh",
|
|
252
|
+
version=UNKNOWN_VERSION,
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def _get_enterprise_product_info(log_prefix: str) -> ProductInfo | None:
|
|
257
|
+
"""
|
|
258
|
+
Get version information for the enterprise product if installed.
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
log_prefix: Logging prefix for consistent log formatting
|
|
262
|
+
|
|
263
|
+
Returns:
|
|
264
|
+
ProductInfo with enterprise product information, or None if not installed
|
|
265
|
+
"""
|
|
266
|
+
# Check if enterprise package is installed
|
|
267
|
+
enterprise_version = _get_package_version("solace-agent-mesh-enterprise", log_prefix)
|
|
268
|
+
if enterprise_version == NOT_INSTALLED:
|
|
269
|
+
log.debug("%sEnterprise package not installed", log_prefix)
|
|
270
|
+
return None
|
|
271
|
+
|
|
272
|
+
product_info = ProductInfo(
|
|
273
|
+
id="solace-agent-mesh-enterprise",
|
|
274
|
+
name="Solace Agent Mesh Enterprise",
|
|
275
|
+
description="Enterprise extensions with authorization and enterprise features",
|
|
276
|
+
version=enterprise_version,
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
log.debug("%sEnterprise package detected: %s", log_prefix, enterprise_version)
|
|
280
|
+
return product_info
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def _get_solace_chat_product_info(log_prefix: str) -> ProductInfo | None:
|
|
284
|
+
"""
|
|
285
|
+
Get version information for the solace-chat product if installed.
|
|
286
|
+
|
|
287
|
+
Args:
|
|
288
|
+
log_prefix: Logging prefix for consistent log formatting
|
|
289
|
+
|
|
290
|
+
Returns:
|
|
291
|
+
ProductInfo with solace-chat product information, or None if not installed
|
|
292
|
+
"""
|
|
293
|
+
# Check if solace-chat package is installed
|
|
294
|
+
chat_version = _get_package_version("solace-chat", log_prefix)
|
|
295
|
+
if chat_version == NOT_INSTALLED:
|
|
296
|
+
log.debug("%ssolace-chat package not installed", log_prefix)
|
|
297
|
+
return None
|
|
298
|
+
|
|
299
|
+
# solace-chat is installed, gather its information
|
|
300
|
+
# Collect dependencies and filter out those not installed
|
|
301
|
+
dependencies = {
|
|
302
|
+
"sam-bamboohr": _get_package_version("sam-bamboohr", log_prefix),
|
|
303
|
+
"sam-confluence": _get_package_version("sam-confluence", log_prefix),
|
|
304
|
+
"sam-jira": _get_package_version("sam-jira", log_prefix),
|
|
305
|
+
"sam-litellm": _get_package_version("sam-litellm", log_prefix),
|
|
306
|
+
"sam-rest-gateway": _get_package_version("sam-rest-gateway", log_prefix),
|
|
307
|
+
"sam-rt-sf": _get_package_version("sam-rt-sf", log_prefix),
|
|
308
|
+
"sam-s3-hosting": _get_package_version("sam-s3-hosting", log_prefix),
|
|
309
|
+
"sam-slack": _get_package_version("sam-slack", log_prefix),
|
|
310
|
+
"sam-sql-database": _get_package_version("sam-sql-database", log_prefix),
|
|
311
|
+
"sam-teams-gateway": _get_package_version("sam-teams-gateway", log_prefix),
|
|
312
|
+
}
|
|
313
|
+
# Filter out packages that are not installed
|
|
314
|
+
dependencies = {k: v for k, v in dependencies.items() if v != NOT_INSTALLED}
|
|
315
|
+
|
|
316
|
+
product_info = ProductInfo(
|
|
317
|
+
id="solace-chat",
|
|
318
|
+
name="Solace Chat",
|
|
319
|
+
description="Solace Chat Agent for agent-to-agent communication",
|
|
320
|
+
version=chat_version,
|
|
321
|
+
dependencies=dependencies if dependencies else None,
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
log.debug("%ssolace-chat package detected: %s", log_prefix, chat_version)
|
|
325
|
+
return product_info
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def _get_package_version(package_name: str, log_prefix: str) -> str:
|
|
329
|
+
"""
|
|
330
|
+
Get the version of an installed package.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
package_name: Name of the package to query
|
|
334
|
+
log_prefix: Logging prefix for consistent log formatting
|
|
335
|
+
|
|
336
|
+
Returns:
|
|
337
|
+
Version string, or "not-installed" if package is not found
|
|
338
|
+
"""
|
|
339
|
+
try:
|
|
340
|
+
return version(package_name)
|
|
341
|
+
except PackageNotFoundError:
|
|
342
|
+
log.debug("%sPackage '%s' not found in installed packages", log_prefix, package_name)
|
|
343
|
+
return NOT_INSTALLED
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
API Router for managing A2A message visualization streams.
|
|
3
3
|
"""
|
|
4
|
+
from __future__ import annotations
|
|
4
5
|
|
|
5
6
|
import logging
|
|
6
7
|
import asyncio
|
|
@@ -14,6 +15,7 @@ from fastapi import (
|
|
|
14
15
|
status,
|
|
15
16
|
)
|
|
16
17
|
from pydantic import BaseModel, Field
|
|
18
|
+
import json
|
|
17
19
|
from typing import List, Optional, Dict, Any, Set
|
|
18
20
|
|
|
19
21
|
|
|
@@ -31,6 +33,7 @@ if TYPE_CHECKING:
|
|
|
31
33
|
from ....gateway.http_sse.component import WebUIBackendComponent
|
|
32
34
|
|
|
33
35
|
log = logging.getLogger(__name__)
|
|
36
|
+
trace_logger = logging.getLogger("sam_trace")
|
|
34
37
|
|
|
35
38
|
router = APIRouter()
|
|
36
39
|
|
|
@@ -45,7 +48,7 @@ class SubscriptionTarget(BaseModel):
|
|
|
45
48
|
"my_a2a_messages",
|
|
46
49
|
"current_namespace_a2a_messages",
|
|
47
50
|
"namespace_a2a_messages",
|
|
48
|
-
"agent_a2a_messages"
|
|
51
|
+
"agent_a2a_messages"
|
|
49
52
|
],
|
|
50
53
|
)
|
|
51
54
|
identifier: Optional[str] = Field(
|
|
@@ -231,11 +234,77 @@ def _resolve_user_identity_for_authorization(
|
|
|
231
234
|
"%s No user_identity provided but authorization is enabled. This should not happen.",
|
|
232
235
|
log_id_prefix,
|
|
233
236
|
)
|
|
234
|
-
raise ValueError(
|
|
237
|
+
raise ValueError(
|
|
238
|
+
"No user identity available when authorization is required"
|
|
239
|
+
)
|
|
235
240
|
|
|
236
241
|
return user_identity
|
|
237
242
|
|
|
238
243
|
|
|
244
|
+
def _include_for_visualization(event_payload: Dict[str, Any]) -> bool:
|
|
245
|
+
"""
|
|
246
|
+
Check if an event should be included for visualization based on metadata.
|
|
247
|
+
|
|
248
|
+
Args:
|
|
249
|
+
event_payload: The event payload containing event data
|
|
250
|
+
|
|
251
|
+
Returns:
|
|
252
|
+
False if the event should be excluded from visualization (when visualization is False),
|
|
253
|
+
True otherwise (include by default)
|
|
254
|
+
"""
|
|
255
|
+
try:
|
|
256
|
+
# Get the data field from the event payload
|
|
257
|
+
data_str = event_payload.get("data")
|
|
258
|
+
if not data_str:
|
|
259
|
+
return True # Include by default if no data
|
|
260
|
+
|
|
261
|
+
# Parse the JSON data
|
|
262
|
+
try:
|
|
263
|
+
data = json.loads(data_str)
|
|
264
|
+
except (json.JSONDecodeError, TypeError):
|
|
265
|
+
return True
|
|
266
|
+
|
|
267
|
+
# Look for the full_payload in the data
|
|
268
|
+
full_payload = data.get("full_payload")
|
|
269
|
+
if not full_payload:
|
|
270
|
+
return True
|
|
271
|
+
|
|
272
|
+
# Check if full_payload has params
|
|
273
|
+
params = full_payload.get("params")
|
|
274
|
+
if not params:
|
|
275
|
+
return True
|
|
276
|
+
|
|
277
|
+
# Check if params has message
|
|
278
|
+
message = params.get("message")
|
|
279
|
+
if not message:
|
|
280
|
+
return True
|
|
281
|
+
|
|
282
|
+
# Check if message has metadata
|
|
283
|
+
metadata = message.get("metadata")
|
|
284
|
+
if not metadata:
|
|
285
|
+
return True
|
|
286
|
+
|
|
287
|
+
# Check the visualization setting in metadata
|
|
288
|
+
visualization_setting = metadata.get("visualization")
|
|
289
|
+
if visualization_setting is not None and (
|
|
290
|
+
(
|
|
291
|
+
isinstance(visualization_setting, str)
|
|
292
|
+
and visualization_setting.lower() == "false"
|
|
293
|
+
)
|
|
294
|
+
or (
|
|
295
|
+
isinstance(visualization_setting, bool)
|
|
296
|
+
and visualization_setting is False
|
|
297
|
+
)
|
|
298
|
+
):
|
|
299
|
+
return False
|
|
300
|
+
|
|
301
|
+
return True
|
|
302
|
+
|
|
303
|
+
except Exception as e:
|
|
304
|
+
log.warning("Error checking visualization filter for event: %s", e)
|
|
305
|
+
return True
|
|
306
|
+
|
|
307
|
+
|
|
239
308
|
@router.post(
|
|
240
309
|
"/subscribe",
|
|
241
310
|
response_model=VisualizationSubscribeResponse,
|
|
@@ -321,7 +390,7 @@ async def subscribe_to_visualization_stream(
|
|
|
321
390
|
resolved_user_identity = _resolve_user_identity_for_authorization(
|
|
322
391
|
component, user_id
|
|
323
392
|
)
|
|
324
|
-
log.
|
|
393
|
+
log.debug(
|
|
325
394
|
"%s Resolved user identity for authorization: '%s' (from raw user_id: '%s')",
|
|
326
395
|
log_id_prefix,
|
|
327
396
|
resolved_user_identity,
|
|
@@ -339,7 +408,7 @@ async def subscribe_to_visualization_stream(
|
|
|
339
408
|
user_config = await config_resolver.resolve_user_config(
|
|
340
409
|
resolved_user_identity, gateway_context, {}
|
|
341
410
|
)
|
|
342
|
-
log.
|
|
411
|
+
log.debug(
|
|
343
412
|
"%s Resolved user_config for resolved_user_identity '%s': %s",
|
|
344
413
|
log_id_prefix,
|
|
345
414
|
resolved_user_identity,
|
|
@@ -457,7 +526,7 @@ async def subscribe_to_visualization_stream(
|
|
|
457
526
|
)
|
|
458
527
|
|
|
459
528
|
firehose_topic = f"{component.namespace.strip('/')}/a2a/>"
|
|
460
|
-
log.
|
|
529
|
+
log.debug(
|
|
461
530
|
"%s Adding firehose subscription '%s' for my_a2a_messages stream.",
|
|
462
531
|
log_id_prefix,
|
|
463
532
|
firehose_topic,
|
|
@@ -780,13 +849,27 @@ async def get_visualization_stream_events(
|
|
|
780
849
|
stream_id,
|
|
781
850
|
)
|
|
782
851
|
break
|
|
783
|
-
|
|
852
|
+
if _include_for_visualization(event_payload):
|
|
853
|
+
if trace_logger.isEnabledFor(logging.DEBUG):
|
|
854
|
+
trace_logger.debug(
|
|
855
|
+
"%s Yielding event for stream %s: %s",
|
|
856
|
+
log_id_prefix,
|
|
857
|
+
stream_id,
|
|
858
|
+
event_payload,
|
|
859
|
+
)
|
|
860
|
+
else:
|
|
861
|
+
log.debug(
|
|
862
|
+
"%s Yielding event for stream %s",
|
|
863
|
+
log_id_prefix,
|
|
864
|
+
stream_id,
|
|
865
|
+
)
|
|
866
|
+
yield event_payload
|
|
784
867
|
sse_queue.task_done()
|
|
785
868
|
except asyncio.TimeoutError:
|
|
786
869
|
yield {"comment": "keep-alive"}
|
|
787
870
|
continue
|
|
788
871
|
except asyncio.CancelledError:
|
|
789
|
-
log.
|
|
872
|
+
log.debug(
|
|
790
873
|
"%s SSE event generator for stream %s cancelled.",
|
|
791
874
|
log_id_prefix,
|
|
792
875
|
stream_id,
|
|
@@ -800,7 +883,7 @@ async def get_visualization_stream_events(
|
|
|
800
883
|
e,
|
|
801
884
|
)
|
|
802
885
|
finally:
|
|
803
|
-
log.
|
|
886
|
+
log.debug(
|
|
804
887
|
"%s SSE event generator for stream %s finished.",
|
|
805
888
|
log_id_prefix,
|
|
806
889
|
stream_id,
|
|
@@ -1135,4 +1218,4 @@ async def unsubscribe_from_visualization_stream(
|
|
|
1135
1218
|
return Response(status_code=status.HTTP_204_NO_CONTENT)
|
|
1136
1219
|
|
|
1137
1220
|
|
|
1138
|
-
log.info("Router for A2A Message Visualization
|
|
1221
|
+
log.info("Initialized Router for A2A Message Visualization.")
|