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