solace-agent-mesh 1.11.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.
- solace_agent_mesh/__init__.py +0 -0
- solace_agent_mesh/agent/__init__.py +0 -0
- solace_agent_mesh/agent/adk/__init__.py +0 -0
- solace_agent_mesh/agent/adk/adk_llm.txt +226 -0
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
- solace_agent_mesh/agent/adk/alembic/README +74 -0
- solace_agent_mesh/agent/adk/alembic/env.py +77 -0
- solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
- solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
- solace_agent_mesh/agent/adk/alembic.ini +112 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +52 -0
- solace_agent_mesh/agent/adk/artifacts/__init__.py +1 -0
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +171 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +545 -0
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +609 -0
- solace_agent_mesh/agent/adk/callbacks.py +2318 -0
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +406 -0
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +415 -0
- solace_agent_mesh/agent/adk/mcp_content_processor.py +666 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +1026 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +189 -0
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +132 -0
- solace_agent_mesh/agent/adk/runner.py +390 -0
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +468 -0
- solace_agent_mesh/agent/adk/setup.py +1325 -0
- solace_agent_mesh/agent/adk/stream_parser.py +415 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +165 -0
- solace_agent_mesh/agent/agent_llm.txt +369 -0
- solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
- solace_agent_mesh/agent/protocol/__init__.py +0 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +2041 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +81 -0
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
- solace_agent_mesh/agent/proxies/__init__.py +0 -0
- solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
- solace_agent_mesh/agent/proxies/a2a/app.py +56 -0
- solace_agent_mesh/agent/proxies/a2a/component.py +1585 -0
- solace_agent_mesh/agent/proxies/a2a/config.py +216 -0
- solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
- solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/base/app.py +100 -0
- solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
- solace_agent_mesh/agent/proxies/base/component.py +816 -0
- solace_agent_mesh/agent/proxies/base/config.py +85 -0
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +19 -0
- solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
- solace_agent_mesh/agent/sac/__init__.py +0 -0
- solace_agent_mesh/agent/sac/app.py +595 -0
- solace_agent_mesh/agent/sac/component.py +3668 -0
- solace_agent_mesh/agent/sac/patch_adk.py +103 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +189 -0
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +415 -0
- solace_agent_mesh/agent/testing/__init__.py +3 -0
- solace_agent_mesh/agent/testing/debug_utils.py +135 -0
- solace_agent_mesh/agent/testing/testing_llm.txt +58 -0
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
- solace_agent_mesh/agent/tools/__init__.py +16 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1740 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +2500 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +244 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +396 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +572 -0
- solace_agent_mesh/agent/tools/image_tools.py +1185 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +363 -0
- solace_agent_mesh/agent/tools/registry.py +38 -0
- solace_agent_mesh/agent/tools/test_tools.py +136 -0
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +93 -0
- solace_agent_mesh/agent/tools/tool_definition.py +53 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +276 -0
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +275 -0
- solace_agent_mesh/agent/tools/web_tools.py +392 -0
- solace_agent_mesh/agent/utils/__init__.py +0 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +1353 -0
- solace_agent_mesh/agent/utils/config_parser.py +49 -0
- solace_agent_mesh/agent/utils/context_helpers.py +77 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +152 -0
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.8162edfb.css +1 -0
- solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sam-enterprise-credentials-b269f095349473118b2b33bdfcc40122.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/032c2d61.f3d37824.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js.LICENSE.txt +13 -0
- solace_agent_mesh/assets/docs/assets/js/2334.1cf50a20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.0eaa1fd0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.28b7c67b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2ddc75c0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.48b12a4e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/509e993c.a1fbf45a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.90a87880.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js.LICENSE.txt +61 -0
- solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8731.6c1dbf0c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.b2333011.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.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/ceb2a7a6.5d92d7d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db924877.e98d12a1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de5f4c65.e8241890.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +166 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +101 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +219 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +92 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +345 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +83 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +84 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +60 -0
- 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 +144 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +191 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +140 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +37 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +86 -0
- 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 +247 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +184 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +75 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +290 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +100 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +52 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
- solace_agent_mesh/assets/docs/img/logo.png +0 -0
- solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
- solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
- solace_agent_mesh/assets/docs/img/sam-enterprise-credentials.png +0 -0
- solace_agent_mesh/assets/docs/img/solace-logo-text.svg +18 -0
- solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1765810064709.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -0
- solace_agent_mesh/assets/docs/sitemap.xml +1 -0
- solace_agent_mesh/cli/__init__.py +1 -0
- solace_agent_mesh/cli/commands/__init__.py +0 -0
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +729 -0
- solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +102 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +114 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +60 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +46 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +439 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/database_step.py +91 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +238 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +464 -0
- solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
- solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +119 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +215 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +20 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +137 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +144 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +306 -0
- solace_agent_mesh/cli/commands/plugin_cmd/install_cmd.py +283 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +215 -0
- solace_agent_mesh/cli/main.py +52 -0
- solace_agent_mesh/cli/utils.py +262 -0
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-Dj3JtK42.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-ZKk9kEJ5.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-BcUaNZ-Q.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BNV4kZN0.js +535 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +15 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +16 -0
- 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/__init__.py +1 -0
- solace_agent_mesh/common/a2a/__init__.py +241 -0
- solace_agent_mesh/common/a2a/a2a_llm.txt +175 -0
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
- solace_agent_mesh/common/a2a/artifact.py +368 -0
- solace_agent_mesh/common/a2a/events.py +213 -0
- solace_agent_mesh/common/a2a/message.py +375 -0
- solace_agent_mesh/common/a2a/protocol.py +689 -0
- solace_agent_mesh/common/a2a/task.py +127 -0
- solace_agent_mesh/common/a2a/translation.py +655 -0
- solace_agent_mesh/common/a2a/types.py +55 -0
- solace_agent_mesh/common/a2a_spec/a2a.json +2576 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +445 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
- solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json +18 -0
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +48 -0
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +41 -0
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +330 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_invocation_start.json +26 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +48 -0
- solace_agent_mesh/common/agent_registry.py +122 -0
- solace_agent_mesh/common/common_llm.txt +230 -0
- solace_agent_mesh/common/common_llm_detail.txt +2562 -0
- solace_agent_mesh/common/constants.py +6 -0
- solace_agent_mesh/common/data_parts.py +150 -0
- solace_agent_mesh/common/exceptions.py +49 -0
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +132 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
- solace_agent_mesh/common/middleware/registry.py +127 -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/sac/__init__.py +0 -0
- solace_agent_mesh/common/sac/sac_llm.txt +71 -0
- solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
- solace_agent_mesh/common/sac/sam_component_base.py +730 -0
- solace_agent_mesh/common/sam_events/__init__.py +9 -0
- solace_agent_mesh/common/sam_events/event_service.py +208 -0
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +164 -0
- solace_agent_mesh/common/services/identity_service.py +134 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +151 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +81 -0
- solace_agent_mesh/common/services/services_llm.txt +368 -0
- solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/artifact_utils.py +31 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +88 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +56 -0
- solace_agent_mesh/common/utils/embeds/converter.py +447 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +220 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +395 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +793 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +967 -0
- solace_agent_mesh/common/utils/embeds/types.py +23 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/initializer.py +52 -0
- solace_agent_mesh/common/utils/log_formatters.py +64 -0
- solace_agent_mesh/common/utils/message_utils.py +80 -0
- solace_agent_mesh/common/utils/mime_helpers.py +172 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +135 -0
- solace_agent_mesh/common/utils/pydantic_utils.py +159 -0
- 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/common/utils/type_utils.py +28 -0
- solace_agent_mesh/common/utils/utils_llm.txt +335 -0
- solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
- solace_agent_mesh/config_portal/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/common.py +77 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +166 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
- solace_agent_mesh/config_portal/backend/server.py +644 -0
- solace_agent_mesh/config_portal/frontend/static/client/Solace_community_logo.png +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DiOiAjzL.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-Rk0n-9cK.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/entry.client-mvZjNKiz.js +19 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DzNKzXrc.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-ba77705e.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-B17tZKK7.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-V2BeTIUc.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/favicon.ico +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +7 -0
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +90 -0
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
- solace_agent_mesh/core_a2a/service.py +307 -0
- solace_agent_mesh/evaluation/__init__.py +0 -0
- solace_agent_mesh/evaluation/evaluator.py +691 -0
- solace_agent_mesh/evaluation/message_organizer.py +553 -0
- solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
- solace_agent_mesh/evaluation/report/chart_section.html +141 -0
- solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
- solace_agent_mesh/evaluation/report/modal.html +59 -0
- solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
- solace_agent_mesh/evaluation/report/modal_script.js +296 -0
- solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
- solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
- solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
- solace_agent_mesh/evaluation/report/templates/header.html +340 -0
- solace_agent_mesh/evaluation/report_data_processor.py +970 -0
- solace_agent_mesh/evaluation/report_generator.py +607 -0
- solace_agent_mesh/evaluation/run.py +954 -0
- solace_agent_mesh/evaluation/shared/__init__.py +92 -0
- solace_agent_mesh/evaluation/shared/constants.py +47 -0
- solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
- solace_agent_mesh/evaluation/shared/helpers.py +35 -0
- solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
- solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
- solace_agent_mesh/evaluation/subscriber.py +776 -0
- solace_agent_mesh/evaluation/summary_builder.py +880 -0
- solace_agent_mesh/gateway/__init__.py +0 -0
- solace_agent_mesh/gateway/adapter/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +143 -0
- solace_agent_mesh/gateway/adapter/types.py +221 -0
- solace_agent_mesh/gateway/base/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +345 -0
- solace_agent_mesh/gateway/base/base_llm.txt +226 -0
- solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
- solace_agent_mesh/gateway/base/component.py +2030 -0
- solace_agent_mesh/gateway/base/task_context.py +75 -0
- solace_agent_mesh/gateway/gateway_llm.txt +369 -0
- solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
- solace_agent_mesh/gateway/generic/__init__.py +1 -0
- solace_agent_mesh/gateway/generic/app.py +50 -0
- solace_agent_mesh/gateway/generic/component.py +727 -0
- solace_agent_mesh/gateway/http_sse/__init__.py +0 -0
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +345 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +87 -0
- solace_agent_mesh/gateway/http_sse/alembic/script.py.mako +28 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250910_d5b3f8f2e9a0_create_initial_database.py +58 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250911_b1c2d3e4f5g6_add_database_indexes.py +83 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250916_f6e7d8c9b0a1_convert_timestamps_to_epoch_and_align_columns.py +412 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +109 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py +154 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +161 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +109 -0
- solace_agent_mesh/gateway/http_sse/app.py +351 -0
- solace_agent_mesh/gateway/http_sse/component.py +2360 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +105 -0
- solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +109 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +110 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +653 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +299 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
- solace_agent_mesh/gateway/http_sse/main.py +789 -0
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +46 -0
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +102 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +11 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +221 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +66 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +32 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +125 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +239 -0
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +34 -0
- solace_agent_mesh/gateway/http_sse/repository/models/base.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
- solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +257 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +159 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +53 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +39 -0
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +308 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +268 -0
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +248 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +74 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +1137 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +311 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +371 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/__init__.py +10 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +450 -0
- 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/__init__.py +15 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +133 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +18 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +42 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +123 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +168 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +38 -0
- solace_agent_mesh/gateway/http_sse/routers/projects.py +767 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1415 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +312 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +634 -0
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +230 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +1089 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +83 -0
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1220 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +71 -0
- 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 +273 -0
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +250 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +78 -0
- solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +702 -0
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +593 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +119 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +219 -0
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +146 -0
- solace_agent_mesh/gateway/http_sse/shared/auth_utils.py +29 -0
- solace_agent_mesh/gateway/http_sse/shared/base_repository.py +252 -0
- solace_agent_mesh/gateway/http_sse/shared/database_exceptions.py +274 -0
- solace_agent_mesh/gateway/http_sse/shared/database_helpers.py +43 -0
- solace_agent_mesh/gateway/http_sse/shared/enums.py +40 -0
- solace_agent_mesh/gateway/http_sse/shared/error_dto.py +107 -0
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +217 -0
- solace_agent_mesh/gateway/http_sse/shared/exceptions.py +192 -0
- solace_agent_mesh/gateway/http_sse/shared/pagination.py +138 -0
- solace_agent_mesh/gateway/http_sse/shared/response_utils.py +134 -0
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +319 -0
- solace_agent_mesh/gateway/http_sse/shared/timestamp_utils.py +97 -0
- solace_agent_mesh/gateway/http_sse/shared/types.py +50 -0
- solace_agent_mesh/gateway/http_sse/shared/utils.py +22 -0
- solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +88 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +491 -0
- solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +72 -0
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -0
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +18 -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 +147 -0
- solace_agent_mesh/services/platform/api/main.py +280 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +24 -0
- solace_agent_mesh/services/platform/app.py +114 -0
- solace_agent_mesh/services/platform/component.py +235 -0
- solace_agent_mesh/solace_agent_mesh_llm.txt +362 -0
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -0
- solace_agent_mesh/templates/agent_template.yaml +53 -0
- solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
- solace_agent_mesh/templates/gateway_app_template.py +75 -0
- solace_agent_mesh/templates/gateway_component_template.py +484 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +38 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +66 -0
- solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
- solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
- solace_agent_mesh/templates/plugin_custom_template.py +10 -0
- solace_agent_mesh/templates/plugin_gateway_config_template.yaml +60 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +32 -0
- solace_agent_mesh/templates/plugin_readme_template.md +12 -0
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +112 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +177 -0
- solace_agent_mesh-1.11.2.dist-info/METADATA +504 -0
- solace_agent_mesh-1.11.2.dist-info/RECORD +624 -0
- solace_agent_mesh-1.11.2.dist-info/WHEEL +4 -0
- solace_agent_mesh-1.11.2.dist-info/entry_points.txt +3 -0
- solace_agent_mesh-1.11.2.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,653 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Defines FastAPI dependency injectors to access shared resources
|
|
3
|
+
managed by the WebUIBackendComponent.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import logging
|
|
7
|
+
from collections.abc import Callable, Generator
|
|
8
|
+
from contextlib import contextmanager
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
11
|
+
|
|
12
|
+
from fastapi import Depends, HTTPException, Request, status, Path, Query
|
|
13
|
+
from sqlalchemy import create_engine
|
|
14
|
+
from sqlalchemy.orm import Session, sessionmaker
|
|
15
|
+
|
|
16
|
+
from ...common.agent_registry import AgentRegistry
|
|
17
|
+
from ...common.middleware.config_resolver import ConfigResolver
|
|
18
|
+
from ...common.services.identity_service import BaseIdentityService
|
|
19
|
+
from ...core_a2a.service import CoreA2AService
|
|
20
|
+
from ...gateway.base.task_context import TaskContextManager
|
|
21
|
+
from ...gateway.http_sse.services.agent_card_service import AgentCardService
|
|
22
|
+
from ...gateway.http_sse.services.audio_service import AudioService
|
|
23
|
+
from ...gateway.http_sse.services.project_service import ProjectService
|
|
24
|
+
from ...gateway.http_sse.services.feedback_service import FeedbackService
|
|
25
|
+
from ...gateway.http_sse.services.people_service import PeopleService
|
|
26
|
+
from ...gateway.http_sse.services.task_logger_service import TaskLoggerService
|
|
27
|
+
from ...gateway.http_sse.services.task_service import TaskService
|
|
28
|
+
from ...gateway.http_sse.services.data_retention_service import DataRetentionService
|
|
29
|
+
from ...gateway.http_sse.session_manager import SessionManager
|
|
30
|
+
from ...gateway.http_sse.sse_manager import SSEManager
|
|
31
|
+
from .repository import SessionRepository
|
|
32
|
+
from .repository.interfaces import ITaskRepository
|
|
33
|
+
from .repository.project_repository import ProjectRepository
|
|
34
|
+
from .repository.task_repository import TaskRepository
|
|
35
|
+
from .services.session_service import SessionService
|
|
36
|
+
|
|
37
|
+
log = logging.getLogger(__name__)
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
from google.adk.artifacts import BaseArtifactService
|
|
41
|
+
except ImportError:
|
|
42
|
+
# Mock BaseArtifactService for environments without Google ADK
|
|
43
|
+
class BaseArtifactService:
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
if TYPE_CHECKING:
|
|
48
|
+
from gateway.http_sse.component import WebUIBackendComponent
|
|
49
|
+
|
|
50
|
+
sac_component_instance: "WebUIBackendComponent" = None
|
|
51
|
+
SessionLocal: sessionmaker = None
|
|
52
|
+
|
|
53
|
+
api_config: dict[str, Any] | None = None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def set_component_instance(component: "WebUIBackendComponent"):
|
|
57
|
+
"""Called by the component during its startup to provide its instance."""
|
|
58
|
+
global sac_component_instance
|
|
59
|
+
if sac_component_instance is None:
|
|
60
|
+
sac_component_instance = component
|
|
61
|
+
log.info("SAC Component instance provided.")
|
|
62
|
+
else:
|
|
63
|
+
log.warning("SAC Component instance already set.")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def init_database(database_url: str):
|
|
67
|
+
"""Initialize database with appropriate configuration based on database dialect."""
|
|
68
|
+
global SessionLocal
|
|
69
|
+
if SessionLocal is None:
|
|
70
|
+
from sqlalchemy import event, pool
|
|
71
|
+
from sqlalchemy.engine.url import make_url
|
|
72
|
+
|
|
73
|
+
url = make_url(database_url)
|
|
74
|
+
dialect_name = url.get_dialect().name
|
|
75
|
+
|
|
76
|
+
engine_kwargs = {}
|
|
77
|
+
|
|
78
|
+
if dialect_name == "sqlite":
|
|
79
|
+
engine_kwargs = {
|
|
80
|
+
"poolclass": pool.StaticPool,
|
|
81
|
+
"connect_args": {"check_same_thread": False}
|
|
82
|
+
}
|
|
83
|
+
log.info("Configuring SQLite database (single-connection mode)")
|
|
84
|
+
|
|
85
|
+
elif dialect_name in ("postgresql", "mysql"):
|
|
86
|
+
engine_kwargs = {
|
|
87
|
+
"pool_size": 10,
|
|
88
|
+
"max_overflow": 20,
|
|
89
|
+
"pool_timeout": 30,
|
|
90
|
+
"pool_recycle": 1800,
|
|
91
|
+
"pool_pre_ping": True,
|
|
92
|
+
}
|
|
93
|
+
log.info(f"Configuring {dialect_name} database with connection pooling")
|
|
94
|
+
|
|
95
|
+
else:
|
|
96
|
+
log.warning(f"Using default configuration for dialect: {dialect_name}")
|
|
97
|
+
|
|
98
|
+
engine = create_engine(database_url, **engine_kwargs)
|
|
99
|
+
|
|
100
|
+
@event.listens_for(engine, "connect")
|
|
101
|
+
def set_sqlite_pragma(dbapi_conn, connection_record):
|
|
102
|
+
if dialect_name == "sqlite":
|
|
103
|
+
cursor = dbapi_conn.cursor()
|
|
104
|
+
cursor.execute("PRAGMA foreign_keys=ON")
|
|
105
|
+
cursor.close()
|
|
106
|
+
|
|
107
|
+
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
|
108
|
+
log.debug(f"Database initialized: {url}")
|
|
109
|
+
log.info("Database initialized successfully")
|
|
110
|
+
else:
|
|
111
|
+
log.warning("Database already initialized.")
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def set_api_config(config: dict[str, Any]):
|
|
115
|
+
"""Called during startup to provide API configuration."""
|
|
116
|
+
global api_config
|
|
117
|
+
if api_config is None:
|
|
118
|
+
api_config = config
|
|
119
|
+
log.debug("API configuration provided.")
|
|
120
|
+
else:
|
|
121
|
+
log.warning("API configuration already set.")
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def get_sac_component() -> "WebUIBackendComponent":
|
|
125
|
+
"""FastAPI dependency to get the SAC component instance."""
|
|
126
|
+
if sac_component_instance is None:
|
|
127
|
+
log.critical(
|
|
128
|
+
"SAC Component instance accessed before it was set!"
|
|
129
|
+
)
|
|
130
|
+
raise HTTPException(
|
|
131
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
132
|
+
detail="Backend component not yet initialized.",
|
|
133
|
+
)
|
|
134
|
+
return sac_component_instance
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def get_api_config() -> dict[str, Any]:
|
|
138
|
+
"""FastAPI dependency to get the API configuration."""
|
|
139
|
+
if api_config is None:
|
|
140
|
+
log.critical("API configuration accessed before it was set!")
|
|
141
|
+
raise HTTPException(
|
|
142
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
143
|
+
detail="API configuration not yet initialized.",
|
|
144
|
+
)
|
|
145
|
+
return api_config
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def get_agent_registry(
|
|
149
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
150
|
+
) -> AgentRegistry:
|
|
151
|
+
"""FastAPI dependency to get the AgentRegistry."""
|
|
152
|
+
log.debug("get_agent_registry called")
|
|
153
|
+
return component.get_agent_registry()
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def get_sse_manager(
|
|
157
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
158
|
+
) -> SSEManager:
|
|
159
|
+
"""FastAPI dependency to get the SSEManager."""
|
|
160
|
+
log.debug("get_sse_manager called")
|
|
161
|
+
return component.get_sse_manager()
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def get_session_manager(
|
|
165
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
166
|
+
) -> SessionManager:
|
|
167
|
+
"""FastAPI dependency to get the SessionManager."""
|
|
168
|
+
log.debug("get_session_manager called")
|
|
169
|
+
return component.get_session_manager()
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def get_user_id_callable(
|
|
173
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
174
|
+
) -> Callable:
|
|
175
|
+
"""Dependency that provides the callable for getting user_id (client_id)."""
|
|
176
|
+
log.debug("Providing user_id callable")
|
|
177
|
+
return session_manager.dep_get_client_id()
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def ensure_session_id_callable(
|
|
181
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
182
|
+
) -> Callable:
|
|
183
|
+
"""Dependency that provides the callable for ensuring session_id."""
|
|
184
|
+
log.debug("Providing ensure_session_id callable")
|
|
185
|
+
return session_manager.dep_ensure_session_id()
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def get_user_id(
|
|
189
|
+
request: Request,
|
|
190
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
191
|
+
) -> str:
|
|
192
|
+
"""
|
|
193
|
+
FastAPI dependency that returns the user's identity.
|
|
194
|
+
When FRONTEND_USE_AUTHORIZATION is true: Fully relies on OAuth - user must be authenticated by AuthMiddleware.
|
|
195
|
+
When FRONTEND_USE_AUTHORIZATION is false: Uses development fallback user.
|
|
196
|
+
"""
|
|
197
|
+
log.debug("Resolving user_id string")
|
|
198
|
+
|
|
199
|
+
# AuthMiddleware should always set user state for both auth enabled/disabled cases
|
|
200
|
+
if hasattr(request.state, "user") and request.state.user:
|
|
201
|
+
user_id = request.state.user.get("id")
|
|
202
|
+
if user_id:
|
|
203
|
+
log.debug(f"Using user ID from AuthMiddleware: {user_id}")
|
|
204
|
+
return user_id
|
|
205
|
+
else:
|
|
206
|
+
log.error(
|
|
207
|
+
"request.state.user exists but has no 'id' field: %s. This indicates a bug in AuthMiddleware.",
|
|
208
|
+
request.state.user,
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
# If we reach here, AuthMiddleware didn't set user state properly
|
|
212
|
+
use_authorization = session_manager.use_authorization
|
|
213
|
+
|
|
214
|
+
if use_authorization:
|
|
215
|
+
# When OAuth is enabled, we should never reach here - AuthMiddleware should have handled authentication
|
|
216
|
+
log.error(
|
|
217
|
+
"OAuth is enabled but no authenticated user found. This indicates an authentication failure or middleware bug."
|
|
218
|
+
)
|
|
219
|
+
raise HTTPException(
|
|
220
|
+
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
221
|
+
detail="Authentication required but user not found",
|
|
222
|
+
)
|
|
223
|
+
else:
|
|
224
|
+
# When auth is disabled, use development fallback user
|
|
225
|
+
fallback_id = "sam_dev_user"
|
|
226
|
+
log.info(
|
|
227
|
+
"Authorization disabled and no user in request state, using fallback user: %s",
|
|
228
|
+
fallback_id,
|
|
229
|
+
)
|
|
230
|
+
return fallback_id
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def ensure_session_id(
|
|
234
|
+
request: Request,
|
|
235
|
+
session_manager: SessionManager = Depends(get_session_manager),
|
|
236
|
+
) -> str:
|
|
237
|
+
"""FastAPI dependency that directly returns the ensured session_id string."""
|
|
238
|
+
log.debug("Resolving ensured session_id string")
|
|
239
|
+
return session_manager.ensure_a2a_session(request)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def get_identity_service(
|
|
243
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
244
|
+
) -> BaseIdentityService | None:
|
|
245
|
+
"""FastAPI dependency to get the configured IdentityService instance."""
|
|
246
|
+
log.debug("get_identity_service called")
|
|
247
|
+
return component.identity_service
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def get_db() -> Generator[Session, None, None]:
|
|
251
|
+
if SessionLocal is None:
|
|
252
|
+
raise HTTPException(
|
|
253
|
+
status_code=status.HTTP_501_NOT_IMPLEMENTED,
|
|
254
|
+
detail="Session management requires database configuration.",
|
|
255
|
+
)
|
|
256
|
+
db = SessionLocal()
|
|
257
|
+
try:
|
|
258
|
+
yield db
|
|
259
|
+
db.commit()
|
|
260
|
+
except Exception:
|
|
261
|
+
db.rollback()
|
|
262
|
+
raise
|
|
263
|
+
finally:
|
|
264
|
+
db.close()
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def get_people_service(
|
|
268
|
+
identity_service: BaseIdentityService | None = Depends(get_identity_service),
|
|
269
|
+
) -> PeopleService:
|
|
270
|
+
"""FastAPI dependency to get an instance of PeopleService."""
|
|
271
|
+
log.debug("get_people_service called")
|
|
272
|
+
return PeopleService(identity_service=identity_service)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def get_task_repository() -> ITaskRepository:
|
|
276
|
+
"""FastAPI dependency to get an instance of TaskRepository."""
|
|
277
|
+
log.debug("get_task_repository called")
|
|
278
|
+
return TaskRepository()
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
def get_feedback_service(
|
|
282
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
283
|
+
task_repo: ITaskRepository = Depends(get_task_repository),
|
|
284
|
+
) -> FeedbackService:
|
|
285
|
+
"""FastAPI dependency to get an instance of FeedbackService."""
|
|
286
|
+
log.debug("get_feedback_service called")
|
|
287
|
+
# The session factory is needed for the existing DB save logic.
|
|
288
|
+
session_factory = SessionLocal if component.database_url else None
|
|
289
|
+
return FeedbackService(
|
|
290
|
+
session_factory=session_factory, component=component, task_repo=task_repo
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def get_data_retention_service(
|
|
295
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
296
|
+
) -> DataRetentionService | None:
|
|
297
|
+
"""
|
|
298
|
+
FastAPI dependency to get the DataRetentionService instance.
|
|
299
|
+
|
|
300
|
+
Returns:
|
|
301
|
+
DataRetentionService instance if database is configured and service is initialized,
|
|
302
|
+
None otherwise.
|
|
303
|
+
|
|
304
|
+
Note:
|
|
305
|
+
This dependency is primarily for future API endpoints that might expose
|
|
306
|
+
data retention statistics or manual cleanup triggers. The service itself
|
|
307
|
+
runs automatically via timer in the component.
|
|
308
|
+
"""
|
|
309
|
+
log.debug("get_data_retention_service called")
|
|
310
|
+
|
|
311
|
+
if not component.database_url:
|
|
312
|
+
log.debug(
|
|
313
|
+
"Database not configured, returning None for data retention service"
|
|
314
|
+
)
|
|
315
|
+
return None
|
|
316
|
+
|
|
317
|
+
if (
|
|
318
|
+
not hasattr(component, "data_retention_service")
|
|
319
|
+
or component.data_retention_service is None
|
|
320
|
+
):
|
|
321
|
+
log.warning("DataRetentionService not initialized on component")
|
|
322
|
+
return None
|
|
323
|
+
|
|
324
|
+
return component.data_retention_service
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def get_task_logger_service(
|
|
328
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
329
|
+
) -> TaskLoggerService:
|
|
330
|
+
"""FastAPI dependency to get an instance of TaskLoggerService."""
|
|
331
|
+
log.debug("get_task_logger_service called")
|
|
332
|
+
task_logger_service = component.get_task_logger_service()
|
|
333
|
+
if task_logger_service is None:
|
|
334
|
+
log.error("TaskLoggerService is not available.")
|
|
335
|
+
raise HTTPException(
|
|
336
|
+
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
|
337
|
+
detail="Task logging service is not configured or available.",
|
|
338
|
+
)
|
|
339
|
+
return task_logger_service
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
PublishFunc = Callable[[str, dict, dict | None], None]
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def get_publish_a2a_func(
|
|
346
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
347
|
+
) -> PublishFunc:
|
|
348
|
+
"""FastAPI dependency to get the component's publish_a2a method."""
|
|
349
|
+
log.debug("get_publish_a2a_func called")
|
|
350
|
+
return component.publish_a2a
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def get_namespace(
|
|
354
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
355
|
+
) -> str:
|
|
356
|
+
"""FastAPI dependency to get the namespace."""
|
|
357
|
+
log.debug("get_namespace called")
|
|
358
|
+
return component.get_namespace()
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
def get_gateway_id(
|
|
362
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
363
|
+
) -> str:
|
|
364
|
+
"""FastAPI dependency to get the Gateway ID."""
|
|
365
|
+
log.debug("get_gateway_id called")
|
|
366
|
+
return component.get_gateway_id()
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
def get_config_resolver(
|
|
370
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
371
|
+
) -> ConfigResolver:
|
|
372
|
+
"""FastAPI dependency to get the ConfigResolver."""
|
|
373
|
+
log.debug("get_config_resolver called")
|
|
374
|
+
return component.get_config_resolver()
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def get_app_config(
|
|
378
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
379
|
+
) -> dict[str, Any]:
|
|
380
|
+
"""
|
|
381
|
+
FastAPI dependency to safely get the application configuration dictionary.
|
|
382
|
+
"""
|
|
383
|
+
log.debug("get_app_config called")
|
|
384
|
+
return component.component_config.get("app_config", {})
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
async def get_user_config(
|
|
388
|
+
request: Request,
|
|
389
|
+
user_id: str = Depends(get_user_id),
|
|
390
|
+
config_resolver: ConfigResolver = Depends(get_config_resolver),
|
|
391
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
392
|
+
app_config: dict[str, Any] = Depends(get_app_config),
|
|
393
|
+
) -> dict[str, Any]:
|
|
394
|
+
"""
|
|
395
|
+
FastAPI dependency to get the user-specific configuration.
|
|
396
|
+
"""
|
|
397
|
+
log.debug(f"get_user_config called for user_id: {user_id}")
|
|
398
|
+
|
|
399
|
+
# TODO: DATAGO-114659-split-cleanup
|
|
400
|
+
gateway_context = {}
|
|
401
|
+
if getattr(component, "gateway_id", None):
|
|
402
|
+
gateway_context = {
|
|
403
|
+
"gateway_id": component.gateway_id,
|
|
404
|
+
"gateway_app_config": app_config,
|
|
405
|
+
"request": request,
|
|
406
|
+
}
|
|
407
|
+
return await config_resolver.resolve_user_config(
|
|
408
|
+
user_id, gateway_context, app_config
|
|
409
|
+
)
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
class ValidatedUserConfig:
|
|
413
|
+
"""
|
|
414
|
+
FastAPI dependency class for validating user scopes and returning user config.
|
|
415
|
+
|
|
416
|
+
This class creates a callable dependency that validates a user has the required
|
|
417
|
+
scopes before allowing access to protected endpoints.
|
|
418
|
+
|
|
419
|
+
Args:
|
|
420
|
+
required_scopes: List of scope strings required for authorization
|
|
421
|
+
|
|
422
|
+
Raises:
|
|
423
|
+
HTTPException: 403 if user lacks required scopes
|
|
424
|
+
|
|
425
|
+
Example:
|
|
426
|
+
@router.get("/artifacts")
|
|
427
|
+
async def list_artifacts(
|
|
428
|
+
user_config: dict = Depends(ValidatedUserConfig(["tool:artifact:list"])),
|
|
429
|
+
):
|
|
430
|
+
"""
|
|
431
|
+
|
|
432
|
+
def __init__(self, required_scopes: list[str]):
|
|
433
|
+
self.required_scopes = required_scopes
|
|
434
|
+
|
|
435
|
+
async def __call__(
|
|
436
|
+
self,
|
|
437
|
+
request: Request,
|
|
438
|
+
config_resolver: ConfigResolver = Depends(get_config_resolver),
|
|
439
|
+
user_config: dict[str, Any] = Depends(get_user_config),
|
|
440
|
+
) -> dict[str, Any]:
|
|
441
|
+
user_id = user_config.get("user_profile", {}).get("id")
|
|
442
|
+
|
|
443
|
+
log.debug(
|
|
444
|
+
f"ValidatedUserConfig called for user_id: {user_id} with required scopes: {self.required_scopes}"
|
|
445
|
+
)
|
|
446
|
+
|
|
447
|
+
# Validate scopes
|
|
448
|
+
if not config_resolver.is_feature_enabled(
|
|
449
|
+
user_config,
|
|
450
|
+
{"tool_metadata": {"required_scopes": self.required_scopes}},
|
|
451
|
+
{},
|
|
452
|
+
):
|
|
453
|
+
log.warning(
|
|
454
|
+
f"Authorization denied for user '{user_id}'. Required scopes: {self.required_scopes}"
|
|
455
|
+
)
|
|
456
|
+
raise HTTPException(
|
|
457
|
+
status_code=status.HTTP_403_FORBIDDEN,
|
|
458
|
+
detail=f"Not authorized. Required scopes: {self.required_scopes}",
|
|
459
|
+
)
|
|
460
|
+
|
|
461
|
+
return user_config
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
def get_shared_artifact_service(
|
|
465
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
466
|
+
) -> BaseArtifactService | None:
|
|
467
|
+
"""FastAPI dependency to get the shared ArtifactService."""
|
|
468
|
+
log.debug("get_shared_artifact_service called")
|
|
469
|
+
return component.get_shared_artifact_service()
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
def get_embed_config(
|
|
473
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
474
|
+
) -> dict[str, Any]:
|
|
475
|
+
"""FastAPI dependency to get embed-related configuration."""
|
|
476
|
+
log.debug("get_embed_config called")
|
|
477
|
+
return component.get_embed_config()
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
def get_core_a2a_service(
|
|
481
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
482
|
+
) -> CoreA2AService:
|
|
483
|
+
"""FastAPI dependency to get the CoreA2AService."""
|
|
484
|
+
log.debug("get_core_a2a_service called")
|
|
485
|
+
core_service = component.get_core_a2a_service()
|
|
486
|
+
if core_service is None:
|
|
487
|
+
log.critical("CoreA2AService accessed before initialization!")
|
|
488
|
+
raise HTTPException(status_code=503, detail="Core service not ready.")
|
|
489
|
+
return core_service
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
def get_task_context_manager_from_component(
|
|
493
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
494
|
+
) -> TaskContextManager:
|
|
495
|
+
"""FastAPI dependency to get the TaskContextManager from the component."""
|
|
496
|
+
log.debug("get_task_context_manager_from_component called")
|
|
497
|
+
if component.task_context_manager is None:
|
|
498
|
+
log.critical(
|
|
499
|
+
"TaskContextManager accessed before initialization!"
|
|
500
|
+
)
|
|
501
|
+
raise HTTPException(status_code=503, detail="Task context manager not ready.")
|
|
502
|
+
return component.task_context_manager
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
def get_agent_card_service(
|
|
506
|
+
registry: AgentRegistry = Depends(get_agent_registry),
|
|
507
|
+
) -> AgentCardService:
|
|
508
|
+
"""FastAPI dependency to get an instance of AgentCardService."""
|
|
509
|
+
log.debug("get_agent_card_service called")
|
|
510
|
+
return AgentCardService(agent_registry=registry)
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
def get_task_service(
|
|
514
|
+
core_a2a_service: CoreA2AService = Depends(get_core_a2a_service),
|
|
515
|
+
publish_func: PublishFunc = Depends(get_publish_a2a_func),
|
|
516
|
+
namespace: str = Depends(get_namespace),
|
|
517
|
+
gateway_id: str = Depends(get_gateway_id),
|
|
518
|
+
sse_manager: SSEManager = Depends(get_sse_manager),
|
|
519
|
+
task_context_manager: TaskContextManager = Depends(
|
|
520
|
+
get_task_context_manager_from_component
|
|
521
|
+
),
|
|
522
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
523
|
+
) -> TaskService:
|
|
524
|
+
"""FastAPI dependency to get an instance of TaskService."""
|
|
525
|
+
log.debug("get_task_service called")
|
|
526
|
+
app_name = component.get_config("name", "WebUIBackendApp")
|
|
527
|
+
return TaskService(
|
|
528
|
+
core_a2a_service=core_a2a_service,
|
|
529
|
+
publish_func=publish_func,
|
|
530
|
+
namespace=namespace,
|
|
531
|
+
gateway_id=gateway_id,
|
|
532
|
+
sse_manager=sse_manager,
|
|
533
|
+
task_context_map=task_context_manager._contexts,
|
|
534
|
+
task_context_lock=task_context_manager._lock,
|
|
535
|
+
app_name=app_name,
|
|
536
|
+
)
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
def get_session_business_service(
|
|
540
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
541
|
+
) -> SessionService:
|
|
542
|
+
log.debug("get_session_business_service called")
|
|
543
|
+
|
|
544
|
+
# Note: Session and message repositories will be created per request
|
|
545
|
+
# when the SessionService methods receive the db parameter
|
|
546
|
+
return SessionService(component=component)
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
def get_session_validator(
|
|
550
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
551
|
+
) -> Callable[[str, str], bool]:
|
|
552
|
+
log.debug("get_session_validator called")
|
|
553
|
+
|
|
554
|
+
if SessionLocal:
|
|
555
|
+
log.debug("Using database-backed session validation")
|
|
556
|
+
|
|
557
|
+
def validate_with_database(session_id: str, user_id: str) -> bool:
|
|
558
|
+
try:
|
|
559
|
+
db = SessionLocal()
|
|
560
|
+
try:
|
|
561
|
+
session_repository = SessionRepository()
|
|
562
|
+
session_domain = session_repository.find_user_session(
|
|
563
|
+
db, session_id, user_id
|
|
564
|
+
)
|
|
565
|
+
return session_domain is not None
|
|
566
|
+
finally:
|
|
567
|
+
db.close()
|
|
568
|
+
except Exception:
|
|
569
|
+
return False
|
|
570
|
+
|
|
571
|
+
return validate_with_database
|
|
572
|
+
else:
|
|
573
|
+
log.debug("No database configured - using basic session validation")
|
|
574
|
+
|
|
575
|
+
def validate_without_database(session_id: str, user_id: str) -> bool:
|
|
576
|
+
if not session_id or not session_id.startswith("web-session-"):
|
|
577
|
+
return False
|
|
578
|
+
return bool(user_id)
|
|
579
|
+
|
|
580
|
+
return validate_without_database
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
def get_db_optional() -> Generator[Session | None, None, None]:
|
|
584
|
+
"""Optional database dependency that returns None if database is not configured."""
|
|
585
|
+
if SessionLocal is None:
|
|
586
|
+
log.debug("Database not configured, returning None")
|
|
587
|
+
yield None
|
|
588
|
+
else:
|
|
589
|
+
db = SessionLocal()
|
|
590
|
+
try:
|
|
591
|
+
yield db
|
|
592
|
+
db.commit()
|
|
593
|
+
except Exception:
|
|
594
|
+
db.rollback()
|
|
595
|
+
raise
|
|
596
|
+
finally:
|
|
597
|
+
db.close()
|
|
598
|
+
|
|
599
|
+
def get_project_service(
|
|
600
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
601
|
+
) -> ProjectService:
|
|
602
|
+
"""Dependency factory for ProjectService."""
|
|
603
|
+
return ProjectService(component=component)
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
def get_project_service_optional(
|
|
607
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
608
|
+
) -> ProjectService | None:
|
|
609
|
+
"""Optional project service dependency that returns None if database is not configured."""
|
|
610
|
+
if SessionLocal is None:
|
|
611
|
+
log.debug("Database not configured, projects unavailable")
|
|
612
|
+
return None
|
|
613
|
+
return ProjectService(component=component)
|
|
614
|
+
|
|
615
|
+
def get_session_business_service_optional(
|
|
616
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
617
|
+
) -> SessionService | None:
|
|
618
|
+
"""Optional session service dependency that returns None if database is not configured."""
|
|
619
|
+
if SessionLocal is None:
|
|
620
|
+
log.debug(
|
|
621
|
+
"Database not configured, returning None for session service"
|
|
622
|
+
)
|
|
623
|
+
return None
|
|
624
|
+
return SessionService(component=component)
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
def get_audio_service(
|
|
628
|
+
component: "WebUIBackendComponent" = Depends(get_sac_component),
|
|
629
|
+
) -> AudioService:
|
|
630
|
+
"""FastAPI dependency to get an instance of AudioService."""
|
|
631
|
+
log.debug("[get_audio_service] called")
|
|
632
|
+
# AudioService expects app_config which contains the speech configuration
|
|
633
|
+
app_config = component.component_config.get('app_config', {}) if hasattr(component, 'component_config') else {}
|
|
634
|
+
log.debug(f"[get_audio_service] app_config keys: {app_config.keys()}")
|
|
635
|
+
return AudioService(config=app_config)
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
def get_user_display_name(
|
|
640
|
+
request: Request,
|
|
641
|
+
user_id: str = Depends(get_user_id),
|
|
642
|
+
) -> str:
|
|
643
|
+
"""
|
|
644
|
+
FastAPI dependency to get a user's display name.
|
|
645
|
+
Returns email if available, otherwise returns user_id.
|
|
646
|
+
"""
|
|
647
|
+
# Try to get user info from request state (set by AuthMiddleware)
|
|
648
|
+
if hasattr(request.state, "user") and request.state.user:
|
|
649
|
+
user_info = request.state.user
|
|
650
|
+
# Try email first, then name, then fall back to user_id
|
|
651
|
+
return user_info.get("email") or user_info.get("name") or user_id
|
|
652
|
+
|
|
653
|
+
return user_id
|