solace-agent-mesh 0.2.3__py3-none-any.whl → 1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- solace_agent_mesh/agent/adk/adk_llm.txt +93 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +26 -0
- solace_agent_mesh/agent/adk/callbacks.py +1694 -0
- solace_agent_mesh/agent/adk/filesystem_artifact_service.py +381 -0
- solace_agent_mesh/agent/adk/invocation_monitor.py +295 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +872 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +94 -0
- solace_agent_mesh/agent/adk/runner.py +353 -0
- solace_agent_mesh/agent/adk/services.py +240 -0
- solace_agent_mesh/agent/adk/setup.py +751 -0
- solace_agent_mesh/agent/adk/stream_parser.py +214 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +139 -0
- solace_agent_mesh/agent/agent_llm.txt +41 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +1469 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +21 -0
- solace_agent_mesh/agent/sac/app.py +640 -0
- solace_agent_mesh/agent/sac/component.py +3388 -0
- solace_agent_mesh/agent/sac/patch_adk.py +111 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +105 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +176 -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 +90 -0
- solace_agent_mesh/agent/tools/__init__.py +14 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1622 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +1954 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +238 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +569 -0
- solace_agent_mesh/agent/tools/image_tools.py +1184 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +289 -0
- solace_agent_mesh/agent/tools/registry.py +36 -0
- solace_agent_mesh/agent/tools/test_tools.py +135 -0
- solace_agent_mesh/agent/tools/tool_definition.py +45 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +104 -0
- solace_agent_mesh/agent/tools/web_tools.py +381 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +927 -0
- solace_agent_mesh/agent/utils/config_parser.py +47 -0
- solace_agent_mesh/agent/utils/context_helpers.py +60 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +153 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.906a1503.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/sac-flows-80d5b603c6aafd33e87945680ce0abf3.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sac_parts_of_a_component-cb3d0424b1d0c17734c5435cca6b4082.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/04989206.674a8007.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0e682baa.79f0ab22.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1023fc19.015679ca.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/1523c6b4.91c7bc01.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/166ab619.7d97ccaf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js.LICENSE.txt +7 -0
- solace_agent_mesh/assets/docs/assets/js/1c6e87d2.23bccffb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/21ceee5f.614fa8dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2334.622a6395.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2a9cab12.8909df92.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/332e10b5.7a103f42.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.b524e433.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/3d406171.f722eaf5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/42b3f8d8.36090198.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/442a8107.5ba94b65.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/4c2787c2.66ee00e9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55f47984.c484bf96.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/5b4258a4.bda20761.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.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/7040.cb436723.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/768e31b0.a12673db.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/8356.8a379c04.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/85387663.6bf41934.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.d7c16be6.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.d7c16be6.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.49e930c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.74d728aa.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/9eff14a2.1bf8f61c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a3a92b25.26ca071f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba87c2f.d3e2dcc3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ae4415af.8e279b5d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/b7006a3a.40b10c9d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bac0be12.f50d9bac.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/bb2ef573.207e6990.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c2c06897.63b76e9e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cc969b05.954186d4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cd3d4052.ca6eed8c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ced92a13.fb92e7ca.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cee5d587.f5b73ca1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.ecc3d195.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f897a61a.2c2e152c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/fbfa3e75.aca209c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7ed3319f.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.d9520ae2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/agents/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/architecture/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/cli/index.html +201 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/gateways/index.html +91 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/concepts/plugins/index.html +82 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/debugging/index.html +60 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/deploy/index.html +48 -0
- solace_agent_mesh/assets/docs/docs/documentation/deployment/observability/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +17 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/component-overview/index.html +45 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/installation/index.html +76 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +150 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/quick-start/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/custom-agent/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mcp-integration/index.html +80 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/embeds/index.html +152 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/builtin-tools/index.html +103 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-agents/index.html +170 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/create-gateways/index.html +200 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/solace-ai-connector/index.html +69 -0
- solace_agent_mesh/assets/docs/docs/documentation/user-guide/structure/index.html +59 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_README.png +0 -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/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1753813536522.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1753813536522.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 -1
- 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 +659 -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 +93 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +118 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +57 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +64 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +404 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +197 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +387 -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 +110 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +183 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +18 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +372 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +138 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +309 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +174 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +158 -0
- solace_agent_mesh/cli/main.py +17 -294
- solace_agent_mesh/cli/utils.py +135 -204
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-DvlO62me.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-bp6u3qVZ.js +49 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-An0a5j5k.js +663 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Bu5-4Bac.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +14 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +15 -0
- solace_agent_mesh/common/__init__.py +1 -0
- solace_agent_mesh/common/a2a_protocol.py +564 -0
- solace_agent_mesh/common/agent_registry.py +42 -0
- solace_agent_mesh/common/client/__init__.py +4 -0
- solace_agent_mesh/common/client/card_resolver.py +21 -0
- solace_agent_mesh/common/client/client.py +85 -0
- solace_agent_mesh/common/client/client_llm.txt +133 -0
- solace_agent_mesh/common/common_llm.txt +144 -0
- solace_agent_mesh/common/constants.py +1 -14
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +130 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/registry.py +125 -0
- solace_agent_mesh/common/server/__init__.py +4 -0
- solace_agent_mesh/common/server/server.py +122 -0
- solace_agent_mesh/common/server/server_llm.txt +169 -0
- solace_agent_mesh/common/server/task_manager.py +291 -0
- solace_agent_mesh/common/server/utils.py +28 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +162 -0
- solace_agent_mesh/common/services/identity_service.py +129 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +148 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +113 -0
- solace_agent_mesh/common/services/services_llm.txt +132 -0
- solace_agent_mesh/common/types.py +411 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +86 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +55 -0
- solace_agent_mesh/common/utils/embeds/converter.py +452 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +124 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +394 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +816 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +865 -0
- solace_agent_mesh/common/utils/embeds/types.py +14 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/log_formatters.py +44 -0
- solace_agent_mesh/common/utils/mime_helpers.py +106 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +134 -0
- solace_agent_mesh/common/utils/utils_llm.txt +67 -0
- solace_agent_mesh/config_portal/backend/common.py +66 -24
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +23 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +160 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +525 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +216 -0
- solace_agent_mesh/config_portal/backend/server.py +550 -140
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DNxCwAGB.js +48 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-B7lKcHVY.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-DX1misIU.js → entry.client-CEumGClk.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DSo1AH_7.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-d2b54a97.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{root-BApq5dPK.js → root-C4XmHinv.js} +2 -2
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +88 -0
- solace_agent_mesh/core_a2a/service.py +331 -0
- solace_agent_mesh/evaluation/config_loader.py +657 -0
- solace_agent_mesh/evaluation/evaluator.py +667 -0
- solace_agent_mesh/evaluation/message_organizer.py +568 -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 +972 -0
- solace_agent_mesh/evaluation/report_generator.py +613 -0
- solace_agent_mesh/evaluation/run.py +613 -0
- solace_agent_mesh/evaluation/subscriber.py +872 -0
- solace_agent_mesh/evaluation/summary_builder.py +775 -0
- solace_agent_mesh/evaluation/test_case_loader.py +714 -0
- solace_agent_mesh/gateway/base/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +266 -0
- solace_agent_mesh/gateway/base/base_llm.txt +119 -0
- solace_agent_mesh/gateway/base/component.py +1542 -0
- solace_agent_mesh/gateway/base/task_context.py +74 -0
- solace_agent_mesh/gateway/gateway_llm.txt +125 -0
- solace_agent_mesh/gateway/http_sse/app.py +190 -0
- solace_agent_mesh/gateway/http_sse/component.py +1602 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +65 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +108 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +316 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +63 -0
- solace_agent_mesh/gateway/http_sse/main.py +442 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agents.py +41 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +821 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +212 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +55 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +37 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +80 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +138 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +294 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +59 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1131 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_service.py +69 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +158 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +179 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +121 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +187 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +328 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -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 +73 -0
- solace_agent_mesh/templates/gateway_component_template.py +400 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +43 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +55 -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 +63 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +33 -0
- solace_agent_mesh/templates/plugin_readme_template.md +34 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +66 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +53 -0
- solace_agent_mesh-1.0.1.dist-info/METADATA +432 -0
- solace_agent_mesh-1.0.1.dist-info/RECORD +359 -0
- solace_agent_mesh-1.0.1.dist-info/entry_points.txt +3 -0
- {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/licenses/LICENSE +1 -1
- solace_agent_mesh/agents/base_agent_component.py +0 -226
- solace_agent_mesh/agents/global/actions/agent_state_change.py +0 -54
- solace_agent_mesh/agents/global/actions/clear_history.py +0 -32
- solace_agent_mesh/agents/global/actions/convert_file_to_markdown.py +0 -160
- solace_agent_mesh/agents/global/actions/create_file.py +0 -70
- solace_agent_mesh/agents/global/actions/error_action.py +0 -45
- solace_agent_mesh/agents/global/actions/plantuml_diagram.py +0 -163
- solace_agent_mesh/agents/global/actions/plotly_graph.py +0 -152
- solace_agent_mesh/agents/global/actions/retrieve_file.py +0 -51
- solace_agent_mesh/agents/global/global_agent_component.py +0 -38
- solace_agent_mesh/agents/image_processing/actions/create_image.py +0 -75
- solace_agent_mesh/agents/image_processing/actions/describe_image.py +0 -115
- solace_agent_mesh/agents/image_processing/image_processing_agent_component.py +0 -23
- solace_agent_mesh/agents/slack/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/__init__.py +0 -1
- solace_agent_mesh/agents/slack/actions/post_message.py +0 -177
- solace_agent_mesh/agents/slack/slack_agent_component.py +0 -59
- solace_agent_mesh/agents/web_request/actions/do_image_search.py +0 -84
- solace_agent_mesh/agents/web_request/actions/do_news_search.py +0 -47
- solace_agent_mesh/agents/web_request/actions/do_suggestion_search.py +0 -34
- solace_agent_mesh/agents/web_request/actions/do_web_request.py +0 -135
- solace_agent_mesh/agents/web_request/actions/download_file.py +0 -69
- solace_agent_mesh/agents/web_request/web_request_agent_component.py +0 -33
- solace_agent_mesh/assets/web-visualizer/assets/index-D0qORgkg.css +0 -1
- solace_agent_mesh/assets/web-visualizer/assets/index-DnDr1pnu.js +0 -109
- solace_agent_mesh/assets/web-visualizer/index.html +0 -14
- solace_agent_mesh/assets/web-visualizer/vite.svg +0 -1
- solace_agent_mesh/cli/commands/add/__init__.py +0 -3
- solace_agent_mesh/cli/commands/add/add.py +0 -88
- solace_agent_mesh/cli/commands/add/agent.py +0 -110
- solace_agent_mesh/cli/commands/add/copy_from_plugin.py +0 -92
- solace_agent_mesh/cli/commands/add/gateway.py +0 -374
- solace_agent_mesh/cli/commands/build.py +0 -670
- solace_agent_mesh/cli/commands/chat/__init__.py +0 -3
- solace_agent_mesh/cli/commands/chat/chat.py +0 -361
- solace_agent_mesh/cli/commands/config.py +0 -29
- solace_agent_mesh/cli/commands/init/__init__.py +0 -3
- solace_agent_mesh/cli/commands/init/ai_provider_step.py +0 -93
- solace_agent_mesh/cli/commands/init/broker_step.py +0 -99
- solace_agent_mesh/cli/commands/init/builtin_agent_step.py +0 -83
- solace_agent_mesh/cli/commands/init/check_if_already_done.py +0 -13
- solace_agent_mesh/cli/commands/init/create_config_file_step.py +0 -65
- solace_agent_mesh/cli/commands/init/create_other_project_files_step.py +0 -147
- solace_agent_mesh/cli/commands/init/file_service_step.py +0 -73
- solace_agent_mesh/cli/commands/init/init.py +0 -92
- solace_agent_mesh/cli/commands/init/project_structure_step.py +0 -16
- solace_agent_mesh/cli/commands/init/web_init_step.py +0 -32
- solace_agent_mesh/cli/commands/plugin/__init__.py +0 -3
- solace_agent_mesh/cli/commands/plugin/add.py +0 -100
- solace_agent_mesh/cli/commands/plugin/build.py +0 -268
- solace_agent_mesh/cli/commands/plugin/create.py +0 -117
- solace_agent_mesh/cli/commands/plugin/plugin.py +0 -124
- solace_agent_mesh/cli/commands/plugin/remove.py +0 -73
- solace_agent_mesh/cli/commands/run.py +0 -68
- solace_agent_mesh/cli/commands/visualizer.py +0 -138
- solace_agent_mesh/cli/config.py +0 -85
- solace_agent_mesh/common/action.py +0 -91
- solace_agent_mesh/common/action_list.py +0 -37
- solace_agent_mesh/common/action_response.py +0 -340
- solace_agent_mesh/common/mysql_database.py +0 -40
- solace_agent_mesh/common/postgres_database.py +0 -85
- solace_agent_mesh/common/prompt_templates.py +0 -28
- solace_agent_mesh/common/stimulus_utils.py +0 -152
- solace_agent_mesh/common/time.py +0 -24
- solace_agent_mesh/common/utils.py +0 -712
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DMmCawWe.js +0 -42
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-ZIfdTbrV.js +0 -191
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-BJHAE5s4.js +0 -17
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-dd988f05.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DX4gQ516.css +0 -1
- solace_agent_mesh/configs/agent_global.yaml +0 -74
- solace_agent_mesh/configs/agent_image_processing.yaml +0 -82
- solace_agent_mesh/configs/agent_slack.yaml +0 -64
- solace_agent_mesh/configs/agent_web_request.yaml +0 -75
- solace_agent_mesh/configs/conversation_to_file.yaml +0 -56
- solace_agent_mesh/configs/error_catcher.yaml +0 -56
- solace_agent_mesh/configs/monitor.yaml +0 -0
- solace_agent_mesh/configs/monitor_stim_and_errors_to_slack.yaml +0 -109
- solace_agent_mesh/configs/monitor_user_feedback.yaml +0 -58
- solace_agent_mesh/configs/orchestrator.yaml +0 -241
- solace_agent_mesh/configs/service_embedding.yaml +0 -81
- solace_agent_mesh/configs/service_llm.yaml +0 -265
- solace_agent_mesh/configs/visualize_websocket.yaml +0 -55
- solace_agent_mesh/gateway/components/gateway_base.py +0 -47
- solace_agent_mesh/gateway/components/gateway_input.py +0 -278
- solace_agent_mesh/gateway/components/gateway_output.py +0 -298
- solace_agent_mesh/gateway/identity/bamboohr_identity.py +0 -18
- solace_agent_mesh/gateway/identity/identity_base.py +0 -10
- solace_agent_mesh/gateway/identity/identity_provider.py +0 -60
- solace_agent_mesh/gateway/identity/no_identity.py +0 -9
- solace_agent_mesh/gateway/identity/passthru_identity.py +0 -9
- solace_agent_mesh/monitors/base_monitor_component.py +0 -26
- solace_agent_mesh/monitors/feedback/user_feedback_monitor.py +0 -75
- solace_agent_mesh/monitors/stim_and_errors/stim_and_error_monitor.py +0 -560
- solace_agent_mesh/orchestrator/__init__.py +0 -0
- solace_agent_mesh/orchestrator/action_manager.py +0 -237
- solace_agent_mesh/orchestrator/components/__init__.py +0 -0
- solace_agent_mesh/orchestrator/components/orchestrator_action_manager_timeout_component.py +0 -58
- solace_agent_mesh/orchestrator/components/orchestrator_action_response_component.py +0 -179
- solace_agent_mesh/orchestrator/components/orchestrator_register_component.py +0 -107
- solace_agent_mesh/orchestrator/components/orchestrator_stimulus_processor_component.py +0 -527
- solace_agent_mesh/orchestrator/components/orchestrator_streaming_output_component.py +0 -260
- solace_agent_mesh/orchestrator/orchestrator_main.py +0 -172
- solace_agent_mesh/orchestrator/orchestrator_prompt.py +0 -539
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/authorization/providers/base_authorization_provider.py +0 -56
- solace_agent_mesh/services/bamboo_hr_service/__init__.py +0 -3
- solace_agent_mesh/services/bamboo_hr_service/bamboo_hr.py +0 -182
- solace_agent_mesh/services/common/__init__.py +0 -4
- solace_agent_mesh/services/common/auto_expiry.py +0 -45
- solace_agent_mesh/services/common/singleton.py +0 -18
- solace_agent_mesh/services/file_service/__init__.py +0 -14
- solace_agent_mesh/services/file_service/file_manager/__init__.py +0 -0
- solace_agent_mesh/services/file_service/file_manager/bucket_file_manager.py +0 -149
- solace_agent_mesh/services/file_service/file_manager/file_manager_base.py +0 -162
- solace_agent_mesh/services/file_service/file_manager/memory_file_manager.py +0 -64
- solace_agent_mesh/services/file_service/file_manager/volume_file_manager.py +0 -106
- solace_agent_mesh/services/file_service/file_service.py +0 -437
- solace_agent_mesh/services/file_service/file_service_constants.py +0 -54
- solace_agent_mesh/services/file_service/file_transformations.py +0 -141
- solace_agent_mesh/services/file_service/file_utils.py +0 -324
- solace_agent_mesh/services/file_service/transformers/__init__.py +0 -5
- solace_agent_mesh/services/history_service/__init__.py +0 -3
- solace_agent_mesh/services/history_service/history_providers/__init__.py +0 -0
- solace_agent_mesh/services/history_service/history_providers/base_history_provider.py +0 -54
- solace_agent_mesh/services/history_service/history_providers/file_history_provider.py +0 -74
- solace_agent_mesh/services/history_service/history_providers/index.py +0 -40
- solace_agent_mesh/services/history_service/history_providers/memory_history_provider.py +0 -33
- solace_agent_mesh/services/history_service/history_providers/mongodb_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/redis_history_provider.py +0 -66
- solace_agent_mesh/services/history_service/history_providers/sql_history_provider.py +0 -93
- solace_agent_mesh/services/history_service/history_service.py +0 -413
- solace_agent_mesh/services/history_service/long_term_memory/__init__.py +0 -0
- solace_agent_mesh/services/history_service/long_term_memory/long_term_memory.py +0 -399
- solace_agent_mesh/services/llm_service/components/llm_request_component.py +0 -340
- solace_agent_mesh/services/llm_service/components/llm_service_component_base.py +0 -152
- solace_agent_mesh/services/middleware_service/__init__.py +0 -0
- solace_agent_mesh/services/middleware_service/middleware_service.py +0 -20
- solace_agent_mesh/templates/action.py +0 -38
- solace_agent_mesh/templates/agent.py +0 -29
- solace_agent_mesh/templates/agent.yaml +0 -70
- solace_agent_mesh/templates/gateway-config-template.yaml +0 -6
- solace_agent_mesh/templates/gateway-default-config.yaml +0 -28
- solace_agent_mesh/templates/gateway-flows.yaml +0 -78
- solace_agent_mesh/templates/gateway-header.yaml +0 -16
- solace_agent_mesh/templates/gateway_base.py +0 -15
- solace_agent_mesh/templates/gateway_input.py +0 -98
- solace_agent_mesh/templates/gateway_output.py +0 -71
- solace_agent_mesh/templates/plugin-gateway-default-config.yaml +0 -29
- solace_agent_mesh/templates/plugin-pyproject.toml +0 -30
- solace_agent_mesh/templates/rest-api-default-config.yaml +0 -31
- solace_agent_mesh/templates/rest-api-flows.yaml +0 -81
- solace_agent_mesh/templates/slack-default-config.yaml +0 -16
- solace_agent_mesh/templates/slack-flows.yaml +0 -81
- solace_agent_mesh/templates/solace-agent-mesh-default.yaml +0 -86
- solace_agent_mesh/templates/solace-agent-mesh-plugin-default.yaml +0 -8
- solace_agent_mesh/templates/web-default-config.yaml +0 -10
- solace_agent_mesh/templates/web-flows.yaml +0 -76
- solace_agent_mesh/tools/__init__.py +0 -0
- solace_agent_mesh/tools/components/__init__.py +0 -0
- solace_agent_mesh/tools/components/conversation_formatter.py +0 -111
- solace_agent_mesh/tools/components/file_resolver_component.py +0 -58
- solace_agent_mesh/tools/config/runtime_config.py +0 -26
- solace_agent_mesh-0.2.3.dist-info/METADATA +0 -172
- solace_agent_mesh-0.2.3.dist-info/RECORD +0 -193
- solace_agent_mesh-0.2.3.dist-info/entry_points.txt +0 -3
- /solace_agent_mesh/{agents → agent}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global → agent/adk}/__init__.py +0 -0
- /solace_agent_mesh/{agents/global/actions → agent/protocol}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing → agent/sac}/__init__.py +0 -0
- /solace_agent_mesh/{agents/image_processing/actions → agent/utils}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request → config_portal/backend/plugin_catalog}/__init__.py +0 -0
- /solace_agent_mesh/{agents/web_request/actions → evaluation}/__init__.py +0 -0
- /solace_agent_mesh/gateway/{components → http_sse}/__init__.py +0 -0
- {solace_agent_mesh-0.2.3.dist-info → solace_agent_mesh-1.0.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from httpx_sse import connect_sse
|
|
3
|
+
from typing import Any, AsyncIterable
|
|
4
|
+
from ...common.types import (
|
|
5
|
+
AgentCard,
|
|
6
|
+
GetTaskRequest,
|
|
7
|
+
SendTaskRequest,
|
|
8
|
+
SendTaskResponse,
|
|
9
|
+
JSONRPCRequest,
|
|
10
|
+
GetTaskResponse,
|
|
11
|
+
CancelTaskResponse,
|
|
12
|
+
CancelTaskRequest,
|
|
13
|
+
SetTaskPushNotificationRequest,
|
|
14
|
+
SetTaskPushNotificationResponse,
|
|
15
|
+
GetTaskPushNotificationRequest,
|
|
16
|
+
GetTaskPushNotificationResponse,
|
|
17
|
+
A2AClientHTTPError,
|
|
18
|
+
A2AClientJSONError,
|
|
19
|
+
SendTaskStreamingRequest,
|
|
20
|
+
SendTaskStreamingResponse,
|
|
21
|
+
)
|
|
22
|
+
import json
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class A2AClient:
|
|
26
|
+
def __init__(self, agent_card: AgentCard = None, url: str = None):
|
|
27
|
+
if agent_card:
|
|
28
|
+
self.url = agent_card.url
|
|
29
|
+
elif url:
|
|
30
|
+
self.url = url
|
|
31
|
+
else:
|
|
32
|
+
raise ValueError("Must provide either agent_card or url")
|
|
33
|
+
|
|
34
|
+
async def send_task(self, payload: dict[str, Any]) -> SendTaskResponse:
|
|
35
|
+
request = SendTaskRequest(params=payload)
|
|
36
|
+
return SendTaskResponse(**await self._send_request(request))
|
|
37
|
+
|
|
38
|
+
async def send_task_streaming(
|
|
39
|
+
self, payload: dict[str, Any]
|
|
40
|
+
) -> AsyncIterable[SendTaskStreamingResponse]:
|
|
41
|
+
request = SendTaskStreamingRequest(params=payload)
|
|
42
|
+
with httpx.Client(timeout=None) as client:
|
|
43
|
+
with connect_sse(
|
|
44
|
+
client, "POST", self.url, json=request.model_dump()
|
|
45
|
+
) as event_source:
|
|
46
|
+
try:
|
|
47
|
+
for sse in event_source.iter_sse():
|
|
48
|
+
yield SendTaskStreamingResponse(**json.loads(sse.data))
|
|
49
|
+
except json.JSONDecodeError as e:
|
|
50
|
+
raise A2AClientJSONError(str(e)) from e
|
|
51
|
+
except httpx.RequestError as e:
|
|
52
|
+
raise A2AClientHTTPError(400, str(e)) from e
|
|
53
|
+
|
|
54
|
+
async def _send_request(self, request: JSONRPCRequest) -> dict[str, Any]:
|
|
55
|
+
async with httpx.AsyncClient() as client:
|
|
56
|
+
try:
|
|
57
|
+
response = await client.post(
|
|
58
|
+
self.url, json=request.model_dump(), timeout=30
|
|
59
|
+
)
|
|
60
|
+
response.raise_for_status()
|
|
61
|
+
return response.json()
|
|
62
|
+
except httpx.HTTPStatusError as e:
|
|
63
|
+
raise A2AClientHTTPError(e.response.status_code, str(e)) from e
|
|
64
|
+
except json.JSONDecodeError as e:
|
|
65
|
+
raise A2AClientJSONError(str(e)) from e
|
|
66
|
+
|
|
67
|
+
async def get_task(self, payload: dict[str, Any]) -> GetTaskResponse:
|
|
68
|
+
request = GetTaskRequest(params=payload)
|
|
69
|
+
return GetTaskResponse(**await self._send_request(request))
|
|
70
|
+
|
|
71
|
+
async def cancel_task(self, payload: dict[str, Any]) -> CancelTaskResponse:
|
|
72
|
+
request = CancelTaskRequest(params=payload)
|
|
73
|
+
return CancelTaskResponse(**await self._send_request(request))
|
|
74
|
+
|
|
75
|
+
async def set_task_callback(
|
|
76
|
+
self, payload: dict[str, Any]
|
|
77
|
+
) -> SetTaskPushNotificationResponse:
|
|
78
|
+
request = SetTaskPushNotificationRequest(params=payload)
|
|
79
|
+
return SetTaskPushNotificationResponse(**await self._send_request(request))
|
|
80
|
+
|
|
81
|
+
async def get_task_callback(
|
|
82
|
+
self, payload: dict[str, Any]
|
|
83
|
+
) -> GetTaskPushNotificationResponse:
|
|
84
|
+
request = GetTaskPushNotificationRequest(params=payload)
|
|
85
|
+
return GetTaskPushNotificationResponse(**await self._send_request(request))
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
## Quick Summary
|
|
2
|
+
The `client` directory provides a Python-based client library for Agent-to-Agent (A2A) communication. It allows developers to discover remote agent capabilities via an "Agent Card" and then interact with that agent by sending tasks, receiving streaming responses, and managing the task lifecycle (getting status, cancelling, setting callbacks).
|
|
3
|
+
|
|
4
|
+
## Files Overview
|
|
5
|
+
- `__init__.py`: Exposes the primary `A2AClient` and `A2ACardResolver` classes for easy importing.
|
|
6
|
+
- `card_resolver.py`: Contains the `A2ACardResolver` class, used to discover and fetch an agent's capabilities from a well-known endpoint.
|
|
7
|
+
- `client.py`: Contains the main `A2AClient` class for all communication with a remote agent, including sending tasks and managing them.
|
|
8
|
+
|
|
9
|
+
## Developer API Reference
|
|
10
|
+
|
|
11
|
+
### __init__.py
|
|
12
|
+
**Purpose:** This file makes the main client classes available directly under the `client` package, simplifying imports for developers.
|
|
13
|
+
**Import:** `from src.solace_agent_mesh.common.client import A2AClient, A2ACardResolver`
|
|
14
|
+
|
|
15
|
+
**Constants/Variables:**
|
|
16
|
+
- `__all__: list[str]` - A list of the public objects that are exported from this module: `["A2AClient", "A2ACardResolver"]`.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
### card_resolver.py
|
|
21
|
+
**Purpose:** This file provides a utility to resolve and fetch an agent's "Agent Card". The Agent Card is a JSON file that describes the agent's capabilities, its endpoint URL, and other metadata.
|
|
22
|
+
**Import:** `from src.solace_agent_mesh.common.client import A2ACardResolver`
|
|
23
|
+
|
|
24
|
+
**Classes:**
|
|
25
|
+
- `A2ACardResolver(base_url: str, agent_card_path: str = "/.well-known/agent.json")` - A client to discover and fetch an agent's capability card.
|
|
26
|
+
- `get_agent_card() -> AgentCard` - Makes an HTTP GET request to the constructed agent card URL, parses the JSON response, and returns it as an `AgentCard` object. Raises `A2AClientHTTPError` on network/status errors and `A2AClientJSONError` on parsing errors.
|
|
27
|
+
|
|
28
|
+
**Usage Examples:**
|
|
29
|
+
```python
|
|
30
|
+
from src.solace_agent_mesh.common.client import A2ACardResolver
|
|
31
|
+
from src.solace_agent_mesh.common.types import AgentCard, A2AClientHTTPError
|
|
32
|
+
|
|
33
|
+
# --- Example 1: Standard usage ---
|
|
34
|
+
# Create a resolver for an agent hosted at a specific domain
|
|
35
|
+
resolver = A2ACardResolver(base_url="https://some-agent.ai")
|
|
36
|
+
|
|
37
|
+
try:
|
|
38
|
+
# Fetch the agent's capability card from the default path
|
|
39
|
+
# (https://some-agent.ai/.well-known/agent.json)
|
|
40
|
+
agent_card: AgentCard = resolver.get_agent_card()
|
|
41
|
+
print(f"Successfully fetched card for agent: {agent_card.name}")
|
|
42
|
+
print(f"Agent API URL: {agent_card.url}")
|
|
43
|
+
print(f"Supported capabilities: {agent_card.capabilities}")
|
|
44
|
+
|
|
45
|
+
except A2AClientHTTPError as e:
|
|
46
|
+
print(f"Error fetching agent card: {e.status_code} - {e.message}")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# --- Example 2: Using a custom path for the agent card ---
|
|
50
|
+
custom_path_resolver = A2ACardResolver(
|
|
51
|
+
base_url="https://another-agent.com",
|
|
52
|
+
agent_card_path="/api/v1/agent-info.json"
|
|
53
|
+
)
|
|
54
|
+
# This will fetch from https://another-agent.com/api/v1/agent-info.json
|
|
55
|
+
custom_agent_card = custom_path_resolver.get_agent_card()
|
|
56
|
+
print(f"Agent name from custom path: {custom_agent_card.name}")
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### client.py
|
|
62
|
+
**Purpose:** This file contains the core `A2AClient`, which is used to communicate with a remote agent's API endpoint. It handles sending various types of JSON-RPC requests for task management. All methods are asynchronous.
|
|
63
|
+
**Import:** `from src.solace_agent_mesh.common.client import A2AClient`
|
|
64
|
+
|
|
65
|
+
**Classes:**
|
|
66
|
+
- `A2AClient(agent_card: AgentCard = None, url: str = None)` - The main client for interacting with a remote agent. You must provide either an `AgentCard` object (from `A2ACardResolver`) or a direct `url` string to its API endpoint.
|
|
67
|
+
- `async send_task(self, payload: dict[str, Any]) -> SendTaskResponse` - Sends a task to the agent for processing. The `payload` should contain the action and its parameters. Returns a response typically containing a `task_id`.
|
|
68
|
+
- `async send_task_streaming(self, payload: dict[str, Any]) -> AsyncIterable[SendTaskStreamingResponse]` - Sends a task that is expected to return a stream of events (Server-Sent Events). The `payload` is the same as `send_task`. Returns an async iterator that yields response chunks as they arrive.
|
|
69
|
+
- `async get_task(self, payload: dict[str, Any]) -> GetTaskResponse` - Retrieves the current status and/or result of a previously submitted task. The `payload` must contain the `task_id`.
|
|
70
|
+
- `async cancel_task(self, payload: dict[str, Any]) -> CancelTaskResponse` - Requests the cancellation of a running task. The `payload` must contain the `task_id`.
|
|
71
|
+
- `async set_task_callback(self, payload: dict[str, Any]) -> SetTaskPushNotificationResponse` - Sets a callback URL for a specific task. The agent will send a notification to this URL upon task completion. The `payload` must contain the `task_id` and `callback_url`.
|
|
72
|
+
- `async get_task_callback(self, payload: dict[str, Any]) -> GetTaskPushNotificationResponse` - Retrieves the currently configured callback URL for a task. The `payload` must contain the `task_id`.
|
|
73
|
+
|
|
74
|
+
**Usage Examples:**
|
|
75
|
+
```python
|
|
76
|
+
import asyncio
|
|
77
|
+
from src.solace_agent_mesh.common.client import A2AClient, A2ACardResolver
|
|
78
|
+
|
|
79
|
+
# Assume these types are available for type hinting
|
|
80
|
+
# from src.solace_agent_mesh.common.types import SendTaskResponse, SendTaskStreamingResponse
|
|
81
|
+
|
|
82
|
+
async def main():
|
|
83
|
+
# First, discover the agent's capabilities and endpoint URL
|
|
84
|
+
resolver = A2ACardResolver(base_url="https://some-agent.ai")
|
|
85
|
+
agent_card = resolver.get_agent_card()
|
|
86
|
+
|
|
87
|
+
# --- Initialization ---
|
|
88
|
+
# Method 1: Initialize client using the discovered AgentCard
|
|
89
|
+
client = A2AClient(agent_card=agent_card)
|
|
90
|
+
|
|
91
|
+
# Method 2: Initialize client with a direct URL (if known)
|
|
92
|
+
# client = A2AClient(url="https://some-agent.ai/api/v1/a2a")
|
|
93
|
+
|
|
94
|
+
# --- Send a simple task ---
|
|
95
|
+
print("--- Sending a simple task ---")
|
|
96
|
+
task_payload = {"action": "summarize_text", "text": "A long article..."}
|
|
97
|
+
send_response = await client.send_task(payload=task_payload)
|
|
98
|
+
task_id = send_response.result.task_id
|
|
99
|
+
print(f"Task created with ID: {task_id}")
|
|
100
|
+
|
|
101
|
+
# --- Get task status ---
|
|
102
|
+
print("\n--- Checking task status ---")
|
|
103
|
+
status_response = await client.get_task(payload={"task_id": task_id})
|
|
104
|
+
print(f"Task status: {status_response.result.status}")
|
|
105
|
+
|
|
106
|
+
# --- Send a streaming task ---
|
|
107
|
+
print("\n--- Sending a streaming task ---")
|
|
108
|
+
stream_payload = {"action": "generate_story", "prompt": "A robot who discovers music"}
|
|
109
|
+
async for chunk in client.send_task_streaming(payload=stream_payload):
|
|
110
|
+
# Each chunk is a SendTaskStreamingResponse object
|
|
111
|
+
print(f"Received stream chunk: {chunk.result.content_chunk}")
|
|
112
|
+
|
|
113
|
+
# --- Set a callback URL for the task ---
|
|
114
|
+
print("\n--- Setting a callback URL ---")
|
|
115
|
+
await client.set_task_callback(
|
|
116
|
+
payload={"task_id": task_id, "callback_url": "https://my-app.com/webhook"}
|
|
117
|
+
)
|
|
118
|
+
print("Callback URL set.")
|
|
119
|
+
|
|
120
|
+
# --- Cancel a task ---
|
|
121
|
+
print("\n--- Cancelling a task ---")
|
|
122
|
+
cancel_response = await client.cancel_task(payload={"task_id": task_id})
|
|
123
|
+
print(f"Task cancellation requested. Success: {cancel_response.result.cancelled}")
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
if __name__ == "__main__":
|
|
127
|
+
# Note: In a real application, you would use a running event loop.
|
|
128
|
+
# This example assumes the agent endpoint is available and working.
|
|
129
|
+
# To run this, you would need a live agent to connect to.
|
|
130
|
+
# asyncio.run(main())
|
|
131
|
+
print("Developer guide example executed.")
|
|
132
|
+
|
|
133
|
+
```
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
Here is the comprehensive developer guide for the `common` directory.
|
|
2
|
+
|
|
3
|
+
## Quick Summary
|
|
4
|
+
The `common` directory provides the foundational infrastructure for Agent-to-Agent (A2A) communication within the Solace AI Connector. It establishes the core protocol, data types, and message translation logic that underpins all interactions between AI agents and gateways.
|
|
5
|
+
|
|
6
|
+
The architecture is designed for clarity and extensibility. Core, low-level definitions are located in **direct files**:
|
|
7
|
+
* `types.py` defines the canonical data structures (e.g., `Message`, `Task`, `AgentCard`).
|
|
8
|
+
* `a2a_protocol.py` handles the construction of Solace topics and the translation between A2A and Google ADK message formats.
|
|
9
|
+
* `agent_registry.py` provides a simple, thread-safe mechanism for discovering and tracking available agents.
|
|
10
|
+
|
|
11
|
+
This foundation is then leveraged by specialized **subdirectories**, which provide higher-level, ready-to-use components:
|
|
12
|
+
* `client/`: A complete client library for discovering and interacting with remote agents.
|
|
13
|
+
* `server/`: A stand-alone server implementation for building A2A-compliant agents.
|
|
14
|
+
* `middleware/`: A pluggable framework for customizing configuration and feature access.
|
|
15
|
+
* `services/`: A factory-based system for integrating identity and other external data sources.
|
|
16
|
+
* `utils/`: A collection of cross-cutting utilities for caching, logging, and dynamic content processing.
|
|
17
|
+
|
|
18
|
+
Together, these components form a cohesive ecosystem, enabling developers to either build new agents from scratch using the `server` components or interact with existing agents using the `client` library, all while relying on the same underlying protocol and types.
|
|
19
|
+
|
|
20
|
+
## Files and Subdirectories Overview
|
|
21
|
+
- **Direct files:**
|
|
22
|
+
- `__init__.py`: Package initialization file.
|
|
23
|
+
- `a2a_protocol.py`: Handles A2A topic construction and translation between A2A and ADK message formats.
|
|
24
|
+
- `agent_registry.py`: A thread-safe registry for managing discovered agent cards.
|
|
25
|
+
- `types.py`: Contains all Pydantic models for A2A protocol messages, tasks, and data structures.
|
|
26
|
+
- **Subdirectories:**
|
|
27
|
+
- `client/`: Provides a high-level client for discovering and communicating with remote A2A agents.
|
|
28
|
+
- `middleware/`: A pluggable framework for configuration resolution and system extensibility.
|
|
29
|
+
- `server/`: A complete A2A server implementation with JSON-RPC support and task management.
|
|
30
|
+
- `services/`: Provides shared services like identity management using a factory pattern.
|
|
31
|
+
- `utils/`: Contains common utility functions and an embedded expression processing system.
|
|
32
|
+
|
|
33
|
+
## Developer API Reference
|
|
34
|
+
|
|
35
|
+
### Direct Files
|
|
36
|
+
|
|
37
|
+
#### a2a_protocol.py
|
|
38
|
+
**Purpose:** Provides the core functions for constructing Solace topics according to the A2A specification and for translating messages between the A2A format and the Google ADK format.
|
|
39
|
+
**Import:** `from common.a2a_protocol import get_agent_request_topic, translate_a2a_to_adk_content`
|
|
40
|
+
|
|
41
|
+
**Classes/Functions/Constants:**
|
|
42
|
+
* **Constants**:
|
|
43
|
+
* `A2A_VERSION: str`: The current version of the A2A protocol (e.g., "v1").
|
|
44
|
+
* `A2A_BASE_PATH: str`: The base path used in all A2A topics (e.g., "a2a/v1").
|
|
45
|
+
* **Topic Construction Functions**:
|
|
46
|
+
* `get_a2a_base_topic(namespace: str) -> str`: Returns the base topic prefix for all A2A communication.
|
|
47
|
+
* `get_discovery_topic(namespace: str) -> str`: Returns the topic for agent card discovery.
|
|
48
|
+
* `get_agent_request_topic(namespace: str, agent_name: str) -> str`: Returns the topic for sending requests to a specific agent.
|
|
49
|
+
* `get_gateway_status_topic(namespace: str, gateway_id: str, task_id: str) -> str`: Returns the topic for an agent to publish status updates to a gateway.
|
|
50
|
+
* `get_gateway_response_topic(namespace: str, gateway_id: str, task_id: str) -> str`: Returns the topic for an agent to publish final responses to a gateway.
|
|
51
|
+
* `get_client_response_topic(namespace: str, client_id: str) -> str`: Returns the topic for publishing final responses to a specific client.
|
|
52
|
+
* `get_client_status_topic(namespace: str, client_id: str, task_id: str) -> str`: Returns the topic for publishing status updates to a specific client.
|
|
53
|
+
* ... and various functions for subscription topics (e.g., `get_gateway_status_subscription_topic`).
|
|
54
|
+
* **Message Translation Functions**:
|
|
55
|
+
* `translate_a2a_to_adk_content(a2a_message: A2AMessage, log_identifier: str) -> adk_types.Content`: Translates an A2A `Message` object into the Google ADK `Content` format.
|
|
56
|
+
* `format_adk_event_as_a2a(...) -> Tuple[Optional[JSONRPCResponse], ...]`: Translates an ADK `Event` into an A2A `JSONRPCResponse` containing a `TaskStatusUpdateEvent`.
|
|
57
|
+
* `format_and_route_adk_event(...) -> Tuple[Optional[Dict], Optional[str], ...]`: A higher-level wrapper that formats an ADK event and determines the correct Solace topic to publish it to.
|
|
58
|
+
|
|
59
|
+
#### agent_registry.py
|
|
60
|
+
**Purpose:** Provides a simple, thread-safe, in-memory store for discovered `AgentCard` objects. This is useful for components that need to keep track of available agents in the network.
|
|
61
|
+
**Import:** `from common.agent_registry import AgentRegistry`
|
|
62
|
+
|
|
63
|
+
**Classes/Functions/Constants:**
|
|
64
|
+
* **`AgentRegistry`**: A thread-safe class for storing and managing agent cards.
|
|
65
|
+
* `add_or_update_agent(self, agent_card: AgentCard)`: Adds a new agent or updates an existing one.
|
|
66
|
+
* `get_agent(self, agent_name: str) -> Optional[AgentCard]`: Retrieves an agent card by its unique name.
|
|
67
|
+
* `get_agent_names(self) -> List[str]`: Returns a sorted list of all discovered agent names.
|
|
68
|
+
* `clear(self)`: Clears all agents from the registry.
|
|
69
|
+
|
|
70
|
+
#### types.py
|
|
71
|
+
**Purpose:** Defines all the Pydantic data models that constitute the A2A protocol. These types ensure data consistency and provide validation across all components.
|
|
72
|
+
**Import:** `from common.types import Message, Task, AgentCard, JSONRPCRequest, TaskState`
|
|
73
|
+
|
|
74
|
+
**Classes/Functions/Constants:**
|
|
75
|
+
* **Core Data Structures**:
|
|
76
|
+
* `Message`: Represents a message from a user or agent, containing a list of `Part` objects.
|
|
77
|
+
* `Part`: A discriminated union of `TextPart`, `FilePart`, and `DataPart`.
|
|
78
|
+
* `Task`: The central object representing a complete task, including its ID, status, history, and artifacts.
|
|
79
|
+
* `TaskStatus`: Describes the current state of a task (e.g., `WORKING`, `COMPLETED`).
|
|
80
|
+
* `TaskState(Enum)`: An enumeration of all possible task states.
|
|
81
|
+
* `AgentCard`: A comprehensive description of an agent's identity, capabilities, and skills.
|
|
82
|
+
* `Artifact`: Represents a task output, such as a generated file or structured data.
|
|
83
|
+
* **JSON-RPC Structures**:
|
|
84
|
+
* `JSONRPCRequest`: The base model for all JSON-RPC requests.
|
|
85
|
+
* `JSONRPCResponse`: The base model for all JSON-RPC responses.
|
|
86
|
+
* `SendTaskRequest`, `GetTaskRequest`, etc.: Specific request types inheriting from `JSONRPCRequest`.
|
|
87
|
+
* **Error Structures**:
|
|
88
|
+
* `JSONRPCError`: The base model for errors.
|
|
89
|
+
* `InternalError`, `TaskNotFoundError`, etc.: Specific error types inheriting from `JSONRPCError`.
|
|
90
|
+
|
|
91
|
+
### Subdirectory APIs
|
|
92
|
+
|
|
93
|
+
#### client/
|
|
94
|
+
**Purpose:** Provides a high-level, asynchronous client library for discovering and interacting with remote A2A agents.
|
|
95
|
+
**Key Exports:** `A2AClient`, `A2ACardResolver`
|
|
96
|
+
**Import Examples:**
|
|
97
|
+
```python
|
|
98
|
+
from common.client import A2AClient, A2ACardResolver
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### middleware/
|
|
102
|
+
**Purpose:** A pluggable middleware framework for customizing system behavior, such as resolving user-specific configurations and feature flags.
|
|
103
|
+
**Key Exports:** `ConfigResolver`, `MiddlewareRegistry`
|
|
104
|
+
**Import Examples:**
|
|
105
|
+
```python
|
|
106
|
+
from common.middleware import ConfigResolver, MiddlewareRegistry
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### server/
|
|
110
|
+
**Purpose:** A complete, stand-alone server for building A2A-compliant agents, handling HTTP requests, JSON-RPC, and task lifecycle management.
|
|
111
|
+
**Key Exports:** `A2AServer`, `TaskManager`, `InMemoryTaskManager`
|
|
112
|
+
**Import Examples:**
|
|
113
|
+
```python
|
|
114
|
+
from common.server import A2AServer, TaskManager, InMemoryTaskManager
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### services/
|
|
118
|
+
**Purpose:** A factory-based system for integrating external data sources for identity, employee information, and more.
|
|
119
|
+
**Key Exports:** `BaseIdentityService`, `create_identity_service`
|
|
120
|
+
**Import Examples:**
|
|
121
|
+
```python
|
|
122
|
+
from common.services.identity_service import create_identity_service, BaseIdentityService
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### utils/
|
|
126
|
+
**Purpose:** A collection of cross-cutting utilities for caching, logging, MIME type handling, and dynamic content processing.
|
|
127
|
+
**Key Exports:** `InMemoryCache`, `is_text_based_mime_type`, `resolve_embeds_in_string`
|
|
128
|
+
**Import Examples:**
|
|
129
|
+
```python
|
|
130
|
+
from common.utils.in_memory_cache import InMemoryCache
|
|
131
|
+
from common.utils import is_text_based_mime_type
|
|
132
|
+
from common.utils.embeds import resolve_embeds_in_string
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Complete Usage Guide
|
|
136
|
+
These examples demonstrate how to use the components from the `common` directory to build and interact with A2A agents.
|
|
137
|
+
|
|
138
|
+
### 1. How to import and use classes from direct files
|
|
139
|
+
This example shows basic usage of the protocol, types, and agent registry, which form the foundation of any A2A component.
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
import uuid
|
|
143
|
+
from common.a2a_protocol import get_agent_request_topic, get_gateway_status_topic
|
|
144
|
+
from common.types import AgentCard,
|
|
@@ -1,15 +1,2 @@
|
|
|
1
|
-
SOLACE_AGENT_MESH_SYSTEM_SESSION_ID = "solace_agent_mesh_system_session_id"
|
|
2
1
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
ORCHESTRATOR_COMPONENT_NAME = "orchestrator"
|
|
6
|
-
|
|
7
|
-
HISTORY_MEMORY_ROLE = "history"
|
|
8
|
-
|
|
9
|
-
HISTORY_ACTION_ROLE = "tool_call"
|
|
10
|
-
|
|
11
|
-
HISTORY_USER_ROLE = "user"
|
|
12
|
-
|
|
13
|
-
HISTORY_SYSTEM_ROLE = "system"
|
|
14
|
-
|
|
15
|
-
HISTORY_ASSISTANT_ROLE = "assistant"
|
|
2
|
+
DEFAULT_COMMUNICATION_TIMEOUT = 600 # 10 minutes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Middleware package for pluggable system components.
|
|
3
|
+
|
|
4
|
+
This package provides a framework for pluggable middleware components that can be
|
|
5
|
+
extended or replaced at runtime. The default implementations provide permissive
|
|
6
|
+
behavior suitable for development and testing.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from .config_resolver import ConfigResolver
|
|
10
|
+
from .registry import MiddlewareRegistry
|
|
11
|
+
|
|
12
|
+
__all__ = ["ConfigResolver", "MiddlewareRegistry"]
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Generic configuration resolution middleware for user-specific settings and feature availability.
|
|
3
|
+
|
|
4
|
+
This module provides a pluggable interface for resolving user-specific configuration
|
|
5
|
+
and determining feature availability. The default implementation provides passthrough
|
|
6
|
+
behavior that allows all operations.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Any, Dict, List
|
|
10
|
+
from solace_ai_connector.common.log import log
|
|
11
|
+
|
|
12
|
+
LOG_IDENTIFIER = "[ConfigResolver]"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ConfigResolver:
|
|
16
|
+
"""
|
|
17
|
+
Resolves user-specific configuration and determines feature availability.
|
|
18
|
+
|
|
19
|
+
This class provides a generic interface for configuration resolution that can be
|
|
20
|
+
extended or replaced at runtime. The default implementation is permissive and
|
|
21
|
+
allows all operations.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
@staticmethod
|
|
25
|
+
async def resolve_user_config(
|
|
26
|
+
user_identity: Any, gateway_context: Dict[str, Any], base_config: Dict[str, Any]
|
|
27
|
+
) -> Dict[str, Any]:
|
|
28
|
+
"""
|
|
29
|
+
Resolve user-specific configuration settings.
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
user_identity: Identifier for the user (username, email, ID, etc.)
|
|
33
|
+
gateway_context: Context information from the gateway (gateway_id, etc.)
|
|
34
|
+
base_config: Base configuration to start with
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
Dict containing user-specific configuration. Default implementation
|
|
38
|
+
returns base_config unchanged.
|
|
39
|
+
"""
|
|
40
|
+
log.debug(
|
|
41
|
+
"%s Resolving user config for identity: %s (default implementation)",
|
|
42
|
+
LOG_IDENTIFIER,
|
|
43
|
+
user_identity,
|
|
44
|
+
)
|
|
45
|
+
return base_config
|
|
46
|
+
|
|
47
|
+
@staticmethod
|
|
48
|
+
def is_feature_enabled(
|
|
49
|
+
user_config: Dict[str, Any],
|
|
50
|
+
feature_descriptor: Dict[str, Any],
|
|
51
|
+
context: Dict[str, Any],
|
|
52
|
+
) -> bool:
|
|
53
|
+
"""
|
|
54
|
+
Check if a feature is enabled for the user.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
user_config: User-specific configuration from resolve_user_config
|
|
58
|
+
feature_descriptor: Description of the feature being checked
|
|
59
|
+
context: Additional context for the feature check
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
True if feature is enabled, False otherwise. Default implementation
|
|
63
|
+
returns True (all features enabled).
|
|
64
|
+
"""
|
|
65
|
+
feature_type = feature_descriptor.get("feature_type", "unknown")
|
|
66
|
+
feature_name = feature_descriptor.get("function_name", "unknown")
|
|
67
|
+
|
|
68
|
+
log.debug(
|
|
69
|
+
"%s Feature check for %s:%s - enabled (default implementation)",
|
|
70
|
+
LOG_IDENTIFIER,
|
|
71
|
+
feature_type,
|
|
72
|
+
feature_name,
|
|
73
|
+
)
|
|
74
|
+
return True
|
|
75
|
+
|
|
76
|
+
@staticmethod
|
|
77
|
+
def validate_operation_config(
|
|
78
|
+
user_config: Dict[str, Any],
|
|
79
|
+
operation_spec: Dict[str, Any],
|
|
80
|
+
validation_context: Dict[str, Any],
|
|
81
|
+
) -> Dict[str, Any]:
|
|
82
|
+
"""
|
|
83
|
+
Validate operation against user configuration.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
user_config: User-specific configuration from resolve_user_config
|
|
87
|
+
operation_spec: Specification of the operation being validated
|
|
88
|
+
validation_context: Additional context for validation
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
Dict with validation result. Must include 'valid' boolean key.
|
|
92
|
+
Default implementation returns valid=True for all operations.
|
|
93
|
+
"""
|
|
94
|
+
operation_type = operation_spec.get("operation_type", "unknown")
|
|
95
|
+
|
|
96
|
+
log.debug(
|
|
97
|
+
"%s Operation validation for %s - valid (default implementation)",
|
|
98
|
+
LOG_IDENTIFIER,
|
|
99
|
+
operation_type,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
"valid": True,
|
|
104
|
+
"reason": "default_validation",
|
|
105
|
+
"operation_type": operation_type,
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@staticmethod
|
|
109
|
+
def filter_available_options(
|
|
110
|
+
user_config: Dict[str, Any],
|
|
111
|
+
available_options: List[Dict[str, Any]],
|
|
112
|
+
filter_context: Dict[str, Any],
|
|
113
|
+
) -> List[Dict[str, Any]]:
|
|
114
|
+
"""
|
|
115
|
+
Filter available options based on user configuration.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
user_config: User-specific configuration from resolve_user_config
|
|
119
|
+
available_options: List of available options to filter
|
|
120
|
+
filter_context: Additional context for filtering
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
Filtered list of options. Default implementation returns all options.
|
|
124
|
+
"""
|
|
125
|
+
log.debug(
|
|
126
|
+
"%s Filtering %d options - returning all (default implementation)",
|
|
127
|
+
LOG_IDENTIFIER,
|
|
128
|
+
len(available_options),
|
|
129
|
+
)
|
|
130
|
+
return available_options
|