solace-agent-mesh 1.7.1__py3-none-any.whl → 1.13.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- 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/artifacts/filesystem_artifact_service.py +164 -0
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
- solace_agent_mesh/agent/adk/callbacks.py +752 -127
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +99 -7
- 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 +34 -16
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
- solace_agent_mesh/agent/adk/runner.py +66 -8
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +41 -1
- solace_agent_mesh/agent/adk/setup.py +220 -32
- solace_agent_mesh/agent/adk/stream_parser.py +229 -40
- solace_agent_mesh/agent/protocol/event_handlers.py +219 -33
- 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/component.py +188 -22
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
- solace_agent_mesh/agent/sac/app.py +37 -12
- solace_agent_mesh/agent/sac/component.py +322 -52
- solace_agent_mesh/agent/sac/patch_adk.py +8 -16
- solace_agent_mesh/agent/sac/task_execution_context.py +90 -0
- 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 +698 -24
- solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -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 +54 -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 +243 -5
- 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/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/64195356.09dbd087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.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/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/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/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/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 +75 -75
- 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 +98 -112
- 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 -28
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -29
- 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 +67 -53
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -17
- 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 +87 -87
- 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 +50 -23
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +29 -24
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +21 -21
- 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 +96 -66
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +181 -181
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +75 -75
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +27 -27
- 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 -38
- 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 +135 -114
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +37 -37
- 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 +112 -112
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +28 -28
- 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/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-tcIFZLis.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-CINwxvwV.js → vendor-CGk8Suyh.js} +189 -94
- 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/types.py +1 -1
- solace_agent_mesh/common/agent_registry.py +38 -11
- solace_agent_mesh/common/data_parts.py +124 -0
- 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 +73 -1
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/common/utils/embeds/converter.py +1 -8
- solace_agent_mesh/common/utils/embeds/modifiers.py +2 -27
- solace_agent_mesh/common/utils/embeds/resolver.py +94 -25
- solace_agent_mesh/common/utils/embeds/types.py +1 -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/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/base.py +28 -1
- solace_agent_mesh/gateway/adapter/types.py +9 -0
- solace_agent_mesh/gateway/base/app.py +10 -0
- solace_agent_mesh/gateway/base/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +451 -10
- solace_agent_mesh/gateway/generic/component.py +274 -30
- solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +2 -43
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +2 -2
- 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 +23 -6
- solace_agent_mesh/gateway/http_sse/component.py +158 -73
- solace_agent_mesh/gateway/http_sse/dependencies.py +50 -57
- solace_agent_mesh/gateway/http_sse/main.py +58 -482
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +3 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +5 -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 +1 -1
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +12 -107
- 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 +113 -7
- solace_agent_mesh/gateway/http_sse/routers/auth.py +69 -132
- solace_agent_mesh/gateway/http_sse/routers/config.py +235 -10
- 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/session_requests.py +1 -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 +1 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +3 -2
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +250 -24
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +14 -5
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +117 -4
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +509 -149
- 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 +2 -1
- 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 +539 -12
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +198 -21
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
- solace_agent_mesh/gateway/http_sse/sse_manager.py +280 -169
- 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 +1 -1
- 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.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +29 -8
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/RECORD +334 -313
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
- solace_agent_mesh/agent/adk/adk_llm.txt +0 -226
- 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 -189
- solace_agent_mesh/agent/agent_llm.txt +0 -369
- 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/proxies/a2a/a2a_llm.txt +0 -190
- solace_agent_mesh/agent/proxies/base/base_llm.txt +0 -148
- solace_agent_mesh/agent/proxies/proxies_llm.txt +0 -283
- 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 -58
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
- solace_agent_mesh/agent/tools/tools_llm.txt +0 -276
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -275
- solace_agent_mesh/agent/utils/utils_llm.txt +0 -152
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
- solace_agent_mesh/assets/docs/assets/js/05749d90.c70b2be9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/15e40e79.36003774.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/240a0364.c39f8388.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.e4870a49.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.b63ee53a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.45b32c2b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/66d4869e.830d443f.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.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.09ed9234.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.245ae0ef.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.f902fad8.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e04b235d.c9c50c7b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.d11c67a7.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.045d0fa1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.5099c51e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.f213fe0c.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.d9606d6a.js +0 -1
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +0 -47
- solace_agent_mesh/assets/docs/lunr-index-1762283454666.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1762283454666.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-CRYdKo2Q.js +0 -25
- solace_agent_mesh/client/webui/frontend/static/assets/main-CojeY_1w.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-ILja9MCG.js +0 -353
- solace_agent_mesh/common/a2a/a2a_llm.txt +0 -175
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -445
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -330
- solace_agent_mesh/common/common_llm.txt +0 -230
- 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 -81
- solace_agent_mesh/common/services/services_llm.txt +0 -368
- 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 -335
- 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 -226
- solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
- solace_agent_mesh/gateway/gateway_llm.txt +0 -369
- solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -345
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_fulltext_search_indexes.py +0 -92
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -161
- 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 -221
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -257
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -308
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -450
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -133
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -123
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -312
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -303
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -319
- 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/assets/docs/assets/js/{main.f213fe0c.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.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.7.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Add background task execution fields
|
|
2
|
+
|
|
3
|
+
Revision ID: 20251126_background_tasks
|
|
4
|
+
Revises: 20251202_versioned_prompt_fields
|
|
5
|
+
Create Date: 2025-11-26 17:30:00.000000
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from alembic import op
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = '20251126_background_tasks'
|
|
14
|
+
down_revision = '20251202_versioned_prompt_fields'
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
"""Add fields to support background task execution."""
|
|
21
|
+
# Add execution_mode column (foreground | background)
|
|
22
|
+
op.add_column('tasks', sa.Column('execution_mode', sa.String(20), nullable=True, server_default='foreground'))
|
|
23
|
+
|
|
24
|
+
# Add last_activity_time for timeout detection
|
|
25
|
+
op.add_column('tasks', sa.Column('last_activity_time', sa.BigInteger, nullable=True))
|
|
26
|
+
|
|
27
|
+
# Add background_execution_enabled flag
|
|
28
|
+
op.add_column('tasks', sa.Column('background_execution_enabled', sa.Boolean, nullable=True, server_default='false'))
|
|
29
|
+
|
|
30
|
+
# Add max_execution_time_ms for timeout configuration
|
|
31
|
+
op.add_column('tasks', sa.Column('max_execution_time_ms', sa.BigInteger, nullable=True))
|
|
32
|
+
|
|
33
|
+
# Create index on execution_mode for efficient queries
|
|
34
|
+
op.create_index('idx_tasks_execution_mode', 'tasks', ['execution_mode'])
|
|
35
|
+
|
|
36
|
+
# Create index on last_activity_time for timeout monitoring
|
|
37
|
+
op.create_index('idx_tasks_last_activity', 'tasks', ['last_activity_time'])
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def downgrade():
|
|
41
|
+
"""Remove background task execution fields."""
|
|
42
|
+
op.drop_index('idx_tasks_last_activity', table_name='tasks')
|
|
43
|
+
op.drop_index('idx_tasks_execution_mode', table_name='tasks')
|
|
44
|
+
op.drop_column('tasks', 'max_execution_time_ms')
|
|
45
|
+
op.drop_column('tasks', 'background_execution_enabled')
|
|
46
|
+
op.drop_column('tasks', 'last_activity_time')
|
|
47
|
+
op.drop_column('tasks', 'execution_mode')
|
solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""Add versioned metadata fields to prompts table
|
|
2
|
+
|
|
3
|
+
Revision ID: 20251202_versioned_prompt_fields
|
|
4
|
+
Revises: 20251115_add_parent_task_id
|
|
5
|
+
Create Date: 2025-12-02
|
|
6
|
+
|
|
7
|
+
This migration adds name, description, category, and command fields to the prompts table
|
|
8
|
+
to enable full versioning of all prompt metadata, not just the prompt_text content.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from collections.abc import Sequence
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
from alembic import op
|
|
14
|
+
|
|
15
|
+
revision: str = "20251202_versioned_prompt_fields"
|
|
16
|
+
down_revision: str | Sequence[str] | None = "20251115_add_parent_task_id"
|
|
17
|
+
branch_labels: str | Sequence[str] | None = None
|
|
18
|
+
depends_on: str | Sequence[str] | None = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade() -> None:
|
|
22
|
+
"""Add versioned metadata fields to prompts table."""
|
|
23
|
+
|
|
24
|
+
# Add new columns to prompts table
|
|
25
|
+
with op.batch_alter_table('prompts', schema=None) as batch_op:
|
|
26
|
+
batch_op.add_column(sa.Column('name', sa.String(length=255), nullable=True))
|
|
27
|
+
batch_op.add_column(sa.Column('description', sa.Text(), nullable=True))
|
|
28
|
+
batch_op.add_column(sa.Column('category', sa.String(length=100), nullable=True))
|
|
29
|
+
batch_op.add_column(sa.Column('command', sa.String(length=50), nullable=True))
|
|
30
|
+
|
|
31
|
+
# Migrate existing data: copy metadata from prompt_groups to prompts
|
|
32
|
+
# This ensures existing prompt versions have the metadata from their group
|
|
33
|
+
connection = op.get_bind()
|
|
34
|
+
connection.execute(sa.text("""
|
|
35
|
+
UPDATE prompts
|
|
36
|
+
SET name = pg.name,
|
|
37
|
+
description = pg.description,
|
|
38
|
+
category = pg.category,
|
|
39
|
+
command = pg.command
|
|
40
|
+
FROM prompt_groups pg
|
|
41
|
+
WHERE prompts.group_id = pg.id
|
|
42
|
+
"""))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def downgrade() -> None:
|
|
46
|
+
"""Remove versioned metadata fields from prompts table."""
|
|
47
|
+
|
|
48
|
+
with op.batch_alter_table('prompts', schema=None) as batch_op:
|
|
49
|
+
batch_op.drop_column('command')
|
|
50
|
+
batch_op.drop_column('category')
|
|
51
|
+
batch_op.drop_column('description')
|
|
52
|
+
batch_op.drop_column('name')
|
|
@@ -107,39 +107,3 @@ path_separator = os
|
|
|
107
107
|
# ruff.type = exec
|
|
108
108
|
# ruff.executable = ruff
|
|
109
109
|
# ruff.options = check --fix REVISION_SCRIPT_FILENAME
|
|
110
|
-
|
|
111
|
-
# Logging configuration. This is also consumed by the user-maintained
|
|
112
|
-
# env.py script only.
|
|
113
|
-
[loggers]
|
|
114
|
-
keys = root,sqlalchemy,alembic
|
|
115
|
-
|
|
116
|
-
[handlers]
|
|
117
|
-
keys = console
|
|
118
|
-
|
|
119
|
-
[formatters]
|
|
120
|
-
keys = generic
|
|
121
|
-
|
|
122
|
-
[logger_root]
|
|
123
|
-
level = WARNING
|
|
124
|
-
handlers = console
|
|
125
|
-
qualname =
|
|
126
|
-
|
|
127
|
-
[logger_sqlalchemy]
|
|
128
|
-
level = WARNING
|
|
129
|
-
handlers =
|
|
130
|
-
qualname = sqlalchemy.engine
|
|
131
|
-
|
|
132
|
-
[logger_alembic]
|
|
133
|
-
level = INFO
|
|
134
|
-
handlers =
|
|
135
|
-
qualname = alembic
|
|
136
|
-
|
|
137
|
-
[handler_console]
|
|
138
|
-
class = StreamHandler
|
|
139
|
-
args = (sys.stderr,)
|
|
140
|
-
level = NOTSET
|
|
141
|
-
formatter = generic
|
|
142
|
-
|
|
143
|
-
[formatter_generic]
|
|
144
|
-
format = %(levelname)-5.5s [%(name)s] %(message)s
|
|
145
|
-
datefmt = %H:%M:%S
|
|
@@ -166,6 +166,20 @@ class WebUIBackendApp(BaseGatewayApp):
|
|
|
166
166
|
"default": "",
|
|
167
167
|
"description": "The passphrase for the SSL private key.",
|
|
168
168
|
},
|
|
169
|
+
{
|
|
170
|
+
"name": "frontend_server_url",
|
|
171
|
+
"required": False,
|
|
172
|
+
"type": "string",
|
|
173
|
+
"default": "",
|
|
174
|
+
"description": (
|
|
175
|
+
"The WebUI Gateway's public URL for frontend API requests. "
|
|
176
|
+
"If empty (default), the frontend uses relative URLs for same-origin requests. "
|
|
177
|
+
"Only set this if the frontend is served from a different origin than the WebUI Gateway. "
|
|
178
|
+
"Examples: "
|
|
179
|
+
" - Same-origin (default): '' (empty, uses relative URLs like /api/v1/...) "
|
|
180
|
+
" - Cross-origin: https://webui-gateway.example.com"
|
|
181
|
+
),
|
|
182
|
+
},
|
|
169
183
|
{
|
|
170
184
|
"name": "session_service",
|
|
171
185
|
"required": False,
|
|
@@ -193,16 +207,19 @@ class WebUIBackendApp(BaseGatewayApp):
|
|
|
193
207
|
"required": False,
|
|
194
208
|
"type": "dict",
|
|
195
209
|
"default": {},
|
|
196
|
-
"description": "Configuration for the Platform Service (
|
|
210
|
+
"description": "Configuration for connecting to the Platform Service (runs separately on port 8001).",
|
|
197
211
|
"dict_schema": {
|
|
198
|
-
"
|
|
212
|
+
"url": {
|
|
199
213
|
"type": "string",
|
|
200
214
|
"required": False,
|
|
201
|
-
"default":
|
|
215
|
+
"default": "",
|
|
202
216
|
"description": (
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
"
|
|
217
|
+
"Platform Service URL for frontend API routing to enterprise endpoints. "
|
|
218
|
+
"Frontend will call this URL for /api/v1/platform/* requests. "
|
|
219
|
+
"Examples: "
|
|
220
|
+
" - Docker: http://platform-service:8001 "
|
|
221
|
+
" - K8s: http://platform-service:8001 "
|
|
222
|
+
" - Local: http://localhost:8001"
|
|
206
223
|
),
|
|
207
224
|
},
|
|
208
225
|
},
|
|
@@ -124,6 +124,13 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
124
124
|
self.ssl_keyfile_password = self.get_config("ssl_keyfile_password", "")
|
|
125
125
|
self.model_config = self.get_config("model", None)
|
|
126
126
|
|
|
127
|
+
# OAuth2 configuration (enterprise feature - defaults to community mode)
|
|
128
|
+
self.external_auth_service_url = self.get_config("external_auth_service_url", "")
|
|
129
|
+
self.external_auth_provider = self.get_config("external_auth_provider", "generic")
|
|
130
|
+
|
|
131
|
+
# frontend_server_url is optional - empty string means frontend uses relative URLs
|
|
132
|
+
self.frontend_server_url = self.get_config("frontend_server_url", "")
|
|
133
|
+
|
|
127
134
|
log.info(
|
|
128
135
|
"%s WebUI-specific configuration retrieved (Host: %s, Port: %d).",
|
|
129
136
|
self.log_identifier,
|
|
@@ -134,16 +141,15 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
134
141
|
log.error("%s Failed to retrieve configuration: %s", self.log_identifier, e)
|
|
135
142
|
raise ValueError(f"Configuration retrieval error: {e}") from e
|
|
136
143
|
|
|
137
|
-
sse_max_queue_size = self.get_config("sse_max_queue_size", 200)
|
|
144
|
+
self.sse_max_queue_size = self.get_config("sse_max_queue_size", 200)
|
|
138
145
|
sse_buffer_max_age_seconds = self.get_config("sse_buffer_max_age_seconds", 600)
|
|
139
146
|
|
|
140
147
|
self.sse_event_buffer = SSEEventBuffer(
|
|
141
|
-
max_queue_size=sse_max_queue_size,
|
|
148
|
+
max_queue_size=self.sse_max_queue_size,
|
|
142
149
|
max_age_seconds=sse_buffer_max_age_seconds,
|
|
143
150
|
)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
)
|
|
151
|
+
# SSE manager will be initialized after database setup
|
|
152
|
+
self.sse_manager = None
|
|
147
153
|
|
|
148
154
|
self._sse_cleanup_timer_id = f"sse_cleanup_{self.gateway_id}"
|
|
149
155
|
cleanup_interval_sec = self.get_config(
|
|
@@ -212,7 +218,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
212
218
|
)
|
|
213
219
|
|
|
214
220
|
platform_config = self.get_config("platform_service", {})
|
|
215
|
-
self.
|
|
221
|
+
self.platform_service_url = platform_config.get("url", "")
|
|
216
222
|
component_config = self.get_config("component_config", {})
|
|
217
223
|
app_config = component_config.get("app_config", {})
|
|
218
224
|
|
|
@@ -240,6 +246,10 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
240
246
|
self._task_logger_broker_input: BrokerInput | None = None
|
|
241
247
|
self._task_logger_processor_task: asyncio.Task | None = None
|
|
242
248
|
self.task_logger_service: TaskLoggerService | None = None
|
|
249
|
+
|
|
250
|
+
# Background task monitor
|
|
251
|
+
self.background_task_monitor = None
|
|
252
|
+
self._background_task_monitor_timer_id = None
|
|
243
253
|
|
|
244
254
|
# Initialize SAM Events service for system events
|
|
245
255
|
from ...common.sam_events import SamEventService
|
|
@@ -298,8 +308,27 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
298
308
|
"%s Data retention is disabled via configuration.", self.log_identifier
|
|
299
309
|
)
|
|
300
310
|
|
|
311
|
+
if self.database_url:
|
|
312
|
+
log.info("%s Running database migrations...", self.log_identifier)
|
|
313
|
+
self._run_database_migrations()
|
|
314
|
+
log.info("%s Database migrations completed", self.log_identifier)
|
|
315
|
+
|
|
301
316
|
log.info("%s Web UI Backend Component initialized.", self.log_identifier)
|
|
302
317
|
|
|
318
|
+
def _run_database_migrations(self):
|
|
319
|
+
"""Run database migrations synchronously during __init__."""
|
|
320
|
+
try:
|
|
321
|
+
from ...gateway.http_sse.main import _setup_database
|
|
322
|
+
_setup_database(self.database_url)
|
|
323
|
+
except Exception as e:
|
|
324
|
+
log.error(
|
|
325
|
+
"%s Failed to run database migrations: %s",
|
|
326
|
+
self.log_identifier,
|
|
327
|
+
e,
|
|
328
|
+
exc_info=True
|
|
329
|
+
)
|
|
330
|
+
raise RuntimeError(f"Database migration failed during component initialization: {e}") from e
|
|
331
|
+
|
|
303
332
|
def process_event(self, event: Event):
|
|
304
333
|
if event.event_type == EventType.TIMER:
|
|
305
334
|
timer_id = event.data.get("timer_id")
|
|
@@ -333,6 +362,27 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
333
362
|
self.log_identifier,
|
|
334
363
|
)
|
|
335
364
|
return
|
|
365
|
+
|
|
366
|
+
if timer_id == self._background_task_monitor_timer_id:
|
|
367
|
+
log.debug("%s Background task monitor timer triggered.", self.log_identifier)
|
|
368
|
+
if self.background_task_monitor:
|
|
369
|
+
loop = self.get_async_loop()
|
|
370
|
+
if loop and loop.is_running():
|
|
371
|
+
asyncio.run_coroutine_threadsafe(
|
|
372
|
+
self.background_task_monitor.check_timeouts(),
|
|
373
|
+
loop
|
|
374
|
+
)
|
|
375
|
+
else:
|
|
376
|
+
log.warning(
|
|
377
|
+
"%s Async loop not available for background task monitor.",
|
|
378
|
+
self.log_identifier
|
|
379
|
+
)
|
|
380
|
+
else:
|
|
381
|
+
log.warning(
|
|
382
|
+
"%s Background task monitor timer fired but service is not initialized.",
|
|
383
|
+
self.log_identifier,
|
|
384
|
+
)
|
|
385
|
+
return
|
|
336
386
|
|
|
337
387
|
super().process_event(event)
|
|
338
388
|
|
|
@@ -388,7 +438,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
388
438
|
broker_input_cfg = {
|
|
389
439
|
"component_module": "broker_input",
|
|
390
440
|
"component_name": f"{self.gateway_id}_viz_broker_input",
|
|
391
|
-
"broker_queue_name": f"{self.namespace.strip('/')}/q/gdk/viz/{self.gateway_id}
|
|
441
|
+
"broker_queue_name": f"{self.namespace.strip('/')}/q/gdk/viz/{self.gateway_id}",
|
|
392
442
|
"create_queue_on_start": True,
|
|
393
443
|
"component_config": {
|
|
394
444
|
"broker_url": main_broker_config.get("broker_url"),
|
|
@@ -522,7 +572,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
522
572
|
broker_input_cfg = {
|
|
523
573
|
"component_module": "broker_input",
|
|
524
574
|
"component_name": f"{self.gateway_id}_task_log_broker_input",
|
|
525
|
-
"broker_queue_name": f"{self.namespace.strip('/')}/q/gdk/task_log/{self.gateway_id}
|
|
575
|
+
"broker_queue_name": f"{self.namespace.strip('/')}/q/gdk/task_log/{self.gateway_id}",
|
|
526
576
|
"create_queue_on_start": True,
|
|
527
577
|
"component_config": {
|
|
528
578
|
"broker_url": main_broker_config.get("broker_url"),
|
|
@@ -812,11 +862,34 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
812
862
|
event_details["direction"],
|
|
813
863
|
)
|
|
814
864
|
except asyncio.QueueFull:
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
865
|
+
# Check if this is a background task
|
|
866
|
+
is_background = False
|
|
867
|
+
if task_id_for_context and self.database_url:
|
|
868
|
+
try:
|
|
869
|
+
from .repository.task_repository import TaskRepository
|
|
870
|
+
db = dependencies.SessionLocal()
|
|
871
|
+
try:
|
|
872
|
+
repo = TaskRepository()
|
|
873
|
+
task = repo.find_by_id(db, task_id_for_context)
|
|
874
|
+
is_background = task and task.background_execution_enabled
|
|
875
|
+
finally:
|
|
876
|
+
db.close()
|
|
877
|
+
except Exception:
|
|
878
|
+
pass
|
|
879
|
+
|
|
880
|
+
if is_background:
|
|
881
|
+
log.debug(
|
|
882
|
+
"%s SSE queue full for stream %s. Dropping visualization message for background task %s.",
|
|
883
|
+
log_id_prefix,
|
|
884
|
+
stream_id,
|
|
885
|
+
task_id_for_context,
|
|
886
|
+
)
|
|
887
|
+
else:
|
|
888
|
+
log.warning(
|
|
889
|
+
"%s SSE queue full for stream %s. Visualization message dropped.",
|
|
890
|
+
log_id_prefix,
|
|
891
|
+
stream_id,
|
|
892
|
+
)
|
|
820
893
|
except Exception as send_err:
|
|
821
894
|
log.error(
|
|
822
895
|
"%s Error sending formatted message to SSE queue for stream %s: %s",
|
|
@@ -1229,11 +1302,22 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1229
1302
|
|
|
1230
1303
|
self.fastapi_app = fastapi_app_instance
|
|
1231
1304
|
|
|
1232
|
-
setup_dependencies(self
|
|
1305
|
+
setup_dependencies(self)
|
|
1233
1306
|
|
|
1234
1307
|
# Instantiate services that depend on the database session factory.
|
|
1235
1308
|
# This must be done *after* setup_dependencies has run.
|
|
1236
1309
|
session_factory = dependencies.SessionLocal if self.database_url else None
|
|
1310
|
+
|
|
1311
|
+
# Initialize SSE manager with session factory for background task detection
|
|
1312
|
+
self.sse_manager = SSEManager(
|
|
1313
|
+
max_queue_size=self.sse_max_queue_size,
|
|
1314
|
+
event_buffer=self.sse_event_buffer,
|
|
1315
|
+
session_factory=session_factory
|
|
1316
|
+
)
|
|
1317
|
+
log.debug(
|
|
1318
|
+
"%s SSE manager initialized with database session factory.",
|
|
1319
|
+
self.log_identifier,
|
|
1320
|
+
)
|
|
1237
1321
|
task_logging_config = self.get_config("task_logging", {})
|
|
1238
1322
|
self.task_logger_service = TaskLoggerService(
|
|
1239
1323
|
session_factory=session_factory, config=task_logging_config
|
|
@@ -1242,6 +1326,55 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1242
1326
|
"%s Services dependent on database session factory have been initialized.",
|
|
1243
1327
|
self.log_identifier,
|
|
1244
1328
|
)
|
|
1329
|
+
|
|
1330
|
+
# Initialize background task monitor if task logging is enabled
|
|
1331
|
+
if self.database_url and task_logging_config.get("enabled", False):
|
|
1332
|
+
from .services.background_task_monitor import BackgroundTaskMonitor
|
|
1333
|
+
from .services.task_service import TaskService
|
|
1334
|
+
|
|
1335
|
+
# Create task service for cancellation operations
|
|
1336
|
+
task_service = TaskService(
|
|
1337
|
+
core_a2a_service=self.core_a2a_service,
|
|
1338
|
+
publish_func=self.publish_a2a,
|
|
1339
|
+
namespace=self.namespace,
|
|
1340
|
+
gateway_id=self.gateway_id,
|
|
1341
|
+
sse_manager=self.sse_manager,
|
|
1342
|
+
task_context_map=self.task_context_manager._contexts,
|
|
1343
|
+
task_context_lock=self.task_context_manager._lock,
|
|
1344
|
+
app_name=self.name,
|
|
1345
|
+
)
|
|
1346
|
+
|
|
1347
|
+
# Get timeout configuration
|
|
1348
|
+
background_config = self.get_config("background_tasks", {})
|
|
1349
|
+
default_timeout_ms = background_config.get("default_timeout_ms", 3600000) # 1 hour
|
|
1350
|
+
|
|
1351
|
+
self.background_task_monitor = BackgroundTaskMonitor(
|
|
1352
|
+
session_factory=session_factory,
|
|
1353
|
+
task_service=task_service,
|
|
1354
|
+
default_timeout_ms=default_timeout_ms,
|
|
1355
|
+
)
|
|
1356
|
+
|
|
1357
|
+
# Create timer for periodic timeout checks
|
|
1358
|
+
monitor_interval_ms = background_config.get("monitor_interval_ms", 300000) # 5 minutes
|
|
1359
|
+
self._background_task_monitor_timer_id = f"background_task_monitor_{self.gateway_id}"
|
|
1360
|
+
|
|
1361
|
+
self.add_timer(
|
|
1362
|
+
delay_ms=monitor_interval_ms,
|
|
1363
|
+
timer_id=self._background_task_monitor_timer_id,
|
|
1364
|
+
interval_ms=monitor_interval_ms,
|
|
1365
|
+
)
|
|
1366
|
+
|
|
1367
|
+
log.info(
|
|
1368
|
+
"%s Background task monitor initialized with %dms check interval and %dms default timeout",
|
|
1369
|
+
self.log_identifier,
|
|
1370
|
+
monitor_interval_ms,
|
|
1371
|
+
default_timeout_ms
|
|
1372
|
+
)
|
|
1373
|
+
else:
|
|
1374
|
+
log.info(
|
|
1375
|
+
"%s Background task monitor not initialized (task logging disabled or no database)",
|
|
1376
|
+
self.log_identifier
|
|
1377
|
+
)
|
|
1245
1378
|
|
|
1246
1379
|
port = (
|
|
1247
1380
|
self.fastapi_https_port
|
|
@@ -1258,6 +1391,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1258
1391
|
ssl_keyfile=self.ssl_keyfile,
|
|
1259
1392
|
ssl_certfile=self.ssl_certfile,
|
|
1260
1393
|
ssl_keyfile_password=self.ssl_keyfile_password,
|
|
1394
|
+
log_config=None
|
|
1261
1395
|
)
|
|
1262
1396
|
self.uvicorn_server = uvicorn.Server(config)
|
|
1263
1397
|
|
|
@@ -1345,39 +1479,6 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1345
1479
|
)
|
|
1346
1480
|
self.stop_signal.set()
|
|
1347
1481
|
|
|
1348
|
-
try:
|
|
1349
|
-
from solace_agent_mesh_enterprise.init_enterprise import (
|
|
1350
|
-
start_enterprise_background_tasks,
|
|
1351
|
-
)
|
|
1352
|
-
|
|
1353
|
-
log.info(
|
|
1354
|
-
"%s Starting enterprise background tasks...",
|
|
1355
|
-
self.log_identifier,
|
|
1356
|
-
)
|
|
1357
|
-
await start_enterprise_background_tasks(self)
|
|
1358
|
-
log.info(
|
|
1359
|
-
"%s Enterprise background tasks started successfully",
|
|
1360
|
-
self.log_identifier,
|
|
1361
|
-
)
|
|
1362
|
-
except ImportError:
|
|
1363
|
-
log.debug(
|
|
1364
|
-
"%s Enterprise package not available - skipping background tasks",
|
|
1365
|
-
self.log_identifier,
|
|
1366
|
-
)
|
|
1367
|
-
except RuntimeError as enterprise_err:
|
|
1368
|
-
log.warning(
|
|
1369
|
-
"%s Enterprise background tasks disabled: %s - Community features will continue normally",
|
|
1370
|
-
self.log_identifier,
|
|
1371
|
-
enterprise_err,
|
|
1372
|
-
)
|
|
1373
|
-
except Exception as enterprise_err:
|
|
1374
|
-
log.error(
|
|
1375
|
-
"%s Failed to start enterprise background tasks: %s - Community features will continue normally",
|
|
1376
|
-
self.log_identifier,
|
|
1377
|
-
enterprise_err,
|
|
1378
|
-
exc_info=True,
|
|
1379
|
-
)
|
|
1380
|
-
|
|
1381
1482
|
@self.fastapi_app.on_event("shutdown")
|
|
1382
1483
|
async def shutdown_event():
|
|
1383
1484
|
log.info(
|
|
@@ -1385,32 +1486,6 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1385
1486
|
self.log_identifier,
|
|
1386
1487
|
)
|
|
1387
1488
|
|
|
1388
|
-
try:
|
|
1389
|
-
from solace_agent_mesh_enterprise.init_enterprise import (
|
|
1390
|
-
stop_enterprise_background_tasks,
|
|
1391
|
-
)
|
|
1392
|
-
|
|
1393
|
-
log.info(
|
|
1394
|
-
"%s Stopping enterprise background tasks...",
|
|
1395
|
-
self.log_identifier,
|
|
1396
|
-
)
|
|
1397
|
-
await stop_enterprise_background_tasks()
|
|
1398
|
-
log.info(
|
|
1399
|
-
"%s Enterprise background tasks stopped", self.log_identifier
|
|
1400
|
-
)
|
|
1401
|
-
except ImportError:
|
|
1402
|
-
log.debug(
|
|
1403
|
-
"%s Enterprise package not available - no background tasks to stop",
|
|
1404
|
-
self.log_identifier,
|
|
1405
|
-
)
|
|
1406
|
-
except Exception as enterprise_err:
|
|
1407
|
-
log.error(
|
|
1408
|
-
"%s Failed to stop enterprise background tasks: %s",
|
|
1409
|
-
self.log_identifier,
|
|
1410
|
-
enterprise_err,
|
|
1411
|
-
exc_info=True,
|
|
1412
|
-
)
|
|
1413
|
-
|
|
1414
1489
|
self.fastapi_thread = threading.Thread(
|
|
1415
1490
|
target=self.uvicorn_server.run, daemon=True, name="FastAPI_Thread"
|
|
1416
1491
|
)
|
|
@@ -1479,11 +1554,20 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
1479
1554
|
if self._data_retention_timer_id:
|
|
1480
1555
|
self.cancel_timer(self._data_retention_timer_id)
|
|
1481
1556
|
log.info("%s Cancelled data retention cleanup timer.", self.log_identifier)
|
|
1557
|
+
|
|
1558
|
+
if self._background_task_monitor_timer_id:
|
|
1559
|
+
self.cancel_timer(self._background_task_monitor_timer_id)
|
|
1560
|
+
log.info("%s Cancelled background task monitor timer.", self.log_identifier)
|
|
1482
1561
|
|
|
1483
1562
|
# Clean up data retention service
|
|
1484
1563
|
if self.data_retention_service:
|
|
1485
1564
|
self.data_retention_service = None
|
|
1486
1565
|
log.info("%s Data retention service cleaned up.", self.log_identifier)
|
|
1566
|
+
|
|
1567
|
+
# Clean up background task monitor
|
|
1568
|
+
if self.background_task_monitor:
|
|
1569
|
+
self.background_task_monitor = None
|
|
1570
|
+
log.info("%s Background task monitor cleaned up.", self.log_identifier)
|
|
1487
1571
|
|
|
1488
1572
|
self.cancel_timer(self.health_check_timer_id)
|
|
1489
1573
|
log.info("%s Cleaning up visualization resources...", self.log_identifier)
|
|
@@ -2187,6 +2271,7 @@ class WebUIBackendComponent(BaseGatewayComponent):
|
|
|
2187
2271
|
log_id_prefix,
|
|
2188
2272
|
sse_task_id,
|
|
2189
2273
|
)
|
|
2274
|
+
|
|
2190
2275
|
|
|
2191
2276
|
async def _send_error_to_external(
|
|
2192
2277
|
self, external_request_context: dict[str, Any], error_data: JSONRPCError
|