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,216 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pydantic configuration models for A2A proxy applications.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import List, Literal, Optional
|
|
6
|
+
from urllib.parse import urlparse
|
|
7
|
+
|
|
8
|
+
from pydantic import Field, model_validator
|
|
9
|
+
|
|
10
|
+
from ..base.config import BaseProxyAppConfig, ProxiedAgentConfig
|
|
11
|
+
from ....common.utils.pydantic_utils import SamConfigBase
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class HttpHeaderConfig(SamConfigBase):
|
|
15
|
+
"""Configuration for a single HTTP header."""
|
|
16
|
+
|
|
17
|
+
name: str = Field(
|
|
18
|
+
...,
|
|
19
|
+
description="The HTTP header name (e.g., 'X-API-Key', 'Authorization').",
|
|
20
|
+
)
|
|
21
|
+
value: str = Field(
|
|
22
|
+
...,
|
|
23
|
+
description="The HTTP header value.",
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class AuthenticationConfig(SamConfigBase):
|
|
28
|
+
"""Authentication configuration for downstream A2A agents."""
|
|
29
|
+
|
|
30
|
+
type: Optional[
|
|
31
|
+
Literal["static_bearer", "static_apikey", "oauth2_client_credentials", "oauth2_authorization_code"]
|
|
32
|
+
] = Field(
|
|
33
|
+
default=None,
|
|
34
|
+
description="Authentication type. If not specified, inferred from 'scheme' for backward compatibility.",
|
|
35
|
+
)
|
|
36
|
+
scheme: Optional[str] = Field(
|
|
37
|
+
default=None,
|
|
38
|
+
description="(Legacy) The authentication scheme (e.g., 'bearer', 'apikey'). Use 'type' field instead.",
|
|
39
|
+
)
|
|
40
|
+
token: Optional[str] = Field(
|
|
41
|
+
default=None,
|
|
42
|
+
description="The authentication token or API key (for static_bearer and static_apikey types).",
|
|
43
|
+
)
|
|
44
|
+
token_url: Optional[str] = Field(
|
|
45
|
+
default=None,
|
|
46
|
+
description="OAuth 2.0 token endpoint URL (required for oauth2_client_credentials type).",
|
|
47
|
+
)
|
|
48
|
+
client_id: Optional[str] = Field(
|
|
49
|
+
default=None,
|
|
50
|
+
description="OAuth 2.0 client identifier (required for oauth2_client_credentials and oauth2_authorization_code types).",
|
|
51
|
+
)
|
|
52
|
+
client_secret: Optional[str] = Field(
|
|
53
|
+
default=None,
|
|
54
|
+
description="OAuth 2.0 client secret (required for oauth2_client_credentials type, optional for oauth2_authorization_code).",
|
|
55
|
+
)
|
|
56
|
+
scope: Optional[str] = Field(
|
|
57
|
+
default=None,
|
|
58
|
+
description="OAuth 2.0 scope as a space-separated string (optional for oauth2_client_credentials type).",
|
|
59
|
+
)
|
|
60
|
+
token_cache_duration_seconds: int = Field(
|
|
61
|
+
default=3300,
|
|
62
|
+
gt=0,
|
|
63
|
+
description="How long to cache OAuth 2.0 tokens before refresh, in seconds (default: 3300 = 55 minutes).",
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# NEW fields for oauth2_authorization_code
|
|
67
|
+
authorization_url: Optional[str] = Field(
|
|
68
|
+
default=None,
|
|
69
|
+
description="OAuth 2.0 authorization endpoint URL (for oauth2_authorization_code type). Can override agent card URL.",
|
|
70
|
+
)
|
|
71
|
+
redirect_uri: Optional[str] = Field(
|
|
72
|
+
default=None,
|
|
73
|
+
description="OAuth 2.0 redirect URI (required for oauth2_authorization_code type).",
|
|
74
|
+
)
|
|
75
|
+
scopes: Optional[List[str]] = Field(
|
|
76
|
+
default=None,
|
|
77
|
+
description="OAuth 2.0 scopes as a list of strings (optional for oauth2_authorization_code type).",
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
@model_validator(mode="after")
|
|
81
|
+
def validate_auth_config(self) -> "AuthenticationConfig":
|
|
82
|
+
"""Validates authentication configuration based on type."""
|
|
83
|
+
# Determine effective auth type (with backward compatibility)
|
|
84
|
+
auth_type = self.type
|
|
85
|
+
if not auth_type and self.scheme:
|
|
86
|
+
# Legacy config: infer type from scheme
|
|
87
|
+
if self.scheme == "bearer":
|
|
88
|
+
auth_type = "static_bearer"
|
|
89
|
+
elif self.scheme == "apikey":
|
|
90
|
+
auth_type = "static_apikey"
|
|
91
|
+
else:
|
|
92
|
+
raise ValueError(
|
|
93
|
+
f"Unknown legacy authentication scheme '{self.scheme}'. "
|
|
94
|
+
f"Supported schemes: 'bearer', 'apikey'."
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
if not auth_type:
|
|
98
|
+
# No authentication configured
|
|
99
|
+
return self
|
|
100
|
+
|
|
101
|
+
# Validate based on auth type
|
|
102
|
+
if auth_type in ["static_bearer", "static_apikey"]:
|
|
103
|
+
if not self.token:
|
|
104
|
+
raise ValueError(
|
|
105
|
+
f"Authentication type '{auth_type}' requires 'token' field."
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
elif auth_type == "oauth2_client_credentials":
|
|
109
|
+
# Validate token_url
|
|
110
|
+
if not self.token_url:
|
|
111
|
+
raise ValueError(
|
|
112
|
+
"OAuth 2.0 client credentials flow requires 'token_url'."
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Validate token_url is HTTPS
|
|
116
|
+
try:
|
|
117
|
+
parsed_url = urlparse(self.token_url)
|
|
118
|
+
if parsed_url.scheme != "https":
|
|
119
|
+
raise ValueError(
|
|
120
|
+
f"OAuth 2.0 'token_url' must use HTTPS for security. "
|
|
121
|
+
f"Got scheme: '{parsed_url.scheme}'"
|
|
122
|
+
)
|
|
123
|
+
except Exception as e:
|
|
124
|
+
raise ValueError(f"Failed to parse 'token_url': {e}")
|
|
125
|
+
|
|
126
|
+
# Validate client_id
|
|
127
|
+
if not self.client_id:
|
|
128
|
+
raise ValueError(
|
|
129
|
+
"OAuth 2.0 client credentials flow requires 'client_id'."
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# Validate client_secret
|
|
133
|
+
if not self.client_secret:
|
|
134
|
+
raise ValueError(
|
|
135
|
+
"OAuth 2.0 client credentials flow requires 'client_secret'."
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
elif auth_type == "oauth2_authorization_code":
|
|
139
|
+
# Validate client_id
|
|
140
|
+
if not self.client_id:
|
|
141
|
+
raise ValueError(
|
|
142
|
+
"OAuth 2.0 authorization code flow requires 'client_id'."
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
# Validate redirect_uri
|
|
146
|
+
if not self.redirect_uri:
|
|
147
|
+
raise ValueError(
|
|
148
|
+
"OAuth 2.0 authorization code flow requires 'redirect_uri'."
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# Optional: Validate authorization_url if provided (can also come from agent card)
|
|
152
|
+
if self.authorization_url:
|
|
153
|
+
try:
|
|
154
|
+
parsed_url = urlparse(self.authorization_url)
|
|
155
|
+
if parsed_url.scheme not in ["https", "http"]:
|
|
156
|
+
raise ValueError(
|
|
157
|
+
f"OAuth 2.0 'authorization_url' must use HTTP(S). "
|
|
158
|
+
f"Got scheme: '{parsed_url.scheme}'"
|
|
159
|
+
)
|
|
160
|
+
except Exception as e:
|
|
161
|
+
raise ValueError(f"Failed to parse 'authorization_url': {e}")
|
|
162
|
+
|
|
163
|
+
else:
|
|
164
|
+
raise ValueError(
|
|
165
|
+
f"Unsupported authentication type '{auth_type}'. "
|
|
166
|
+
f"Supported types: static_bearer, static_apikey, oauth2_client_credentials, oauth2_authorization_code."
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
return self
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class A2AProxiedAgentConfig(ProxiedAgentConfig):
|
|
173
|
+
"""Configuration for an A2A-over-HTTPS proxied agent."""
|
|
174
|
+
|
|
175
|
+
url: str = Field(
|
|
176
|
+
...,
|
|
177
|
+
description="The base URL of the downstream A2A agent's HTTP endpoint.",
|
|
178
|
+
)
|
|
179
|
+
authentication: Optional[AuthenticationConfig] = Field(
|
|
180
|
+
default=None,
|
|
181
|
+
description="Authentication details for the downstream agent.",
|
|
182
|
+
)
|
|
183
|
+
use_auth_for_agent_card: bool = Field(
|
|
184
|
+
default=False,
|
|
185
|
+
description="If true, applies the configured authentication to agent card fetching. "
|
|
186
|
+
"If false, agent card requests are made without authentication.",
|
|
187
|
+
)
|
|
188
|
+
use_agent_card_url: bool = Field(
|
|
189
|
+
default=True,
|
|
190
|
+
description="If true, uses the URL from the agent card for task invocations. "
|
|
191
|
+
"If false, uses the configured URL directly for task invocations. "
|
|
192
|
+
"Note: The configured URL is always used to fetch the agent card itself.",
|
|
193
|
+
)
|
|
194
|
+
agent_card_headers: Optional[List[HttpHeaderConfig]] = Field(
|
|
195
|
+
default=None,
|
|
196
|
+
description="Custom HTTP headers to include when fetching the agent card. "
|
|
197
|
+
"These headers are added alongside authentication headers.",
|
|
198
|
+
)
|
|
199
|
+
task_headers: Optional[List[HttpHeaderConfig]] = Field(
|
|
200
|
+
default=None,
|
|
201
|
+
description="Custom HTTP headers to include when invoking A2A tasks. "
|
|
202
|
+
"These headers are added alongside authentication headers. Note: The A2A SDK's "
|
|
203
|
+
"AuthInterceptor applies authentication headers after these are set, so custom "
|
|
204
|
+
"headers cannot override authentication. For custom auth, omit the 'authentication' "
|
|
205
|
+
"config and use task_headers to set auth headers directly.",
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class A2AProxyAppConfig(BaseProxyAppConfig):
|
|
210
|
+
"""Complete configuration for an A2A proxy application."""
|
|
211
|
+
|
|
212
|
+
proxied_agents: List[A2AProxiedAgentConfig] = Field(
|
|
213
|
+
...,
|
|
214
|
+
min_length=1,
|
|
215
|
+
description="A list of downstream A2A agents to be proxied.",
|
|
216
|
+
)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""
|
|
2
|
+
OAuth 2.0 token caching for A2A proxy authentication.
|
|
3
|
+
|
|
4
|
+
This module provides an in-memory cache for OAuth 2.0 access tokens
|
|
5
|
+
with automatic expiration. Tokens are cached per agent to minimize
|
|
6
|
+
token acquisition overhead and reduce load on authorization servers.
|
|
7
|
+
|
|
8
|
+
The cache is thread-safe using asyncio.Lock and implements lazy
|
|
9
|
+
expiration (tokens are checked for expiration on retrieval).
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import asyncio
|
|
13
|
+
import time
|
|
14
|
+
from dataclasses import dataclass
|
|
15
|
+
from typing import Dict, Optional
|
|
16
|
+
|
|
17
|
+
from solace_ai_connector.common.log import log
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class CachedToken:
|
|
22
|
+
"""Represents a cached OAuth token with expiration."""
|
|
23
|
+
|
|
24
|
+
access_token: str
|
|
25
|
+
expires_at: float # Unix timestamp when token expires (time.time() + cache_duration)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class OAuth2TokenCache:
|
|
29
|
+
"""
|
|
30
|
+
Thread-safe in-memory cache for OAuth 2.0 access tokens.
|
|
31
|
+
|
|
32
|
+
Tokens are cached per agent and automatically expire based on
|
|
33
|
+
the configured cache duration.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(self):
|
|
37
|
+
"""Initialize the token cache with an empty dictionary and lock."""
|
|
38
|
+
self._cache: Dict[str, CachedToken] = {}
|
|
39
|
+
self._lock = asyncio.Lock()
|
|
40
|
+
|
|
41
|
+
async def get(self, agent_name: str) -> Optional[str]:
|
|
42
|
+
"""
|
|
43
|
+
Retrieves a cached token if it exists and hasn't expired.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
agent_name: The name of the agent to get the token for.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
The access token if cached and valid, None otherwise.
|
|
50
|
+
"""
|
|
51
|
+
async with self._lock:
|
|
52
|
+
cached = self._cache.get(agent_name)
|
|
53
|
+
if not cached:
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
# Check if token has expired
|
|
57
|
+
if time.time() >= cached.expires_at:
|
|
58
|
+
log.debug(
|
|
59
|
+
"Cached token for '%s' has expired. Removing from cache.",
|
|
60
|
+
agent_name,
|
|
61
|
+
)
|
|
62
|
+
del self._cache[agent_name]
|
|
63
|
+
return None
|
|
64
|
+
|
|
65
|
+
log.debug(
|
|
66
|
+
"Using cached OAuth token for '%s' (expires in %.0fs)",
|
|
67
|
+
agent_name,
|
|
68
|
+
cached.expires_at - time.time(),
|
|
69
|
+
)
|
|
70
|
+
return cached.access_token
|
|
71
|
+
|
|
72
|
+
async def set(
|
|
73
|
+
self, agent_name: str, access_token: str, cache_duration_seconds: int
|
|
74
|
+
):
|
|
75
|
+
"""
|
|
76
|
+
Caches a token with an expiration time.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
agent_name: The name of the agent.
|
|
80
|
+
access_token: The OAuth 2.0 access token.
|
|
81
|
+
cache_duration_seconds: How long the token should be cached.
|
|
82
|
+
"""
|
|
83
|
+
async with self._lock:
|
|
84
|
+
expires_at = time.time() + cache_duration_seconds
|
|
85
|
+
self._cache[agent_name] = CachedToken(
|
|
86
|
+
access_token=access_token, expires_at=expires_at
|
|
87
|
+
)
|
|
88
|
+
log.debug(
|
|
89
|
+
"Cached token for '%s' (expires in %ds)",
|
|
90
|
+
agent_name,
|
|
91
|
+
cache_duration_seconds,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
async def invalidate(self, agent_name: str):
|
|
95
|
+
"""
|
|
96
|
+
Removes a token from the cache.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
agent_name: The name of the agent.
|
|
100
|
+
"""
|
|
101
|
+
async with self._lock:
|
|
102
|
+
if agent_name in self._cache:
|
|
103
|
+
del self._cache[agent_name]
|
|
104
|
+
log.info("Invalidated cached token for '%s'", agent_name)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Abstract base class for proxy apps.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from abc import ABC, abstractmethod
|
|
8
|
+
from typing import Any, Dict, Type
|
|
9
|
+
|
|
10
|
+
from pydantic import ValidationError
|
|
11
|
+
from solace_ai_connector.common.log import log
|
|
12
|
+
from solace_ai_connector.flow.app import App
|
|
13
|
+
|
|
14
|
+
from ....common.a2a import get_agent_request_topic
|
|
15
|
+
from .component import BaseProxyComponent
|
|
16
|
+
from .config import BaseProxyAppConfig
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
info = {
|
|
20
|
+
"class_name": "BaseProxyApp",
|
|
21
|
+
"description": "Abstract base class for proxy apps. Handles common configuration and subscription generation.",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class BaseProxyApp(App, ABC):
|
|
26
|
+
"""
|
|
27
|
+
Abstract base class for proxy apps.
|
|
28
|
+
|
|
29
|
+
Handles common configuration schema, generates Solace topic subscriptions for all
|
|
30
|
+
proxied agents, and programmatically defines the single proxy component instance.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
app_schema = {}
|
|
34
|
+
|
|
35
|
+
def __init__(self, app_info: Dict[str, Any], **kwargs):
|
|
36
|
+
log.debug("Initializing BaseProxyApp...")
|
|
37
|
+
|
|
38
|
+
app_config_dict = app_info.get("app_config", {})
|
|
39
|
+
|
|
40
|
+
try:
|
|
41
|
+
# Validate the raw dict, cleaning None values to allow defaults to apply
|
|
42
|
+
app_config = BaseProxyAppConfig.model_validate_and_clean(app_config_dict)
|
|
43
|
+
# Overwrite the raw dict with the validated object for downstream use
|
|
44
|
+
app_info["app_config"] = app_config
|
|
45
|
+
except ValidationError as e:
|
|
46
|
+
message = BaseProxyAppConfig.format_validation_error_message(e, app_info['name'])
|
|
47
|
+
log.error("Invalid Proxy configuration:\n%s", message)
|
|
48
|
+
raise
|
|
49
|
+
|
|
50
|
+
namespace = app_config.get("namespace")
|
|
51
|
+
proxied_agents = app_config.get("proxied_agents", [])
|
|
52
|
+
|
|
53
|
+
# Generate subscriptions for each proxied agent
|
|
54
|
+
required_topics = [
|
|
55
|
+
get_agent_request_topic(namespace, agent["name"])
|
|
56
|
+
for agent in proxied_agents
|
|
57
|
+
if "name" in agent
|
|
58
|
+
]
|
|
59
|
+
generated_subs = [{"topic": topic} for topic in required_topics]
|
|
60
|
+
log.info(
|
|
61
|
+
"Automatically generated subscriptions for proxy: %s",
|
|
62
|
+
generated_subs,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
# Programmatically define the component
|
|
66
|
+
component_class = self._get_component_class()
|
|
67
|
+
component_definition = {
|
|
68
|
+
"name": f"{app_info.get('name', 'proxy')}_component",
|
|
69
|
+
"component_class": component_class,
|
|
70
|
+
"component_config": {}, # Component will get config from app_config
|
|
71
|
+
"subscriptions": generated_subs,
|
|
72
|
+
}
|
|
73
|
+
app_info["components"] = [component_definition]
|
|
74
|
+
log.debug("Replaced 'components' in app_info with programmatic definition.")
|
|
75
|
+
|
|
76
|
+
# Ensure broker is configured for input/output
|
|
77
|
+
broker_config = app_info.setdefault("broker", {})
|
|
78
|
+
broker_config["input_enabled"] = True
|
|
79
|
+
broker_config["output_enabled"] = True
|
|
80
|
+
log.debug("Injected broker.input_enabled=True and broker.output_enabled=True")
|
|
81
|
+
|
|
82
|
+
# Generate a unique queue name
|
|
83
|
+
app_name = app_info.get("name", "proxy-app")
|
|
84
|
+
generated_queue_name = f"{namespace.strip('/')}/q/proxy/{app_name}"
|
|
85
|
+
broker_config["queue_name"] = generated_queue_name
|
|
86
|
+
log.debug("Injected generated broker.queue_name: %s", generated_queue_name)
|
|
87
|
+
|
|
88
|
+
broker_config["temporary_queue"] = True
|
|
89
|
+
log.debug("Set broker_config.temporary_queue = True")
|
|
90
|
+
|
|
91
|
+
super().__init__(app_info, **kwargs)
|
|
92
|
+
log.debug("BaseProxyApp initialization complete.")
|
|
93
|
+
|
|
94
|
+
@abstractmethod
|
|
95
|
+
def _get_component_class(self) -> Type[BaseProxyComponent]:
|
|
96
|
+
"""
|
|
97
|
+
Abstract method to be implemented by concrete proxy apps.
|
|
98
|
+
Must return the specific proxy component class to be instantiated.
|
|
99
|
+
"""
|
|
100
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# DEVELOPER GUIDE: base
|
|
2
|
+
|
|
3
|
+
## Quick Summary
|
|
4
|
+
The `base` directory contains protocol-agnostic abstract base classes for implementing proxy applications in the Solace Agent Mesh. These classes handle common functionality like A2A message routing, agent discovery, task lifecycle management, and artifact resolution, allowing concrete proxy implementations to focus on protocol-specific details.
|
|
5
|
+
|
|
6
|
+
## Files Overview
|
|
7
|
+
- `__init__.py` - Package initialization for base proxy classes
|
|
8
|
+
- `app.py` - Abstract base class for proxy applications with configuration validation and component setup
|
|
9
|
+
- `component.py` - Abstract base class for proxy components handling Solace interaction and task management
|
|
10
|
+
- `config.py` - Pydantic configuration models for proxy applications
|
|
11
|
+
- `proxy_task_context.py` - Runtime state container for individual proxied agent tasks
|
|
12
|
+
|
|
13
|
+
## Developer API Reference
|
|
14
|
+
|
|
15
|
+
### __init__.py
|
|
16
|
+
**Purpose:** Package initialization file for base proxy classes
|
|
17
|
+
**Import:** `from solace_agent_mesh.agent.proxies.base import *`
|
|
18
|
+
|
|
19
|
+
This file contains only package documentation and no public API.
|
|
20
|
+
|
|
21
|
+
### app.py
|
|
22
|
+
**Purpose:** Abstract base class for proxy applications that handles configuration validation and automatic component setup
|
|
23
|
+
**Import:** `from solace_agent_mesh.agent.proxies.base.app import BaseProxyApp`
|
|
24
|
+
|
|
25
|
+
**Classes:**
|
|
26
|
+
- `BaseProxyApp(app_info: Dict[str, Any], **kwargs)` - Abstract base for proxy apps that automatically configures subscriptions and components
|
|
27
|
+
- `_get_component_class() -> Type[BaseProxyComponent]` - Abstract method to return the specific proxy component class
|
|
28
|
+
|
|
29
|
+
**Usage Examples:**
|
|
30
|
+
```python
|
|
31
|
+
from solace_agent_mesh.agent.proxies.base.app import BaseProxyApp
|
|
32
|
+
from solace_agent_mesh.agent.proxies.base.component import BaseProxyComponent
|
|
33
|
+
|
|
34
|
+
class MyProxyApp(BaseProxyApp):
|
|
35
|
+
def _get_component_class(self):
|
|
36
|
+
return MyProxyComponent
|
|
37
|
+
|
|
38
|
+
# App will automatically:
|
|
39
|
+
# - Validate configuration against BaseProxyAppConfig
|
|
40
|
+
# - Generate Solace subscriptions for all proxied agents
|
|
41
|
+
# - Create component instance with proper broker settings
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### component.py
|
|
45
|
+
**Purpose:** Abstract base class for proxy components that handles Solace interaction, discovery, and task lifecycle
|
|
46
|
+
**Import:** `from solace_agent_mesh.agent.proxies.base.component import BaseProxyComponent`
|
|
47
|
+
|
|
48
|
+
**Classes:**
|
|
49
|
+
- `BaseProxyComponent(**kwargs: Any)` - Abstract base for proxy components with async event processing
|
|
50
|
+
- `process_event(event: Event) -> None` - Processes incoming Solace events
|
|
51
|
+
- `invoke(message: SolaceMessage, data: dict) -> dict` - Placeholder invoke method (not used)
|
|
52
|
+
- `run() -> None` - Starts component operations and discovery timers
|
|
53
|
+
- `cleanup() -> None` - Cleans up resources on shutdown
|
|
54
|
+
- `clear_client_cache() -> None` - Clears cached clients (override in subclasses)
|
|
55
|
+
- `_fetch_agent_card(agent_config: dict) -> Optional[AgentCard]` - Abstract method to fetch agent cards
|
|
56
|
+
- `_forward_request(task_context: ProxyTaskContext, request: A2ARequest, agent_name: str) -> None` - Abstract method to forward requests
|
|
57
|
+
|
|
58
|
+
**Usage Examples:**
|
|
59
|
+
```python
|
|
60
|
+
from solace_agent_mesh.agent.proxies.base.component import BaseProxyComponent
|
|
61
|
+
from a2a.types import AgentCard, A2ARequest
|
|
62
|
+
|
|
63
|
+
class MyProxyComponent(BaseProxyComponent):
|
|
64
|
+
async def _fetch_agent_card(self, agent_config: dict) -> Optional[AgentCard]:
|
|
65
|
+
# Implement protocol-specific agent discovery
|
|
66
|
+
url = agent_config.get("url")
|
|
67
|
+
# ... fetch and return AgentCard
|
|
68
|
+
|
|
69
|
+
async def _forward_request(self, task_context, request: A2ARequest, agent_name: str):
|
|
70
|
+
# Implement protocol-specific request forwarding
|
|
71
|
+
# ... forward request to downstream agent
|
|
72
|
+
# ... handle responses and publish back to Solace
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### config.py
|
|
76
|
+
**Purpose:** Pydantic configuration models for proxy applications
|
|
77
|
+
**Import:** `from solace_agent_mesh.agent.proxies.base.config import BaseProxyAppConfig, ProxiedAgentConfig, ArtifactServiceConfig`
|
|
78
|
+
|
|
79
|
+
**Classes:**
|
|
80
|
+
- `ArtifactServiceConfig()` - Configuration for artifact service
|
|
81
|
+
- `type: str` - Service type ('memory', 'gcs', 'filesystem')
|
|
82
|
+
- `base_path: Optional[str]` - Base directory for filesystem type
|
|
83
|
+
- `bucket_name: Optional[str]` - GCS bucket name
|
|
84
|
+
- `artifact_scope: Literal["namespace", "app", "custom"]` - Scope for artifacts
|
|
85
|
+
- `artifact_scope_value: Optional[str]` - Custom scope identifier
|
|
86
|
+
|
|
87
|
+
- `ProxiedAgentConfig()` - Configuration for individual proxied agents
|
|
88
|
+
- `name: str` - Agent name on Solace mesh
|
|
89
|
+
- `request_timeout_seconds: Optional[int]` - Timeout override for this agent
|
|
90
|
+
|
|
91
|
+
- `BaseProxyAppConfig()` - Base configuration for proxy applications
|
|
92
|
+
- `namespace: str` - Topic prefix for A2A communication
|
|
93
|
+
- `proxied_agents: List[ProxiedAgentConfig]` - List of agents to proxy
|
|
94
|
+
- `artifact_service: ArtifactServiceConfig` - Artifact service configuration
|
|
95
|
+
- `discovery_interval_seconds: int` - Agent discovery interval (default: 60)
|
|
96
|
+
- `default_request_timeout_seconds: int` - Default request timeout (default: 300)
|
|
97
|
+
|
|
98
|
+
**Usage Examples:**
|
|
99
|
+
```python
|
|
100
|
+
from solace_agent_mesh.agent.proxies.base.config import BaseProxyAppConfig
|
|
101
|
+
|
|
102
|
+
# Configuration validation
|
|
103
|
+
config_dict = {
|
|
104
|
+
"namespace": "myorg/dev",
|
|
105
|
+
"proxied_agents": [
|
|
106
|
+
{"name": "my-agent", "request_timeout_seconds": 120}
|
|
107
|
+
],
|
|
108
|
+
"artifact_service": {"type": "memory"},
|
|
109
|
+
"discovery_interval_seconds": 30
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
config = BaseProxyAppConfig.model_validate(config_dict)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### proxy_task_context.py
|
|
116
|
+
**Purpose:** Runtime state container for individual proxied agent tasks
|
|
117
|
+
**Import:** `from solace_agent_mesh.agent.proxies.base.proxy_task_context import ProxyTaskContext`
|
|
118
|
+
|
|
119
|
+
**Classes:**
|
|
120
|
+
- `ProxyTaskContext(task_id: str, a2a_context: Dict[str, Any])` - Runtime state for a proxied task
|
|
121
|
+
- `task_id: str` - Unique identifier for the task
|
|
122
|
+
- `a2a_context: Dict[str, Any]` - A2A protocol context information
|
|
123
|
+
|
|
124
|
+
**Usage Examples:**
|
|
125
|
+
```python
|
|
126
|
+
from solace_agent_mesh.agent.proxies.base.proxy_task_context import ProxyTaskContext
|
|
127
|
+
|
|
128
|
+
# Create task context when handling new request
|
|
129
|
+
a2a_context = {
|
|
130
|
+
"jsonrpc_request_id": "req-123",
|
|
131
|
+
"logical_task_id": "task-456",
|
|
132
|
+
"session_id": "session-789",
|
|
133
|
+
"user_id": "user123",
|
|
134
|
+
"status_topic": "status/topic",
|
|
135
|
+
"reply_to_topic": "reply/topic",
|
|
136
|
+
"is_streaming": False
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
task_context = ProxyTaskContext(
|
|
140
|
+
task_id="task-456",
|
|
141
|
+
a2a_context=a2a_context
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Store in active tasks for lifecycle management
|
|
145
|
+
self.active_tasks[task_context.task_id] = task_context
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
# content_hash: 40cb6427440b8b946d69d0d721d47ca5994dd19621e6e631544e8e39b7a96624
|