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,408 @@
|
|
|
1
|
+
"""Pure OAuth 2.0 protocol implementation.
|
|
2
|
+
|
|
3
|
+
This module provides stateless OAuth 2.0 flow implementations without any
|
|
4
|
+
caching, retry logic, or domain-specific behavior. It implements the core
|
|
5
|
+
OAuth 2.0 flows as defined in RFC 6749.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import asyncio
|
|
9
|
+
import logging
|
|
10
|
+
import random
|
|
11
|
+
from typing import Any, Dict, Optional, Union
|
|
12
|
+
|
|
13
|
+
import httpx
|
|
14
|
+
|
|
15
|
+
from .utils import calculate_expires_at
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class OAuth2Client:
|
|
21
|
+
"""Pure OAuth 2.0 protocol implementation.
|
|
22
|
+
|
|
23
|
+
This class provides stateless OAuth 2.0 flow implementations without any
|
|
24
|
+
caching, retry logic, or domain-specific behavior. Each method makes a
|
|
25
|
+
single HTTP request to the token endpoint and returns the parsed response.
|
|
26
|
+
|
|
27
|
+
All OAuth 2.0 flows follow RFC 6749 specification.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
async def fetch_client_credentials_token(
|
|
31
|
+
self,
|
|
32
|
+
token_url: str,
|
|
33
|
+
client_id: str,
|
|
34
|
+
client_secret: str,
|
|
35
|
+
scope: Optional[str] = None,
|
|
36
|
+
verify: Union[bool, str] = True,
|
|
37
|
+
timeout: float = 30.0,
|
|
38
|
+
) -> Dict[str, Any]:
|
|
39
|
+
"""Execute OAuth 2.0 Client Credentials flow (RFC 6749 Section 4.4).
|
|
40
|
+
|
|
41
|
+
This flow is used for server-to-server authentication where the client
|
|
42
|
+
acts on its own behalf rather than on behalf of a user.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
token_url: OAuth 2.0 token endpoint URL
|
|
46
|
+
client_id: OAuth 2.0 client identifier
|
|
47
|
+
client_secret: OAuth 2.0 client secret
|
|
48
|
+
scope: Optional space-separated list of scopes
|
|
49
|
+
verify: SSL certificate verification (True, False, or path to CA bundle)
|
|
50
|
+
timeout: Request timeout in seconds
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
Token response dictionary containing:
|
|
54
|
+
- access_token: The access token string
|
|
55
|
+
- expires_in: Token lifetime in seconds
|
|
56
|
+
- token_type: Token type (usually "Bearer")
|
|
57
|
+
- scope: Granted scopes (optional)
|
|
58
|
+
- expires_at: Unix timestamp when token expires (added by this method)
|
|
59
|
+
|
|
60
|
+
Raises:
|
|
61
|
+
httpx.HTTPStatusError: If the token request fails
|
|
62
|
+
ValueError: If the response is missing required fields
|
|
63
|
+
"""
|
|
64
|
+
payload = {
|
|
65
|
+
"grant_type": "client_credentials",
|
|
66
|
+
"client_id": client_id,
|
|
67
|
+
"client_secret": client_secret,
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if scope:
|
|
71
|
+
payload["scope"] = scope
|
|
72
|
+
|
|
73
|
+
return await self._execute_token_request(
|
|
74
|
+
token_url=token_url,
|
|
75
|
+
payload=payload,
|
|
76
|
+
verify=verify,
|
|
77
|
+
timeout=timeout,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
async def fetch_authorization_code_token(
|
|
81
|
+
self,
|
|
82
|
+
token_url: str,
|
|
83
|
+
client_id: str,
|
|
84
|
+
client_secret: str,
|
|
85
|
+
code: str,
|
|
86
|
+
redirect_uri: str,
|
|
87
|
+
verify: Union[bool, str] = True,
|
|
88
|
+
timeout: float = 30.0,
|
|
89
|
+
) -> Dict[str, Any]:
|
|
90
|
+
"""Execute OAuth 2.0 Authorization Code flow (RFC 6749 Section 4.1).
|
|
91
|
+
|
|
92
|
+
This flow is used for user-delegated authentication where the application
|
|
93
|
+
acts on behalf of a user who has granted permission.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
token_url: OAuth 2.0 token endpoint URL
|
|
97
|
+
client_id: OAuth 2.0 client identifier
|
|
98
|
+
client_secret: OAuth 2.0 client secret
|
|
99
|
+
code: Authorization code received from authorization server
|
|
100
|
+
redirect_uri: Redirect URI used in authorization request (must match)
|
|
101
|
+
verify: SSL certificate verification (True, False, or path to CA bundle)
|
|
102
|
+
timeout: Request timeout in seconds
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Token response dictionary containing:
|
|
106
|
+
- access_token: The access token string
|
|
107
|
+
- expires_in: Token lifetime in seconds
|
|
108
|
+
- refresh_token: Refresh token for obtaining new access tokens (optional)
|
|
109
|
+
- token_type: Token type (usually "Bearer")
|
|
110
|
+
- scope: Granted scopes (optional)
|
|
111
|
+
- expires_at: Unix timestamp when token expires (added by this method)
|
|
112
|
+
|
|
113
|
+
Raises:
|
|
114
|
+
httpx.HTTPStatusError: If the token request fails
|
|
115
|
+
ValueError: If the response is missing required fields
|
|
116
|
+
"""
|
|
117
|
+
payload = {
|
|
118
|
+
"grant_type": "authorization_code",
|
|
119
|
+
"code": code,
|
|
120
|
+
"redirect_uri": redirect_uri,
|
|
121
|
+
"client_id": client_id,
|
|
122
|
+
"client_secret": client_secret,
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return await self._execute_token_request(
|
|
126
|
+
token_url=token_url,
|
|
127
|
+
payload=payload,
|
|
128
|
+
verify=verify,
|
|
129
|
+
timeout=timeout,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
async def fetch_refresh_token(
|
|
133
|
+
self,
|
|
134
|
+
token_url: str,
|
|
135
|
+
client_id: str,
|
|
136
|
+
client_secret: str,
|
|
137
|
+
refresh_token: str,
|
|
138
|
+
scope: Optional[str] = None,
|
|
139
|
+
verify: Union[bool, str] = True,
|
|
140
|
+
timeout: float = 30.0,
|
|
141
|
+
) -> Dict[str, Any]:
|
|
142
|
+
"""Execute OAuth 2.0 Refresh Token flow (RFC 6749 Section 6).
|
|
143
|
+
|
|
144
|
+
This flow is used to obtain a new access token using a refresh token,
|
|
145
|
+
without requiring user interaction.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
token_url: OAuth 2.0 token endpoint URL
|
|
149
|
+
client_id: OAuth 2.0 client identifier
|
|
150
|
+
client_secret: OAuth 2.0 client secret
|
|
151
|
+
refresh_token: The refresh token
|
|
152
|
+
scope: Optional space-separated list of scopes (must not exceed original grant)
|
|
153
|
+
verify: SSL certificate verification (True, False, or path to CA bundle)
|
|
154
|
+
timeout: Request timeout in seconds
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
Token response dictionary containing:
|
|
158
|
+
- access_token: The new access token string
|
|
159
|
+
- expires_in: Token lifetime in seconds
|
|
160
|
+
- refresh_token: New refresh token (optional, may be same as input)
|
|
161
|
+
- token_type: Token type (usually "Bearer")
|
|
162
|
+
- scope: Granted scopes (optional)
|
|
163
|
+
- expires_at: Unix timestamp when token expires (added by this method)
|
|
164
|
+
|
|
165
|
+
Raises:
|
|
166
|
+
httpx.HTTPStatusError: If the token request fails
|
|
167
|
+
ValueError: If the response is missing required fields
|
|
168
|
+
"""
|
|
169
|
+
payload = {
|
|
170
|
+
"grant_type": "refresh_token",
|
|
171
|
+
"refresh_token": refresh_token,
|
|
172
|
+
"client_id": client_id,
|
|
173
|
+
"client_secret": client_secret,
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if scope:
|
|
177
|
+
payload["scope"] = scope
|
|
178
|
+
|
|
179
|
+
return await self._execute_token_request(
|
|
180
|
+
token_url=token_url,
|
|
181
|
+
payload=payload,
|
|
182
|
+
verify=verify,
|
|
183
|
+
timeout=timeout,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
async def _execute_token_request(
|
|
187
|
+
self,
|
|
188
|
+
token_url: str,
|
|
189
|
+
payload: Dict[str, str],
|
|
190
|
+
verify: Union[bool, str],
|
|
191
|
+
timeout: float,
|
|
192
|
+
) -> Dict[str, Any]:
|
|
193
|
+
"""Execute a token request to the OAuth 2.0 token endpoint.
|
|
194
|
+
|
|
195
|
+
This is the core HTTP operation shared by all OAuth flows.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
token_url: OAuth 2.0 token endpoint URL
|
|
199
|
+
payload: Request payload (grant-specific parameters)
|
|
200
|
+
verify: SSL certificate verification
|
|
201
|
+
timeout: Request timeout in seconds
|
|
202
|
+
|
|
203
|
+
Returns:
|
|
204
|
+
Token response dictionary with added expires_at field
|
|
205
|
+
|
|
206
|
+
Raises:
|
|
207
|
+
httpx.HTTPStatusError: If the token request fails
|
|
208
|
+
ValueError: If the response is missing required fields
|
|
209
|
+
"""
|
|
210
|
+
headers = {
|
|
211
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
212
|
+
"Accept": "application/json",
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async with httpx.AsyncClient(verify=verify) as client:
|
|
216
|
+
response = await client.post(
|
|
217
|
+
token_url,
|
|
218
|
+
data=payload,
|
|
219
|
+
headers=headers,
|
|
220
|
+
timeout=timeout,
|
|
221
|
+
)
|
|
222
|
+
response.raise_for_status()
|
|
223
|
+
|
|
224
|
+
token_data = response.json()
|
|
225
|
+
|
|
226
|
+
# Validate response contains required fields
|
|
227
|
+
if "access_token" not in token_data:
|
|
228
|
+
raise ValueError(
|
|
229
|
+
f"Token response missing 'access_token' field. "
|
|
230
|
+
f"Response keys: {list(token_data.keys())}"
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
# Add expiration timestamp for convenience
|
|
234
|
+
expires_in = token_data.get("expires_in", 3600) # Default 1 hour
|
|
235
|
+
token_data["expires_at"] = calculate_expires_at(expires_in)
|
|
236
|
+
|
|
237
|
+
return token_data
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class OAuth2RetryClient:
|
|
241
|
+
"""OAuth 2.0 client with configurable retry logic.
|
|
242
|
+
|
|
243
|
+
This class wraps OAuth2Client and adds retry logic with exponential backoff
|
|
244
|
+
for handling transient failures. Retry behavior:
|
|
245
|
+
- 4xx errors (client errors): No retry - fail immediately
|
|
246
|
+
- 5xx errors (server errors): Retry with exponential backoff
|
|
247
|
+
- Network errors: Retry with exponential backoff
|
|
248
|
+
"""
|
|
249
|
+
|
|
250
|
+
def __init__(
|
|
251
|
+
self,
|
|
252
|
+
max_retries: int = 0,
|
|
253
|
+
backoff_base: float = 2.0,
|
|
254
|
+
backoff_jitter: bool = True,
|
|
255
|
+
):
|
|
256
|
+
"""Initialize the retry client.
|
|
257
|
+
|
|
258
|
+
Args:
|
|
259
|
+
max_retries: Maximum number of retry attempts (0 = no retries)
|
|
260
|
+
backoff_base: Base for exponential backoff (delay = base^attempt)
|
|
261
|
+
backoff_jitter: Whether to add random jitter to backoff delay
|
|
262
|
+
"""
|
|
263
|
+
self._base_client = OAuth2Client()
|
|
264
|
+
self._max_retries = max_retries
|
|
265
|
+
self._backoff_base = backoff_base
|
|
266
|
+
self._backoff_jitter = backoff_jitter
|
|
267
|
+
|
|
268
|
+
async def fetch_client_credentials_token(
|
|
269
|
+
self,
|
|
270
|
+
token_url: str,
|
|
271
|
+
client_id: str,
|
|
272
|
+
client_secret: str,
|
|
273
|
+
scope: Optional[str] = None,
|
|
274
|
+
verify: Union[bool, str] = True,
|
|
275
|
+
timeout: float = 30.0,
|
|
276
|
+
) -> Dict[str, Any]:
|
|
277
|
+
"""Execute Client Credentials flow with retry logic.
|
|
278
|
+
|
|
279
|
+
See OAuth2Client.fetch_client_credentials_token for parameter details.
|
|
280
|
+
"""
|
|
281
|
+
return await self._execute_with_retry(
|
|
282
|
+
self._base_client.fetch_client_credentials_token,
|
|
283
|
+
token_url=token_url,
|
|
284
|
+
client_id=client_id,
|
|
285
|
+
client_secret=client_secret,
|
|
286
|
+
scope=scope,
|
|
287
|
+
verify=verify,
|
|
288
|
+
timeout=timeout,
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
async def fetch_authorization_code_token(
|
|
292
|
+
self,
|
|
293
|
+
token_url: str,
|
|
294
|
+
client_id: str,
|
|
295
|
+
client_secret: str,
|
|
296
|
+
code: str,
|
|
297
|
+
redirect_uri: str,
|
|
298
|
+
verify: Union[bool, str] = True,
|
|
299
|
+
timeout: float = 30.0,
|
|
300
|
+
) -> Dict[str, Any]:
|
|
301
|
+
"""Execute Authorization Code flow with retry logic.
|
|
302
|
+
|
|
303
|
+
See OAuth2Client.fetch_authorization_code_token for parameter details.
|
|
304
|
+
"""
|
|
305
|
+
return await self._execute_with_retry(
|
|
306
|
+
self._base_client.fetch_authorization_code_token,
|
|
307
|
+
token_url=token_url,
|
|
308
|
+
client_id=client_id,
|
|
309
|
+
client_secret=client_secret,
|
|
310
|
+
code=code,
|
|
311
|
+
redirect_uri=redirect_uri,
|
|
312
|
+
verify=verify,
|
|
313
|
+
timeout=timeout,
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
async def fetch_refresh_token(
|
|
317
|
+
self,
|
|
318
|
+
token_url: str,
|
|
319
|
+
client_id: str,
|
|
320
|
+
client_secret: str,
|
|
321
|
+
refresh_token: str,
|
|
322
|
+
scope: Optional[str] = None,
|
|
323
|
+
verify: Union[bool, str] = True,
|
|
324
|
+
timeout: float = 30.0,
|
|
325
|
+
) -> Dict[str, Any]:
|
|
326
|
+
"""Execute Refresh Token flow with retry logic.
|
|
327
|
+
|
|
328
|
+
See OAuth2Client.fetch_refresh_token for parameter details.
|
|
329
|
+
"""
|
|
330
|
+
return await self._execute_with_retry(
|
|
331
|
+
self._base_client.fetch_refresh_token,
|
|
332
|
+
token_url=token_url,
|
|
333
|
+
client_id=client_id,
|
|
334
|
+
client_secret=client_secret,
|
|
335
|
+
refresh_token=refresh_token,
|
|
336
|
+
scope=scope,
|
|
337
|
+
verify=verify,
|
|
338
|
+
timeout=timeout,
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
async def _execute_with_retry(self, func, **kwargs) -> Dict[str, Any]:
|
|
342
|
+
"""Execute a function with retry logic.
|
|
343
|
+
|
|
344
|
+
Args:
|
|
345
|
+
func: Async function to execute
|
|
346
|
+
**kwargs: Arguments to pass to the function
|
|
347
|
+
|
|
348
|
+
Returns:
|
|
349
|
+
Result from the function
|
|
350
|
+
|
|
351
|
+
Raises:
|
|
352
|
+
Exception: Last exception if all retries are exhausted
|
|
353
|
+
"""
|
|
354
|
+
last_exception = None
|
|
355
|
+
|
|
356
|
+
for attempt in range(self._max_retries + 1):
|
|
357
|
+
try:
|
|
358
|
+
return await func(**kwargs)
|
|
359
|
+
|
|
360
|
+
except httpx.HTTPStatusError as e:
|
|
361
|
+
last_exception = e
|
|
362
|
+
# Don't retry on 4xx errors (client errors)
|
|
363
|
+
if 400 <= e.response.status_code < 500:
|
|
364
|
+
logger.error(
|
|
365
|
+
"OAuth token request failed with client error %d: %s",
|
|
366
|
+
e.response.status_code,
|
|
367
|
+
e.response.text,
|
|
368
|
+
)
|
|
369
|
+
raise
|
|
370
|
+
|
|
371
|
+
logger.warning(
|
|
372
|
+
"OAuth token request failed with status %d (attempt %d/%d): %s",
|
|
373
|
+
e.response.status_code,
|
|
374
|
+
attempt + 1,
|
|
375
|
+
self._max_retries + 1,
|
|
376
|
+
e.response.text,
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
except httpx.RequestError as e:
|
|
380
|
+
last_exception = e
|
|
381
|
+
logger.warning(
|
|
382
|
+
"OAuth token request failed (attempt %d/%d): %s",
|
|
383
|
+
attempt + 1,
|
|
384
|
+
self._max_retries + 1,
|
|
385
|
+
str(e),
|
|
386
|
+
)
|
|
387
|
+
|
|
388
|
+
except Exception as e:
|
|
389
|
+
last_exception = e
|
|
390
|
+
logger.error("Unexpected error during OAuth token fetch: %s", str(e))
|
|
391
|
+
raise
|
|
392
|
+
|
|
393
|
+
# Exponential backoff with optional jitter
|
|
394
|
+
if attempt < self._max_retries:
|
|
395
|
+
delay = self._backoff_base**attempt
|
|
396
|
+
if self._backoff_jitter:
|
|
397
|
+
delay += random.uniform(0, 1)
|
|
398
|
+
logger.info("Retrying OAuth token request in %.2f seconds", delay)
|
|
399
|
+
await asyncio.sleep(delay)
|
|
400
|
+
|
|
401
|
+
# All retries exhausted
|
|
402
|
+
logger.error(
|
|
403
|
+
"OAuth token request failed after %d attempts", self._max_retries + 1
|
|
404
|
+
)
|
|
405
|
+
if last_exception:
|
|
406
|
+
raise last_exception
|
|
407
|
+
else:
|
|
408
|
+
raise RuntimeError("OAuth token request failed after all retries")
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Utility functions for OAuth 2.0 operations."""
|
|
2
|
+
|
|
3
|
+
import time
|
|
4
|
+
from urllib.parse import urlparse
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def validate_https_url(url: str) -> None:
|
|
8
|
+
"""Validate that a URL uses HTTPS scheme.
|
|
9
|
+
|
|
10
|
+
OAuth 2.0 requires HTTPS for security when transmitting credentials.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
url: The URL to validate
|
|
14
|
+
|
|
15
|
+
Raises:
|
|
16
|
+
ValueError: If the URL does not use HTTPS scheme
|
|
17
|
+
"""
|
|
18
|
+
parsed_url = urlparse(url)
|
|
19
|
+
if parsed_url.scheme != "https":
|
|
20
|
+
raise ValueError(
|
|
21
|
+
f"OAuth 2.0 URLs must use HTTPS for security. "
|
|
22
|
+
f"Got scheme: {parsed_url.scheme}"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def calculate_expires_at(expires_in: int) -> float:
|
|
27
|
+
"""Calculate expiration timestamp from expires_in seconds.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
expires_in: Number of seconds until token expires
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
Unix timestamp (float) when the token will expire
|
|
34
|
+
"""
|
|
35
|
+
return time.time() + expires_in
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def is_token_expired(expires_at: float, buffer_seconds: int = 0) -> bool:
|
|
39
|
+
"""Check if a token is expired or will expire within buffer time.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
expires_at: Unix timestamp when token expires
|
|
43
|
+
buffer_seconds: Optional buffer to consider token expired early
|
|
44
|
+
(useful for proactive refresh)
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
True if token is expired or within buffer time of expiring
|
|
48
|
+
"""
|
|
49
|
+
current_time = time.time()
|
|
50
|
+
return current_time >= (expires_at - buffer_seconds)
|
|
File without changes
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# DEVELOPER GUIDE: sac
|
|
2
|
+
|
|
3
|
+
## Quick Summary
|
|
4
|
+
The `sac` directory provides the base component framework for Solace Agent Mesh (SAM) implementations in the Solace AI Connector. It offers a standardized foundation for building high-level SAM components like Agents and Gateways with built-in async operations management and message publishing capabilities.
|
|
5
|
+
|
|
6
|
+
## Files Overview
|
|
7
|
+
- `__init__.py` - Empty package initialization file
|
|
8
|
+
- `sam_component_base.py` - Abstract base class providing async thread management and A2A message publishing for SAM components
|
|
9
|
+
|
|
10
|
+
## Developer API Reference
|
|
11
|
+
|
|
12
|
+
### sam_component_base.py
|
|
13
|
+
**Purpose:** Provides an abstract base class for SAM components with managed asyncio event loops and message publishing
|
|
14
|
+
**Import:** `from solace_agent_mesh.common.sac.sam_component_base import SamComponentBase`
|
|
15
|
+
|
|
16
|
+
**Classes:**
|
|
17
|
+
- `SamComponentBase(info: Dict[str, Any], **kwargs: Any)` - Abstract base class for high-level SAM components (Agents, Gateways)
|
|
18
|
+
- `publish_a2a_message(payload: Dict, topic: str, user_properties: Optional[Dict] = None) -> None` - Publishes A2A messages with size validation
|
|
19
|
+
- `run() -> None` - Starts the component's dedicated async thread
|
|
20
|
+
- `cleanup() -> None` - Cleans up resources including async thread and loop
|
|
21
|
+
- `get_async_loop() -> Optional[asyncio.AbstractEventLoop]` - Returns the dedicated asyncio event loop
|
|
22
|
+
- `_async_setup_and_run() -> None` - Abstract method for subclasses to implement main async logic
|
|
23
|
+
- `_pre_async_cleanup() -> None` - Abstract method for cleanup before async loop stops
|
|
24
|
+
- `namespace: str` - The configured namespace for the component
|
|
25
|
+
- `max_message_size_bytes: int` - Maximum allowed message size in bytes
|
|
26
|
+
|
|
27
|
+
**Usage Examples:**
|
|
28
|
+
```python
|
|
29
|
+
from solace_agent_mesh.common.sac.sam_component_base import SamComponentBase
|
|
30
|
+
from typing import Dict, Any
|
|
31
|
+
import asyncio
|
|
32
|
+
|
|
33
|
+
class MyAgent(SamComponentBase):
|
|
34
|
+
def __init__(self, info: Dict[str, Any], **kwargs: Any):
|
|
35
|
+
super().__init__(info, **kwargs)
|
|
36
|
+
# Additional initialization
|
|
37
|
+
|
|
38
|
+
async def _async_setup_and_run(self) -> None:
|
|
39
|
+
"""Implement your main async logic here"""
|
|
40
|
+
while not self.stop_signal.is_set():
|
|
41
|
+
# Your async operations
|
|
42
|
+
await asyncio.sleep(1)
|
|
43
|
+
|
|
44
|
+
def _pre_async_cleanup(self) -> None:
|
|
45
|
+
"""Cleanup before async loop stops"""
|
|
46
|
+
# Your cleanup logic
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
# Usage
|
|
50
|
+
config = {
|
|
51
|
+
"namespace": "my_namespace",
|
|
52
|
+
"max_message_size_bytes": 1048576 # 1MB
|
|
53
|
+
}
|
|
54
|
+
agent = MyAgent(config)
|
|
55
|
+
|
|
56
|
+
# Publish a message
|
|
57
|
+
payload = {"message": "Hello World"}
|
|
58
|
+
agent.publish_a2a_message(
|
|
59
|
+
payload=payload,
|
|
60
|
+
topic="sam/agents/my_agent/response",
|
|
61
|
+
user_properties={"correlation_id": "123"}
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Start the component
|
|
65
|
+
agent.run()
|
|
66
|
+
|
|
67
|
+
# Later, cleanup
|
|
68
|
+
agent.cleanup()
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
# content_hash: 3a67b8df1c1af409e52645a3674864418b00017b58519d84736eb4d1da56ea11
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# LLM Summary Detail File
|
|
2
|
+
|
|
3
|
+
This file is a concatenation of all individual *llm.txt files found in the 'sac' directory tree. Each section below corresponds to a specific directory's summary file.
|
|
4
|
+
|
|
5
|
+
================================================================================
|
|
6
|
+
|
|
7
|
+
## Section 1: solace_agent_mesh/common/sac/sac_llm.txt
|
|
8
|
+
|
|
9
|
+
**Source file:** `solace_agent_mesh/common/sac/sac_llm.txt`
|
|
10
|
+
|
|
11
|
+
# DEVELOPER GUIDE: sac
|
|
12
|
+
|
|
13
|
+
## Quick Summary
|
|
14
|
+
The `sac` directory provides the base component framework for Solace Agent Mesh (SAM) implementations in the Solace AI Connector. It offers a standardized foundation for building high-level SAM components like Agents and Gateways with built-in async operations management and message publishing capabilities.
|
|
15
|
+
|
|
16
|
+
## Files Overview
|
|
17
|
+
- `__init__.py` - Empty package initialization file
|
|
18
|
+
- `sam_component_base.py` - Abstract base class providing async thread management and A2A message publishing for SAM components
|
|
19
|
+
|
|
20
|
+
## Developer API Reference
|
|
21
|
+
|
|
22
|
+
### sam_component_base.py
|
|
23
|
+
**Purpose:** Provides an abstract base class for SAM components with managed asyncio event loops and message publishing
|
|
24
|
+
**Import:** `from solace_agent_mesh.common.sac.sam_component_base import SamComponentBase`
|
|
25
|
+
|
|
26
|
+
**Classes:**
|
|
27
|
+
- `SamComponentBase(info: Dict[str, Any], **kwargs: Any)` - Abstract base class for high-level SAM components (Agents, Gateways)
|
|
28
|
+
- `publish_a2a_message(payload: Dict, topic: str, user_properties: Optional[Dict] = None) -> None` - Publishes A2A messages with size validation
|
|
29
|
+
- `run() -> None` - Starts the component's dedicated async thread
|
|
30
|
+
- `cleanup() -> None` - Cleans up resources including async thread and loop
|
|
31
|
+
- `get_async_loop() -> Optional[asyncio.AbstractEventLoop]` - Returns the dedicated asyncio event loop
|
|
32
|
+
- `_async_setup_and_run() -> None` - Abstract method for subclasses to implement main async logic
|
|
33
|
+
- `_pre_async_cleanup() -> None` - Abstract method for cleanup before async loop stops
|
|
34
|
+
- `namespace: str` - The configured namespace for the component
|
|
35
|
+
- `max_message_size_bytes: int` - Maximum allowed message size in bytes
|
|
36
|
+
|
|
37
|
+
**Usage Examples:**
|
|
38
|
+
```python
|
|
39
|
+
from solace_agent_mesh.common.sac.sam_component_base import SamComponentBase
|
|
40
|
+
from typing import Dict, Any
|
|
41
|
+
import asyncio
|
|
42
|
+
|
|
43
|
+
class MyAgent(SamComponentBase):
|
|
44
|
+
def __init__(self, info: Dict[str, Any], **kwargs: Any):
|
|
45
|
+
super().__init__(info, **kwargs)
|
|
46
|
+
# Additional initialization
|
|
47
|
+
|
|
48
|
+
async def _async_setup_and_run(self) -> None:
|
|
49
|
+
"""Implement your main async logic here"""
|
|
50
|
+
while not self.stop_signal.is_set():
|
|
51
|
+
# Your async operations
|
|
52
|
+
await asyncio.sleep(1)
|
|
53
|
+
|
|
54
|
+
def _pre_async_cleanup(self) -> None:
|
|
55
|
+
"""Cleanup before async loop stops"""
|
|
56
|
+
# Your cleanup logic
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
# Usage
|
|
60
|
+
config = {
|
|
61
|
+
"namespace": "my_namespace",
|
|
62
|
+
"max_message_size_bytes": 1048576 # 1MB
|
|
63
|
+
}
|
|
64
|
+
agent = MyAgent(config)
|
|
65
|
+
|
|
66
|
+
# Publish a message
|
|
67
|
+
payload = {"message": "Hello World"}
|
|
68
|
+
agent.publish_a2a_message(
|
|
69
|
+
payload=payload,
|
|
70
|
+
topic="sam/agents/my_agent/response",
|
|
71
|
+
user_properties={"correlation_id": "123"}
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Start the component
|
|
75
|
+
agent.run()
|
|
76
|
+
|
|
77
|
+
# Later, cleanup
|
|
78
|
+
agent.cleanup()
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
================================================================================
|
|
82
|
+
|