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,689 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Helpers for A2A protocol-level concerns, such as topic construction and
|
|
3
|
+
parsing of JSON-RPC requests and responses.
|
|
4
|
+
"""
|
|
5
|
+
import logging
|
|
6
|
+
import re
|
|
7
|
+
import uuid
|
|
8
|
+
from typing import Any, Dict, Optional, Tuple, Union
|
|
9
|
+
|
|
10
|
+
from a2a.types import (
|
|
11
|
+
A2ARequest,
|
|
12
|
+
CancelTaskRequest,
|
|
13
|
+
GetTaskSuccessResponse,
|
|
14
|
+
InternalError,
|
|
15
|
+
InvalidRequestError,
|
|
16
|
+
JSONRPCError,
|
|
17
|
+
JSONRPCResponse,
|
|
18
|
+
JSONRPCSuccessResponse,
|
|
19
|
+
Message,
|
|
20
|
+
MessageSendParams,
|
|
21
|
+
SendMessageRequest,
|
|
22
|
+
SendMessageSuccessResponse,
|
|
23
|
+
SendStreamingMessageRequest,
|
|
24
|
+
SendStreamingMessageSuccessResponse,
|
|
25
|
+
Task,
|
|
26
|
+
TaskArtifactUpdateEvent,
|
|
27
|
+
TaskIdParams,
|
|
28
|
+
TaskStatusUpdateEvent,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
log = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
# --- Topic Construction Helpers ---
|
|
34
|
+
|
|
35
|
+
A2A_VERSION = "v1"
|
|
36
|
+
A2A_BASE_PATH = f"a2a/{A2A_VERSION}"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def get_a2a_base_topic(namespace: str) -> str:
|
|
40
|
+
"""Returns the base topic prefix for all A2A communication."""
|
|
41
|
+
if not namespace:
|
|
42
|
+
raise ValueError("A2A namespace cannot be empty.")
|
|
43
|
+
return f"{namespace.rstrip('/')}/{A2A_BASE_PATH}"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def get_discovery_topic(namespace: str) -> str:
|
|
47
|
+
"""Returns the topic for agent card discovery."""
|
|
48
|
+
return f"{get_a2a_base_topic(namespace)}/discovery/agentcards"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def get_agent_request_topic(namespace: str, agent_name: str) -> str:
|
|
52
|
+
"""Returns the topic for sending requests to a specific agent."""
|
|
53
|
+
if not agent_name:
|
|
54
|
+
raise ValueError("Agent name cannot be empty.")
|
|
55
|
+
return f"{get_a2a_base_topic(namespace)}/agent/request/{agent_name}"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def get_gateway_status_topic(namespace: str, gateway_id: str, task_id: str) -> str:
|
|
59
|
+
"""
|
|
60
|
+
Returns the specific topic for an agent to publish status updates TO a specific gateway instance.
|
|
61
|
+
"""
|
|
62
|
+
if not gateway_id:
|
|
63
|
+
raise ValueError("Gateway ID cannot be empty.")
|
|
64
|
+
if not task_id:
|
|
65
|
+
raise ValueError("Task ID cannot be empty.")
|
|
66
|
+
return f"{get_a2a_base_topic(namespace)}/gateway/status/{gateway_id}/{task_id}"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def get_gateway_response_topic(namespace: str, gateway_id: str, task_id: str) -> str:
|
|
70
|
+
"""
|
|
71
|
+
Returns the specific topic for an agent to publish the final response TO a specific gateway instance.
|
|
72
|
+
Includes task_id for potential correlation/filtering, though gateway might subscribe more broadly.
|
|
73
|
+
"""
|
|
74
|
+
if not gateway_id:
|
|
75
|
+
raise ValueError("Gateway ID cannot be empty.")
|
|
76
|
+
if not task_id:
|
|
77
|
+
raise ValueError("Task ID cannot be empty.")
|
|
78
|
+
return f"{get_a2a_base_topic(namespace)}/gateway/response/{gateway_id}/{task_id}"
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def get_gateway_status_subscription_topic(namespace: str, self_gateway_id: str) -> str:
|
|
82
|
+
"""
|
|
83
|
+
Returns the wildcard topic for a gateway instance to subscribe to receive status updates
|
|
84
|
+
intended for it.
|
|
85
|
+
"""
|
|
86
|
+
if not self_gateway_id:
|
|
87
|
+
raise ValueError("Gateway ID is required for gateway status subscription")
|
|
88
|
+
return f"{get_a2a_base_topic(namespace)}/gateway/status/{self_gateway_id}/>"
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def get_gateway_response_subscription_topic(
|
|
92
|
+
namespace: str, self_gateway_id: str
|
|
93
|
+
) -> str:
|
|
94
|
+
"""
|
|
95
|
+
Returns the wildcard topic for a gateway instance to subscribe to receive final responses
|
|
96
|
+
intended for it.
|
|
97
|
+
"""
|
|
98
|
+
if not self_gateway_id:
|
|
99
|
+
raise ValueError("Gateway ID is required for gateway response subscription")
|
|
100
|
+
return f"{get_a2a_base_topic(namespace)}/gateway/response/{self_gateway_id}/>"
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def get_peer_agent_status_topic(
|
|
104
|
+
namespace: str, delegating_agent_name: str, sub_task_id: str
|
|
105
|
+
) -> str:
|
|
106
|
+
"""
|
|
107
|
+
Returns the topic for publishing status updates for a sub-task *back to the delegating agent*.
|
|
108
|
+
This topic includes the delegating agent's name.
|
|
109
|
+
"""
|
|
110
|
+
if not delegating_agent_name:
|
|
111
|
+
raise ValueError("delegating_agent_name is required for peer status topic")
|
|
112
|
+
return (
|
|
113
|
+
f"{get_a2a_base_topic(namespace)}/agent/status/{delegating_agent_name}/{sub_task_id}"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def get_agent_response_topic(
|
|
118
|
+
namespace: str, delegating_agent_name: str, sub_task_id: str
|
|
119
|
+
) -> str:
|
|
120
|
+
"""
|
|
121
|
+
Returns the specific topic for publishing the final response for a sub-task
|
|
122
|
+
back to the delegating agent. Includes the delegating agent's name.
|
|
123
|
+
"""
|
|
124
|
+
if not delegating_agent_name:
|
|
125
|
+
raise ValueError("delegating_agent_name is required for peer response topic")
|
|
126
|
+
if not sub_task_id:
|
|
127
|
+
raise ValueError("sub_task_id is required for peer response topic")
|
|
128
|
+
return f"{get_a2a_base_topic(namespace)}/agent/response/{delegating_agent_name}/{sub_task_id}"
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def get_agent_response_subscription_topic(namespace: str, self_agent_name: str) -> str:
|
|
132
|
+
"""
|
|
133
|
+
Returns the wildcard topic for an agent to subscribe to receive responses
|
|
134
|
+
for tasks it delegated. Includes the agent's own name.
|
|
135
|
+
"""
|
|
136
|
+
if not self_agent_name:
|
|
137
|
+
raise ValueError("self_agent_name is required for agent response subscription")
|
|
138
|
+
return f"{get_a2a_base_topic(namespace)}/agent/response/{self_agent_name}/>"
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def get_agent_status_subscription_topic(namespace: str, self_agent_name: str) -> str:
|
|
142
|
+
"""
|
|
143
|
+
Returns the wildcard topic for an agent to subscribe to receive status updates
|
|
144
|
+
for tasks it delegated. Includes the agent's own name.
|
|
145
|
+
"""
|
|
146
|
+
if not self_agent_name:
|
|
147
|
+
raise ValueError("self_agent_name is required for agent status subscription")
|
|
148
|
+
return f"{get_a2a_base_topic(namespace)}/agent/status/{self_agent_name}/>"
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def get_client_response_topic(namespace: str, client_id: str) -> str:
|
|
152
|
+
"""Returns the topic for publishing the final response TO a specific client."""
|
|
153
|
+
if not client_id:
|
|
154
|
+
raise ValueError("Client ID cannot be empty.")
|
|
155
|
+
return f"{get_a2a_base_topic(namespace)}/client/response/{client_id}"
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def get_client_status_topic(namespace: str, client_id: str, task_id: str) -> str:
|
|
159
|
+
"""
|
|
160
|
+
Returns the specific topic for publishing status updates for a task *to the original client*.
|
|
161
|
+
This topic is client and task-specific.
|
|
162
|
+
"""
|
|
163
|
+
if not client_id:
|
|
164
|
+
raise ValueError("Client ID cannot be empty.")
|
|
165
|
+
if not task_id:
|
|
166
|
+
raise ValueError("Task ID cannot be empty.")
|
|
167
|
+
return f"{get_a2a_base_topic(namespace)}/client/status/{client_id}/{task_id}"
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def get_client_status_subscription_topic(namespace: str, client_id: str) -> str:
|
|
171
|
+
"""
|
|
172
|
+
Returns the wildcard topic for a client to subscribe to receive status updates
|
|
173
|
+
for tasks it initiated. Includes the client's own ID.
|
|
174
|
+
"""
|
|
175
|
+
if not client_id:
|
|
176
|
+
raise ValueError("Client ID cannot be empty.")
|
|
177
|
+
return f"{get_a2a_base_topic(namespace)}/client/status/{client_id}/>"
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def get_sam_events_topic(namespace: str, category: str, action: str) -> str:
|
|
181
|
+
"""Returns SAM system events topic."""
|
|
182
|
+
if not namespace:
|
|
183
|
+
raise ValueError("Namespace cannot be empty.")
|
|
184
|
+
if not category:
|
|
185
|
+
raise ValueError("Category cannot be empty.")
|
|
186
|
+
if not action:
|
|
187
|
+
raise ValueError("Action cannot be empty.")
|
|
188
|
+
return f"{namespace.rstrip('/')}/sam/events/{category}/{action}"
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def get_feedback_topic(namespace: str) -> str:
|
|
192
|
+
"""Returns the topic for publishing user feedback events."""
|
|
193
|
+
return f"{namespace.rstrip('/')}/sam/v1/feedback/submit"
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def get_sam_events_subscription_topic(namespace: str, category: str) -> str:
|
|
197
|
+
"""Returns SAM system events subscription topic."""
|
|
198
|
+
if not namespace:
|
|
199
|
+
raise ValueError("Namespace cannot be empty.")
|
|
200
|
+
if not category:
|
|
201
|
+
raise ValueError("Category cannot be empty.")
|
|
202
|
+
return f"{namespace.rstrip('/')}/sam/events/{category}/>"
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def get_trust_card_topic(namespace: str, component_type: str, component_id: str) -> str:
|
|
206
|
+
"""
|
|
207
|
+
Returns the topic for publishing a Trust Card.
|
|
208
|
+
|
|
209
|
+
IMPORTANT: The component_id parameter MUST be the exact broker client-username
|
|
210
|
+
that the component uses to authenticate with the Solace broker. This is critical
|
|
211
|
+
for trust verification - trust cards are validated against the actual broker
|
|
212
|
+
authentication identity.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
namespace: SAM namespace
|
|
216
|
+
component_type: Type of component ("gateway", "agent", etc.)
|
|
217
|
+
component_id: MUST be the broker client-username (from broker_username config).
|
|
218
|
+
DO NOT use arbitrary IDs like agent_name or gateway_id unless they
|
|
219
|
+
match the broker_username exactly.
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
Topic string: {namespace}/a2a/v1/trust/{component_type}/{component_id}
|
|
223
|
+
|
|
224
|
+
Raises:
|
|
225
|
+
ValueError: If any parameter is empty
|
|
226
|
+
|
|
227
|
+
Security Note:
|
|
228
|
+
Trust card verification relies on matching the topic component_id with the
|
|
229
|
+
authenticated broker client-username. Using a different value breaks the
|
|
230
|
+
security model and trust chain verification.
|
|
231
|
+
"""
|
|
232
|
+
if not namespace:
|
|
233
|
+
raise ValueError("Namespace cannot be empty.")
|
|
234
|
+
if not component_type:
|
|
235
|
+
raise ValueError("Component type cannot be empty.")
|
|
236
|
+
if not component_id:
|
|
237
|
+
raise ValueError("Component ID cannot be empty.")
|
|
238
|
+
return f"{get_a2a_base_topic(namespace)}/trust/{component_type}/{component_id}"
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def get_trust_card_subscription_topic(namespace: str, component_type: Optional[str] = None) -> str:
|
|
242
|
+
"""
|
|
243
|
+
Returns subscription pattern for Trust Cards.
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
namespace: SAM namespace
|
|
247
|
+
component_type: Optional - subscribe to specific type, or None for all types
|
|
248
|
+
|
|
249
|
+
Returns:
|
|
250
|
+
Subscription pattern
|
|
251
|
+
"""
|
|
252
|
+
if not namespace:
|
|
253
|
+
raise ValueError("Namespace cannot be empty.")
|
|
254
|
+
|
|
255
|
+
if component_type:
|
|
256
|
+
return f"{get_a2a_base_topic(namespace)}/trust/{component_type}/*"
|
|
257
|
+
else:
|
|
258
|
+
return f"{get_a2a_base_topic(namespace)}/trust/*/*"
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def extract_trust_card_info_from_topic(topic: str) -> tuple[str, str]:
|
|
262
|
+
"""
|
|
263
|
+
Extracts component type and ID from trust card topic.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
topic: Trust card topic
|
|
267
|
+
|
|
268
|
+
Returns:
|
|
269
|
+
Tuple of (component_type, component_id)
|
|
270
|
+
|
|
271
|
+
Raises:
|
|
272
|
+
ValueError: If topic format is invalid
|
|
273
|
+
"""
|
|
274
|
+
parts = topic.split('/')
|
|
275
|
+
if len(parts) < 6 or parts[1] != 'a2a' or parts[2] != 'v1' or parts[3] != 'trust':
|
|
276
|
+
raise ValueError(f"Invalid trust card topic format: {topic}")
|
|
277
|
+
|
|
278
|
+
component_type = parts[4]
|
|
279
|
+
component_id = parts[5]
|
|
280
|
+
return component_type, component_id
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def subscription_to_regex(subscription: str) -> str:
|
|
284
|
+
"""Converts a Solace topic subscription string to a regex pattern."""
|
|
285
|
+
# Escape regex special characters except for Solace wildcards
|
|
286
|
+
pattern = re.escape(subscription)
|
|
287
|
+
# Replace Solace single-level wildcard '*' with regex equivalent '[^/]+'
|
|
288
|
+
pattern = pattern.replace(r"\*", r"[^/]+")
|
|
289
|
+
# Replace Solace multi-level wildcard '>' at the end with regex equivalent '.*'
|
|
290
|
+
if pattern.endswith(r"/>"):
|
|
291
|
+
pattern = pattern[:-1] + r".*" # Remove escaped '>' and add '.*'
|
|
292
|
+
return pattern
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def topic_matches_subscription(topic: str, subscription: str) -> bool:
|
|
296
|
+
"""Checks if a topic matches a Solace subscription pattern."""
|
|
297
|
+
regex_pattern = subscription_to_regex(subscription)
|
|
298
|
+
return re.fullmatch(regex_pattern, topic) is not None
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
# --- JSON-RPC Envelope Helpers ---
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
def get_request_id(request: A2ARequest) -> str | int:
|
|
305
|
+
"""Gets the JSON-RPC request ID from any A2A request object."""
|
|
306
|
+
return request.root.id
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def get_request_method(request: A2ARequest) -> str:
|
|
310
|
+
"""Gets the JSON-RPC method name from any A2A request object."""
|
|
311
|
+
return request.root.method
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def get_message_from_send_request(request: A2ARequest) -> Optional[Message]:
|
|
315
|
+
"""
|
|
316
|
+
Safely gets the Message object from a SendMessageRequest or
|
|
317
|
+
SendStreamingMessageRequest. Returns None for other request types.
|
|
318
|
+
"""
|
|
319
|
+
if isinstance(request.root, (SendMessageRequest, SendStreamingMessageRequest)):
|
|
320
|
+
return request.root.params.message
|
|
321
|
+
return None
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def get_task_id_from_cancel_request(request: A2ARequest) -> Optional[str]:
|
|
325
|
+
"""Safely gets the task ID from a CancelTaskRequest."""
|
|
326
|
+
if isinstance(request.root, CancelTaskRequest):
|
|
327
|
+
return request.root.params.id
|
|
328
|
+
return None
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def get_response_id(response: JSONRPCResponse) -> Optional[Union[str, int]]:
|
|
332
|
+
"""Safely gets the ID from any JSON-RPC response object."""
|
|
333
|
+
if hasattr(response.root, "id"):
|
|
334
|
+
return response.root.id
|
|
335
|
+
return None
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def get_response_result(response: JSONRPCResponse) -> Optional[Any]:
|
|
339
|
+
"""Safely gets the result object from any successful JSON-RPC response."""
|
|
340
|
+
if hasattr(response.root, "result"):
|
|
341
|
+
return response.root.result
|
|
342
|
+
return None
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def get_response_error(response: JSONRPCResponse) -> Optional[JSONRPCError]:
|
|
346
|
+
"""Safely gets the error object from any JSON-RPC error response."""
|
|
347
|
+
if hasattr(response.root, "error"):
|
|
348
|
+
return response.root.error
|
|
349
|
+
return None
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def get_error_message(error: JSONRPCError) -> str:
|
|
353
|
+
"""Safely gets the message string from a JSONRPCError object."""
|
|
354
|
+
return error.message
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def get_error_code(error: JSONRPCError) -> int:
|
|
358
|
+
"""Safely gets the code from a JSONRPCError object."""
|
|
359
|
+
return error.code
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
def get_error_data(error: JSONRPCError) -> Optional[Any]:
|
|
363
|
+
"""Safely gets the data from a JSONRPCError object."""
|
|
364
|
+
return error.data
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
def create_success_response(
|
|
368
|
+
result: Any, request_id: Optional[Union[str, int]]
|
|
369
|
+
) -> JSONRPCResponse:
|
|
370
|
+
"""
|
|
371
|
+
Creates a successful JSON-RPC response object by wrapping the result in the
|
|
372
|
+
appropriate specific success response model based on the result's type.
|
|
373
|
+
|
|
374
|
+
Args:
|
|
375
|
+
result: The result payload (e.g., Task, TaskStatusUpdateEvent).
|
|
376
|
+
request_id: The ID of the original request.
|
|
377
|
+
|
|
378
|
+
Returns:
|
|
379
|
+
A new `JSONRPCResponse` object.
|
|
380
|
+
|
|
381
|
+
Raises:
|
|
382
|
+
TypeError: If the result type is not a supported A2A model.
|
|
383
|
+
"""
|
|
384
|
+
specific_response: Any
|
|
385
|
+
if isinstance(result, (TaskStatusUpdateEvent, TaskArtifactUpdateEvent)):
|
|
386
|
+
specific_response = SendStreamingMessageSuccessResponse(
|
|
387
|
+
id=request_id, result=result
|
|
388
|
+
)
|
|
389
|
+
elif isinstance(result, Task):
|
|
390
|
+
# When returning a final task, GetTaskSuccessResponse is a suitable choice.
|
|
391
|
+
specific_response = GetTaskSuccessResponse(id=request_id, result=result)
|
|
392
|
+
else:
|
|
393
|
+
raise TypeError(
|
|
394
|
+
f"Unsupported result type for create_success_response: {type(result).__name__}"
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
return JSONRPCResponse(root=specific_response)
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def create_internal_error_response(
|
|
401
|
+
message: str,
|
|
402
|
+
request_id: Optional[Union[str, int]],
|
|
403
|
+
data: Optional[Dict[str, Any]] = None,
|
|
404
|
+
) -> JSONRPCResponse:
|
|
405
|
+
"""
|
|
406
|
+
Creates a JSON-RPC response object for an InternalError.
|
|
407
|
+
|
|
408
|
+
Args:
|
|
409
|
+
message: The error message.
|
|
410
|
+
request_id: The ID of the original request.
|
|
411
|
+
data: Optional structured data to include with the error.
|
|
412
|
+
|
|
413
|
+
Returns:
|
|
414
|
+
A new `JSONRPCResponse` object containing an `InternalError`.
|
|
415
|
+
"""
|
|
416
|
+
error = create_internal_error(message=message, data=data)
|
|
417
|
+
return JSONRPCResponse(id=request_id, error=error)
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
def create_invalid_request_error_response(
|
|
421
|
+
message: str,
|
|
422
|
+
request_id: Optional[Union[str, int]],
|
|
423
|
+
data: Optional[Any] = None,
|
|
424
|
+
) -> JSONRPCResponse:
|
|
425
|
+
"""
|
|
426
|
+
Creates a JSON-RPC response object for an InvalidRequestError.
|
|
427
|
+
|
|
428
|
+
Args:
|
|
429
|
+
message: The error message.
|
|
430
|
+
request_id: The ID of the original request.
|
|
431
|
+
data: Optional structured data to include with the error.
|
|
432
|
+
|
|
433
|
+
Returns:
|
|
434
|
+
A new `JSONRPCResponse` object containing an `InvalidRequestError`.
|
|
435
|
+
"""
|
|
436
|
+
error = create_invalid_request_error(message=message, data=data)
|
|
437
|
+
return JSONRPCResponse(id=request_id, error=error)
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def create_internal_error(
|
|
441
|
+
message: str,
|
|
442
|
+
data: Optional[Dict[str, Any]] = None,
|
|
443
|
+
) -> InternalError:
|
|
444
|
+
"""
|
|
445
|
+
Creates an InternalError object.
|
|
446
|
+
|
|
447
|
+
Args:
|
|
448
|
+
message: The error message.
|
|
449
|
+
data: Optional structured data to include with the error.
|
|
450
|
+
|
|
451
|
+
Returns:
|
|
452
|
+
A new `InternalError` object.
|
|
453
|
+
"""
|
|
454
|
+
return InternalError(message=message, data=data)
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
def create_invalid_request_error(
|
|
458
|
+
message: str, data: Optional[Any] = None
|
|
459
|
+
) -> InvalidRequestError:
|
|
460
|
+
"""
|
|
461
|
+
Creates an InvalidRequestError object.
|
|
462
|
+
|
|
463
|
+
Args:
|
|
464
|
+
message: The error message.
|
|
465
|
+
data: Optional structured data to include with the error.
|
|
466
|
+
|
|
467
|
+
Returns:
|
|
468
|
+
A new `InvalidRequestError` object.
|
|
469
|
+
"""
|
|
470
|
+
return InvalidRequestError(message=message, data=data)
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
def create_generic_success_response(
|
|
474
|
+
result: Any, request_id: Optional[Union[str, int]] = None
|
|
475
|
+
) -> JSONRPCSuccessResponse:
|
|
476
|
+
"""
|
|
477
|
+
Creates a generic successful JSON-RPC response object.
|
|
478
|
+
Note: This is for non-A2A-spec-compliant endpoints that use a similar structure.
|
|
479
|
+
|
|
480
|
+
Args:
|
|
481
|
+
result: The result payload for the response.
|
|
482
|
+
request_id: The ID of the original request.
|
|
483
|
+
|
|
484
|
+
Returns:
|
|
485
|
+
A new `JSONRPCSuccessResponse` object.
|
|
486
|
+
"""
|
|
487
|
+
return JSONRPCSuccessResponse(id=request_id, result=result)
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
def create_error_response(
|
|
491
|
+
error: JSONRPCError,
|
|
492
|
+
request_id: Optional[Union[str, int]],
|
|
493
|
+
) -> JSONRPCResponse:
|
|
494
|
+
"""
|
|
495
|
+
Creates a JSON-RPC error response object from a given error model.
|
|
496
|
+
|
|
497
|
+
Args:
|
|
498
|
+
error: The JSONRPCError model instance.
|
|
499
|
+
request_id: The ID of the original request.
|
|
500
|
+
|
|
501
|
+
Returns:
|
|
502
|
+
A new `JSONRPCResponse` object containing the error.
|
|
503
|
+
"""
|
|
504
|
+
return JSONRPCResponse(id=request_id, error=error)
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
def create_cancel_task_request(task_id: str) -> CancelTaskRequest:
|
|
508
|
+
"""
|
|
509
|
+
Creates a CancelTaskRequest object.
|
|
510
|
+
|
|
511
|
+
Args:
|
|
512
|
+
task_id: The ID of the task to cancel.
|
|
513
|
+
|
|
514
|
+
Returns:
|
|
515
|
+
A new `CancelTaskRequest` object.
|
|
516
|
+
"""
|
|
517
|
+
params = TaskIdParams(id=task_id)
|
|
518
|
+
return CancelTaskRequest(id=uuid.uuid4().hex, params=params)
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
def create_send_message_request(
|
|
522
|
+
message: Message,
|
|
523
|
+
task_id: str,
|
|
524
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
525
|
+
) -> SendMessageRequest:
|
|
526
|
+
"""
|
|
527
|
+
Creates a SendMessageRequest object.
|
|
528
|
+
|
|
529
|
+
Args:
|
|
530
|
+
message: The A2AMessage object to send.
|
|
531
|
+
task_id: The unique ID for the task.
|
|
532
|
+
metadata: Optional metadata for the send request.
|
|
533
|
+
|
|
534
|
+
Returns:
|
|
535
|
+
A new `SendMessageRequest` object.
|
|
536
|
+
"""
|
|
537
|
+
send_params = MessageSendParams(message=message, metadata=metadata)
|
|
538
|
+
return SendMessageRequest(id=task_id, params=send_params)
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
def create_send_streaming_message_request(
|
|
542
|
+
message: Message,
|
|
543
|
+
task_id: str,
|
|
544
|
+
metadata: Optional[Dict[str, Any]] = None,
|
|
545
|
+
) -> SendStreamingMessageRequest:
|
|
546
|
+
"""
|
|
547
|
+
Creates a SendStreamingMessageRequest object.
|
|
548
|
+
|
|
549
|
+
Args:
|
|
550
|
+
message: The A2AMessage object to send.
|
|
551
|
+
task_id: The unique ID for the task.
|
|
552
|
+
metadata: Optional metadata for the send request.
|
|
553
|
+
|
|
554
|
+
Returns:
|
|
555
|
+
A new `SendStreamingMessageRequest` object.
|
|
556
|
+
"""
|
|
557
|
+
send_params = MessageSendParams(message=message, metadata=metadata)
|
|
558
|
+
return SendStreamingMessageRequest(id=task_id, params=send_params)
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
def create_send_message_success_response(
|
|
562
|
+
result: Union[Task, Message], request_id: Optional[Union[str, int]]
|
|
563
|
+
) -> SendMessageSuccessResponse:
|
|
564
|
+
"""
|
|
565
|
+
Creates a SendMessageSuccessResponse object.
|
|
566
|
+
|
|
567
|
+
Args:
|
|
568
|
+
result: The result payload (Task or Message).
|
|
569
|
+
request_id: The ID of the original request.
|
|
570
|
+
|
|
571
|
+
Returns:
|
|
572
|
+
A new `SendMessageSuccessResponse` object.
|
|
573
|
+
"""
|
|
574
|
+
return SendMessageSuccessResponse(id=request_id, result=result)
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
def create_send_streaming_message_success_response(
|
|
578
|
+
result: Union[Task, Message, TaskStatusUpdateEvent, TaskArtifactUpdateEvent],
|
|
579
|
+
request_id: Optional[Union[str, int]],
|
|
580
|
+
) -> SendStreamingMessageSuccessResponse:
|
|
581
|
+
"""
|
|
582
|
+
Creates a SendStreamingMessageSuccessResponse object.
|
|
583
|
+
|
|
584
|
+
Args:
|
|
585
|
+
result: The result payload.
|
|
586
|
+
request_id: The ID of the original request.
|
|
587
|
+
|
|
588
|
+
Returns:
|
|
589
|
+
A new `SendStreamingMessageSuccessResponse` object.
|
|
590
|
+
"""
|
|
591
|
+
return SendStreamingMessageSuccessResponse(id=request_id, result=result)
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
def extract_task_id_from_topic(
|
|
595
|
+
topic: str, subscription_pattern: str, log_identifier: str
|
|
596
|
+
) -> Optional[str]:
|
|
597
|
+
"""Extracts the task ID from the end of a topic string based on the subscription."""
|
|
598
|
+
base_regex_str = subscription_to_regex(subscription_pattern).replace(r".*", "")
|
|
599
|
+
match = re.match(base_regex_str, topic)
|
|
600
|
+
if match:
|
|
601
|
+
task_id_part = topic[match.end() :]
|
|
602
|
+
task_id = task_id_part.lstrip("/")
|
|
603
|
+
if task_id:
|
|
604
|
+
log.debug(
|
|
605
|
+
"%s Extracted Task ID '%s' from topic '%s'",
|
|
606
|
+
log_identifier,
|
|
607
|
+
task_id,
|
|
608
|
+
topic,
|
|
609
|
+
)
|
|
610
|
+
return task_id
|
|
611
|
+
log.warning(
|
|
612
|
+
"%s Could not extract Task ID from topic '%s' using pattern '%s'",
|
|
613
|
+
log_identifier,
|
|
614
|
+
topic,
|
|
615
|
+
subscription_pattern,
|
|
616
|
+
)
|
|
617
|
+
return None
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
# --- Client Event Helpers ---
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
def is_client_event(obj: Any) -> bool:
|
|
624
|
+
"""
|
|
625
|
+
Checks if an object is a ClientEvent tuple (Task, UpdateEvent).
|
|
626
|
+
|
|
627
|
+
A ClientEvent is a tuple with 2 elements where the first element is a Task
|
|
628
|
+
and the second is either a TaskStatusUpdateEvent, TaskArtifactUpdateEvent, or None.
|
|
629
|
+
|
|
630
|
+
Args:
|
|
631
|
+
obj: The object to check.
|
|
632
|
+
|
|
633
|
+
Returns:
|
|
634
|
+
True if the object is a ClientEvent tuple, False otherwise.
|
|
635
|
+
"""
|
|
636
|
+
if not isinstance(obj, tuple) or len(obj) != 2:
|
|
637
|
+
return False
|
|
638
|
+
|
|
639
|
+
task, update_event = obj
|
|
640
|
+
|
|
641
|
+
# First element must be a Task
|
|
642
|
+
if not isinstance(task, Task):
|
|
643
|
+
return False
|
|
644
|
+
|
|
645
|
+
# Second element must be an update event or None
|
|
646
|
+
if update_event is not None and not isinstance(
|
|
647
|
+
update_event, (TaskStatusUpdateEvent, TaskArtifactUpdateEvent)
|
|
648
|
+
):
|
|
649
|
+
return False
|
|
650
|
+
|
|
651
|
+
return True
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
def is_message_object(obj: Any) -> bool:
|
|
655
|
+
"""
|
|
656
|
+
Checks if an object is a Message.
|
|
657
|
+
|
|
658
|
+
Args:
|
|
659
|
+
obj: The object to check.
|
|
660
|
+
|
|
661
|
+
Returns:
|
|
662
|
+
True if the object is a Message, False otherwise.
|
|
663
|
+
"""
|
|
664
|
+
return isinstance(obj, Message)
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
def unpack_client_event(
|
|
668
|
+
event: tuple,
|
|
669
|
+
) -> Tuple[Task, Optional[Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent]]]:
|
|
670
|
+
"""
|
|
671
|
+
Safely unpacks a ClientEvent tuple into its components.
|
|
672
|
+
|
|
673
|
+
Args:
|
|
674
|
+
event: A ClientEvent tuple (Task, UpdateEvent).
|
|
675
|
+
|
|
676
|
+
Returns:
|
|
677
|
+
A tuple of (Task, Optional[UpdateEvent]) where UpdateEvent can be
|
|
678
|
+
TaskStatusUpdateEvent, TaskArtifactUpdateEvent, or None.
|
|
679
|
+
|
|
680
|
+
Raises:
|
|
681
|
+
ValueError: If the event is not a valid ClientEvent tuple.
|
|
682
|
+
"""
|
|
683
|
+
if not is_client_event(event):
|
|
684
|
+
raise ValueError(
|
|
685
|
+
f"Expected a ClientEvent tuple, got {type(event).__name__}"
|
|
686
|
+
)
|
|
687
|
+
|
|
688
|
+
task, update_event = event
|
|
689
|
+
return task, update_event
|